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

{
  bool bVar1;
  Bignum_conflict pBVar2;
  BignumInt *pBVar3;
  int iVar4;
  undefined4 *puVar5;
  int iVar6;
  undefined4 *puVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  undefined4 uVar10;
  code *pcVar11;
  code *pcVar12;
  Bignum_conflict pBVar13;
  BignumInt BVar14;
  BignumInt *pBVar15;
  uint *puVar16;
  BignumInt BVar17;
  Bignum_conflict pBVar18;
  int iVar19;
  BignumInt BVar20;
  uint uVar21;
  int iVar22;
  uint uVar23;
  BignumInt local_44;
  int local_2c;
  
  if (mod[*mod] == 0) {
    pBVar2 = (Bignum_conflict)
             (*(code *)PTR___assert_fail_000b0ac0)
                       (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,
                        PTR_DAT_000b01d0 + -0x6c2c);
    return pBVar2;
  }
  pBVar2 = bigmod(base_in,mod);
  BVar20 = *mod;
  pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4);
  if (0 < (int)BVar20) {
    BVar14 = 0;
    pBVar15 = pBVar3;
    do {
      iVar4 = *mod - BVar14;
      BVar14 = BVar14 + 1;
      *pBVar15 = mod[iVar4];
      pBVar15 = pBVar15 + 1;
    } while (BVar20 != BVar14);
  }
  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4);
  BVar14 = *pBVar2;
  iVar4 = BVar20 - BVar14;
  if (0 < iVar4) {
    puVar7 = puVar5;
    do {
      *puVar7 = 0;
      puVar7 = puVar7 + 1;
    } while (puVar5 + iVar4 != puVar7);
    BVar14 = *pBVar2;
  }
  if (0 < (int)BVar14) {
    iVar6 = 0;
    pBVar15 = puVar5 + iVar4;
    do {
      iVar6 = iVar6 + 1;
      *pBVar15 = pBVar2[BVar14];
      BVar14 = *pBVar2 - iVar6;
      pBVar15 = pBVar15 + 1;
    } while (iVar6 < (int)*pBVar2);
  }
  iVar4 = BVar20 << 1;
  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4);
  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4);
  if (iVar4 < 1) {
    puVar7[BVar20 * 2 + -1] = 1;
  }
  else {
    puVar9 = puVar7;
    do {
      *puVar9 = 0;
      puVar9 = puVar9 + 1;
    } while (puVar7 + BVar20 * 2 != puVar9);
    puVar7[BVar20 * 2 + -1] = 1;
  }
  if ((int)BVar20 < 0x33) {
    local_2c = 0;
    iVar6 = 0;
  }
  else {
    iVar6 = 0;
    BVar14 = BVar20;
    do {
      BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1;
      iVar6 = iVar6 + BVar14 * 4;
    } while (0x32 < (int)BVar14);
    local_2c = iVar6 * 4;
  }
  iVar22 = 0;
  uVar10 = (*(code *)PTR_safemalloc_000b01e8)(iVar6,4);
  puVar16 = exp + *exp;
LAB_00058b7c:
  uVar23 = 0x1f;
  bVar1 = iVar22 < (int)*exp;
  while ((bVar1 && ((1 << (uVar23 & 0x1f) & *puVar16) == 0))) {
    uVar23 = uVar23 - 1;
    if (uVar23 == 0xffffffff) goto LAB_00058f24;
  }
  BVar17 = *pBVar3;
  iVar19 = 5;
  uVar21 = 0;
  iVar6 = 0x10;
  BVar14 = BVar17;
  do {
    if (BVar14 >> (0x20U - iVar6 & 0x1f) == 0) {
      BVar14 = BVar14 << iVar6;
      uVar21 = uVar21 + iVar6;
    }
    iVar19 = iVar19 + -1;
    iVar6 = iVar6 >> 1;
  } while (iVar19 != 0);
  if ((uVar21 == 0) || (BVar17 = BVar17 << (uVar21 & 0x1f), (int)BVar20 < 2)) {
    local_44 = reciprocal_word(BVar17);
    if (bVar1) goto LAB_00058c18;
LAB_00058d34:
    pBVar13 = newbn(*mod);
    if (0 < (int)BVar20) goto LAB_00058d50;
  }
  else {
    local_44 = reciprocal_word(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17);
    if (bVar1) {
LAB_00058c18:
      pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);
      pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978);
      do {
        do {
          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);
          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);
          puVar9 = puVar8;
          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {
            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);
            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);
            puVar9 = puVar7;
            puVar7 = puVar8;
          }
          puVar8 = puVar7;
          puVar7 = puVar9;
          uVar23 = uVar23 - 1;
        } while (uVar23 != 0xffffffff);
        iVar22 = iVar22 + 1;
        uVar23 = 0x1f;
      } while (iVar22 < (int)*exp);
      goto LAB_00058d34;
    }
    pBVar13 = newbn(*mod);
LAB_00058d50:
    iVar4 = 0;
    pBVar15 = puVar7 + BVar20;
    do {
      iVar6 = *pBVar13 - iVar4;
      iVar4 = iVar4 + 1;
      pBVar13[iVar6] = *pBVar15;
      pBVar15 = pBVar15 + 1;
    } while (iVar4 < (int)BVar20);
  }
  BVar14 = *pBVar13;
  if (1 < BVar14) {
    pBVar18 = pBVar13 + BVar14;
    BVar17 = *pBVar18;
    while (BVar17 == 0) {
      BVar14 = BVar14 - 1;
      *pBVar13 = BVar14;
      if (BVar14 == 1) break;
      pBVar15 = pBVar18 + -1;
      pBVar18 = pBVar18 + -1;
      BVar17 = *pBVar15;
    }
  }
  (*(code *)PTR_smemclr_000b0240)(puVar7,BVar20 * 8);
  (*(code *)PTR_safefree_000b01b0)(puVar7);
  (*(code *)PTR_smemclr_000b0240)(uVar10,local_2c);
  (*(code *)PTR_safefree_000b01b0)(uVar10);
  (*(code *)PTR_smemclr_000b0240)(puVar8,BVar20 * 8);
  (*(code *)PTR_safefree_000b01b0)(puVar8);
  (*(code *)PTR_smemclr_000b0240)(pBVar3,BVar20 * 4);
  (*(code *)PTR_safefree_000b01b0)(pBVar3);
  (*(code *)PTR_smemclr_000b0240)(puVar5,BVar20 * 4);
  (*(code *)PTR_safefree_000b01b0)(puVar5);
                    /* WARNING: Subroutine does not return */
  freebn(pBVar2);
LAB_00058f24:
  iVar22 = iVar22 + 1;
  puVar16 = puVar16 + -1;
  goto LAB_00058b7c;
}



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

{
  uint *puVar1;
  bool bVar2;
  int *piVar3;
  uint *puVar4;
  int iVar5;
  undefined4 *puVar6;
  int iVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  undefined4 uVar11;
  code *pcVar12;
  code *pcVar13;
  uint *puVar14;
  int iVar15;
  int *piVar16;
  uint uVar17;
  uint *puVar18;
  int iVar19;
  uint uVar20;
  int iVar21;
  uint uVar22;
  uint uVar23;
  undefined4 local_44;
  int local_2c;
  
  if (param_3[*param_3] == 0) {
    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)
                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,
                                PTR_DAT_000b01d0 + -0x6c2c);
    return puVar4;
  }
  piVar3 = (int *)bigmod(param_1,param_3);
  iVar21 = *param_3;
  puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);
  if (0 < iVar21) {
    iVar15 = 0;
    puVar14 = puVar4;
    do {
      iVar5 = *param_3 - iVar15;
      iVar15 = iVar15 + 1;
      *puVar14 = param_3[iVar5];
      puVar14 = puVar14 + 1;
    } while (iVar21 != iVar15);
  }
  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);
  iVar15 = *piVar3;
  iVar5 = iVar21 - iVar15;
  if (0 < iVar5) {
    puVar8 = puVar6;
    do {
      *puVar8 = 0;
      puVar8 = puVar8 + 1;
    } while (puVar6 + iVar5 != puVar8);
    iVar15 = *piVar3;
  }
  if (0 < iVar15) {
    iVar7 = 0;
    piVar16 = puVar6 + iVar5;
    do {
      iVar7 = iVar7 + 1;
      *piVar16 = piVar3[iVar15];
      iVar15 = *piVar3 - iVar7;
      piVar16 = piVar16 + 1;
    } while (iVar7 < *piVar3);
  }
  iVar15 = iVar21 << 1;
  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);
  puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);
  if (iVar15 < 1) {
    puVar8[iVar21 * 2 + -1] = 1;
  }
  else {
    puVar10 = puVar8;
    do {
      *puVar10 = 0;
      puVar10 = puVar10 + 1;
    } while (puVar8 + iVar21 * 2 != puVar10);
    puVar8[iVar21 * 2 + -1] = 1;
  }
  if (iVar21 < 0x33) {
    local_2c = 0;
    iVar5 = 0;
  }
  else {
    iVar5 = 0;
    iVar7 = iVar21;
    do {
      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;
      iVar5 = iVar5 + iVar7 * 4;
    } while (0x32 < iVar7);
    local_2c = iVar5 * 4;
  }
  iVar7 = 0;
  uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);
  puVar14 = (uint *)(param_2 + *param_2);
LAB_00058b7c:
  uVar23 = 0x1f;
  bVar2 = iVar7 < *param_2;
  while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {
    uVar23 = uVar23 - 1;
    if (uVar23 == 0xffffffff) goto LAB_00058f24;
  }
  uVar17 = *puVar4;
  iVar19 = 5;
  uVar22 = 0;
  iVar5 = 0x10;
  uVar20 = uVar17;
  do {
    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {
      uVar20 = uVar20 << iVar5;
      uVar22 = uVar22 + iVar5;
    }
    iVar19 = iVar19 + -1;
    iVar5 = iVar5 >> 1;
  } while (iVar19 != 0);
  if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {
    local_44 = FUN_000556d0(uVar17);
    if (bVar2) goto LAB_00058c18;
LAB_00058d34:
    puVar14 = (uint *)FUN_00056014(*param_3);
    if (0 < iVar21) goto LAB_00058d50;
  }
  else {
    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);
    if (bVar2) {
LAB_00058c18:
      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);
      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);
      do {
        do {
          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);
          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);
          puVar10 = puVar9;
          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {
            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);
            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);
            puVar10 = puVar8;
            puVar8 = puVar9;
          }
          puVar9 = puVar8;
          puVar8 = puVar10;
          uVar23 = uVar23 - 1;
        } while (uVar23 != 0xffffffff);
        iVar7 = iVar7 + 1;
        uVar23 = 0x1f;
      } while (iVar7 < *param_2);
      goto LAB_00058d34;
    }
    puVar14 = (uint *)FUN_00056014(*param_3);
LAB_00058d50:
    iVar15 = 0;
    puVar18 = puVar8 + iVar21;
    do {
      iVar5 = *puVar14 - iVar15;
      iVar15 = iVar15 + 1;
      puVar14[iVar5] = *puVar18;
      puVar18 = puVar18 + 1;
    } while (iVar15 < iVar21);
  }
  uVar23 = *puVar14;
  if (1 < uVar23) {
    puVar18 = puVar14 + uVar23;
    uVar20 = *puVar18;
    while (uVar20 == 0) {
      uVar23 = uVar23 - 1;
      *puVar14 = uVar23;
      if (uVar23 == 1) break;
      puVar1 = puVar18 + -1;
      puVar18 = puVar18 + -1;
      uVar20 = *puVar1;
    }
  }
  (*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);
  (*(code *)PTR_safefree_000b01b0)(puVar8);
  (*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);
  (*(code *)PTR_safefree_000b01b0)(uVar11);
  (*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);
  (*(code *)PTR_safefree_000b01b0)(puVar9);
  (*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);
  (*(code *)PTR_safefree_000b01b0)(puVar4);
  (*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);
  (*(code *)PTR_safefree_000b01b0)(puVar6);
  freebn(piVar3);
  return puVar14;
LAB_00058f24:
  iVar7 = iVar7 + 1;
  puVar14 = puVar14 + -1;
  goto LAB_00058b7c;
}


lui gp,0x6
addiu gp,gp,-0x80c
addu gp,gp,t9
lw v0,0x0(a2)
addiu sp,sp,-0x78
sll v0,v0,0x2
sw gp,0x20(sp)
sw ra,0x74(sp)
addu v0,a2,v0
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 a2,0x80(sp)
lw v0,0x0(v0)
beq v0,zero,0x00058f58
_lw t9,-0x7908(gp)
or s7,a1,zero
bal 0x000588a8
_lw a1,0x80(sp)
li a1,0x4
lw v1,0x80(sp)
lw gp,0x20(sp)
sw v0,0x44(sp)
lw s2,0x0(v1)
lw t9,-0x7f68(gp)
jalr t9
_or a0,s2,zero
lw gp,0x20(sp)
blez s2,0x00058a20
_or s5,v0,zero
or v1,zero,zero
or a0,v0,zero
lw v0,0x80(sp)
addiu a0,a0,0x4
lw a1,0x80(sp)
lw v0,0x0(v0)
subu v0,v0,v1
addiu v1,v1,0x1
sll v0,v0,0x2
addu v0,a1,v0
lw v0,0x0(v0)
bne s2,v1,0x000589f4
_sw v0,-0x4(a0)
lw t9,-0x7f68(gp)
li a1,0x4
jalr t9
_or a0,s2,zero
lw v1,0x44(sp)
lw gp,0x20(sp)
sw v0,0x40(sp)
lw v1,0x0(v1)
subu a0,s2,v1
blez a0,0x00058a70
_lw a1,0x40(sp)
sll v1,a0,0x2
addu v1,v1,a1
or v0,a1,zero
sw zero,0x0(v0)
addiu v0,v0,0x4
bne v1,v0,0x00058a58
_nop
lw v0,0x44(sp)
lw v1,0x0(v0)
blez v1,0x00058ab4
_lw a1,0x40(sp)
sll a0,a0,0x2
or v0,zero,zero
addu a0,a1,a0
subu v1,v1,v0
lw a1,0x44(sp)
addiu a0,a0,0x4
sll v1,v1,0x2
addiu v0,v0,0x1
addu v1,a1,v1
lw v1,0x0(v1)
sw v1,-0x4(a0)
lw v1,0x0(a1)
slt a1,v0,v1
bne a1,zero,0x00058a88
_subu v1,v1,v0
lw t9,-0x7f68(gp)
sll s6,s2,0x1
li a1,0x4
jalr t9
_or a0,s6,zero
li a1,0x4
lw gp,0x20(sp)
or a0,s6,zero
lw t9,-0x7f68(gp)
jalr t9
_or s1,v0,zero
or s0,v0,zero
lw gp,0x20(sp)
blez s6,0x00058f30
_sll v0,s2,0x3
or v1,v0,zero
sw v0,0x48(sp)
addu v1,s1,v1
or v0,s1,zero
sw zero,0x0(v0)
addiu v0,v0,0x4
bne v1,v0,0x00058b00
_li a0,0x1
lw v0,0x48(sp)
addu v1,s1,v0
slti v0,s2,0x33
bne v0,zero,0x00058f4c
_sw a0,-0x4(v1)
or a0,zero,zero
or v0,s2,zero
sra v1,v0,0x1
subu v0,v0,v1
addiu v0,v0,0x1
sll a1,v0,0x2
slti v1,v0,0x33
beq v1,zero,0x00058b2c
_addu a0,a0,a1
sll v0,a0,0x2
sw v0,0x4c(sp)
lw t9,-0x7f68(gp)
li a1,0x4
jalr t9
_or s4,zero,zero
li a2,0x1
lw t2,0x0(s7)
li a3,-0x1
lw gp,0x20(sp)
sw v0,0x30(sp)
sll a0,t2,0x2
addu a0,s7,a0
li s8,0x1f
b 0x00058ba4
_slt a1,s4,t2
lw v1,0x0(a0)
and v0,v0,v1
bne v0,zero,0x00058bac
_nop
addiu s8,s8,-0x1
beq s8,a3,0x00058f24
_nop
bne a1,zero,0x00058b88
_sllv v0,a2,s8
lw a0,0x0(s5)
li a2,0x5
or s3,zero,zero
li v0,0x10
li t2,0x20
or a3,a0,zero
subu v1,t2,v0
srlv v1,a3,v1
bne v1,zero,0x00058bdc
_nop
sllv a3,a3,v0
addu s3,s3,v0
addiu a2,a2,-0x1
bne a2,zero,0x00058bc4
_sra v0,v0,0x1
sll v0,s2,0x2
sw a1,0x38(sp)
bne s3,zero,0x00058ed0
_sw v0,0x2c(sp)
lw t9,-0x7ac4(gp)
addiu t9,t9,0x56d0
bal 0x000556d0
_nop
lw a1,0x38(sp)
lw gp,0x20(sp)
beq a1,zero,0x00058d34
_sw v0,0x34(sp)
lw v0,-0x7ac4(gp)
addiu v0,v0,0x60b0
sw v0,0x38(sp)
lw v0,-0x7ac4(gp)
addiu v0,v0,0x5978
b 0x00058c50
_sw v0,0x3c(sp)
or v0,s1,zero
addiu s8,s8,-0x1
or s1,s0,zero
or s0,v0,zero
li v0,-0x1
beq s8,v0,0x00058d20
_nop
lw v0,0x2c(sp)
or a3,s2,zero
lw t9,0x38(sp)
or a2,s0,zero
addu a1,s1,v0
lw v0,0x30(sp)
or a0,a1,zero
jalr t9
_sw v0,0x10(sp)
or a0,s0,zero
lw v0,0x34(sp)
or a3,s2,zero
lw t9,0x3c(sp)
or a2,s5,zero
sw s3,0x18(sp)
or a1,s6,zero
sw v0,0x14(sp)
jalr t9
_sw zero,0x10(sp)
li v0,0x1
sllv v1,v0,s8
lw v0,0x0(s7)
subu v0,v0,s4
sll v0,v0,0x2
addu v0,s7,v0
lw a0,0x0(v0)
and v0,v1,a0
beq v0,zero,0x00058c34
_lw gp,0x20(sp)
lw v0,0x2c(sp)
or a3,s2,zero
lw a1,0x40(sp)
or a2,s1,zero
lw t9,0x38(sp)
addiu s8,s8,-0x1
addu a0,s0,v0
lw v0,0x30(sp)
jalr t9
_sw v0,0x10(sp)
or a3,s2,zero
lw v0,0x34(sp)
or a2,s5,zero
lw t9,0x3c(sp)
or a1,s6,zero
sw s3,0x18(sp)
or a0,s1,zero
sw v0,0x14(sp)
jalr t9
_sw zero,0x10(sp)
li v0,-0x1
bne s8,v0,0x00058c50
_lw gp,0x20(sp)
lw v0,0x0(s7)
addiu s4,s4,0x1
slt v0,s4,v0
bne v0,zero,0x00058c50
_li s8,0x1f
lw v0,0x80(sp)
lw t9,-0x7ac4(gp)
addiu t9,t9,0x6014
bal 0x00056014
_lw a0,0x0(v0)
blez s2,0x00058d84
_lw gp,0x20(sp)
lw v1,0x2c(sp)
or a0,zero,zero
addu a1,s1,v1
lw v1,0x0(v0)
addiu a1,a1,0x4
lw a3,-0x4(a1)
subu v1,v1,a0
addiu a0,a0,0x1
sll v1,v1,0x2
slt a2,a0,s2
addu v1,v0,v1
bne a2,zero,0x00058d5c
_sw a3,0x0(v1)
lw v1,0x0(v0)
sltiu a0,v1,0x2
bne a0,zero,0x00058dc8
_nop
sll a0,v1,0x2
addu a0,v0,a0
lw a1,0x0(a0)
bne a1,zero,0x00058dc8
_addiu v1,v1,-0x1
b 0x00058dc0
_li a2,0x1
lw a1,-0x4(a0)
addiu v1,v1,-0x1
bne a1,zero,0x00058dc8
_addiu a0,a0,-0x4
bne v1,a2,0x00058db0
_sw v1,0x0(v0)
lw s2,0x48(sp)
or a0,s1,zero
lw t9,-0x7f10(gp)
sw v0,0x34(sp)
jalr t9
_or a1,s2,zero
lw gp,0x20(sp)
lw t9,-0x7fa0(gp)
jalr t9
_or a0,s1,zero
lw gp,0x20(sp)
lw s1,0x30(sp)
lw a1,0x4c(sp)
lw t9,-0x7f10(gp)
jalr t9
_or a0,s1,zero
lw gp,0x20(sp)
lw t9,-0x7fa0(gp)
jalr t9
_or a0,s1,zero
or a1,s2,zero
lw gp,0x20(sp)
lw t9,-0x7f10(gp)
jalr t9
_or a0,s0,zero
lw gp,0x20(sp)
lw t9,-0x7fa0(gp)
jalr t9
_or a0,s0,zero
or a0,s5,zero
lw gp,0x20(sp)
lw s1,0x2c(sp)
lw t9,-0x7f10(gp)
jalr t9
_or a1,s1,zero
lw gp,0x20(sp)
lw t9,-0x7fa0(gp)
jalr t9
_or a0,s5,zero
or a1,s1,zero
lw gp,0x20(sp)
lw s0,0x40(sp)
lw t9,-0x7f10(gp)
jalr t9
_or a0,s0,zero
lw gp,0x20(sp)
lw t9,-0x7fa0(gp)
jalr t9
_or a0,s0,zero
lw gp,0x20(sp)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_lw a0,0x44(sp)
lw ra,0x74(sp)
lw v0,0x34(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
slti v0,s2,0x2
bne v0,zero,0x00058bf8
_sllv a0,a0,s3
lw v0,0x4(s5)
subu v1,zero,s3
lw t9,-0x7ac4(gp)
srlv v0,v0,v1
addiu t9,t9,0x56d0
bal 0x000556d0
_or a0,v0,a0
lw a1,0x38(sp)
lw gp,0x20(sp)
bne a1,zero,0x00058c18
_sw v0,0x34(sp)
lw v0,0x80(sp)
lw t9,-0x7ac4(gp)
addiu t9,t9,0x6014
bal 0x00056014
_lw a0,0x0(v0)
b 0x00058d50
_lw gp,0x20(sp)
addiu s4,s4,0x1
b 0x00058b7c
_addiu a0,a0,-0x4
sw v0,0x48(sp)
li a0,0x1
lw v0,0x48(sp)
addu v1,s1,v0
slti v0,s2,0x33
beq v0,zero,0x00058b24
_sw a0,-0x4(v1)
sw zero,0x4c(sp)
b 0x00058b50
_or a0,zero,zero
lw a3,-0x7f80(gp)
li a2,0x3b9
lw a1,-0x7f80(gp)
lw a0,-0x7f80(gp)
lw t9,-0x7690(gp)
addiu a3,a3,-0x6c2c
addiu a1,a1,-0x6e40
jalr t9
_addiu a0,a0,-0x6e04
(translation_unit "uint * modpow_simple(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  bool bVar2;\n  int *piVar3;\n  uint *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 *puVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint uVar17;\n  uint *puVar18;\n  int iVar19;\n  uint uVar20;\n  int iVar21;\n  uint uVar22;\n  uint uVar23;\n  undefined4 local_44;\n  int local_2c;\n  \n  if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }\n  piVar3 = (int *)bigmod(param_1,param_3);\n  iVar21 = *param_3;\n  puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  iVar15 = *piVar3;\n  iVar5 = iVar21 - iVar15;\n  if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }\n  if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }\n  iVar15 = iVar21 << 1;\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }\n  iVar7 = 0;\n  uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);\n  puVar14 = (uint *)(param_2 + *param_2);\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar2 = iVar7 < *param_2;\n  while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  uVar17 = *puVar4;\n  iVar19 = 5;\n  uVar22 = 0;\n  iVar5 = 0x10;\n  uVar20 = uVar17;\n  do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }\n  uVar23 = *puVar14;\n  if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar11);\n  (*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar9);\n  (*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar4);\n  (*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar6);\n  freebn(piVar3);\n  return puVar14;\nLAB_00058f24:\n  iVar7 = iVar7 + 1;\n  puVar14 = puVar14 + -1;\n  goto LAB_00058b7c;\n}\n\n" (function_definition "uint * modpow_simple(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  bool bVar2;\n  int *piVar3;\n  uint *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 *puVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint uVar17;\n  uint *puVar18;\n  int iVar19;\n  uint uVar20;\n  int iVar21;\n  uint uVar22;\n  uint uVar23;\n  undefined4 local_44;\n  int local_2c;\n  \n  if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }\n  piVar3 = (int *)bigmod(param_1,param_3);\n  iVar21 = *param_3;\n  puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  iVar15 = *piVar3;\n  iVar5 = iVar21 - iVar15;\n  if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }\n  if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }\n  iVar15 = iVar21 << 1;\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }\n  iVar7 = 0;\n  uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);\n  puVar14 = (uint *)(param_2 + *param_2);\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar2 = iVar7 < *param_2;\n  while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  uVar17 = *puVar4;\n  iVar19 = 5;\n  uVar22 = 0;\n  iVar5 = 0x10;\n  uVar20 = uVar17;\n  do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }\n  uVar23 = *puVar14;\n  if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar11);\n  (*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar9);\n  (*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar4);\n  (*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar6);\n  freebn(piVar3);\n  return puVar14;\nLAB_00058f24:\n  iVar7 = iVar7 + 1;\n  puVar14 = puVar14 + -1;\n  goto LAB_00058b7c;\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  bool bVar2;\n  int *piVar3;\n  uint *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 *puVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint uVar17;\n  uint *puVar18;\n  int iVar19;\n  uint uVar20;\n  int iVar21;\n  uint uVar22;\n  uint uVar23;\n  undefined4 local_44;\n  int local_2c;\n  \n  if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }\n  piVar3 = (int *)bigmod(param_1,param_3);\n  iVar21 = *param_3;\n  puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  iVar15 = *piVar3;\n  iVar5 = iVar21 - iVar15;\n  if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }\n  if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }\n  iVar15 = iVar21 << 1;\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }\n  iVar7 = 0;\n  uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);\n  puVar14 = (uint *)(param_2 + *param_2);\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar2 = iVar7 < *param_2;\n  while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  uVar17 = *puVar4;\n  iVar19 = 5;\n  uVar22 = 0;\n  iVar5 = 0x10;\n  uVar20 = uVar17;\n  do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }\n  uVar23 = *puVar14;\n  if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar11);\n  (*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar9);\n  (*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar4);\n  (*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar6);\n  freebn(piVar3);\n  return puVar14;\nLAB_00058f24:\n  iVar7 = iVar7 + 1;\n  puVar14 = puVar14 + -1;\n  goto LAB_00058b7c;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined4 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined4 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "undefined4 *puVar10;" type_identifier (pointer_declarator "*puVar10" * 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 uVar17;" type_identifier identifier ;) (declaration "uint *puVar18;" type_identifier (pointer_declarator "*puVar18" * identifier) ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "uint uVar20;" type_identifier identifier ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "uint uVar22;" type_identifier identifier ;) (declaration "uint uVar23;" type_identifier identifier ;) (declaration "undefined4 local_44;" type_identifier identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (if_statement "if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\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    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }" { (expression_statement "puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);" (assignment_expression "puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" identifier = (cast_expression "(uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" (parenthesized_expression "(*(code *)PTR___assert_fail_000b0ac0)" ( (pointer_expression "*(code *)PTR___assert_fail_000b0ac0" * (cast_expression "(code *)PTR___assert_fail_000b0ac0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" ( (binary_expression "PTR_DAT_000b01d0 + -0x6e04" identifier + number_literal) , (binary_expression "PTR_DAT_000b01d0 + -0x6e40" identifier + number_literal) , number_literal , (binary_expression "PTR_DAT_000b01d0 + -0x6c2c" identifier + number_literal) ))))) ;) (return_statement "return puVar4;" return identifier ;) })) (expression_statement "piVar3 = (int *)bigmod(param_1,param_3);" (assignment_expression "piVar3 = (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 "iVar21 = *param_3;" (assignment_expression "iVar21 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);" (assignment_expression "puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" identifier = (cast_expression "(uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar21,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }" if (parenthesized_expression "(0 < iVar21)" ( (binary_expression "0 < iVar21" number_literal < identifier) )) (compound_statement "{\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }" { (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (expression_statement "puVar14 = puVar4;" (assignment_expression "puVar14 = puVar4" identifier = identifier) ;) (do_statement "do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);" do (compound_statement "{\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    }" { (expression_statement "iVar5 = *param_3 - iVar15;" (assignment_expression "iVar5 = *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 "*puVar14 = param_3[iVar5];" (assignment_expression "*puVar14 = param_3[iVar5]" (pointer_expression "*puVar14" * identifier) = (subscript_expression "param_3[iVar5]" identifier [ identifier ])) ;) (expression_statement "puVar14 = puVar14 + 1;" (assignment_expression "puVar14 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 != iVar15)" ( (binary_expression "iVar21 != iVar15" identifier != identifier) )) ;) })) (expression_statement "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);" (assignment_expression "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar21,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar15 = *piVar3;" (assignment_expression "iVar15 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "iVar5 = iVar21 - iVar15;" (assignment_expression "iVar5 = iVar21 - iVar15" identifier = (binary_expression "iVar21 - iVar15" identifier - identifier)) ;) (if_statement "if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }" if (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) (compound_statement "{\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }" { (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" identifier = identifier) ;) (do_statement "do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);" 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 "(puVar6 + iVar5 != puVar8)" ( (binary_expression "puVar6 + iVar5 != puVar8" (binary_expression "puVar6 + iVar5" identifier + identifier) != identifier) )) ;) (expression_statement "iVar15 = *piVar3;" (assignment_expression "iVar15 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) })) (if_statement "if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }" if (parenthesized_expression "(0 < iVar15)" ( (binary_expression "0 < iVar15" number_literal < identifier) )) (compound_statement "{\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "piVar16 = puVar6 + iVar5;" (assignment_expression "piVar16 = puVar6 + iVar5" identifier = (binary_expression "puVar6 + iVar5" identifier + identifier)) ;) (do_statement "do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);" do (compound_statement "{\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    }" { (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "*piVar16 = piVar3[iVar15];" (assignment_expression "*piVar16 = piVar3[iVar15]" (pointer_expression "*piVar16" * identifier) = (subscript_expression "piVar3[iVar15]" identifier [ identifier ])) ;) (expression_statement "iVar15 = *piVar3 - iVar7;" (assignment_expression "iVar15 = *piVar3 - iVar7" identifier = (binary_expression "*piVar3 - iVar7" (pointer_expression "*piVar3" * identifier) - identifier)) ;) (expression_statement "piVar16 = piVar16 + 1;" (assignment_expression "piVar16 = piVar16 + 1" identifier = (binary_expression "piVar16 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 < *piVar3)" ( (binary_expression "iVar7 < *piVar3" identifier < (pointer_expression "*piVar3" * identifier)) )) ;) })) (expression_statement "iVar15 = iVar21 << 1;" (assignment_expression "iVar15 = iVar21 << 1" identifier = (binary_expression "iVar21 << 1" identifier << number_literal)) ;) (expression_statement "puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);" (assignment_expression "puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar15,4)" ( identifier , number_literal ))))) ;) (expression_statement "puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);" (assignment_expression "puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar15,4)" ( identifier , number_literal ))))) ;) (if_statement "if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" if (parenthesized_expression "(iVar15 < 1)" ( (binary_expression "iVar15 < 1" identifier < number_literal) )) (compound_statement "{\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" { (expression_statement "puVar8[iVar21 * 2 + -1] = 1;" (assignment_expression "puVar8[iVar21 * 2 + -1] = 1" (subscript_expression "puVar8[iVar21 * 2 + -1]" identifier [ (binary_expression "iVar21 * 2 + -1" (binary_expression "iVar21 * 2" identifier * number_literal) + number_literal) ]) = number_literal) ;) }) (else_clause "else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" else (compound_statement "{\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" { (expression_statement "puVar10 = puVar8;" (assignment_expression "puVar10 = puVar8" identifier = identifier) ;) (do_statement "do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);" do (compound_statement "{\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    }" { (expression_statement "*puVar10 = 0;" (assignment_expression "*puVar10 = 0" (pointer_expression "*puVar10" * identifier) = number_literal) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar8 + iVar21 * 2 != puVar10)" ( (binary_expression "puVar8 + iVar21 * 2 != puVar10" (binary_expression "puVar8 + iVar21 * 2" identifier + (binary_expression "iVar21 * 2" identifier * number_literal)) != identifier) )) ;) (expression_statement "puVar8[iVar21 * 2 + -1] = 1;" (assignment_expression "puVar8[iVar21 * 2 + -1] = 1" (subscript_expression "puVar8[iVar21 * 2 + -1]" identifier [ (binary_expression "iVar21 * 2 + -1" (binary_expression "iVar21 * 2" identifier * number_literal) + number_literal) ]) = number_literal) ;) }))) (if_statement "if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }" if (parenthesized_expression "(iVar21 < 0x33)" ( (binary_expression "iVar21 < 0x33" identifier < number_literal) )) (compound_statement "{\n    local_2c = 0;\n    iVar5 = 0;\n  }" { (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }" else (compound_statement "{\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = iVar21;" (assignment_expression "iVar7 = iVar21" identifier = identifier) ;) (do_statement "do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);" do (compound_statement "{\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    }" { (expression_statement "iVar7 = (iVar7 - (iVar7 >> 1)) + 1;" (assignment_expression "iVar7 = (iVar7 - (iVar7 >> 1)) + 1" identifier = (binary_expression "(iVar7 - (iVar7 >> 1)) + 1" (parenthesized_expression "(iVar7 - (iVar7 >> 1))" ( (binary_expression "iVar7 - (iVar7 >> 1)" identifier - (parenthesized_expression "(iVar7 >> 1)" ( (binary_expression "iVar7 >> 1" identifier >> number_literal) ))) )) + number_literal)) ;) (expression_statement "iVar5 = iVar5 + iVar7 * 4;" (assignment_expression "iVar5 = iVar5 + iVar7 * 4" identifier = (binary_expression "iVar5 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal))) ;) }) while (parenthesized_expression "(0x32 < iVar7)" ( (binary_expression "0x32 < iVar7" number_literal < identifier) )) ;) (expression_statement "local_2c = iVar5 * 4;" (assignment_expression "local_2c = iVar5 * 4" identifier = (binary_expression "iVar5 * 4" identifier * number_literal)) ;) }))) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);" (assignment_expression "uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4)" identifier = (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar5,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar5,4)" ( identifier , number_literal )))) ;) (expression_statement "puVar14 = (uint *)(param_2 + *param_2);" (assignment_expression "puVar14 = (uint *)(param_2 + *param_2)" identifier = (cast_expression "(uint *)(param_2 + *param_2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + *param_2)" ( (binary_expression "param_2 + *param_2" identifier + (pointer_expression "*param_2" * identifier)) )))) ;) (labeled_statement "LAB_00058b7c:\n  uVar23 = 0x1f;" statement_identifier : (expression_statement "uVar23 = 0x1f;" (assignment_expression "uVar23 = 0x1f" identifier = number_literal) ;)) (expression_statement "bVar2 = iVar7 < *param_2;" (assignment_expression "bVar2 = iVar7 < *param_2" identifier = (binary_expression "iVar7 < *param_2" identifier < (pointer_expression "*param_2" * identifier))) ;) (while_statement "while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }" while (parenthesized_expression "((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0)))" ( (parenthesized_expression "(bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))" ( (binary_expression "bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0)" identifier && (parenthesized_expression "((1 << (uVar23 & 0x1f) & *puVar14) == 0)" ( (binary_expression "(1 << (uVar23 & 0x1f) & *puVar14) == 0" (parenthesized_expression "(1 << (uVar23 & 0x1f) & *puVar14)" ( (binary_expression "1 << (uVar23 & 0x1f) & *puVar14" (binary_expression "1 << (uVar23 & 0x1f)" number_literal << (parenthesized_expression "(uVar23 & 0x1f)" ( (binary_expression "uVar23 & 0x1f" identifier & number_literal) ))) & (pointer_expression "*puVar14" * identifier)) )) == number_literal) ))) )) )) (compound_statement "{\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }" { (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" identifier = (binary_expression "uVar23 - 1" identifier - number_literal)) ;) (if_statement "if (uVar23 == 0xffffffff) goto LAB_00058f24;" if (parenthesized_expression "(uVar23 == 0xffffffff)" ( (binary_expression "uVar23 == 0xffffffff" identifier == number_literal) )) (goto_statement "goto LAB_00058f24;" goto statement_identifier ;)) })) (expression_statement "uVar17 = *puVar4;" (assignment_expression "uVar17 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "iVar19 = 5;" (assignment_expression "iVar19 = 5" identifier = number_literal) ;) (expression_statement "uVar22 = 0;" (assignment_expression "uVar22 = 0" identifier = number_literal) ;) (expression_statement "iVar5 = 0x10;" (assignment_expression "iVar5 = 0x10" identifier = number_literal) ;) (expression_statement "uVar20 = uVar17;" (assignment_expression "uVar20 = uVar17" identifier = identifier) ;) (do_statement "do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);" do (compound_statement "{\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  }" { (if_statement "if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }" if (parenthesized_expression "(uVar20 >> (0x20U - iVar5 & 0x1f) == 0)" ( (binary_expression "uVar20 >> (0x20U - iVar5 & 0x1f) == 0" (binary_expression "uVar20 >> (0x20U - iVar5 & 0x1f)" identifier >> (parenthesized_expression "(0x20U - iVar5 & 0x1f)" ( (binary_expression "0x20U - iVar5 & 0x1f" (binary_expression "0x20U - iVar5" number_literal - identifier) & number_literal) ))) == number_literal) )) (compound_statement "{\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }" { (expression_statement "uVar20 = uVar20 << iVar5;" (assignment_expression "uVar20 = uVar20 << iVar5" identifier = (binary_expression "uVar20 << iVar5" identifier << identifier)) ;) (expression_statement "uVar22 = uVar22 + iVar5;" (assignment_expression "uVar22 = uVar22 + iVar5" identifier = (binary_expression "uVar22 + iVar5" identifier + identifier)) ;) })) (expression_statement "iVar19 = iVar19 + -1;" (assignment_expression "iVar19 = iVar19 + -1" identifier = (binary_expression "iVar19 + -1" identifier + number_literal)) ;) (expression_statement "iVar5 = iVar5 >> 1;" (assignment_expression "iVar5 = iVar5 >> 1" identifier = (binary_expression "iVar5 >> 1" identifier >> number_literal)) ;) }) while (parenthesized_expression "(iVar19 != 0)" ( (binary_expression "iVar19 != 0" identifier != number_literal) )) ;) (if_statement "if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }" if (parenthesized_expression "((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2))" ( (binary_expression "(uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)" (parenthesized_expression "(uVar22 == 0)" ( (binary_expression "uVar22 == 0" identifier == number_literal) )) || (parenthesized_expression "(uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)" ( (comma_expression "uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2" (assignment_expression "uVar17 = uVar17 << (uVar22 & 0x1f)" identifier = (binary_expression "uVar17 << (uVar22 & 0x1f)" identifier << (parenthesized_expression "(uVar22 & 0x1f)" ( (binary_expression "uVar22 & 0x1f" identifier & number_literal) )))) , (binary_expression "iVar21 < 2" identifier < number_literal)) ))) )) (compound_statement "{\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }" { (expression_statement "local_44 = FUN_000556d0(uVar17);" (assignment_expression "local_44 = FUN_000556d0(uVar17)" identifier = (call_expression "FUN_000556d0(uVar17)" identifier (argument_list "(uVar17)" ( identifier )))) ;) (if_statement "if (bVar2) goto LAB_00058c18;" if (parenthesized_expression "(bVar2)" ( identifier )) (goto_statement "goto LAB_00058c18;" goto statement_identifier ;)) (labeled_statement "LAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);" statement_identifier : (expression_statement "puVar14 = (uint *)FUN_00056014(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00056014(*param_3)" identifier = (cast_expression "(uint *)FUN_00056014(*param_3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00056014(*param_3)" identifier (argument_list "(*param_3)" ( (pointer_expression "*param_3" * identifier) ))))) ;)) (if_statement "if (0 < iVar21) goto LAB_00058d50;" if (parenthesized_expression "(0 < iVar21)" ( (binary_expression "0 < iVar21" number_literal < identifier) )) (goto_statement "goto LAB_00058d50;" goto statement_identifier ;)) }) (else_clause "else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }" else (compound_statement "{\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }" { (expression_statement "local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);" (assignment_expression "local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17)" identifier = (call_expression "FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17)" identifier (argument_list "(puVar4[1] >> (-uVar22 & 0x1f) | uVar17)" ( (binary_expression "puVar4[1] >> (-uVar22 & 0x1f) | uVar17" (binary_expression "puVar4[1] >> (-uVar22 & 0x1f)" (subscript_expression "puVar4[1]" identifier [ number_literal ]) >> (parenthesized_expression "(-uVar22 & 0x1f)" ( (binary_expression "-uVar22 & 0x1f" (unary_expression "-uVar22" - identifier) & number_literal) ))) | identifier) )))) ;) (if_statement "if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }" { (labeled_statement "LAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);" statement_identifier : (expression_statement "pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);" (assignment_expression "pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0)" identifier = (cast_expression "(code *)(PTR_LAB_000b068c + 0x60b0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b068c + 0x60b0)" ( (binary_expression "PTR_LAB_000b068c + 0x60b0" identifier + number_literal) )))) ;)) (expression_statement "pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);" (assignment_expression "pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978)" identifier = (cast_expression "(code *)(PTR_LAB_000b068c + 0x5978)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b068c + 0x5978)" ( (binary_expression "PTR_LAB_000b068c + 0x5978" identifier + number_literal) )))) ;) (do_statement "do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);" do (compound_statement "{\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      }" { (do_statement "do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);" do (compound_statement "{\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        }" { (expression_statement "(*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);" (call_expression "(*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11)" ( (binary_expression "puVar8 + iVar21" identifier + identifier) , (binary_expression "puVar8 + iVar21" identifier + identifier) , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);" (call_expression "(*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar10 = puVar9;" (assignment_expression "puVar10 = puVar9" identifier = identifier) ;) (if_statement "if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }" if (parenthesized_expression "((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0)" ( (binary_expression "(1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0" (parenthesized_expression "(1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7])" ( (binary_expression "1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]" (binary_expression "1 << (uVar23 & 0x1f)" number_literal << (parenthesized_expression "(uVar23 & 0x1f)" ( (binary_expression "uVar23 & 0x1f" identifier & number_literal) ))) & (subscript_expression "param_2[*param_2 - iVar7]" identifier [ (binary_expression "*param_2 - iVar7" (pointer_expression "*param_2" * identifier) - identifier) ])) )) != number_literal) )) (compound_statement "{\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }" { (expression_statement "(*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);" (call_expression "(*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11)" ( (binary_expression "puVar9 + iVar21" identifier + identifier) , identifier , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);" (call_expression "(*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar10 = puVar8;" (assignment_expression "puVar10 = puVar8" identifier = identifier) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) })) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" identifier = identifier) ;) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" identifier = identifier) ;) (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" identifier = (binary_expression "uVar23 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(uVar23 != 0xffffffff)" ( (binary_expression "uVar23 != 0xffffffff" identifier != number_literal) )) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "uVar23 = 0x1f;" (assignment_expression "uVar23 = 0x1f" identifier = number_literal) ;) }) while (parenthesized_expression "(iVar7 < *param_2)" ( (binary_expression "iVar7 < *param_2" identifier < (pointer_expression "*param_2" * identifier)) )) ;) (goto_statement "goto LAB_00058d34;" goto statement_identifier ;) })) (expression_statement "puVar14 = (uint *)FUN_00056014(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00056014(*param_3)" identifier = (cast_expression "(uint *)FUN_00056014(*param_3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00056014(*param_3)" identifier (argument_list "(*param_3)" ( (pointer_expression "*param_3" * identifier) ))))) ;) (labeled_statement "LAB_00058d50:\n    iVar15 = 0;" statement_identifier : (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;)) (expression_statement "puVar18 = puVar8 + iVar21;" (assignment_expression "puVar18 = puVar8 + iVar21" identifier = (binary_expression "puVar8 + iVar21" identifier + identifier)) ;) (do_statement "do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);" do (compound_statement "{\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    }" { (expression_statement "iVar5 = *puVar14 - iVar15;" (assignment_expression "iVar5 = *puVar14 - iVar15" identifier = (binary_expression "*puVar14 - iVar15" (pointer_expression "*puVar14" * identifier) - identifier)) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "puVar14[iVar5] = *puVar18;" (assignment_expression "puVar14[iVar5] = *puVar18" (subscript_expression "puVar14[iVar5]" identifier [ identifier ]) = (pointer_expression "*puVar18" * identifier)) ;) (expression_statement "puVar18 = puVar18 + 1;" (assignment_expression "puVar18 = puVar18 + 1" identifier = (binary_expression "puVar18 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar15 < iVar21)" ( (binary_expression "iVar15 < iVar21" identifier < identifier) )) ;) }))) (expression_statement "uVar23 = *puVar14;" (assignment_expression "uVar23 = *puVar14" identifier = (pointer_expression "*puVar14" * identifier)) ;) (if_statement "if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }" if (parenthesized_expression "(1 < uVar23)" ( (binary_expression "1 < uVar23" number_literal < identifier) )) (compound_statement "{\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }" { (expression_statement "puVar18 = puVar14 + uVar23;" (assignment_expression "puVar18 = puVar14 + uVar23" identifier = (binary_expression "puVar14 + uVar23" identifier + identifier)) ;) (expression_statement "uVar20 = *puVar18;" (assignment_expression "uVar20 = *puVar18" identifier = (pointer_expression "*puVar18" * identifier)) ;) (while_statement "while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }" while (parenthesized_expression "(uVar20 == 0)" ( (binary_expression "uVar20 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }" { (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" identifier = (binary_expression "uVar23 - 1" identifier - number_literal)) ;) (expression_statement "*puVar14 = uVar23;" (assignment_expression "*puVar14 = uVar23" (pointer_expression "*puVar14" * identifier) = identifier) ;) (if_statement "if (uVar23 == 1) break;" if (parenthesized_expression "(uVar23 == 1)" ( (binary_expression "uVar23 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar1 = puVar18 + -1;" (assignment_expression "puVar1 = puVar18 + -1" identifier = (binary_expression "puVar18 + -1" identifier + number_literal)) ;) (expression_statement "puVar18 = puVar18 + -1;" (assignment_expression "puVar18 = puVar18 + -1" identifier = (binary_expression "puVar18 + -1" identifier + number_literal)) ;) (expression_statement "uVar20 = *puVar1;" (assignment_expression "uVar20 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) })) })) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar8,iVar21 * 8)" ( identifier , (binary_expression "iVar21 * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar8);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar8)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar8)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);" (call_expression "(*(code *)PTR_smemclr_000b0240)(uVar11,local_2c)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar11,local_2c)" ( identifier , identifier ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(uVar11);" (call_expression "(*(code *)PTR_safefree_000b01b0)(uVar11)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar11)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar9,iVar21 * 8)" ( identifier , (binary_expression "iVar21 * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar9);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar9)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar9)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4,iVar21 * 4)" ( identifier , (binary_expression "iVar21 * 4" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar4);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar4)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar6,iVar21 * 4)" ( identifier , (binary_expression "iVar21 * 4" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar6);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar6)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar6)" ( identifier ))) ;) (expression_statement "freebn(piVar3);" (call_expression "freebn(piVar3)" identifier (argument_list "(piVar3)" ( identifier ))) ;) (return_statement "return puVar14;" return identifier ;) (labeled_statement "LAB_00058f24:\n  iVar7 = iVar7 + 1;" statement_identifier : (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;)) (expression_statement "puVar14 = puVar14 + -1;" (assignment_expression "puVar14 = puVar14 + -1" identifier = (binary_expression "puVar14 + -1" identifier + number_literal)) ;) (goto_statement "goto LAB_00058b7c;" goto statement_identifier ;) })))
(translation_unit "Bignum_conflict modpow_simple(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)\n\n{\n  bool bVar1;\n  Bignum_conflict pBVar2;\n  BignumInt *pBVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 uVar10;\n  code *pcVar11;\n  code *pcVar12;\n  Bignum_conflict pBVar13;\n  BignumInt BVar14;\n  BignumInt *pBVar15;\n  uint *puVar16;\n  BignumInt BVar17;\n  Bignum_conflict pBVar18;\n  int iVar19;\n  BignumInt BVar20;\n  uint uVar21;\n  int iVar22;\n  uint uVar23;\n  BignumInt local_44;\n  int local_2c;\n  \n  if (mod[*mod] == 0) {\n    pBVar2 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b0ac0)\n                       (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                        PTR_DAT_000b01d0 + -0x6c2c);\n    return pBVar2;\n  }\n  pBVar2 = bigmod(base_in,mod);\n  BVar20 = *mod;\n  pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4);\n  if (0 < (int)BVar20) {\n    BVar14 = 0;\n    pBVar15 = pBVar3;\n    do {\n      iVar4 = *mod - BVar14;\n      BVar14 = BVar14 + 1;\n      *pBVar15 = mod[iVar4];\n      pBVar15 = pBVar15 + 1;\n    } while (BVar20 != BVar14);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4);\n  BVar14 = *pBVar2;\n  iVar4 = BVar20 - BVar14;\n  if (0 < iVar4) {\n    puVar7 = puVar5;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar5 + iVar4 != puVar7);\n    BVar14 = *pBVar2;\n  }\n  if (0 < (int)BVar14) {\n    iVar6 = 0;\n    pBVar15 = puVar5 + iVar4;\n    do {\n      iVar6 = iVar6 + 1;\n      *pBVar15 = pBVar2[BVar14];\n      BVar14 = *pBVar2 - iVar6;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar6 < (int)*pBVar2);\n  }\n  iVar4 = BVar20 << 1;\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4);\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4);\n  if (iVar4 < 1) {\n    puVar7[BVar20 * 2 + -1] = 1;\n  }\n  else {\n    puVar9 = puVar7;\n    do {\n      *puVar9 = 0;\n      puVar9 = puVar9 + 1;\n    } while (puVar7 + BVar20 * 2 != puVar9);\n    puVar7[BVar20 * 2 + -1] = 1;\n  }\n  if ((int)BVar20 < 0x33) {\n    local_2c = 0;\n    iVar6 = 0;\n  }\n  else {\n    iVar6 = 0;\n    BVar14 = BVar20;\n    do {\n      BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1;\n      iVar6 = iVar6 + BVar14 * 4;\n    } while (0x32 < (int)BVar14);\n    local_2c = iVar6 * 4;\n  }\n  iVar22 = 0;\n  uVar10 = (*(code *)PTR_safemalloc_000b01e8)(iVar6,4);\n  puVar16 = exp + *exp;\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar1 = iVar22 < (int)*exp;\n  while ((bVar1 && ((1 << (uVar23 & 0x1f) & *puVar16) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  BVar17 = *pBVar3;\n  iVar19 = 5;\n  uVar21 = 0;\n  iVar6 = 0x10;\n  BVar14 = BVar17;\n  do {\n    if (BVar14 >> (0x20U - iVar6 & 0x1f) == 0) {\n      BVar14 = BVar14 << iVar6;\n      uVar21 = uVar21 + iVar6;\n    }\n    iVar19 = iVar19 + -1;\n    iVar6 = iVar6 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar21 == 0) || (BVar17 = BVar17 << (uVar21 & 0x1f), (int)BVar20 < 2)) {\n    local_44 = reciprocal_word(BVar17);\n    if (bVar1) goto LAB_00058c18;\nLAB_00058d34:\n    pBVar13 = newbn(*mod);\n    if (0 < (int)BVar20) goto LAB_00058d50;\n  }\n  else {\n    local_44 = reciprocal_word(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17);\n    if (bVar1) {\nLAB_00058c18:\n      pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar22 = iVar22 + 1;\n        uVar23 = 0x1f;\n      } while (iVar22 < (int)*exp);\n      goto LAB_00058d34;\n    }\n    pBVar13 = newbn(*mod);\nLAB_00058d50:\n    iVar4 = 0;\n    pBVar15 = puVar7 + BVar20;\n    do {\n      iVar6 = *pBVar13 - iVar4;\n      iVar4 = iVar4 + 1;\n      pBVar13[iVar6] = *pBVar15;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar4 < (int)BVar20);\n  }\n  BVar14 = *pBVar13;\n  if (1 < BVar14) {\n    pBVar18 = pBVar13 + BVar14;\n    BVar17 = *pBVar18;\n    while (BVar17 == 0) {\n      BVar14 = BVar14 - 1;\n      *pBVar13 = BVar14;\n      if (BVar14 == 1) break;\n      pBVar15 = pBVar18 + -1;\n      pBVar18 = pBVar18 + -1;\n      BVar17 = *pBVar15;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar7,BVar20 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar7);\n  (*(code *)PTR_smemclr_000b0240)(uVar10,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar10);\n  (*(code *)PTR_smemclr_000b0240)(puVar8,BVar20 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(pBVar3,BVar20 * 4);\n  (*(code *)PTR_safefree_000b01b0)(pBVar3);\n  (*(code *)PTR_smemclr_000b0240)(puVar5,BVar20 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar5);\n                    /* WARNING: Subroutine does not return */\n  freebn(pBVar2);\nLAB_00058f24:\n  iVar22 = iVar22 + 1;\n  puVar16 = puVar16 + -1;\n  goto LAB_00058b7c;\n}\n\n" (function_definition "Bignum_conflict modpow_simple(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)\n\n{\n  bool bVar1;\n  Bignum_conflict pBVar2;\n  BignumInt *pBVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 uVar10;\n  code *pcVar11;\n  code *pcVar12;\n  Bignum_conflict pBVar13;\n  BignumInt BVar14;\n  BignumInt *pBVar15;\n  uint *puVar16;\n  BignumInt BVar17;\n  Bignum_conflict pBVar18;\n  int iVar19;\n  BignumInt BVar20;\n  uint uVar21;\n  int iVar22;\n  uint uVar23;\n  BignumInt local_44;\n  int local_2c;\n  \n  if (mod[*mod] == 0) {\n    pBVar2 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b0ac0)\n                       (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                        PTR_DAT_000b01d0 + -0x6c2c);\n    return pBVar2;\n  }\n  pBVar2 = bigmod(base_in,mod);\n  BVar20 = *mod;\n  pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4);\n  if (0 < (int)BVar20) {\n    BVar14 = 0;\n    pBVar15 = pBVar3;\n    do {\n      iVar4 = *mod - BVar14;\n      BVar14 = BVar14 + 1;\n      *pBVar15 = mod[iVar4];\n      pBVar15 = pBVar15 + 1;\n    } while (BVar20 != BVar14);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4);\n  BVar14 = *pBVar2;\n  iVar4 = BVar20 - BVar14;\n  if (0 < iVar4) {\n    puVar7 = puVar5;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar5 + iVar4 != puVar7);\n    BVar14 = *pBVar2;\n  }\n  if (0 < (int)BVar14) {\n    iVar6 = 0;\n    pBVar15 = puVar5 + iVar4;\n    do {\n      iVar6 = iVar6 + 1;\n      *pBVar15 = pBVar2[BVar14];\n      BVar14 = *pBVar2 - iVar6;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar6 < (int)*pBVar2);\n  }\n  iVar4 = BVar20 << 1;\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4);\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4);\n  if (iVar4 < 1) {\n    puVar7[BVar20 * 2 + -1] = 1;\n  }\n  else {\n    puVar9 = puVar7;\n    do {\n      *puVar9 = 0;\n      puVar9 = puVar9 + 1;\n    } while (puVar7 + BVar20 * 2 != puVar9);\n    puVar7[BVar20 * 2 + -1] = 1;\n  }\n  if ((int)BVar20 < 0x33) {\n    local_2c = 0;\n    iVar6 = 0;\n  }\n  else {\n    iVar6 = 0;\n    BVar14 = BVar20;\n    do {\n      BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1;\n      iVar6 = iVar6 + BVar14 * 4;\n    } while (0x32 < (int)BVar14);\n    local_2c = iVar6 * 4;\n  }\n  iVar22 = 0;\n  uVar10 = (*(code *)PTR_safemalloc_000b01e8)(iVar6,4);\n  puVar16 = exp + *exp;\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar1 = iVar22 < (int)*exp;\n  while ((bVar1 && ((1 << (uVar23 & 0x1f) & *puVar16) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  BVar17 = *pBVar3;\n  iVar19 = 5;\n  uVar21 = 0;\n  iVar6 = 0x10;\n  BVar14 = BVar17;\n  do {\n    if (BVar14 >> (0x20U - iVar6 & 0x1f) == 0) {\n      BVar14 = BVar14 << iVar6;\n      uVar21 = uVar21 + iVar6;\n    }\n    iVar19 = iVar19 + -1;\n    iVar6 = iVar6 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar21 == 0) || (BVar17 = BVar17 << (uVar21 & 0x1f), (int)BVar20 < 2)) {\n    local_44 = reciprocal_word(BVar17);\n    if (bVar1) goto LAB_00058c18;\nLAB_00058d34:\n    pBVar13 = newbn(*mod);\n    if (0 < (int)BVar20) goto LAB_00058d50;\n  }\n  else {\n    local_44 = reciprocal_word(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17);\n    if (bVar1) {\nLAB_00058c18:\n      pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar22 = iVar22 + 1;\n        uVar23 = 0x1f;\n      } while (iVar22 < (int)*exp);\n      goto LAB_00058d34;\n    }\n    pBVar13 = newbn(*mod);\nLAB_00058d50:\n    iVar4 = 0;\n    pBVar15 = puVar7 + BVar20;\n    do {\n      iVar6 = *pBVar13 - iVar4;\n      iVar4 = iVar4 + 1;\n      pBVar13[iVar6] = *pBVar15;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar4 < (int)BVar20);\n  }\n  BVar14 = *pBVar13;\n  if (1 < BVar14) {\n    pBVar18 = pBVar13 + BVar14;\n    BVar17 = *pBVar18;\n    while (BVar17 == 0) {\n      BVar14 = BVar14 - 1;\n      *pBVar13 = BVar14;\n      if (BVar14 == 1) break;\n      pBVar15 = pBVar18 + -1;\n      pBVar18 = pBVar18 + -1;\n      BVar17 = *pBVar15;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar7,BVar20 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar7);\n  (*(code *)PTR_smemclr_000b0240)(uVar10,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar10);\n  (*(code *)PTR_smemclr_000b0240)(puVar8,BVar20 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(pBVar3,BVar20 * 4);\n  (*(code *)PTR_safefree_000b01b0)(pBVar3);\n  (*(code *)PTR_smemclr_000b0240)(puVar5,BVar20 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar5);\n                    /* WARNING: Subroutine does not return */\n  freebn(pBVar2);\nLAB_00058f24:\n  iVar22 = iVar22 + 1;\n  puVar16 = puVar16 + -1;\n  goto LAB_00058b7c;\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  bool bVar1;\n  Bignum_conflict pBVar2;\n  BignumInt *pBVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 uVar10;\n  code *pcVar11;\n  code *pcVar12;\n  Bignum_conflict pBVar13;\n  BignumInt BVar14;\n  BignumInt *pBVar15;\n  uint *puVar16;\n  BignumInt BVar17;\n  Bignum_conflict pBVar18;\n  int iVar19;\n  BignumInt BVar20;\n  uint uVar21;\n  int iVar22;\n  uint uVar23;\n  BignumInt local_44;\n  int local_2c;\n  \n  if (mod[*mod] == 0) {\n    pBVar2 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b0ac0)\n                       (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                        PTR_DAT_000b01d0 + -0x6c2c);\n    return pBVar2;\n  }\n  pBVar2 = bigmod(base_in,mod);\n  BVar20 = *mod;\n  pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4);\n  if (0 < (int)BVar20) {\n    BVar14 = 0;\n    pBVar15 = pBVar3;\n    do {\n      iVar4 = *mod - BVar14;\n      BVar14 = BVar14 + 1;\n      *pBVar15 = mod[iVar4];\n      pBVar15 = pBVar15 + 1;\n    } while (BVar20 != BVar14);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4);\n  BVar14 = *pBVar2;\n  iVar4 = BVar20 - BVar14;\n  if (0 < iVar4) {\n    puVar7 = puVar5;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar5 + iVar4 != puVar7);\n    BVar14 = *pBVar2;\n  }\n  if (0 < (int)BVar14) {\n    iVar6 = 0;\n    pBVar15 = puVar5 + iVar4;\n    do {\n      iVar6 = iVar6 + 1;\n      *pBVar15 = pBVar2[BVar14];\n      BVar14 = *pBVar2 - iVar6;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar6 < (int)*pBVar2);\n  }\n  iVar4 = BVar20 << 1;\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4);\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4);\n  if (iVar4 < 1) {\n    puVar7[BVar20 * 2 + -1] = 1;\n  }\n  else {\n    puVar9 = puVar7;\n    do {\n      *puVar9 = 0;\n      puVar9 = puVar9 + 1;\n    } while (puVar7 + BVar20 * 2 != puVar9);\n    puVar7[BVar20 * 2 + -1] = 1;\n  }\n  if ((int)BVar20 < 0x33) {\n    local_2c = 0;\n    iVar6 = 0;\n  }\n  else {\n    iVar6 = 0;\n    BVar14 = BVar20;\n    do {\n      BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1;\n      iVar6 = iVar6 + BVar14 * 4;\n    } while (0x32 < (int)BVar14);\n    local_2c = iVar6 * 4;\n  }\n  iVar22 = 0;\n  uVar10 = (*(code *)PTR_safemalloc_000b01e8)(iVar6,4);\n  puVar16 = exp + *exp;\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar1 = iVar22 < (int)*exp;\n  while ((bVar1 && ((1 << (uVar23 & 0x1f) & *puVar16) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  BVar17 = *pBVar3;\n  iVar19 = 5;\n  uVar21 = 0;\n  iVar6 = 0x10;\n  BVar14 = BVar17;\n  do {\n    if (BVar14 >> (0x20U - iVar6 & 0x1f) == 0) {\n      BVar14 = BVar14 << iVar6;\n      uVar21 = uVar21 + iVar6;\n    }\n    iVar19 = iVar19 + -1;\n    iVar6 = iVar6 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar21 == 0) || (BVar17 = BVar17 << (uVar21 & 0x1f), (int)BVar20 < 2)) {\n    local_44 = reciprocal_word(BVar17);\n    if (bVar1) goto LAB_00058c18;\nLAB_00058d34:\n    pBVar13 = newbn(*mod);\n    if (0 < (int)BVar20) goto LAB_00058d50;\n  }\n  else {\n    local_44 = reciprocal_word(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17);\n    if (bVar1) {\nLAB_00058c18:\n      pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar22 = iVar22 + 1;\n        uVar23 = 0x1f;\n      } while (iVar22 < (int)*exp);\n      goto LAB_00058d34;\n    }\n    pBVar13 = newbn(*mod);\nLAB_00058d50:\n    iVar4 = 0;\n    pBVar15 = puVar7 + BVar20;\n    do {\n      iVar6 = *pBVar13 - iVar4;\n      iVar4 = iVar4 + 1;\n      pBVar13[iVar6] = *pBVar15;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar4 < (int)BVar20);\n  }\n  BVar14 = *pBVar13;\n  if (1 < BVar14) {\n    pBVar18 = pBVar13 + BVar14;\n    BVar17 = *pBVar18;\n    while (BVar17 == 0) {\n      BVar14 = BVar14 - 1;\n      *pBVar13 = BVar14;\n      if (BVar14 == 1) break;\n      pBVar15 = pBVar18 + -1;\n      pBVar18 = pBVar18 + -1;\n      BVar17 = *pBVar15;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar7,BVar20 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar7);\n  (*(code *)PTR_smemclr_000b0240)(uVar10,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar10);\n  (*(code *)PTR_smemclr_000b0240)(puVar8,BVar20 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(pBVar3,BVar20 * 4);\n  (*(code *)PTR_safefree_000b01b0)(pBVar3);\n  (*(code *)PTR_smemclr_000b0240)(puVar5,BVar20 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar5);\n                    /* WARNING: Subroutine does not return */\n  freebn(pBVar2);\nLAB_00058f24:\n  iVar22 = iVar22 + 1;\n  puVar16 = puVar16 + -1;\n  goto LAB_00058b7c;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "Bignum_conflict pBVar2;" type_identifier identifier ;) (declaration "BignumInt *pBVar3;" type_identifier (pointer_declarator "*pBVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined4 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "undefined4 uVar10;" type_identifier identifier ;) (declaration "code *pcVar11;" type_identifier (pointer_declarator "*pcVar11" * identifier) ;) (declaration "code *pcVar12;" type_identifier (pointer_declarator "*pcVar12" * identifier) ;) (declaration "Bignum_conflict pBVar13;" type_identifier identifier ;) (declaration "BignumInt BVar14;" type_identifier identifier ;) (declaration "BignumInt *pBVar15;" type_identifier (pointer_declarator "*pBVar15" * identifier) ;) (declaration "uint *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "BignumInt BVar17;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar18;" type_identifier identifier ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "BignumInt BVar20;" type_identifier identifier ;) (declaration "uint uVar21;" type_identifier identifier ;) (declaration "int iVar22;" primitive_type identifier ;) (declaration "uint uVar23;" type_identifier identifier ;) (declaration "BignumInt local_44;" type_identifier identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (if_statement "if (mod[*mod] == 0) {\n    pBVar2 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b0ac0)\n                       (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                        PTR_DAT_000b01d0 + -0x6c2c);\n    return pBVar2;\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    pBVar2 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b0ac0)\n                       (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                        PTR_DAT_000b01d0 + -0x6c2c);\n    return pBVar2;\n  }" { (expression_statement "pBVar2 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b0ac0)\n                       (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                        PTR_DAT_000b01d0 + -0x6c2c);" (assignment_expression "pBVar2 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b0ac0)\n                       (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                        PTR_DAT_000b01d0 + -0x6c2c)" identifier = (call_expression "(Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b0ac0)\n                       (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                        PTR_DAT_000b01d0 + -0x6c2c)" (call_expression "(Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b0ac0)" (parenthesized_expression "(Bignum_conflict)" ( identifier )) (argument_list "(*(code *)PTR___assert_fail_000b0ac0)" ( (pointer_expression "*(code *)PTR___assert_fail_000b0ac0" * (cast_expression "(code *)PTR___assert_fail_000b0ac0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))) (argument_list "(PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                        PTR_DAT_000b01d0 + -0x6c2c)" ( (binary_expression "PTR_DAT_000b01d0 + -0x6e04" identifier + number_literal) , (binary_expression "PTR_DAT_000b01d0 + -0x6e40" identifier + number_literal) , number_literal , (binary_expression "PTR_DAT_000b01d0 + -0x6c2c" identifier + number_literal) )))) ;) (return_statement "return pBVar2;" return identifier ;) })) (expression_statement "pBVar2 = bigmod(base_in,mod);" (assignment_expression "pBVar2 = bigmod(base_in,mod)" identifier = (call_expression "bigmod(base_in,mod)" identifier (argument_list "(base_in,mod)" ( identifier , identifier )))) ;) (expression_statement "BVar20 = *mod;" (assignment_expression "BVar20 = *mod" identifier = (pointer_expression "*mod" * identifier)) ;) (expression_statement "pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4);" (assignment_expression "pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4)" identifier = (cast_expression "(BignumInt *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(BVar20,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(BVar20,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < (int)BVar20) {\n    BVar14 = 0;\n    pBVar15 = pBVar3;\n    do {\n      iVar4 = *mod - BVar14;\n      BVar14 = BVar14 + 1;\n      *pBVar15 = mod[iVar4];\n      pBVar15 = pBVar15 + 1;\n    } while (BVar20 != BVar14);\n  }" if (parenthesized_expression "(0 < (int)BVar20)" ( (binary_expression "0 < (int)BVar20" number_literal < (cast_expression "(int)BVar20" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    BVar14 = 0;\n    pBVar15 = pBVar3;\n    do {\n      iVar4 = *mod - BVar14;\n      BVar14 = BVar14 + 1;\n      *pBVar15 = mod[iVar4];\n      pBVar15 = pBVar15 + 1;\n    } while (BVar20 != BVar14);\n  }" { (expression_statement "BVar14 = 0;" (assignment_expression "BVar14 = 0" identifier = number_literal) ;) (expression_statement "pBVar15 = pBVar3;" (assignment_expression "pBVar15 = pBVar3" identifier = identifier) ;) (do_statement "do {\n      iVar4 = *mod - BVar14;\n      BVar14 = BVar14 + 1;\n      *pBVar15 = mod[iVar4];\n      pBVar15 = pBVar15 + 1;\n    } while (BVar20 != BVar14);" do (compound_statement "{\n      iVar4 = *mod - BVar14;\n      BVar14 = BVar14 + 1;\n      *pBVar15 = mod[iVar4];\n      pBVar15 = pBVar15 + 1;\n    }" { (expression_statement "iVar4 = *mod - BVar14;" (assignment_expression "iVar4 = *mod - BVar14" identifier = (binary_expression "*mod - BVar14" (pointer_expression "*mod" * identifier) - identifier)) ;) (expression_statement "BVar14 = BVar14 + 1;" (assignment_expression "BVar14 = BVar14 + 1" identifier = (binary_expression "BVar14 + 1" identifier + number_literal)) ;) (expression_statement "*pBVar15 = mod[iVar4];" (assignment_expression "*pBVar15 = mod[iVar4]" (pointer_expression "*pBVar15" * identifier) = (subscript_expression "mod[iVar4]" identifier [ identifier ])) ;) (expression_statement "pBVar15 = pBVar15 + 1;" (assignment_expression "pBVar15 = pBVar15 + 1" identifier = (binary_expression "pBVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(BVar20 != BVar14)" ( (binary_expression "BVar20 != BVar14" identifier != identifier) )) ;) })) (expression_statement "puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4);" (assignment_expression "puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(BVar20,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(BVar20,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(BVar20,4)" ( identifier , number_literal ))))) ;) (expression_statement "BVar14 = *pBVar2;" (assignment_expression "BVar14 = *pBVar2" identifier = (pointer_expression "*pBVar2" * identifier)) ;) (expression_statement "iVar4 = BVar20 - BVar14;" (assignment_expression "iVar4 = BVar20 - BVar14" identifier = (binary_expression "BVar20 - BVar14" identifier - identifier)) ;) (if_statement "if (0 < iVar4) {\n    puVar7 = puVar5;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar5 + iVar4 != puVar7);\n    BVar14 = *pBVar2;\n  }" if (parenthesized_expression "(0 < iVar4)" ( (binary_expression "0 < iVar4" number_literal < identifier) )) (compound_statement "{\n    puVar7 = puVar5;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar5 + iVar4 != puVar7);\n    BVar14 = *pBVar2;\n  }" { (expression_statement "puVar7 = puVar5;" (assignment_expression "puVar7 = puVar5" identifier = identifier) ;) (do_statement "do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar5 + iVar4 != puVar7);" 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 "(puVar5 + iVar4 != puVar7)" ( (binary_expression "puVar5 + iVar4 != puVar7" (binary_expression "puVar5 + iVar4" identifier + identifier) != identifier) )) ;) (expression_statement "BVar14 = *pBVar2;" (assignment_expression "BVar14 = *pBVar2" identifier = (pointer_expression "*pBVar2" * identifier)) ;) })) (if_statement "if (0 < (int)BVar14) {\n    iVar6 = 0;\n    pBVar15 = puVar5 + iVar4;\n    do {\n      iVar6 = iVar6 + 1;\n      *pBVar15 = pBVar2[BVar14];\n      BVar14 = *pBVar2 - iVar6;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar6 < (int)*pBVar2);\n  }" if (parenthesized_expression "(0 < (int)BVar14)" ( (binary_expression "0 < (int)BVar14" number_literal < (cast_expression "(int)BVar14" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    iVar6 = 0;\n    pBVar15 = puVar5 + iVar4;\n    do {\n      iVar6 = iVar6 + 1;\n      *pBVar15 = pBVar2[BVar14];\n      BVar14 = *pBVar2 - iVar6;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar6 < (int)*pBVar2);\n  }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "pBVar15 = puVar5 + iVar4;" (assignment_expression "pBVar15 = puVar5 + iVar4" identifier = (binary_expression "puVar5 + iVar4" identifier + identifier)) ;) (do_statement "do {\n      iVar6 = iVar6 + 1;\n      *pBVar15 = pBVar2[BVar14];\n      BVar14 = *pBVar2 - iVar6;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar6 < (int)*pBVar2);" do (compound_statement "{\n      iVar6 = iVar6 + 1;\n      *pBVar15 = pBVar2[BVar14];\n      BVar14 = *pBVar2 - iVar6;\n      pBVar15 = pBVar15 + 1;\n    }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "*pBVar15 = pBVar2[BVar14];" (assignment_expression "*pBVar15 = pBVar2[BVar14]" (pointer_expression "*pBVar15" * identifier) = (subscript_expression "pBVar2[BVar14]" identifier [ identifier ])) ;) (expression_statement "BVar14 = *pBVar2 - iVar6;" (assignment_expression "BVar14 = *pBVar2 - iVar6" identifier = (binary_expression "*pBVar2 - iVar6" (pointer_expression "*pBVar2" * identifier) - identifier)) ;) (expression_statement "pBVar15 = pBVar15 + 1;" (assignment_expression "pBVar15 = pBVar15 + 1" identifier = (binary_expression "pBVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 < (int)*pBVar2)" ( (binary_expression "iVar6 < (int)*pBVar2" identifier < (cast_expression "(int)*pBVar2" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pBVar2" * identifier))) )) ;) })) (expression_statement "iVar4 = BVar20 << 1;" (assignment_expression "iVar4 = BVar20 << 1" identifier = (binary_expression "BVar20 << 1" identifier << number_literal)) ;) (expression_statement "puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4);" (assignment_expression "puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar4,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar4,4)" ( identifier , number_literal ))))) ;) (expression_statement "puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4);" (assignment_expression "puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar4,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar4,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar4,4)" ( identifier , number_literal ))))) ;) (if_statement "if (iVar4 < 1) {\n    puVar7[BVar20 * 2 + -1] = 1;\n  }\n  else {\n    puVar9 = puVar7;\n    do {\n      *puVar9 = 0;\n      puVar9 = puVar9 + 1;\n    } while (puVar7 + BVar20 * 2 != puVar9);\n    puVar7[BVar20 * 2 + -1] = 1;\n  }" if (parenthesized_expression "(iVar4 < 1)" ( (binary_expression "iVar4 < 1" identifier < number_literal) )) (compound_statement "{\n    puVar7[BVar20 * 2 + -1] = 1;\n  }" { (expression_statement "puVar7[BVar20 * 2 + -1] = 1;" (assignment_expression "puVar7[BVar20 * 2 + -1] = 1" (subscript_expression "puVar7[BVar20 * 2 + -1]" identifier [ (binary_expression "BVar20 * 2 + -1" (binary_expression "BVar20 * 2" identifier * number_literal) + number_literal) ]) = number_literal) ;) }) (else_clause "else {\n    puVar9 = puVar7;\n    do {\n      *puVar9 = 0;\n      puVar9 = puVar9 + 1;\n    } while (puVar7 + BVar20 * 2 != puVar9);\n    puVar7[BVar20 * 2 + -1] = 1;\n  }" else (compound_statement "{\n    puVar9 = puVar7;\n    do {\n      *puVar9 = 0;\n      puVar9 = puVar9 + 1;\n    } while (puVar7 + BVar20 * 2 != puVar9);\n    puVar7[BVar20 * 2 + -1] = 1;\n  }" { (expression_statement "puVar9 = puVar7;" (assignment_expression "puVar9 = puVar7" identifier = identifier) ;) (do_statement "do {\n      *puVar9 = 0;\n      puVar9 = puVar9 + 1;\n    } while (puVar7 + BVar20 * 2 != puVar9);" do (compound_statement "{\n      *puVar9 = 0;\n      puVar9 = puVar9 + 1;\n    }" { (expression_statement "*puVar9 = 0;" (assignment_expression "*puVar9 = 0" (pointer_expression "*puVar9" * identifier) = number_literal) ;) (expression_statement "puVar9 = puVar9 + 1;" (assignment_expression "puVar9 = puVar9 + 1" identifier = (binary_expression "puVar9 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar7 + BVar20 * 2 != puVar9)" ( (binary_expression "puVar7 + BVar20 * 2 != puVar9" (binary_expression "puVar7 + BVar20 * 2" identifier + (binary_expression "BVar20 * 2" identifier * number_literal)) != identifier) )) ;) (expression_statement "puVar7[BVar20 * 2 + -1] = 1;" (assignment_expression "puVar7[BVar20 * 2 + -1] = 1" (subscript_expression "puVar7[BVar20 * 2 + -1]" identifier [ (binary_expression "BVar20 * 2 + -1" (binary_expression "BVar20 * 2" identifier * number_literal) + number_literal) ]) = number_literal) ;) }))) (if_statement "if ((int)BVar20 < 0x33) {\n    local_2c = 0;\n    iVar6 = 0;\n  }\n  else {\n    iVar6 = 0;\n    BVar14 = BVar20;\n    do {\n      BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1;\n      iVar6 = iVar6 + BVar14 * 4;\n    } while (0x32 < (int)BVar14);\n    local_2c = iVar6 * 4;\n  }" if (parenthesized_expression "((int)BVar20 < 0x33)" ( (binary_expression "(int)BVar20 < 0x33" (cast_expression "(int)BVar20" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    local_2c = 0;\n    iVar6 = 0;\n  }" { (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    iVar6 = 0;\n    BVar14 = BVar20;\n    do {\n      BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1;\n      iVar6 = iVar6 + BVar14 * 4;\n    } while (0x32 < (int)BVar14);\n    local_2c = iVar6 * 4;\n  }" else (compound_statement "{\n    iVar6 = 0;\n    BVar14 = BVar20;\n    do {\n      BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1;\n      iVar6 = iVar6 + BVar14 * 4;\n    } while (0x32 < (int)BVar14);\n    local_2c = iVar6 * 4;\n  }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "BVar14 = BVar20;" (assignment_expression "BVar14 = BVar20" identifier = identifier) ;) (do_statement "do {\n      BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1;\n      iVar6 = iVar6 + BVar14 * 4;\n    } while (0x32 < (int)BVar14);" do (compound_statement "{\n      BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1;\n      iVar6 = iVar6 + BVar14 * 4;\n    }" { (expression_statement "BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1;" (assignment_expression "BVar14 = (BVar14 - ((int)BVar14 >> 1)) + 1" identifier = (binary_expression "(BVar14 - ((int)BVar14 >> 1)) + 1" (parenthesized_expression "(BVar14 - ((int)BVar14 >> 1))" ( (binary_expression "BVar14 - ((int)BVar14 >> 1)" identifier - (parenthesized_expression "((int)BVar14 >> 1)" ( (binary_expression "(int)BVar14 >> 1" (cast_expression "(int)BVar14" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) )) + number_literal)) ;) (expression_statement "iVar6 = iVar6 + BVar14 * 4;" (assignment_expression "iVar6 = iVar6 + BVar14 * 4" identifier = (binary_expression "iVar6 + BVar14 * 4" identifier + (binary_expression "BVar14 * 4" identifier * number_literal))) ;) }) while (parenthesized_expression "(0x32 < (int)BVar14)" ( (binary_expression "0x32 < (int)BVar14" number_literal < (cast_expression "(int)BVar14" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (expression_statement "local_2c = iVar6 * 4;" (assignment_expression "local_2c = iVar6 * 4" identifier = (binary_expression "iVar6 * 4" identifier * number_literal)) ;) }))) (expression_statement "iVar22 = 0;" (assignment_expression "iVar22 = 0" identifier = number_literal) ;) (expression_statement "uVar10 = (*(code *)PTR_safemalloc_000b01e8)(iVar6,4);" (assignment_expression "uVar10 = (*(code *)PTR_safemalloc_000b01e8)(iVar6,4)" identifier = (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar6,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar6,4)" ( identifier , number_literal )))) ;) (expression_statement "puVar16 = exp + *exp;" (assignment_expression "puVar16 = exp + *exp" identifier = (binary_expression "exp + *exp" identifier + (pointer_expression "*exp" * identifier))) ;) (labeled_statement "LAB_00058b7c:\n  uVar23 = 0x1f;" statement_identifier : (expression_statement "uVar23 = 0x1f;" (assignment_expression "uVar23 = 0x1f" identifier = number_literal) ;)) (expression_statement "bVar1 = iVar22 < (int)*exp;" (assignment_expression "bVar1 = iVar22 < (int)*exp" identifier = (binary_expression "iVar22 < (int)*exp" identifier < (cast_expression "(int)*exp" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*exp" * identifier)))) ;) (while_statement "while ((bVar1 && ((1 << (uVar23 & 0x1f) & *puVar16) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }" while (parenthesized_expression "((bVar1 && ((1 << (uVar23 & 0x1f) & *puVar16) == 0)))" ( (parenthesized_expression "(bVar1 && ((1 << (uVar23 & 0x1f) & *puVar16) == 0))" ( (binary_expression "bVar1 && ((1 << (uVar23 & 0x1f) & *puVar16) == 0)" identifier && (parenthesized_expression "((1 << (uVar23 & 0x1f) & *puVar16) == 0)" ( (binary_expression "(1 << (uVar23 & 0x1f) & *puVar16) == 0" (parenthesized_expression "(1 << (uVar23 & 0x1f) & *puVar16)" ( (binary_expression "1 << (uVar23 & 0x1f) & *puVar16" (binary_expression "1 << (uVar23 & 0x1f)" number_literal << (parenthesized_expression "(uVar23 & 0x1f)" ( (binary_expression "uVar23 & 0x1f" identifier & number_literal) ))) & (pointer_expression "*puVar16" * identifier)) )) == number_literal) ))) )) )) (compound_statement "{\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }" { (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" identifier = (binary_expression "uVar23 - 1" identifier - number_literal)) ;) (if_statement "if (uVar23 == 0xffffffff) goto LAB_00058f24;" if (parenthesized_expression "(uVar23 == 0xffffffff)" ( (binary_expression "uVar23 == 0xffffffff" identifier == number_literal) )) (goto_statement "goto LAB_00058f24;" goto statement_identifier ;)) })) (expression_statement "BVar17 = *pBVar3;" (assignment_expression "BVar17 = *pBVar3" identifier = (pointer_expression "*pBVar3" * identifier)) ;) (expression_statement "iVar19 = 5;" (assignment_expression "iVar19 = 5" identifier = number_literal) ;) (expression_statement "uVar21 = 0;" (assignment_expression "uVar21 = 0" identifier = number_literal) ;) (expression_statement "iVar6 = 0x10;" (assignment_expression "iVar6 = 0x10" identifier = number_literal) ;) (expression_statement "BVar14 = BVar17;" (assignment_expression "BVar14 = BVar17" identifier = identifier) ;) (do_statement "do {\n    if (BVar14 >> (0x20U - iVar6 & 0x1f) == 0) {\n      BVar14 = BVar14 << iVar6;\n      uVar21 = uVar21 + iVar6;\n    }\n    iVar19 = iVar19 + -1;\n    iVar6 = iVar6 >> 1;\n  } while (iVar19 != 0);" do (compound_statement "{\n    if (BVar14 >> (0x20U - iVar6 & 0x1f) == 0) {\n      BVar14 = BVar14 << iVar6;\n      uVar21 = uVar21 + iVar6;\n    }\n    iVar19 = iVar19 + -1;\n    iVar6 = iVar6 >> 1;\n  }" { (if_statement "if (BVar14 >> (0x20U - iVar6 & 0x1f) == 0) {\n      BVar14 = BVar14 << iVar6;\n      uVar21 = uVar21 + iVar6;\n    }" if (parenthesized_expression "(BVar14 >> (0x20U - iVar6 & 0x1f) == 0)" ( (binary_expression "BVar14 >> (0x20U - iVar6 & 0x1f) == 0" (binary_expression "BVar14 >> (0x20U - iVar6 & 0x1f)" identifier >> (parenthesized_expression "(0x20U - iVar6 & 0x1f)" ( (binary_expression "0x20U - iVar6 & 0x1f" (binary_expression "0x20U - iVar6" number_literal - identifier) & number_literal) ))) == number_literal) )) (compound_statement "{\n      BVar14 = BVar14 << iVar6;\n      uVar21 = uVar21 + iVar6;\n    }" { (expression_statement "BVar14 = BVar14 << iVar6;" (assignment_expression "BVar14 = BVar14 << iVar6" identifier = (binary_expression "BVar14 << iVar6" identifier << identifier)) ;) (expression_statement "uVar21 = uVar21 + iVar6;" (assignment_expression "uVar21 = uVar21 + iVar6" identifier = (binary_expression "uVar21 + iVar6" identifier + identifier)) ;) })) (expression_statement "iVar19 = iVar19 + -1;" (assignment_expression "iVar19 = iVar19 + -1" identifier = (binary_expression "iVar19 + -1" identifier + number_literal)) ;) (expression_statement "iVar6 = iVar6 >> 1;" (assignment_expression "iVar6 = iVar6 >> 1" identifier = (binary_expression "iVar6 >> 1" identifier >> number_literal)) ;) }) while (parenthesized_expression "(iVar19 != 0)" ( (binary_expression "iVar19 != 0" identifier != number_literal) )) ;) (if_statement "if ((uVar21 == 0) || (BVar17 = BVar17 << (uVar21 & 0x1f), (int)BVar20 < 2)) {\n    local_44 = reciprocal_word(BVar17);\n    if (bVar1) goto LAB_00058c18;\nLAB_00058d34:\n    pBVar13 = newbn(*mod);\n    if (0 < (int)BVar20) goto LAB_00058d50;\n  }\n  else {\n    local_44 = reciprocal_word(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17);\n    if (bVar1) {\nLAB_00058c18:\n      pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar22 = iVar22 + 1;\n        uVar23 = 0x1f;\n      } while (iVar22 < (int)*exp);\n      goto LAB_00058d34;\n    }\n    pBVar13 = newbn(*mod);\nLAB_00058d50:\n    iVar4 = 0;\n    pBVar15 = puVar7 + BVar20;\n    do {\n      iVar6 = *pBVar13 - iVar4;\n      iVar4 = iVar4 + 1;\n      pBVar13[iVar6] = *pBVar15;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar4 < (int)BVar20);\n  }" if (parenthesized_expression "((uVar21 == 0) || (BVar17 = BVar17 << (uVar21 & 0x1f), (int)BVar20 < 2))" ( (binary_expression "(uVar21 == 0) || (BVar17 = BVar17 << (uVar21 & 0x1f), (int)BVar20 < 2)" (parenthesized_expression "(uVar21 == 0)" ( (binary_expression "uVar21 == 0" identifier == number_literal) )) || (parenthesized_expression "(BVar17 = BVar17 << (uVar21 & 0x1f), (int)BVar20 < 2)" ( (comma_expression "BVar17 = BVar17 << (uVar21 & 0x1f), (int)BVar20 < 2" (assignment_expression "BVar17 = BVar17 << (uVar21 & 0x1f)" identifier = (binary_expression "BVar17 << (uVar21 & 0x1f)" identifier << (parenthesized_expression "(uVar21 & 0x1f)" ( (binary_expression "uVar21 & 0x1f" identifier & number_literal) )))) , (binary_expression "(int)BVar20 < 2" (cast_expression "(int)BVar20" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal)) ))) )) (compound_statement "{\n    local_44 = reciprocal_word(BVar17);\n    if (bVar1) goto LAB_00058c18;\nLAB_00058d34:\n    pBVar13 = newbn(*mod);\n    if (0 < (int)BVar20) goto LAB_00058d50;\n  }" { (expression_statement "local_44 = reciprocal_word(BVar17);" (assignment_expression "local_44 = reciprocal_word(BVar17)" identifier = (call_expression "reciprocal_word(BVar17)" identifier (argument_list "(BVar17)" ( identifier )))) ;) (if_statement "if (bVar1) goto LAB_00058c18;" if (parenthesized_expression "(bVar1)" ( identifier )) (goto_statement "goto LAB_00058c18;" goto statement_identifier ;)) (labeled_statement "LAB_00058d34:\n    pBVar13 = newbn(*mod);" statement_identifier : (expression_statement "pBVar13 = newbn(*mod);" (assignment_expression "pBVar13 = newbn(*mod)" identifier = (call_expression "newbn(*mod)" identifier (argument_list "(*mod)" ( (pointer_expression "*mod" * identifier) )))) ;)) (if_statement "if (0 < (int)BVar20) goto LAB_00058d50;" if (parenthesized_expression "(0 < (int)BVar20)" ( (binary_expression "0 < (int)BVar20" number_literal < (cast_expression "(int)BVar20" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_00058d50;" goto statement_identifier ;)) }) (else_clause "else {\n    local_44 = reciprocal_word(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17);\n    if (bVar1) {\nLAB_00058c18:\n      pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar22 = iVar22 + 1;\n        uVar23 = 0x1f;\n      } while (iVar22 < (int)*exp);\n      goto LAB_00058d34;\n    }\n    pBVar13 = newbn(*mod);\nLAB_00058d50:\n    iVar4 = 0;\n    pBVar15 = puVar7 + BVar20;\n    do {\n      iVar6 = *pBVar13 - iVar4;\n      iVar4 = iVar4 + 1;\n      pBVar13[iVar6] = *pBVar15;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar4 < (int)BVar20);\n  }" else (compound_statement "{\n    local_44 = reciprocal_word(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17);\n    if (bVar1) {\nLAB_00058c18:\n      pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar22 = iVar22 + 1;\n        uVar23 = 0x1f;\n      } while (iVar22 < (int)*exp);\n      goto LAB_00058d34;\n    }\n    pBVar13 = newbn(*mod);\nLAB_00058d50:\n    iVar4 = 0;\n    pBVar15 = puVar7 + BVar20;\n    do {\n      iVar6 = *pBVar13 - iVar4;\n      iVar4 = iVar4 + 1;\n      pBVar13[iVar6] = *pBVar15;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar4 < (int)BVar20);\n  }" { (expression_statement "local_44 = reciprocal_word(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17);" (assignment_expression "local_44 = reciprocal_word(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17)" identifier = (call_expression "reciprocal_word(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17)" identifier (argument_list "(pBVar3[1] >> (-uVar21 & 0x1f) | BVar17)" ( (binary_expression "pBVar3[1] >> (-uVar21 & 0x1f) | BVar17" (binary_expression "pBVar3[1] >> (-uVar21 & 0x1f)" (subscript_expression "pBVar3[1]" identifier [ number_literal ]) >> (parenthesized_expression "(-uVar21 & 0x1f)" ( (binary_expression "-uVar21 & 0x1f" (unary_expression "-uVar21" - identifier) & number_literal) ))) | identifier) )))) ;) (if_statement "if (bVar1) {\nLAB_00058c18:\n      pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar22 = iVar22 + 1;\n        uVar23 = 0x1f;\n      } while (iVar22 < (int)*exp);\n      goto LAB_00058d34;\n    }" if (parenthesized_expression "(bVar1)" ( identifier )) (compound_statement "{\nLAB_00058c18:\n      pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar22 = iVar22 + 1;\n        uVar23 = 0x1f;\n      } while (iVar22 < (int)*exp);\n      goto LAB_00058d34;\n    }" { (labeled_statement "LAB_00058c18:\n      pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);" statement_identifier : (expression_statement "pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0);" (assignment_expression "pcVar11 = (code *)(PTR_LAB_000b068c + 0x60b0)" identifier = (cast_expression "(code *)(PTR_LAB_000b068c + 0x60b0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b068c + 0x60b0)" ( (binary_expression "PTR_LAB_000b068c + 0x60b0" identifier + number_literal) )))) ;)) (expression_statement "pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978);" (assignment_expression "pcVar12 = (code *)(PTR_LAB_000b068c + 0x5978)" identifier = (cast_expression "(code *)(PTR_LAB_000b068c + 0x5978)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b068c + 0x5978)" ( (binary_expression "PTR_LAB_000b068c + 0x5978" identifier + number_literal) )))) ;) (do_statement "do {\n        do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar22 = iVar22 + 1;\n        uVar23 = 0x1f;\n      } while (iVar22 < (int)*exp);" do (compound_statement "{\n        do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar22 = iVar22 + 1;\n        uVar23 = 0x1f;\n      }" { (do_statement "do {\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);" do (compound_statement "{\n          (*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);\n          (*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n          puVar9 = puVar8;\n          if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }\n          puVar8 = puVar7;\n          puVar7 = puVar9;\n          uVar23 = uVar23 - 1;\n        }" { (expression_statement "(*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10);" (call_expression "(*pcVar11)(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10)" (parenthesized_expression "(*pcVar11)" ( (pointer_expression "*pcVar11" * identifier) )) (argument_list "(puVar7 + BVar20,puVar7 + BVar20,puVar8,BVar20,uVar10)" ( (binary_expression "puVar7 + BVar20" identifier + identifier) , (binary_expression "puVar7 + BVar20" identifier + identifier) , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21);" (call_expression "(*pcVar12)(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(puVar8,iVar4,pBVar3,BVar20,0,local_44,uVar21)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" identifier = identifier) ;) (if_statement "if ((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0) {\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }" if (parenthesized_expression "((1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0)" ( (binary_expression "(1 << (uVar23 & 0x1f) & exp[*exp - iVar22]) != 0" (parenthesized_expression "(1 << (uVar23 & 0x1f) & exp[*exp - iVar22])" ( (binary_expression "1 << (uVar23 & 0x1f) & exp[*exp - iVar22]" (binary_expression "1 << (uVar23 & 0x1f)" number_literal << (parenthesized_expression "(uVar23 & 0x1f)" ( (binary_expression "uVar23 & 0x1f" identifier & number_literal) ))) & (subscript_expression "exp[*exp - iVar22]" identifier [ (binary_expression "*exp - iVar22" (pointer_expression "*exp" * identifier) - identifier) ])) )) != number_literal) )) (compound_statement "{\n            (*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);\n            (*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);\n            puVar9 = puVar7;\n            puVar7 = puVar8;\n          }" { (expression_statement "(*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10);" (call_expression "(*pcVar11)(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10)" (parenthesized_expression "(*pcVar11)" ( (pointer_expression "*pcVar11" * identifier) )) (argument_list "(puVar8 + BVar20,puVar5,puVar7,BVar20,uVar10)" ( (binary_expression "puVar8 + BVar20" identifier + identifier) , identifier , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21);" (call_expression "(*pcVar12)(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(puVar7,iVar4,pBVar3,BVar20,0,local_44,uVar21)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar9 = puVar7;" (assignment_expression "puVar9 = puVar7" identifier = identifier) ;) (expression_statement "puVar7 = puVar8;" (assignment_expression "puVar7 = puVar8" identifier = identifier) ;) })) (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" identifier = identifier) ;) (expression_statement "puVar7 = puVar9;" (assignment_expression "puVar7 = puVar9" identifier = identifier) ;) (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" identifier = (binary_expression "uVar23 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(uVar23 != 0xffffffff)" ( (binary_expression "uVar23 != 0xffffffff" identifier != number_literal) )) ;) (expression_statement "iVar22 = iVar22 + 1;" (assignment_expression "iVar22 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;) (expression_statement "uVar23 = 0x1f;" (assignment_expression "uVar23 = 0x1f" identifier = number_literal) ;) }) while (parenthesized_expression "(iVar22 < (int)*exp)" ( (binary_expression "iVar22 < (int)*exp" identifier < (cast_expression "(int)*exp" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*exp" * identifier))) )) ;) (goto_statement "goto LAB_00058d34;" goto statement_identifier ;) })) (expression_statement "pBVar13 = newbn(*mod);" (assignment_expression "pBVar13 = newbn(*mod)" identifier = (call_expression "newbn(*mod)" identifier (argument_list "(*mod)" ( (pointer_expression "*mod" * identifier) )))) ;) (labeled_statement "LAB_00058d50:\n    iVar4 = 0;" statement_identifier : (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;)) (expression_statement "pBVar15 = puVar7 + BVar20;" (assignment_expression "pBVar15 = puVar7 + BVar20" identifier = (binary_expression "puVar7 + BVar20" identifier + identifier)) ;) (do_statement "do {\n      iVar6 = *pBVar13 - iVar4;\n      iVar4 = iVar4 + 1;\n      pBVar13[iVar6] = *pBVar15;\n      pBVar15 = pBVar15 + 1;\n    } while (iVar4 < (int)BVar20);" do (compound_statement "{\n      iVar6 = *pBVar13 - iVar4;\n      iVar4 = iVar4 + 1;\n      pBVar13[iVar6] = *pBVar15;\n      pBVar15 = pBVar15 + 1;\n    }" { (expression_statement "iVar6 = *pBVar13 - iVar4;" (assignment_expression "iVar6 = *pBVar13 - iVar4" identifier = (binary_expression "*pBVar13 - iVar4" (pointer_expression "*pBVar13" * identifier) - identifier)) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "pBVar13[iVar6] = *pBVar15;" (assignment_expression "pBVar13[iVar6] = *pBVar15" (subscript_expression "pBVar13[iVar6]" identifier [ identifier ]) = (pointer_expression "*pBVar15" * identifier)) ;) (expression_statement "pBVar15 = pBVar15 + 1;" (assignment_expression "pBVar15 = pBVar15 + 1" identifier = (binary_expression "pBVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar4 < (int)BVar20)" ( (binary_expression "iVar4 < (int)BVar20" identifier < (cast_expression "(int)BVar20" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) }))) (expression_statement "BVar14 = *pBVar13;" (assignment_expression "BVar14 = *pBVar13" identifier = (pointer_expression "*pBVar13" * identifier)) ;) (if_statement "if (1 < BVar14) {\n    pBVar18 = pBVar13 + BVar14;\n    BVar17 = *pBVar18;\n    while (BVar17 == 0) {\n      BVar14 = BVar14 - 1;\n      *pBVar13 = BVar14;\n      if (BVar14 == 1) break;\n      pBVar15 = pBVar18 + -1;\n      pBVar18 = pBVar18 + -1;\n      BVar17 = *pBVar15;\n    }\n  }" if (parenthesized_expression "(1 < BVar14)" ( (binary_expression "1 < BVar14" number_literal < identifier) )) (compound_statement "{\n    pBVar18 = pBVar13 + BVar14;\n    BVar17 = *pBVar18;\n    while (BVar17 == 0) {\n      BVar14 = BVar14 - 1;\n      *pBVar13 = BVar14;\n      if (BVar14 == 1) break;\n      pBVar15 = pBVar18 + -1;\n      pBVar18 = pBVar18 + -1;\n      BVar17 = *pBVar15;\n    }\n  }" { (expression_statement "pBVar18 = pBVar13 + BVar14;" (assignment_expression "pBVar18 = pBVar13 + BVar14" identifier = (binary_expression "pBVar13 + BVar14" identifier + identifier)) ;) (expression_statement "BVar17 = *pBVar18;" (assignment_expression "BVar17 = *pBVar18" identifier = (pointer_expression "*pBVar18" * identifier)) ;) (while_statement "while (BVar17 == 0) {\n      BVar14 = BVar14 - 1;\n      *pBVar13 = BVar14;\n      if (BVar14 == 1) break;\n      pBVar15 = pBVar18 + -1;\n      pBVar18 = pBVar18 + -1;\n      BVar17 = *pBVar15;\n    }" while (parenthesized_expression "(BVar17 == 0)" ( (binary_expression "BVar17 == 0" identifier == number_literal) )) (compound_statement "{\n      BVar14 = BVar14 - 1;\n      *pBVar13 = BVar14;\n      if (BVar14 == 1) break;\n      pBVar15 = pBVar18 + -1;\n      pBVar18 = pBVar18 + -1;\n      BVar17 = *pBVar15;\n    }" { (expression_statement "BVar14 = BVar14 - 1;" (assignment_expression "BVar14 = BVar14 - 1" identifier = (binary_expression "BVar14 - 1" identifier - number_literal)) ;) (expression_statement "*pBVar13 = BVar14;" (assignment_expression "*pBVar13 = BVar14" (pointer_expression "*pBVar13" * identifier) = identifier) ;) (if_statement "if (BVar14 == 1) break;" if (parenthesized_expression "(BVar14 == 1)" ( (binary_expression "BVar14 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "pBVar15 = pBVar18 + -1;" (assignment_expression "pBVar15 = pBVar18 + -1" identifier = (binary_expression "pBVar18 + -1" identifier + number_literal)) ;) (expression_statement "pBVar18 = pBVar18 + -1;" (assignment_expression "pBVar18 = pBVar18 + -1" identifier = (binary_expression "pBVar18 + -1" identifier + number_literal)) ;) (expression_statement "BVar17 = *pBVar15;" (assignment_expression "BVar17 = *pBVar15" identifier = (pointer_expression "*pBVar15" * identifier)) ;) })) })) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar7,BVar20 * 8);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar7,BVar20 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar7,BVar20 * 8)" ( identifier , (binary_expression "BVar20 * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar7);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar7)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar7)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(uVar10,local_2c);" (call_expression "(*(code *)PTR_smemclr_000b0240)(uVar10,local_2c)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar10,local_2c)" ( identifier , identifier ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(uVar10);" (call_expression "(*(code *)PTR_safefree_000b01b0)(uVar10)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar10)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar8,BVar20 * 8);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar8,BVar20 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar8,BVar20 * 8)" ( identifier , (binary_expression "BVar20 * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar8);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar8)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar8)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(pBVar3,BVar20 * 4);" (call_expression "(*(code *)PTR_smemclr_000b0240)(pBVar3,BVar20 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pBVar3,BVar20 * 4)" ( identifier , (binary_expression "BVar20 * 4" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(pBVar3);" (call_expression "(*(code *)PTR_safefree_000b01b0)(pBVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pBVar3)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar5,BVar20 * 4);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar5,BVar20 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar5,BVar20 * 4)" ( identifier , (binary_expression "BVar20 * 4" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar5);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar5)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar5)" ( identifier ))) ;) comment (expression_statement "freebn(pBVar2);" (call_expression "freebn(pBVar2)" identifier (argument_list "(pBVar2)" ( identifier ))) ;) (labeled_statement "LAB_00058f24:\n  iVar22 = iVar22 + 1;" statement_identifier : (expression_statement "iVar22 = iVar22 + 1;" (assignment_expression "iVar22 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;)) (expression_statement "puVar16 = puVar16 + -1;" (assignment_expression "puVar16 = puVar16 + -1" identifier = (binary_expression "puVar16 + -1" identifier + number_literal)) ;) (goto_statement "goto LAB_00058b7c;" goto statement_identifier ;) })))
(translation_unit "uint * modpow_simple(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  bool bVar2;\n  int *piVar3;\n  uint *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 *puVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint uVar17;\n  uint *puVar18;\n  int iVar19;\n  uint uVar20;\n  int iVar21;\n  uint uVar22;\n  uint uVar23;\n  undefined4 local_44;\n  int local_2c;\n  \n  if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }\n  piVar3 = (int *)bigmod(param_1,param_3);\n  iVar21 = *param_3;\n  puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  iVar15 = *piVar3;\n  iVar5 = iVar21 - iVar15;\n  if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }\n  if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }\n  iVar15 = iVar21 << 1;\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }\n  iVar7 = 0;\n  uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);\n  puVar14 = (uint *)(param_2 + *param_2);\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar2 = iVar7 < *param_2;\n  while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  uVar17 = *puVar4;\n  iVar19 = 5;\n  uVar22 = 0;\n  iVar5 = 0x10;\n  uVar20 = uVar17;\n  do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }\n  uVar23 = *puVar14;\n  if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar11);\n  (*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar9);\n  (*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar4);\n  (*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar6);\n  freebn(piVar3);\n  return puVar14;\nLAB_00058f24:\n  iVar7 = iVar7 + 1;\n  puVar14 = puVar14 + -1;\n  goto LAB_00058b7c;\n}\n\n" (function_definition "uint * modpow_simple(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  bool bVar2;\n  int *piVar3;\n  uint *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 *puVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint uVar17;\n  uint *puVar18;\n  int iVar19;\n  uint uVar20;\n  int iVar21;\n  uint uVar22;\n  uint uVar23;\n  undefined4 local_44;\n  int local_2c;\n  \n  if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }\n  piVar3 = (int *)bigmod(param_1,param_3);\n  iVar21 = *param_3;\n  puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  iVar15 = *piVar3;\n  iVar5 = iVar21 - iVar15;\n  if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }\n  if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }\n  iVar15 = iVar21 << 1;\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }\n  iVar7 = 0;\n  uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);\n  puVar14 = (uint *)(param_2 + *param_2);\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar2 = iVar7 < *param_2;\n  while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  uVar17 = *puVar4;\n  iVar19 = 5;\n  uVar22 = 0;\n  iVar5 = 0x10;\n  uVar20 = uVar17;\n  do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }\n  uVar23 = *puVar14;\n  if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar11);\n  (*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar9);\n  (*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar4);\n  (*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar6);\n  freebn(piVar3);\n  return puVar14;\nLAB_00058f24:\n  iVar7 = iVar7 + 1;\n  puVar14 = puVar14 + -1;\n  goto LAB_00058b7c;\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  bool bVar2;\n  int *piVar3;\n  uint *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 *puVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint uVar17;\n  uint *puVar18;\n  int iVar19;\n  uint uVar20;\n  int iVar21;\n  uint uVar22;\n  uint uVar23;\n  undefined4 local_44;\n  int local_2c;\n  \n  if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }\n  piVar3 = (int *)bigmod(param_1,param_3);\n  iVar21 = *param_3;\n  puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  iVar15 = *piVar3;\n  iVar5 = iVar21 - iVar15;\n  if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }\n  if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }\n  iVar15 = iVar21 << 1;\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }\n  iVar7 = 0;\n  uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);\n  puVar14 = (uint *)(param_2 + *param_2);\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar2 = iVar7 < *param_2;\n  while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  uVar17 = *puVar4;\n  iVar19 = 5;\n  uVar22 = 0;\n  iVar5 = 0x10;\n  uVar20 = uVar17;\n  do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }\n  uVar23 = *puVar14;\n  if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar11);\n  (*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar9);\n  (*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar4);\n  (*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar6);\n  freebn(piVar3);\n  return puVar14;\nLAB_00058f24:\n  iVar7 = iVar7 + 1;\n  puVar14 = puVar14 + -1;\n  goto LAB_00058b7c;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined4 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined4 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "undefined4 *puVar10;" type_identifier (pointer_declarator "*puVar10" * 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 uVar17;" type_identifier identifier ;) (declaration "uint *puVar18;" type_identifier (pointer_declarator "*puVar18" * identifier) ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "uint uVar20;" type_identifier identifier ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "uint uVar22;" type_identifier identifier ;) (declaration "uint uVar23;" type_identifier identifier ;) (declaration "undefined4 local_44;" type_identifier identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (if_statement "if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\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    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }" { (expression_statement "puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);" (assignment_expression "puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" identifier = (cast_expression "(uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" (parenthesized_expression "(*(code *)PTR___assert_fail_000b0ac0)" ( (pointer_expression "*(code *)PTR___assert_fail_000b0ac0" * (cast_expression "(code *)PTR___assert_fail_000b0ac0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" ( (binary_expression "PTR_DAT_000b01d0 + -0x6e04" identifier + number_literal) , (binary_expression "PTR_DAT_000b01d0 + -0x6e40" identifier + number_literal) , number_literal , (binary_expression "PTR_DAT_000b01d0 + -0x6c2c" identifier + number_literal) ))))) ;) (return_statement "return puVar4;" return identifier ;) })) (expression_statement "piVar3 = (int *)bigmod(param_1,param_3);" (assignment_expression "piVar3 = (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 "iVar21 = *param_3;" (assignment_expression "iVar21 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);" (assignment_expression "puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" identifier = (cast_expression "(uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar21,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }" if (parenthesized_expression "(0 < iVar21)" ( (binary_expression "0 < iVar21" number_literal < identifier) )) (compound_statement "{\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }" { (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (expression_statement "puVar14 = puVar4;" (assignment_expression "puVar14 = puVar4" identifier = identifier) ;) (do_statement "do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);" do (compound_statement "{\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    }" { (expression_statement "iVar5 = *param_3 - iVar15;" (assignment_expression "iVar5 = *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 "*puVar14 = param_3[iVar5];" (assignment_expression "*puVar14 = param_3[iVar5]" (pointer_expression "*puVar14" * identifier) = (subscript_expression "param_3[iVar5]" identifier [ identifier ])) ;) (expression_statement "puVar14 = puVar14 + 1;" (assignment_expression "puVar14 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 != iVar15)" ( (binary_expression "iVar21 != iVar15" identifier != identifier) )) ;) })) (expression_statement "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);" (assignment_expression "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar21,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar15 = *piVar3;" (assignment_expression "iVar15 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "iVar5 = iVar21 - iVar15;" (assignment_expression "iVar5 = iVar21 - iVar15" identifier = (binary_expression "iVar21 - iVar15" identifier - identifier)) ;) (if_statement "if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }" if (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) (compound_statement "{\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }" { (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" identifier = identifier) ;) (do_statement "do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);" 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 "(puVar6 + iVar5 != puVar8)" ( (binary_expression "puVar6 + iVar5 != puVar8" (binary_expression "puVar6 + iVar5" identifier + identifier) != identifier) )) ;) (expression_statement "iVar15 = *piVar3;" (assignment_expression "iVar15 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) })) (if_statement "if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }" if (parenthesized_expression "(0 < iVar15)" ( (binary_expression "0 < iVar15" number_literal < identifier) )) (compound_statement "{\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "piVar16 = puVar6 + iVar5;" (assignment_expression "piVar16 = puVar6 + iVar5" identifier = (binary_expression "puVar6 + iVar5" identifier + identifier)) ;) (do_statement "do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);" do (compound_statement "{\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    }" { (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "*piVar16 = piVar3[iVar15];" (assignment_expression "*piVar16 = piVar3[iVar15]" (pointer_expression "*piVar16" * identifier) = (subscript_expression "piVar3[iVar15]" identifier [ identifier ])) ;) (expression_statement "iVar15 = *piVar3 - iVar7;" (assignment_expression "iVar15 = *piVar3 - iVar7" identifier = (binary_expression "*piVar3 - iVar7" (pointer_expression "*piVar3" * identifier) - identifier)) ;) (expression_statement "piVar16 = piVar16 + 1;" (assignment_expression "piVar16 = piVar16 + 1" identifier = (binary_expression "piVar16 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 < *piVar3)" ( (binary_expression "iVar7 < *piVar3" identifier < (pointer_expression "*piVar3" * identifier)) )) ;) })) (expression_statement "iVar15 = iVar21 << 1;" (assignment_expression "iVar15 = iVar21 << 1" identifier = (binary_expression "iVar21 << 1" identifier << number_literal)) ;) (expression_statement "puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);" (assignment_expression "puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar15,4)" ( identifier , number_literal ))))) ;) (expression_statement "puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);" (assignment_expression "puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar15,4)" ( identifier , number_literal ))))) ;) (if_statement "if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" if (parenthesized_expression "(iVar15 < 1)" ( (binary_expression "iVar15 < 1" identifier < number_literal) )) (compound_statement "{\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" { (expression_statement "puVar8[iVar21 * 2 + -1] = 1;" (assignment_expression "puVar8[iVar21 * 2 + -1] = 1" (subscript_expression "puVar8[iVar21 * 2 + -1]" identifier [ (binary_expression "iVar21 * 2 + -1" (binary_expression "iVar21 * 2" identifier * number_literal) + number_literal) ]) = number_literal) ;) }) (else_clause "else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" else (compound_statement "{\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" { (expression_statement "puVar10 = puVar8;" (assignment_expression "puVar10 = puVar8" identifier = identifier) ;) (do_statement "do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);" do (compound_statement "{\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    }" { (expression_statement "*puVar10 = 0;" (assignment_expression "*puVar10 = 0" (pointer_expression "*puVar10" * identifier) = number_literal) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar8 + iVar21 * 2 != puVar10)" ( (binary_expression "puVar8 + iVar21 * 2 != puVar10" (binary_expression "puVar8 + iVar21 * 2" identifier + (binary_expression "iVar21 * 2" identifier * number_literal)) != identifier) )) ;) (expression_statement "puVar8[iVar21 * 2 + -1] = 1;" (assignment_expression "puVar8[iVar21 * 2 + -1] = 1" (subscript_expression "puVar8[iVar21 * 2 + -1]" identifier [ (binary_expression "iVar21 * 2 + -1" (binary_expression "iVar21 * 2" identifier * number_literal) + number_literal) ]) = number_literal) ;) }))) (if_statement "if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }" if (parenthesized_expression "(iVar21 < 0x33)" ( (binary_expression "iVar21 < 0x33" identifier < number_literal) )) (compound_statement "{\n    local_2c = 0;\n    iVar5 = 0;\n  }" { (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }" else (compound_statement "{\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (expression_statement "iVar7 = iVar21;" (assignment_expression "iVar7 = iVar21" identifier = identifier) ;) (do_statement "do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);" do (compound_statement "{\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    }" { (expression_statement "iVar7 = (iVar7 - (iVar7 >> 1)) + 1;" (assignment_expression "iVar7 = (iVar7 - (iVar7 >> 1)) + 1" identifier = (binary_expression "(iVar7 - (iVar7 >> 1)) + 1" (parenthesized_expression "(iVar7 - (iVar7 >> 1))" ( (binary_expression "iVar7 - (iVar7 >> 1)" identifier - (parenthesized_expression "(iVar7 >> 1)" ( (binary_expression "iVar7 >> 1" identifier >> number_literal) ))) )) + number_literal)) ;) (expression_statement "iVar5 = iVar5 + iVar7 * 4;" (assignment_expression "iVar5 = iVar5 + iVar7 * 4" identifier = (binary_expression "iVar5 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal))) ;) }) while (parenthesized_expression "(0x32 < iVar7)" ( (binary_expression "0x32 < iVar7" number_literal < identifier) )) ;) (expression_statement "local_2c = iVar5 * 4;" (assignment_expression "local_2c = iVar5 * 4" identifier = (binary_expression "iVar5 * 4" identifier * number_literal)) ;) }))) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);" (assignment_expression "uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4)" identifier = (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar5,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b01e8" * (cast_expression "(code *)PTR_safemalloc_000b01e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar5,4)" ( identifier , number_literal )))) ;) (expression_statement "puVar14 = (uint *)(param_2 + *param_2);" (assignment_expression "puVar14 = (uint *)(param_2 + *param_2)" identifier = (cast_expression "(uint *)(param_2 + *param_2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + *param_2)" ( (binary_expression "param_2 + *param_2" identifier + (pointer_expression "*param_2" * identifier)) )))) ;) (labeled_statement "LAB_00058b7c:\n  uVar23 = 0x1f;" statement_identifier : (expression_statement "uVar23 = 0x1f;" (assignment_expression "uVar23 = 0x1f" identifier = number_literal) ;)) (expression_statement "bVar2 = iVar7 < *param_2;" (assignment_expression "bVar2 = iVar7 < *param_2" identifier = (binary_expression "iVar7 < *param_2" identifier < (pointer_expression "*param_2" * identifier))) ;) (while_statement "while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }" while (parenthesized_expression "((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0)))" ( (parenthesized_expression "(bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))" ( (binary_expression "bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0)" identifier && (parenthesized_expression "((1 << (uVar23 & 0x1f) & *puVar14) == 0)" ( (binary_expression "(1 << (uVar23 & 0x1f) & *puVar14) == 0" (parenthesized_expression "(1 << (uVar23 & 0x1f) & *puVar14)" ( (binary_expression "1 << (uVar23 & 0x1f) & *puVar14" (binary_expression "1 << (uVar23 & 0x1f)" number_literal << (parenthesized_expression "(uVar23 & 0x1f)" ( (binary_expression "uVar23 & 0x1f" identifier & number_literal) ))) & (pointer_expression "*puVar14" * identifier)) )) == number_literal) ))) )) )) (compound_statement "{\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }" { (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" identifier = (binary_expression "uVar23 - 1" identifier - number_literal)) ;) (if_statement "if (uVar23 == 0xffffffff) goto LAB_00058f24;" if (parenthesized_expression "(uVar23 == 0xffffffff)" ( (binary_expression "uVar23 == 0xffffffff" identifier == number_literal) )) (goto_statement "goto LAB_00058f24;" goto statement_identifier ;)) })) (expression_statement "uVar17 = *puVar4;" (assignment_expression "uVar17 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "iVar19 = 5;" (assignment_expression "iVar19 = 5" identifier = number_literal) ;) (expression_statement "uVar22 = 0;" (assignment_expression "uVar22 = 0" identifier = number_literal) ;) (expression_statement "iVar5 = 0x10;" (assignment_expression "iVar5 = 0x10" identifier = number_literal) ;) (expression_statement "uVar20 = uVar17;" (assignment_expression "uVar20 = uVar17" identifier = identifier) ;) (do_statement "do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);" do (compound_statement "{\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  }" { (if_statement "if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }" if (parenthesized_expression "(uVar20 >> (0x20U - iVar5 & 0x1f) == 0)" ( (binary_expression "uVar20 >> (0x20U - iVar5 & 0x1f) == 0" (binary_expression "uVar20 >> (0x20U - iVar5 & 0x1f)" identifier >> (parenthesized_expression "(0x20U - iVar5 & 0x1f)" ( (binary_expression "0x20U - iVar5 & 0x1f" (binary_expression "0x20U - iVar5" number_literal - identifier) & number_literal) ))) == number_literal) )) (compound_statement "{\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }" { (expression_statement "uVar20 = uVar20 << iVar5;" (assignment_expression "uVar20 = uVar20 << iVar5" identifier = (binary_expression "uVar20 << iVar5" identifier << identifier)) ;) (expression_statement "uVar22 = uVar22 + iVar5;" (assignment_expression "uVar22 = uVar22 + iVar5" identifier = (binary_expression "uVar22 + iVar5" identifier + identifier)) ;) })) (expression_statement "iVar19 = iVar19 + -1;" (assignment_expression "iVar19 = iVar19 + -1" identifier = (binary_expression "iVar19 + -1" identifier + number_literal)) ;) (expression_statement "iVar5 = iVar5 >> 1;" (assignment_expression "iVar5 = iVar5 >> 1" identifier = (binary_expression "iVar5 >> 1" identifier >> number_literal)) ;) }) while (parenthesized_expression "(iVar19 != 0)" ( (binary_expression "iVar19 != 0" identifier != number_literal) )) ;) (if_statement "if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }" if (parenthesized_expression "((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2))" ( (binary_expression "(uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)" (parenthesized_expression "(uVar22 == 0)" ( (binary_expression "uVar22 == 0" identifier == number_literal) )) || (parenthesized_expression "(uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)" ( (comma_expression "uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2" (assignment_expression "uVar17 = uVar17 << (uVar22 & 0x1f)" identifier = (binary_expression "uVar17 << (uVar22 & 0x1f)" identifier << (parenthesized_expression "(uVar22 & 0x1f)" ( (binary_expression "uVar22 & 0x1f" identifier & number_literal) )))) , (binary_expression "iVar21 < 2" identifier < number_literal)) ))) )) (compound_statement "{\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }" { (expression_statement "local_44 = FUN_000556d0(uVar17);" (assignment_expression "local_44 = FUN_000556d0(uVar17)" identifier = (call_expression "FUN_000556d0(uVar17)" identifier (argument_list "(uVar17)" ( identifier )))) ;) (if_statement "if (bVar2) goto LAB_00058c18;" if (parenthesized_expression "(bVar2)" ( identifier )) (goto_statement "goto LAB_00058c18;" goto statement_identifier ;)) (labeled_statement "LAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);" statement_identifier : (expression_statement "puVar14 = (uint *)FUN_00056014(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00056014(*param_3)" identifier = (cast_expression "(uint *)FUN_00056014(*param_3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00056014(*param_3)" identifier (argument_list "(*param_3)" ( (pointer_expression "*param_3" * identifier) ))))) ;)) (if_statement "if (0 < iVar21) goto LAB_00058d50;" if (parenthesized_expression "(0 < iVar21)" ( (binary_expression "0 < iVar21" number_literal < identifier) )) (goto_statement "goto LAB_00058d50;" goto statement_identifier ;)) }) (else_clause "else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }" else (compound_statement "{\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }" { (expression_statement "local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);" (assignment_expression "local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17)" identifier = (call_expression "FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17)" identifier (argument_list "(puVar4[1] >> (-uVar22 & 0x1f) | uVar17)" ( (binary_expression "puVar4[1] >> (-uVar22 & 0x1f) | uVar17" (binary_expression "puVar4[1] >> (-uVar22 & 0x1f)" (subscript_expression "puVar4[1]" identifier [ number_literal ]) >> (parenthesized_expression "(-uVar22 & 0x1f)" ( (binary_expression "-uVar22 & 0x1f" (unary_expression "-uVar22" - identifier) & number_literal) ))) | identifier) )))) ;) (if_statement "if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }" { (labeled_statement "LAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);" statement_identifier : (expression_statement "pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);" (assignment_expression "pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0)" identifier = (cast_expression "(code *)(PTR_LAB_000b068c + 0x60b0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b068c + 0x60b0)" ( (binary_expression "PTR_LAB_000b068c + 0x60b0" identifier + number_literal) )))) ;)) (expression_statement "pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);" (assignment_expression "pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978)" identifier = (cast_expression "(code *)(PTR_LAB_000b068c + 0x5978)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b068c + 0x5978)" ( (binary_expression "PTR_LAB_000b068c + 0x5978" identifier + number_literal) )))) ;) (do_statement "do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);" do (compound_statement "{\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      }" { (do_statement "do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);" do (compound_statement "{\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        }" { (expression_statement "(*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);" (call_expression "(*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11)" ( (binary_expression "puVar8 + iVar21" identifier + identifier) , (binary_expression "puVar8 + iVar21" identifier + identifier) , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);" (call_expression "(*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar10 = puVar9;" (assignment_expression "puVar10 = puVar9" identifier = identifier) ;) (if_statement "if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }" if (parenthesized_expression "((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0)" ( (binary_expression "(1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0" (parenthesized_expression "(1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7])" ( (binary_expression "1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]" (binary_expression "1 << (uVar23 & 0x1f)" number_literal << (parenthesized_expression "(uVar23 & 0x1f)" ( (binary_expression "uVar23 & 0x1f" identifier & number_literal) ))) & (subscript_expression "param_2[*param_2 - iVar7]" identifier [ (binary_expression "*param_2 - iVar7" (pointer_expression "*param_2" * identifier) - identifier) ])) )) != number_literal) )) (compound_statement "{\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }" { (expression_statement "(*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);" (call_expression "(*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11)" ( (binary_expression "puVar9 + iVar21" identifier + identifier) , identifier , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);" (call_expression "(*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar10 = puVar8;" (assignment_expression "puVar10 = puVar8" identifier = identifier) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) })) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" identifier = identifier) ;) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" identifier = identifier) ;) (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" identifier = (binary_expression "uVar23 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(uVar23 != 0xffffffff)" ( (binary_expression "uVar23 != 0xffffffff" identifier != number_literal) )) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "uVar23 = 0x1f;" (assignment_expression "uVar23 = 0x1f" identifier = number_literal) ;) }) while (parenthesized_expression "(iVar7 < *param_2)" ( (binary_expression "iVar7 < *param_2" identifier < (pointer_expression "*param_2" * identifier)) )) ;) (goto_statement "goto LAB_00058d34;" goto statement_identifier ;) })) (expression_statement "puVar14 = (uint *)FUN_00056014(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00056014(*param_3)" identifier = (cast_expression "(uint *)FUN_00056014(*param_3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00056014(*param_3)" identifier (argument_list "(*param_3)" ( (pointer_expression "*param_3" * identifier) ))))) ;) (labeled_statement "LAB_00058d50:\n    iVar15 = 0;" statement_identifier : (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;)) (expression_statement "puVar18 = puVar8 + iVar21;" (assignment_expression "puVar18 = puVar8 + iVar21" identifier = (binary_expression "puVar8 + iVar21" identifier + identifier)) ;) (do_statement "do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);" do (compound_statement "{\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    }" { (expression_statement "iVar5 = *puVar14 - iVar15;" (assignment_expression "iVar5 = *puVar14 - iVar15" identifier = (binary_expression "*puVar14 - iVar15" (pointer_expression "*puVar14" * identifier) - identifier)) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "puVar14[iVar5] = *puVar18;" (assignment_expression "puVar14[iVar5] = *puVar18" (subscript_expression "puVar14[iVar5]" identifier [ identifier ]) = (pointer_expression "*puVar18" * identifier)) ;) (expression_statement "puVar18 = puVar18 + 1;" (assignment_expression "puVar18 = puVar18 + 1" identifier = (binary_expression "puVar18 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar15 < iVar21)" ( (binary_expression "iVar15 < iVar21" identifier < identifier) )) ;) }))) (expression_statement "uVar23 = *puVar14;" (assignment_expression "uVar23 = *puVar14" identifier = (pointer_expression "*puVar14" * identifier)) ;) (if_statement "if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }" if (parenthesized_expression "(1 < uVar23)" ( (binary_expression "1 < uVar23" number_literal < identifier) )) (compound_statement "{\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }" { (expression_statement "puVar18 = puVar14 + uVar23;" (assignment_expression "puVar18 = puVar14 + uVar23" identifier = (binary_expression "puVar14 + uVar23" identifier + identifier)) ;) (expression_statement "uVar20 = *puVar18;" (assignment_expression "uVar20 = *puVar18" identifier = (pointer_expression "*puVar18" * identifier)) ;) (while_statement "while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }" while (parenthesized_expression "(uVar20 == 0)" ( (binary_expression "uVar20 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }" { (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" identifier = (binary_expression "uVar23 - 1" identifier - number_literal)) ;) (expression_statement "*puVar14 = uVar23;" (assignment_expression "*puVar14 = uVar23" (pointer_expression "*puVar14" * identifier) = identifier) ;) (if_statement "if (uVar23 == 1) break;" if (parenthesized_expression "(uVar23 == 1)" ( (binary_expression "uVar23 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar1 = puVar18 + -1;" (assignment_expression "puVar1 = puVar18 + -1" identifier = (binary_expression "puVar18 + -1" identifier + number_literal)) ;) (expression_statement "puVar18 = puVar18 + -1;" (assignment_expression "puVar18 = puVar18 + -1" identifier = (binary_expression "puVar18 + -1" identifier + number_literal)) ;) (expression_statement "uVar20 = *puVar1;" (assignment_expression "uVar20 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) })) })) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar8,iVar21 * 8)" ( identifier , (binary_expression "iVar21 * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar8);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar8)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar8)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);" (call_expression "(*(code *)PTR_smemclr_000b0240)(uVar11,local_2c)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar11,local_2c)" ( identifier , identifier ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(uVar11);" (call_expression "(*(code *)PTR_safefree_000b01b0)(uVar11)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar11)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar9,iVar21 * 8)" ( identifier , (binary_expression "iVar21 * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar9);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar9)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar9)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4,iVar21 * 4)" ( identifier , (binary_expression "iVar21 * 4" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar4);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar4)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" ( (pointer_expression "*(code *)PTR_smemclr_000b0240" * (cast_expression "(code *)PTR_smemclr_000b0240" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar6,iVar21 * 4)" ( identifier , (binary_expression "iVar21 * 4" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar6);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar6)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" ( (pointer_expression "*(code *)PTR_safefree_000b01b0" * (cast_expression "(code *)PTR_safefree_000b01b0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar6)" ( identifier ))) ;) (expression_statement "freebn(piVar3);" (call_expression "freebn(piVar3)" identifier (argument_list "(piVar3)" ( identifier ))) ;) (return_statement "return puVar14;" return identifier ;) (labeled_statement "LAB_00058f24:\n  iVar7 = iVar7 + 1;" statement_identifier : (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;)) (expression_statement "puVar14 = puVar14 + -1;" (assignment_expression "puVar14 = puVar14 + -1" identifier = (binary_expression "puVar14 + -1" identifier + number_literal)) ;) (goto_statement "goto LAB_00058b7c;" 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 IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE 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 IDENT = (binary_expression (pointer_expression * IDENT) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ IDENT ])) ;) (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 = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - 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 (binary_expression IDENT + 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 = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * 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 IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) = LIT) ;) }) (else_clause else (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 (binary_expression IDENT + (binary_expression IDENT * LIT)) != IDENT) )) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) = LIT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - (parenthesized_expression ( (binary_expression IDENT >> LIT) ))) )) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) }) while (parenthesized_expression ( (binary_expression LIT < IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (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 = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * IDENT)) )))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < (pointer_expression * IDENT))) ;) (while_statement while (parenthesized_expression ( (parenthesized_expression ( (binary_expression IDENT && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) & (pointer_expression * IDENT)) )) == LIT) ))) )) )) (compound_statement { (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 = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) ))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT << IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_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 != LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) , (binary_expression IDENT < LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( IDENT )) (goto_statement goto statement_identifier ;)) (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) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) >> (parenthesized_expression ( (binary_expression (unary_expression - IDENT) & LIT) ))) | IDENT) )))) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (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 { (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) ;) (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 = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }) 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)) )) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression * IDENT) ))))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ 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 = (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 , IDENT ))) ;) (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)) ;)) (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  bool bVar2;\n  int *piVar3;\n  uint *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 *puVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint uVar17;\n  uint *puVar18;\n  int iVar19;\n  uint uVar20;\n  int iVar21;\n  uint uVar22;\n  uint uVar23;\n  undefined4 local_44;\n  int local_2c;\n  \n  if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }\n  piVar3 = (int *)bigmod(param_1,param_3);\n  iVar21 = *param_3;\n  puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  iVar15 = *piVar3;\n  iVar5 = iVar21 - iVar15;\n  if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }\n  if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }\n  iVar15 = iVar21 << 1;\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }\n  iVar7 = 0;\n  uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);\n  puVar14 = (uint *)(param_2 + *param_2);\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar2 = iVar7 < *param_2;\n  while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  uVar17 = *puVar4;\n  iVar19 = 5;\n  uVar22 = 0;\n  iVar5 = 0x10;\n  uVar20 = uVar17;\n  do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }\n  uVar23 = *puVar14;\n  if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar11);\n  (*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar9);\n  (*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar4);\n  (*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar6);\n  freebn(piVar3);\n  return puVar14;\nLAB_00058f24:\n  iVar7 = iVar7 + 1;\n  puVar14 = puVar14 + -1;\n  goto LAB_00058b7c;\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  bool bVar2;\n  int *piVar3;\n  uint *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 *puVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint uVar17;\n  uint *puVar18;\n  int iVar19;\n  uint uVar20;\n  int iVar21;\n  uint uVar22;\n  uint uVar23;\n  undefined4 local_44;\n  int local_2c;\n  \n  if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }\n  piVar3 = (int *)bigmod(param_1,param_3);\n  iVar21 = *param_3;\n  puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);\n  iVar15 = *piVar3;\n  iVar5 = iVar21 - iVar15;\n  if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }\n  if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }\n  iVar15 = iVar21 << 1;\n  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);\n  if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }\n  iVar7 = 0;\n  uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);\n  puVar14 = (uint *)(param_2 + *param_2);\nLAB_00058b7c:\n  uVar23 = 0x1f;\n  bVar2 = iVar7 < *param_2;\n  while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }\n  uVar17 = *puVar4;\n  iVar19 = 5;\n  uVar22 = 0;\n  iVar5 = 0x10;\n  uVar20 = uVar17;\n  do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);\n  if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }\n  uVar23 = *puVar14;\n  if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar8);\n  (*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);\n  (*(code *)PTR_safefree_000b01b0)(uVar11);\n  (*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);\n  (*(code *)PTR_safefree_000b01b0)(puVar9);\n  (*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar4);\n  (*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);\n  (*(code *)PTR_safefree_000b01b0)(puVar6);\n  freebn(piVar3);\n  return puVar14;\nLAB_00058f24:\n  iVar7 = iVar7 + 1;\n  puVar14 = puVar14 + -1;\n  goto LAB_00058b7c;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "bool bVar2;" (primitive_type "bool") (identifier "bVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "uint *puVar4;" (type_identifier "uint") (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 "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "undefined4 *puVar8;" (type_identifier "undefined4") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "undefined4 *puVar9;" (type_identifier "undefined4") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "undefined4 *puVar10;" (type_identifier "undefined4") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (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 uVar17;" (type_identifier "uint") (identifier "uVar17") (; ";")) (declaration "uint *puVar18;" (type_identifier "uint") (pointer_declarator "*puVar18" (* "*") (identifier "puVar18")) (; ";")) (declaration "int iVar19;" (primitive_type "int") (identifier "iVar19") (; ";")) (declaration "uint uVar20;" (type_identifier "uint") (identifier "uVar20") (; ";")) (declaration "int iVar21;" (primitive_type "int") (identifier "iVar21") (; ";")) (declaration "uint uVar22;" (type_identifier "uint") (identifier "uVar22") (; ";")) (declaration "uint uVar23;" (type_identifier "uint") (identifier "uVar23") (; ";")) (declaration "undefined4 local_44;" (type_identifier "undefined4") (identifier "local_44") (; ";")) (declaration "int local_2c;" (primitive_type "int") (identifier "local_2c") (; ";")) (if_statement "if (param_3[*param_3] == 0) {\n    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\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    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);\n    return puVar4;\n  }" ({ "{") (expression_statement "puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c);" (assignment_expression "puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" (identifier "puVar4") (= "=") (cast_expression "(uint *)(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR___assert_fail_000b0ac0)\n                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" (parenthesized_expression "(*(code *)PTR___assert_fail_000b0ac0)" (( "(") (pointer_expression "*(code *)PTR___assert_fail_000b0ac0" (* "*") (cast_expression "(code *)PTR___assert_fail_000b0ac0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___assert_fail_000b0ac0"))) () ")")) (argument_list "(PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,\n                                PTR_DAT_000b01d0 + -0x6c2c)" (( "(") (binary_expression "PTR_DAT_000b01d0 + -0x6e04" (identifier "PTR_DAT_000b01d0") (+ "+") (number_literal "-0x6e04")) (, ",") (binary_expression "PTR_DAT_000b01d0 + -0x6e40" (identifier "PTR_DAT_000b01d0") (+ "+") (number_literal "-0x6e40")) (, ",") (number_literal "0x3b9") (, ",") (binary_expression "PTR_DAT_000b01d0 + -0x6c2c" (identifier "PTR_DAT_000b01d0") (+ "+") (number_literal "-0x6c2c")) () ")"))))) (; ";")) (return_statement "return puVar4;" (return "return") (identifier "puVar4") (; ";")) (} "}"))) (expression_statement "piVar3 = (int *)bigmod(param_1,param_3);" (assignment_expression "piVar3 = (int *)bigmod(param_1,param_3)" (identifier "piVar3") (= "=") (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 "iVar21 = *param_3;" (assignment_expression "iVar21 = *param_3" (identifier "iVar21") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (expression_statement "puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);" (assignment_expression "puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" (identifier "puVar4") (= "=") (cast_expression "(uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b01e8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b01e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b01e8"))) () ")")) (argument_list "(iVar21,4)" (( "(") (identifier "iVar21") (, ",") (number_literal "4") () ")"))))) (; ";")) (if_statement "if (0 < iVar21) {\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }" (if "if") (parenthesized_expression "(0 < iVar21)" (( "(") (binary_expression "0 < iVar21" (number_literal "0") (< "<") (identifier "iVar21")) () ")")) (compound_statement "{\n    iVar15 = 0;\n    puVar14 = puVar4;\n    do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);\n  }" ({ "{") (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" (identifier "iVar15") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar14 = puVar4;" (assignment_expression "puVar14 = puVar4" (identifier "puVar14") (= "=") (identifier "puVar4")) (; ";")) (do_statement "do {\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    } while (iVar21 != iVar15);" (do "do") (compound_statement "{\n      iVar5 = *param_3 - iVar15;\n      iVar15 = iVar15 + 1;\n      *puVar14 = param_3[iVar5];\n      puVar14 = puVar14 + 1;\n    }" ({ "{") (expression_statement "iVar5 = *param_3 - iVar15;" (assignment_expression "iVar5 = *param_3 - iVar15" (identifier "iVar5") (= "=") (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 "*puVar14 = param_3[iVar5];" (assignment_expression "*puVar14 = param_3[iVar5]" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (= "=") (subscript_expression "param_3[iVar5]" (identifier "param_3") ([ "[") (identifier "iVar5") (] "]"))) (; ";")) (expression_statement "puVar14 = puVar14 + 1;" (assignment_expression "puVar14 = puVar14 + 1" (identifier "puVar14") (= "=") (binary_expression "puVar14 + 1" (identifier "puVar14") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar21 != iVar15)" (( "(") (binary_expression "iVar21 != iVar15" (identifier "iVar21") (!= "!=") (identifier "iVar15")) () ")")) (; ";")) (} "}"))) (expression_statement "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);" (assignment_expression "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" (identifier "puVar6") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar21,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b01e8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b01e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b01e8"))) () ")")) (argument_list "(iVar21,4)" (( "(") (identifier "iVar21") (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "iVar15 = *piVar3;" (assignment_expression "iVar15 = *piVar3" (identifier "iVar15") (= "=") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) (; ";")) (expression_statement "iVar5 = iVar21 - iVar15;" (assignment_expression "iVar5 = iVar21 - iVar15" (identifier "iVar5") (= "=") (binary_expression "iVar21 - iVar15" (identifier "iVar21") (- "-") (identifier "iVar15"))) (; ";")) (if_statement "if (0 < iVar5) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\n  }" (if "if") (parenthesized_expression "(0 < iVar5)" (( "(") (binary_expression "0 < iVar5" (number_literal "0") (< "<") (identifier "iVar5")) () ")")) (compound_statement "{\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar6 + iVar5 != puVar8);\n    iVar15 = *piVar3;\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 (puVar6 + iVar5 != puVar8);" (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 "(puVar6 + iVar5 != puVar8)" (( "(") (binary_expression "puVar6 + iVar5 != puVar8" (binary_expression "puVar6 + iVar5" (identifier "puVar6") (+ "+") (identifier "iVar5")) (!= "!=") (identifier "puVar8")) () ")")) (; ";")) (expression_statement "iVar15 = *piVar3;" (assignment_expression "iVar15 = *piVar3" (identifier "iVar15") (= "=") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) (; ";")) (} "}"))) (if_statement "if (0 < iVar15) {\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }" (if "if") (parenthesized_expression "(0 < iVar15)" (( "(") (binary_expression "0 < iVar15" (number_literal "0") (< "<") (identifier "iVar15")) () ")")) (compound_statement "{\n    iVar7 = 0;\n    piVar16 = puVar6 + iVar5;\n    do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);\n  }" ({ "{") (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar16 = puVar6 + iVar5;" (assignment_expression "piVar16 = puVar6 + iVar5" (identifier "piVar16") (= "=") (binary_expression "puVar6 + iVar5" (identifier "puVar6") (+ "+") (identifier "iVar5"))) (; ";")) (do_statement "do {\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    } while (iVar7 < *piVar3);" (do "do") (compound_statement "{\n      iVar7 = iVar7 + 1;\n      *piVar16 = piVar3[iVar15];\n      iVar15 = *piVar3 - iVar7;\n      piVar16 = piVar16 + 1;\n    }" ({ "{") (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*piVar16 = piVar3[iVar15];" (assignment_expression "*piVar16 = piVar3[iVar15]" (pointer_expression "*piVar16" (* "*") (identifier "piVar16")) (= "=") (subscript_expression "piVar3[iVar15]" (identifier "piVar3") ([ "[") (identifier "iVar15") (] "]"))) (; ";")) (expression_statement "iVar15 = *piVar3 - iVar7;" (assignment_expression "iVar15 = *piVar3 - iVar7" (identifier "iVar15") (= "=") (binary_expression "*piVar3 - iVar7" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (- "-") (identifier "iVar7"))) (; ";")) (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 "(iVar7 < *piVar3)" (( "(") (binary_expression "iVar7 < *piVar3" (identifier "iVar7") (< "<") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) () ")")) (; ";")) (} "}"))) (expression_statement "iVar15 = iVar21 << 1;" (assignment_expression "iVar15 = iVar21 << 1" (identifier "iVar15") (= "=") (binary_expression "iVar21 << 1" (identifier "iVar21") (<< "<<") (number_literal "1"))) (; ";")) (expression_statement "puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);" (assignment_expression "puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" (identifier "puVar8") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b01e8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b01e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b01e8"))) () ")")) (argument_list "(iVar15,4)" (( "(") (identifier "iVar15") (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);" (assignment_expression "puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" (identifier "puVar9") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b01e8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b01e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b01e8"))) () ")")) (argument_list "(iVar15,4)" (( "(") (identifier "iVar15") (, ",") (number_literal "4") () ")"))))) (; ";")) (if_statement "if (iVar15 < 1) {\n    puVar8[iVar21 * 2 + -1] = 1;\n  }\n  else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" (if "if") (parenthesized_expression "(iVar15 < 1)" (( "(") (binary_expression "iVar15 < 1" (identifier "iVar15") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" ({ "{") (expression_statement "puVar8[iVar21 * 2 + -1] = 1;" (assignment_expression "puVar8[iVar21 * 2 + -1] = 1" (subscript_expression "puVar8[iVar21 * 2 + -1]" (identifier "puVar8") ([ "[") (binary_expression "iVar21 * 2 + -1" (binary_expression "iVar21 * 2" (identifier "iVar21") (* "*") (number_literal "2")) (+ "+") (number_literal "-1")) (] "]")) (= "=") (number_literal "1")) (; ";")) (} "}")) (else_clause "else {\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" (else "else") (compound_statement "{\n    puVar10 = puVar8;\n    do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);\n    puVar8[iVar21 * 2 + -1] = 1;\n  }" ({ "{") (expression_statement "puVar10 = puVar8;" (assignment_expression "puVar10 = puVar8" (identifier "puVar10") (= "=") (identifier "puVar8")) (; ";")) (do_statement "do {\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    } while (puVar8 + iVar21 * 2 != puVar10);" (do "do") (compound_statement "{\n      *puVar10 = 0;\n      puVar10 = puVar10 + 1;\n    }" ({ "{") (expression_statement "*puVar10 = 0;" (assignment_expression "*puVar10 = 0" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + 1" (identifier "puVar10") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar8 + iVar21 * 2 != puVar10)" (( "(") (binary_expression "puVar8 + iVar21 * 2 != puVar10" (binary_expression "puVar8 + iVar21 * 2" (identifier "puVar8") (+ "+") (binary_expression "iVar21 * 2" (identifier "iVar21") (* "*") (number_literal "2"))) (!= "!=") (identifier "puVar10")) () ")")) (; ";")) (expression_statement "puVar8[iVar21 * 2 + -1] = 1;" (assignment_expression "puVar8[iVar21 * 2 + -1] = 1" (subscript_expression "puVar8[iVar21 * 2 + -1]" (identifier "puVar8") ([ "[") (binary_expression "iVar21 * 2 + -1" (binary_expression "iVar21 * 2" (identifier "iVar21") (* "*") (number_literal "2")) (+ "+") (number_literal "-1")) (] "]")) (= "=") (number_literal "1")) (; ";")) (} "}")))) (if_statement "if (iVar21 < 0x33) {\n    local_2c = 0;\n    iVar5 = 0;\n  }\n  else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }" (if "if") (parenthesized_expression "(iVar21 < 0x33)" (( "(") (binary_expression "iVar21 < 0x33" (identifier "iVar21") (< "<") (number_literal "0x33")) () ")")) (compound_statement "{\n    local_2c = 0;\n    iVar5 = 0;\n  }" ({ "{") (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" (identifier "local_2c") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }" (else "else") (compound_statement "{\n    iVar5 = 0;\n    iVar7 = iVar21;\n    do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);\n    local_2c = iVar5 * 4;\n  }" ({ "{") (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar7 = iVar21;" (assignment_expression "iVar7 = iVar21" (identifier "iVar7") (= "=") (identifier "iVar21")) (; ";")) (do_statement "do {\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    } while (0x32 < iVar7);" (do "do") (compound_statement "{\n      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;\n      iVar5 = iVar5 + iVar7 * 4;\n    }" ({ "{") (expression_statement "iVar7 = (iVar7 - (iVar7 >> 1)) + 1;" (assignment_expression "iVar7 = (iVar7 - (iVar7 >> 1)) + 1" (identifier "iVar7") (= "=") (binary_expression "(iVar7 - (iVar7 >> 1)) + 1" (parenthesized_expression "(iVar7 - (iVar7 >> 1))" (( "(") (binary_expression "iVar7 - (iVar7 >> 1)" (identifier "iVar7") (- "-") (parenthesized_expression "(iVar7 >> 1)" (( "(") (binary_expression "iVar7 >> 1" (identifier "iVar7") (>> ">>") (number_literal "1")) () ")"))) () ")")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar5 = iVar5 + iVar7 * 4;" (assignment_expression "iVar5 = iVar5 + iVar7 * 4" (identifier "iVar5") (= "=") (binary_expression "iVar5 + iVar7 * 4" (identifier "iVar5") (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(0x32 < iVar7)" (( "(") (binary_expression "0x32 < iVar7" (number_literal "0x32") (< "<") (identifier "iVar7")) () ")")) (; ";")) (expression_statement "local_2c = iVar5 * 4;" (assignment_expression "local_2c = iVar5 * 4" (identifier "local_2c") (= "=") (binary_expression "iVar5 * 4" (identifier "iVar5") (* "*") (number_literal "4"))) (; ";")) (} "}")))) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);" (assignment_expression "uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4)" (identifier "uVar11") (= "=") (call_expression "(*(code *)PTR_safemalloc_000b01e8)(iVar5,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b01e8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b01e8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b01e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b01e8"))) () ")")) (argument_list "(iVar5,4)" (( "(") (identifier "iVar5") (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "puVar14 = (uint *)(param_2 + *param_2);" (assignment_expression "puVar14 = (uint *)(param_2 + *param_2)" (identifier "puVar14") (= "=") (cast_expression "(uint *)(param_2 + *param_2)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + *param_2)" (( "(") (binary_expression "param_2 + *param_2" (identifier "param_2") (+ "+") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")))) (; ";")) (labeled_statement "LAB_00058b7c:\n  uVar23 = 0x1f;" (statement_identifier "LAB_00058b7c") (: ":") (expression_statement "uVar23 = 0x1f;" (assignment_expression "uVar23 = 0x1f" (identifier "uVar23") (= "=") (number_literal "0x1f")) (; ";"))) (expression_statement "bVar2 = iVar7 < *param_2;" (assignment_expression "bVar2 = iVar7 < *param_2" (identifier "bVar2") (= "=") (binary_expression "iVar7 < *param_2" (identifier "iVar7") (< "<") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (while_statement "while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }" (while "while") (parenthesized_expression "((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0)))" (( "(") (parenthesized_expression "(bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))" (( "(") (binary_expression "bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0)" (identifier "bVar2") (&& "&&") (parenthesized_expression "((1 << (uVar23 & 0x1f) & *puVar14) == 0)" (( "(") (binary_expression "(1 << (uVar23 & 0x1f) & *puVar14) == 0" (parenthesized_expression "(1 << (uVar23 & 0x1f) & *puVar14)" (( "(") (binary_expression "1 << (uVar23 & 0x1f) & *puVar14" (binary_expression "1 << (uVar23 & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "(uVar23 & 0x1f)" (( "(") (binary_expression "uVar23 & 0x1f" (identifier "uVar23") (& "&") (number_literal "0x1f")) () ")"))) (& "&") (pointer_expression "*puVar14" (* "*") (identifier "puVar14"))) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) () ")")) (compound_statement "{\n    uVar23 = uVar23 - 1;\n    if (uVar23 == 0xffffffff) goto LAB_00058f24;\n  }" ({ "{") (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" (identifier "uVar23") (= "=") (binary_expression "uVar23 - 1" (identifier "uVar23") (- "-") (number_literal "1"))) (; ";")) (if_statement "if (uVar23 == 0xffffffff) goto LAB_00058f24;" (if "if") (parenthesized_expression "(uVar23 == 0xffffffff)" (( "(") (binary_expression "uVar23 == 0xffffffff" (identifier "uVar23") (== "==") (number_literal "0xffffffff")) () ")")) (goto_statement "goto LAB_00058f24;" (goto "goto") (statement_identifier "LAB_00058f24") (; ";"))) (} "}"))) (expression_statement "uVar17 = *puVar4;" (assignment_expression "uVar17 = *puVar4" (identifier "uVar17") (= "=") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))) (; ";")) (expression_statement "iVar19 = 5;" (assignment_expression "iVar19 = 5" (identifier "iVar19") (= "=") (number_literal "5")) (; ";")) (expression_statement "uVar22 = 0;" (assignment_expression "uVar22 = 0" (identifier "uVar22") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar5 = 0x10;" (assignment_expression "iVar5 = 0x10" (identifier "iVar5") (= "=") (number_literal "0x10")) (; ";")) (expression_statement "uVar20 = uVar17;" (assignment_expression "uVar20 = uVar17" (identifier "uVar20") (= "=") (identifier "uVar17")) (; ";")) (do_statement "do {\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  } while (iVar19 != 0);" (do "do") (compound_statement "{\n    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }\n    iVar19 = iVar19 + -1;\n    iVar5 = iVar5 >> 1;\n  }" ({ "{") (if_statement "if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }" (if "if") (parenthesized_expression "(uVar20 >> (0x20U - iVar5 & 0x1f) == 0)" (( "(") (binary_expression "uVar20 >> (0x20U - iVar5 & 0x1f) == 0" (binary_expression "uVar20 >> (0x20U - iVar5 & 0x1f)" (identifier "uVar20") (>> ">>") (parenthesized_expression "(0x20U - iVar5 & 0x1f)" (( "(") (binary_expression "0x20U - iVar5 & 0x1f" (binary_expression "0x20U - iVar5" (number_literal "0x20U") (- "-") (identifier "iVar5")) (& "&") (number_literal "0x1f")) () ")"))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar20 = uVar20 << iVar5;\n      uVar22 = uVar22 + iVar5;\n    }" ({ "{") (expression_statement "uVar20 = uVar20 << iVar5;" (assignment_expression "uVar20 = uVar20 << iVar5" (identifier "uVar20") (= "=") (binary_expression "uVar20 << iVar5" (identifier "uVar20") (<< "<<") (identifier "iVar5"))) (; ";")) (expression_statement "uVar22 = uVar22 + iVar5;" (assignment_expression "uVar22 = uVar22 + iVar5" (identifier "uVar22") (= "=") (binary_expression "uVar22 + iVar5" (identifier "uVar22") (+ "+") (identifier "iVar5"))) (; ";")) (} "}"))) (expression_statement "iVar19 = iVar19 + -1;" (assignment_expression "iVar19 = iVar19 + -1" (identifier "iVar19") (= "=") (binary_expression "iVar19 + -1" (identifier "iVar19") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "iVar5 = iVar5 >> 1;" (assignment_expression "iVar5 = iVar5 >> 1" (identifier "iVar5") (= "=") (binary_expression "iVar5 >> 1" (identifier "iVar5") (>> ">>") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar19 != 0)" (( "(") (binary_expression "iVar19 != 0" (identifier "iVar19") (!= "!=") (number_literal "0")) () ")")) (; ";")) (if_statement "if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }\n  else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }" (if "if") (parenthesized_expression "((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2))" (( "(") (binary_expression "(uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)" (parenthesized_expression "(uVar22 == 0)" (( "(") (binary_expression "uVar22 == 0" (identifier "uVar22") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)" (( "(") (comma_expression "uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2" (assignment_expression "uVar17 = uVar17 << (uVar22 & 0x1f)" (identifier "uVar17") (= "=") (binary_expression "uVar17 << (uVar22 & 0x1f)" (identifier "uVar17") (<< "<<") (parenthesized_expression "(uVar22 & 0x1f)" (( "(") (binary_expression "uVar22 & 0x1f" (identifier "uVar22") (& "&") (number_literal "0x1f")) () ")")))) (, ",") (binary_expression "iVar21 < 2" (identifier "iVar21") (< "<") (number_literal "2"))) () ")"))) () ")")) (compound_statement "{\n    local_44 = FUN_000556d0(uVar17);\n    if (bVar2) goto LAB_00058c18;\nLAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);\n    if (0 < iVar21) goto LAB_00058d50;\n  }" ({ "{") (expression_statement "local_44 = FUN_000556d0(uVar17);" (assignment_expression "local_44 = FUN_000556d0(uVar17)" (identifier "local_44") (= "=") (call_expression "FUN_000556d0(uVar17)" (identifier "FUN_000556d0") (argument_list "(uVar17)" (( "(") (identifier "uVar17") () ")")))) (; ";")) (if_statement "if (bVar2) goto LAB_00058c18;" (if "if") (parenthesized_expression "(bVar2)" (( "(") (identifier "bVar2") () ")")) (goto_statement "goto LAB_00058c18;" (goto "goto") (statement_identifier "LAB_00058c18") (; ";"))) (labeled_statement "LAB_00058d34:\n    puVar14 = (uint *)FUN_00056014(*param_3);" (statement_identifier "LAB_00058d34") (: ":") (expression_statement "puVar14 = (uint *)FUN_00056014(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00056014(*param_3)" (identifier "puVar14") (= "=") (cast_expression "(uint *)FUN_00056014(*param_3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00056014(*param_3)" (identifier "FUN_00056014") (argument_list "(*param_3)" (( "(") (pointer_expression "*param_3" (* "*") (identifier "param_3")) () ")"))))) (; ";"))) (if_statement "if (0 < iVar21) goto LAB_00058d50;" (if "if") (parenthesized_expression "(0 < iVar21)" (( "(") (binary_expression "0 < iVar21" (number_literal "0") (< "<") (identifier "iVar21")) () ")")) (goto_statement "goto LAB_00058d50;" (goto "goto") (statement_identifier "LAB_00058d50") (; ";"))) (} "}")) (else_clause "else {\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }" (else "else") (compound_statement "{\n    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);\n    if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }\n    puVar14 = (uint *)FUN_00056014(*param_3);\nLAB_00058d50:\n    iVar15 = 0;\n    puVar18 = puVar8 + iVar21;\n    do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);\n  }" ({ "{") (expression_statement "local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);" (assignment_expression "local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17)" (identifier "local_44") (= "=") (call_expression "FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17)" (identifier "FUN_000556d0") (argument_list "(puVar4[1] >> (-uVar22 & 0x1f) | uVar17)" (( "(") (binary_expression "puVar4[1] >> (-uVar22 & 0x1f) | uVar17" (binary_expression "puVar4[1] >> (-uVar22 & 0x1f)" (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")) (>> ">>") (parenthesized_expression "(-uVar22 & 0x1f)" (( "(") (binary_expression "-uVar22 & 0x1f" (unary_expression "-uVar22" (- "-") (identifier "uVar22")) (& "&") (number_literal "0x1f")) () ")"))) (| "|") (identifier "uVar17")) () ")")))) (; ";")) (if_statement "if (bVar2) {\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }" (if "if") (parenthesized_expression "(bVar2)" (( "(") (identifier "bVar2") () ")")) (compound_statement "{\nLAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);\n      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);\n      do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);\n      goto LAB_00058d34;\n    }" ({ "{") (labeled_statement "LAB_00058c18:\n      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);" (statement_identifier "LAB_00058c18") (: ":") (expression_statement "pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);" (assignment_expression "pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0)" (identifier "pcVar12") (= "=") (cast_expression "(code *)(PTR_LAB_000b068c + 0x60b0)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000b068c + 0x60b0)" (( "(") (binary_expression "PTR_LAB_000b068c + 0x60b0" (identifier "PTR_LAB_000b068c") (+ "+") (number_literal "0x60b0")) () ")")))) (; ";"))) (expression_statement "pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);" (assignment_expression "pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978)" (identifier "pcVar13") (= "=") (cast_expression "(code *)(PTR_LAB_000b068c + 0x5978)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000b068c + 0x5978)" (( "(") (binary_expression "PTR_LAB_000b068c + 0x5978" (identifier "PTR_LAB_000b068c") (+ "+") (number_literal "0x5978")) () ")")))) (; ";")) (do_statement "do {\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      } while (iVar7 < *param_2);" (do "do") (compound_statement "{\n        do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);\n        iVar7 = iVar7 + 1;\n        uVar23 = 0x1f;\n      }" ({ "{") (do_statement "do {\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        } while (uVar23 != 0xffffffff);" (do "do") (compound_statement "{\n          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);\n          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);\n          puVar10 = puVar9;\n          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }\n          puVar9 = puVar8;\n          puVar8 = puVar10;\n          uVar23 = uVar23 - 1;\n        }" ({ "{") (expression_statement "(*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);" (call_expression "(*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11)" (parenthesized_expression "(*pcVar12)" (( "(") (pointer_expression "*pcVar12" (* "*") (identifier "pcVar12")) () ")")) (argument_list "(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11)" (( "(") (binary_expression "puVar8 + iVar21" (identifier "puVar8") (+ "+") (identifier "iVar21")) (, ",") (binary_expression "puVar8 + iVar21" (identifier "puVar8") (+ "+") (identifier "iVar21")) (, ",") (identifier "puVar9") (, ",") (identifier "iVar21") (, ",") (identifier "uVar11") () ")"))) (; ";")) (expression_statement "(*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);" (call_expression "(*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22)" (parenthesized_expression "(*pcVar13)" (( "(") (pointer_expression "*pcVar13" (* "*") (identifier "pcVar13")) () ")")) (argument_list "(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22)" (( "(") (identifier "puVar9") (, ",") (identifier "iVar15") (, ",") (identifier "puVar4") (, ",") (identifier "iVar21") (, ",") (number_literal "0") (, ",") (identifier "local_44") (, ",") (identifier "uVar22") () ")"))) (; ";")) (expression_statement "puVar10 = puVar9;" (assignment_expression "puVar10 = puVar9" (identifier "puVar10") (= "=") (identifier "puVar9")) (; ";")) (if_statement "if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }" (if "if") (parenthesized_expression "((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0)" (( "(") (binary_expression "(1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0" (parenthesized_expression "(1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7])" (( "(") (binary_expression "1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]" (binary_expression "1 << (uVar23 & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "(uVar23 & 0x1f)" (( "(") (binary_expression "uVar23 & 0x1f" (identifier "uVar23") (& "&") (number_literal "0x1f")) () ")"))) (& "&") (subscript_expression "param_2[*param_2 - iVar7]" (identifier "param_2") ([ "[") (binary_expression "*param_2 - iVar7" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (- "-") (identifier "iVar7")) (] "]"))) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);\n            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);\n            puVar10 = puVar8;\n            puVar8 = puVar9;\n          }" ({ "{") (expression_statement "(*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);" (call_expression "(*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11)" (parenthesized_expression "(*pcVar12)" (( "(") (pointer_expression "*pcVar12" (* "*") (identifier "pcVar12")) () ")")) (argument_list "(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11)" (( "(") (binary_expression "puVar9 + iVar21" (identifier "puVar9") (+ "+") (identifier "iVar21")) (, ",") (identifier "puVar6") (, ",") (identifier "puVar8") (, ",") (identifier "iVar21") (, ",") (identifier "uVar11") () ")"))) (; ";")) (expression_statement "(*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);" (call_expression "(*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22)" (parenthesized_expression "(*pcVar13)" (( "(") (pointer_expression "*pcVar13" (* "*") (identifier "pcVar13")) () ")")) (argument_list "(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22)" (( "(") (identifier "puVar8") (, ",") (identifier "iVar15") (, ",") (identifier "puVar4") (, ",") (identifier "iVar21") (, ",") (number_literal "0") (, ",") (identifier "local_44") (, ",") (identifier "uVar22") () ")"))) (; ";")) (expression_statement "puVar10 = puVar8;" (assignment_expression "puVar10 = puVar8" (identifier "puVar10") (= "=") (identifier "puVar8")) (; ";")) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" (identifier "puVar8") (= "=") (identifier "puVar9")) (; ";")) (} "}"))) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" (identifier "puVar9") (= "=") (identifier "puVar8")) (; ";")) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" (identifier "puVar8") (= "=") (identifier "puVar10")) (; ";")) (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" (identifier "uVar23") (= "=") (binary_expression "uVar23 - 1" (identifier "uVar23") (- "-") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar23 != 0xffffffff)" (( "(") (binary_expression "uVar23 != 0xffffffff" (identifier "uVar23") (!= "!=") (number_literal "0xffffffff")) () ")")) (; ";")) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar23 = 0x1f;" (assignment_expression "uVar23 = 0x1f" (identifier "uVar23") (= "=") (number_literal "0x1f")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 < *param_2)" (( "(") (binary_expression "iVar7 < *param_2" (identifier "iVar7") (< "<") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")) (; ";")) (goto_statement "goto LAB_00058d34;" (goto "goto") (statement_identifier "LAB_00058d34") (; ";")) (} "}"))) (expression_statement "puVar14 = (uint *)FUN_00056014(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00056014(*param_3)" (identifier "puVar14") (= "=") (cast_expression "(uint *)FUN_00056014(*param_3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00056014(*param_3)" (identifier "FUN_00056014") (argument_list "(*param_3)" (( "(") (pointer_expression "*param_3" (* "*") (identifier "param_3")) () ")"))))) (; ";")) (labeled_statement "LAB_00058d50:\n    iVar15 = 0;" (statement_identifier "LAB_00058d50") (: ":") (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" (identifier "iVar15") (= "=") (number_literal "0")) (; ";"))) (expression_statement "puVar18 = puVar8 + iVar21;" (assignment_expression "puVar18 = puVar8 + iVar21" (identifier "puVar18") (= "=") (binary_expression "puVar8 + iVar21" (identifier "puVar8") (+ "+") (identifier "iVar21"))) (; ";")) (do_statement "do {\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    } while (iVar15 < iVar21);" (do "do") (compound_statement "{\n      iVar5 = *puVar14 - iVar15;\n      iVar15 = iVar15 + 1;\n      puVar14[iVar5] = *puVar18;\n      puVar18 = puVar18 + 1;\n    }" ({ "{") (expression_statement "iVar5 = *puVar14 - iVar15;" (assignment_expression "iVar5 = *puVar14 - iVar15" (identifier "iVar5") (= "=") (binary_expression "*puVar14 - iVar15" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (- "-") (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 "puVar14[iVar5] = *puVar18;" (assignment_expression "puVar14[iVar5] = *puVar18" (subscript_expression "puVar14[iVar5]" (identifier "puVar14") ([ "[") (identifier "iVar5") (] "]")) (= "=") (pointer_expression "*puVar18" (* "*") (identifier "puVar18"))) (; ";")) (expression_statement "puVar18 = puVar18 + 1;" (assignment_expression "puVar18 = puVar18 + 1" (identifier "puVar18") (= "=") (binary_expression "puVar18 + 1" (identifier "puVar18") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar15 < iVar21)" (( "(") (binary_expression "iVar15 < iVar21" (identifier "iVar15") (< "<") (identifier "iVar21")) () ")")) (; ";")) (} "}")))) (expression_statement "uVar23 = *puVar14;" (assignment_expression "uVar23 = *puVar14" (identifier "uVar23") (= "=") (pointer_expression "*puVar14" (* "*") (identifier "puVar14"))) (; ";")) (if_statement "if (1 < uVar23) {\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }" (if "if") (parenthesized_expression "(1 < uVar23)" (( "(") (binary_expression "1 < uVar23" (number_literal "1") (< "<") (identifier "uVar23")) () ")")) (compound_statement "{\n    puVar18 = puVar14 + uVar23;\n    uVar20 = *puVar18;\n    while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }\n  }" ({ "{") (expression_statement "puVar18 = puVar14 + uVar23;" (assignment_expression "puVar18 = puVar14 + uVar23" (identifier "puVar18") (= "=") (binary_expression "puVar14 + uVar23" (identifier "puVar14") (+ "+") (identifier "uVar23"))) (; ";")) (expression_statement "uVar20 = *puVar18;" (assignment_expression "uVar20 = *puVar18" (identifier "uVar20") (= "=") (pointer_expression "*puVar18" (* "*") (identifier "puVar18"))) (; ";")) (while_statement "while (uVar20 == 0) {\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }" (while "while") (parenthesized_expression "(uVar20 == 0)" (( "(") (binary_expression "uVar20 == 0" (identifier "uVar20") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar23 = uVar23 - 1;\n      *puVar14 = uVar23;\n      if (uVar23 == 1) break;\n      puVar1 = puVar18 + -1;\n      puVar18 = puVar18 + -1;\n      uVar20 = *puVar1;\n    }" ({ "{") (expression_statement "uVar23 = uVar23 - 1;" (assignment_expression "uVar23 = uVar23 - 1" (identifier "uVar23") (= "=") (binary_expression "uVar23 - 1" (identifier "uVar23") (- "-") (number_literal "1"))) (; ";")) (expression_statement "*puVar14 = uVar23;" (assignment_expression "*puVar14 = uVar23" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (= "=") (identifier "uVar23")) (; ";")) (if_statement "if (uVar23 == 1) break;" (if "if") (parenthesized_expression "(uVar23 == 1)" (( "(") (binary_expression "uVar23 == 1" (identifier "uVar23") (== "==") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar1 = puVar18 + -1;" (assignment_expression "puVar1 = puVar18 + -1" (identifier "puVar1") (= "=") (binary_expression "puVar18 + -1" (identifier "puVar18") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar18 = puVar18 + -1;" (assignment_expression "puVar18 = puVar18 + -1" (identifier "puVar18") (= "=") (binary_expression "puVar18 + -1" (identifier "puVar18") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar20 = *puVar1;" (assignment_expression "uVar20 = *puVar1" (identifier "uVar20") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000b0240" (* "*") (cast_expression "(code *)PTR_smemclr_000b0240" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000b0240"))) () ")")) (argument_list "(puVar8,iVar21 * 8)" (( "(") (identifier "puVar8") (, ",") (binary_expression "iVar21 * 8" (identifier "iVar21") (* "*") (number_literal "8")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar8);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar8)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b01b0" (* "*") (cast_expression "(code *)PTR_safefree_000b01b0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b01b0"))) () ")")) (argument_list "(puVar8)" (( "(") (identifier "puVar8") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);" (call_expression "(*(code *)PTR_smemclr_000b0240)(uVar11,local_2c)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000b0240" (* "*") (cast_expression "(code *)PTR_smemclr_000b0240" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000b0240"))) () ")")) (argument_list "(uVar11,local_2c)" (( "(") (identifier "uVar11") (, ",") (identifier "local_2c") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b01b0)(uVar11);" (call_expression "(*(code *)PTR_safefree_000b01b0)(uVar11)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b01b0" (* "*") (cast_expression "(code *)PTR_safefree_000b01b0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b01b0"))) () ")")) (argument_list "(uVar11)" (( "(") (identifier "uVar11") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000b0240" (* "*") (cast_expression "(code *)PTR_smemclr_000b0240" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000b0240"))) () ")")) (argument_list "(puVar9,iVar21 * 8)" (( "(") (identifier "puVar9") (, ",") (binary_expression "iVar21 * 8" (identifier "iVar21") (* "*") (number_literal "8")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar9);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar9)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b01b0" (* "*") (cast_expression "(code *)PTR_safefree_000b01b0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b01b0"))) () ")")) (argument_list "(puVar9)" (( "(") (identifier "puVar9") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000b0240" (* "*") (cast_expression "(code *)PTR_smemclr_000b0240" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000b0240"))) () ")")) (argument_list "(puVar4,iVar21 * 4)" (( "(") (identifier "puVar4") (, ",") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar4);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar4)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b01b0" (* "*") (cast_expression "(code *)PTR_safefree_000b01b0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b01b0"))) () ")")) (argument_list "(puVar4)" (( "(") (identifier "puVar4") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);" (call_expression "(*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000b0240)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000b0240" (* "*") (cast_expression "(code *)PTR_smemclr_000b0240" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000b0240"))) () ")")) (argument_list "(puVar6,iVar21 * 4)" (( "(") (identifier "puVar6") (, ",") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b01b0)(puVar6);" (call_expression "(*(code *)PTR_safefree_000b01b0)(puVar6)" (parenthesized_expression "(*(code *)PTR_safefree_000b01b0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b01b0" (* "*") (cast_expression "(code *)PTR_safefree_000b01b0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b01b0"))) () ")")) (argument_list "(puVar6)" (( "(") (identifier "puVar6") () ")"))) (; ";")) (expression_statement "freebn(piVar3);" (call_expression "freebn(piVar3)" (identifier "freebn") (argument_list "(piVar3)" (( "(") (identifier "piVar3") () ")"))) (; ";")) (return_statement "return puVar14;" (return "return") (identifier "puVar14") (; ";")) (labeled_statement "LAB_00058f24:\n  iVar7 = iVar7 + 1;" (statement_identifier "LAB_00058f24") (: ":") (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";"))) (expression_statement "puVar14 = puVar14 + -1;" (assignment_expression "puVar14 = puVar14 + -1" (identifier "puVar14") (= "=") (binary_expression "puVar14 + -1" (identifier "puVar14") (+ "+") (number_literal "-1"))) (; ";")) (goto_statement "goto LAB_00058b7c;" (goto "goto") (statement_identifier "LAB_00058b7c") (; ";")) (} "}")))

type_1 function_1(type_1 base_in,type_1 var_11,type_1 mod)

{
  bool var_13;
  type_1 pBVar2;
  type_2 *pBVar3;
  int var_6;
  type_3 *var_8;
  int var_9;
  type_3 *var_7;
  type_3 *var_21;
  type_3 *var_10;
  type_3 uVar10;
  type_4 *pcVar11;
  type_4 *pcVar12;
  type_1 var_22;
  type_2 var_3;
  type_2 *var_4;
  type_5 *var_25;
  type_2 var_17;
  type_1 var_23;
  int var_16;
  type_2 var_5;
  type_5 var_15;
  int var_12;
  type_5 var_14;
  type_2 local_44;
  int local_2c;
  
  if (mod[*mod] == 0) {
    pBVar2 = (type_1)
             (*(type_4 *)PTR___assert_fail_000b0ac0)
                       (var_1 + -0x6e04,var_1 + -0x6e40,0x3b9,
                        var_1 + -0x6c2c);
    return pBVar2;
  }
  pBVar2 = var_2(base_in,mod);
  var_5 = *mod;
  pBVar3 = (type_2 *)(*(type_4 *)PTR_safemalloc_000b01e8)(var_5,4);
  if (0 < (int)var_5) {
    var_3 = 0;
    var_4 = pBVar3;
    do {
      var_6 = *mod - var_3;
      var_3 = var_3 + 1;
      *var_4 = mod[var_6];
      var_4 = var_4 + 1;
    } while (var_5 != var_3);
  }
  var_8 = (type_3 *)(*(type_4 *)PTR_safemalloc_000b01e8)(var_5,4);
  var_3 = *pBVar2;
  var_6 = var_5 - var_3;
  if (0 < var_6) {
    var_7 = var_8;
    do {
      *var_7 = 0;
      var_7 = var_7 + 1;
    } while (var_8 + var_6 != var_7);
    var_3 = *pBVar2;
  }
  if (0 < (int)var_3) {
    var_9 = 0;
    var_4 = var_8 + var_6;
    do {
      var_9 = var_9 + 1;
      *var_4 = pBVar2[var_3];
      var_3 = *pBVar2 - var_9;
      var_4 = var_4 + 1;
    } while (var_9 < (int)*pBVar2);
  }
  var_6 = var_5 << 1;
  var_7 = (type_3 *)(*(type_4 *)PTR_safemalloc_000b01e8)(var_6,4);
  var_21 = (type_3 *)(*(type_4 *)PTR_safemalloc_000b01e8)(var_6,4);
  if (var_6 < 1) {
    var_7[var_5 * 2 + -1] = 1;
  }
  else {
    var_10 = var_7;
    do {
      *var_10 = 0;
      var_10 = var_10 + 1;
    } while (var_7 + var_5 * 2 != var_10);
    var_7[var_5 * 2 + -1] = 1;
  }
  if ((int)var_5 < 0x33) {
    local_2c = 0;
    var_9 = 0;
  }
  else {
    var_9 = 0;
    var_3 = var_5;
    do {
      var_3 = (var_3 - ((int)var_3 >> 1)) + 1;
      var_9 = var_9 + var_3 * 4;
    } while (0x32 < (int)var_3);
    local_2c = var_9 * 4;
  }
  var_12 = 0;
  uVar10 = (*(type_4 *)PTR_safemalloc_000b01e8)(var_9,4);
  var_25 = var_11 + *var_11;
LAB_00058b7c:
  var_14 = 0x1f;
  var_13 = var_12 < (int)*var_11;
  while ((var_13 && ((1 << (var_14 & 0x1f) & *var_25) == 0))) {
    var_14 = var_14 - 1;
    if (var_14 == 0xffffffff) goto LAB_00058f24;
  }
  var_17 = *pBVar3;
  var_16 = 5;
  var_15 = 0;
  var_9 = 0x10;
  var_3 = var_17;
  do {
    if (var_3 >> (0x20U - var_9 & 0x1f) == 0) {
      var_3 = var_3 << var_9;
      var_15 = var_15 + var_9;
    }
    var_16 = var_16 + -1;
    var_9 = var_9 >> 1;
  } while (var_16 != 0);
  if ((var_15 == 0) || (var_17 = var_17 << (var_15 & 0x1f), (int)var_5 < 2)) {
    local_44 = var_18(var_17);
    if (var_13) goto LAB_00058c18;
LAB_00058d34:
    var_22 = var_19(*mod);
    if (0 < (int)var_5) goto LAB_00058d50;
  }
  else {
    local_44 = var_18(pBVar3[1] >> (-var_15 & 0x1f) | var_17);
    if (var_13) {
LAB_00058c18:
      pcVar11 = (type_4 *)(var_20 + 0x60b0);
      pcVar12 = (type_4 *)(var_20 + 0x5978);
      do {
        do {
          (*pcVar11)(var_7 + var_5,var_7 + var_5,var_21,var_5,uVar10);
          (*pcVar12)(var_21,var_6,pBVar3,var_5,0,local_44,var_15);
          var_10 = var_21;
          if ((1 << (var_14 & 0x1f) & var_11[*var_11 - var_12]) != 0) {
            (*pcVar11)(var_21 + var_5,var_8,var_7,var_5,uVar10);
            (*pcVar12)(var_7,var_6,pBVar3,var_5,0,local_44,var_15);
            var_10 = var_7;
            var_7 = var_21;
          }
          var_21 = var_7;
          var_7 = var_10;
          var_14 = var_14 - 1;
        } while (var_14 != 0xffffffff);
        var_12 = var_12 + 1;
        var_14 = 0x1f;
      } while (var_12 < (int)*var_11);
      goto LAB_00058d34;
    }
    var_22 = var_19(*mod);
LAB_00058d50:
    var_6 = 0;
    var_4 = var_7 + var_5;
    do {
      var_9 = *var_22 - var_6;
      var_6 = var_6 + 1;
      var_22[var_9] = *var_4;
      var_4 = var_4 + 1;
    } while (var_6 < (int)var_5);
  }
  var_3 = *var_22;
  if (1 < var_3) {
    var_23 = var_22 + var_3;
    var_17 = *var_23;
    while (var_17 == 0) {
      var_3 = var_3 - 1;
      *var_22 = var_3;
      if (var_3 == 1) break;
      var_4 = var_23 + -1;
      var_23 = var_23 + -1;
      var_17 = *var_4;
    }
  }
  (*(type_4 *)PTR_smemclr_000b0240)(var_7,var_5 * 8);
  (*(type_4 *)PTR_safefree_000b01b0)(var_7);
  (*(type_4 *)PTR_smemclr_000b0240)(uVar10,local_2c);
  (*(type_4 *)PTR_safefree_000b01b0)(uVar10);
  (*(type_4 *)PTR_smemclr_000b0240)(var_21,var_5 * 8);
  (*(type_4 *)PTR_safefree_000b01b0)(var_21);
  (*(type_4 *)PTR_smemclr_000b0240)(pBVar3,var_5 * 4);
  (*(type_4 *)PTR_safefree_000b01b0)(pBVar3);
  (*(type_4 *)PTR_smemclr_000b0240)(var_8,var_5 * 4);
  (*(type_4 *)PTR_safefree_000b01b0)(var_8);
                    /* WARNING: Subroutine does not return */
  var_24(pBVar2);
LAB_00058f24:
  var_12 = var_12 + 1;
  var_25 = var_25 + -1;
  goto LAB_00058b7c;
}


(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: (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: (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: (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: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) 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: (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: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (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: (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: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (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: (binary_expression left: (identifier) right: (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: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (do_statement 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: (subscript_expression argument: (identifier) index: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (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: (identifier) right: (number_literal))) consequence: (compound_statement (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)))) alternative: (else_clause (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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (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)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (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: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (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: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (while_statement condition: (parenthesized_expression (parenthesized_expression (binary_expression left: (identifier) right: (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: (pointer_expression argument: (identifier)))) right: (number_literal)))))) body: (compound_statement (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: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (identifier)) right: (number_literal)))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (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: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (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 (identifier)) consequence: (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: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) 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: (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 (identifier)) consequence: (compound_statement (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 (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))) (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: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) 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))))) (goto_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))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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: (subscript_expression argument: (identifier) index: (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: (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) (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)))) (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))))) (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;
  bool bVar2;
  int *piVar3;
  uint *puVar4;
  int iVar5;
  undefined4 *puVar6;
  int iVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  undefined4 uVar11;
  code *pcVar12;
  code *pcVar13;
  uint *puVar14;
  int iVar15;
  int *piVar16;
  uint uVar17;
  uint *puVar18;
  int iVar19;
  uint uVar20;
  int iVar21;
  uint uVar22;
  uint uVar23;
  undefined4 local_44;
  int local_2c;
  
  if (param_3[*param_3] == 0) {
    puVar4 = (uint *)(*(code *)PTR___assert_fail_000b0ac0)
                               (PTR_DAT_000b01d0 + -0x6e04,PTR_DAT_000b01d0 + -0x6e40,0x3b9,
                                PTR_DAT_000b01d0 + -0x6c2c);
    return puVar4;
  }
  piVar3 = (int *)bigmod(param_1,param_3);
  iVar21 = *param_3;
  puVar4 = (uint *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);
  if (0 < iVar21) {
    iVar15 = 0;
    puVar14 = puVar4;
    do {
      iVar5 = *param_3 - iVar15;
      iVar15 = iVar15 + 1;
      *puVar14 = param_3[iVar5];
      puVar14 = puVar14 + 1;
    } while (iVar21 != iVar15);
  }
  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar21,4);
  iVar15 = *piVar3;
  iVar5 = iVar21 - iVar15;
  if (0 < iVar5) {
    puVar8 = puVar6;
    do {
      *puVar8 = 0;
      puVar8 = puVar8 + 1;
    } while (puVar6 + iVar5 != puVar8);
    iVar15 = *piVar3;
  }
  if (0 < iVar15) {
    iVar7 = 0;
    piVar16 = puVar6 + iVar5;
    do {
      iVar7 = iVar7 + 1;
      *piVar16 = piVar3[iVar15];
      iVar15 = *piVar3 - iVar7;
      piVar16 = piVar16 + 1;
    } while (iVar7 < *piVar3);
  }
  iVar15 = iVar21 << 1;
  puVar8 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);
  puVar9 = (undefined4 *)(*(code *)PTR_safemalloc_000b01e8)(iVar15,4);
  if (iVar15 < 1) {
    puVar8[iVar21 * 2 + -1] = 1;
  }
  else {
    puVar10 = puVar8;
    do {
      *puVar10 = 0;
      puVar10 = puVar10 + 1;
    } while (puVar8 + iVar21 * 2 != puVar10);
    puVar8[iVar21 * 2 + -1] = 1;
  }
  if (iVar21 < 0x33) {
    local_2c = 0;
    iVar5 = 0;
  }
  else {
    iVar5 = 0;
    iVar7 = iVar21;
    do {
      iVar7 = (iVar7 - (iVar7 >> 1)) + 1;
      iVar5 = iVar5 + iVar7 * 4;
    } while (0x32 < iVar7);
    local_2c = iVar5 * 4;
  }
  iVar7 = 0;
  uVar11 = (*(code *)PTR_safemalloc_000b01e8)(iVar5,4);
  puVar14 = (uint *)(param_2 + *param_2);
LAB_00058b7c:
  uVar23 = 0x1f;
  bVar2 = iVar7 < *param_2;
  while ((bVar2 && ((1 << (uVar23 & 0x1f) & *puVar14) == 0))) {
    uVar23 = uVar23 - 1;
    if (uVar23 == 0xffffffff) goto LAB_00058f24;
  }
  uVar17 = *puVar4;
  iVar19 = 5;
  uVar22 = 0;
  iVar5 = 0x10;
  uVar20 = uVar17;
  do {
    if (uVar20 >> (0x20U - iVar5 & 0x1f) == 0) {
      uVar20 = uVar20 << iVar5;
      uVar22 = uVar22 + iVar5;
    }
    iVar19 = iVar19 + -1;
    iVar5 = iVar5 >> 1;
  } while (iVar19 != 0);
  if ((uVar22 == 0) || (uVar17 = uVar17 << (uVar22 & 0x1f), iVar21 < 2)) {
    local_44 = FUN_000556d0(uVar17);
    if (bVar2) goto LAB_00058c18;
LAB_00058d34:
    puVar14 = (uint *)FUN_00056014(*param_3);
    if (0 < iVar21) goto LAB_00058d50;
  }
  else {
    local_44 = FUN_000556d0(puVar4[1] >> (-uVar22 & 0x1f) | uVar17);
    if (bVar2) {
LAB_00058c18:
      pcVar12 = (code *)(PTR_LAB_000b068c + 0x60b0);
      pcVar13 = (code *)(PTR_LAB_000b068c + 0x5978);
      do {
        do {
          (*pcVar12)(puVar8 + iVar21,puVar8 + iVar21,puVar9,iVar21,uVar11);
          (*pcVar13)(puVar9,iVar15,puVar4,iVar21,0,local_44,uVar22);
          puVar10 = puVar9;
          if ((1 << (uVar23 & 0x1f) & param_2[*param_2 - iVar7]) != 0) {
            (*pcVar12)(puVar9 + iVar21,puVar6,puVar8,iVar21,uVar11);
            (*pcVar13)(puVar8,iVar15,puVar4,iVar21,0,local_44,uVar22);
            puVar10 = puVar8;
            puVar8 = puVar9;
          }
          puVar9 = puVar8;
          puVar8 = puVar10;
          uVar23 = uVar23 - 1;
        } while (uVar23 != 0xffffffff);
        iVar7 = iVar7 + 1;
        uVar23 = 0x1f;
      } while (iVar7 < *param_2);
      goto LAB_00058d34;
    }
    puVar14 = (uint *)FUN_00056014(*param_3);
LAB_00058d50:
    iVar15 = 0;
    puVar18 = puVar8 + iVar21;
    do {
      iVar5 = *puVar14 - iVar15;
      iVar15 = iVar15 + 1;
      puVar14[iVar5] = *puVar18;
      puVar18 = puVar18 + 1;
    } while (iVar15 < iVar21);
  }
  uVar23 = *puVar14;
  if (1 < uVar23) {
    puVar18 = puVar14 + uVar23;
    uVar20 = *puVar18;
    while (uVar20 == 0) {
      uVar23 = uVar23 - 1;
      *puVar14 = uVar23;
      if (uVar23 == 1) break;
      puVar1 = puVar18 + -1;
      puVar18 = puVar18 + -1;
      uVar20 = *puVar1;
    }
  }
  (*(code *)PTR_smemclr_000b0240)(puVar8,iVar21 * 8);
  (*(code *)PTR_safefree_000b01b0)(puVar8);
  (*(code *)PTR_smemclr_000b0240)(uVar11,local_2c);
  (*(code *)PTR_safefree_000b01b0)(uVar11);
  (*(code *)PTR_smemclr_000b0240)(puVar9,iVar21 * 8);
  (*(code *)PTR_safefree_000b01b0)(puVar9);
  (*(code *)PTR_smemclr_000b0240)(puVar4,iVar21 * 4);
  (*(code *)PTR_safefree_000b01b0)(puVar4);
  (*(code *)PTR_smemclr_000b0240)(puVar6,iVar21 * 4);
  (*(code *)PTR_safefree_000b01b0)(puVar6);
  freebn(piVar3);
  return puVar14;
LAB_00058f24:
  iVar7 = iVar7 + 1;
  puVar14 = puVar14 + -1;
  goto LAB_00058b7c;
}

