
void __gmpn_random2(mp_ptr rp,mp_size_t n)

{
  uint uVar1;
  uint uVar2;
  mp_ptr pmVar3;
  mp_limb_t mVar4;
  int iVar5;
  int iVar6;
  mp_limb_t *pmVar7;
  mp_limb_t *pmVar8;
  mp_limb_t *pmVar9;
  uint in_a3;
  uint uVar10;
  uint uVar11;
  int iVar12;
  mp_limb_t *pmVar13;
  int iVar14;
  int iVar15;
  mp_limb_t mVar16;
  undefined *puVar17;
  mp_limb_t ranm;
  mp_limb_t ranm_1;
  int local_24;
  
  local_24 = *(int *)PTR___stack_chk_guard_0009b540;
  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {
    *PTR___gmp_rands_initialized_0009b188 = 1;
    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);
  }
  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))(PTR___gmp_rands_0009b27c,&ranm,0x20);
  uVar10 = n * 0x20 - (ranm & 0x1f);
  uVar1 = uVar10 + 0x1f >> 5;
  rp[uVar1 - 1] = 0xffffffff >> (-uVar10 & 0x1f);
  iVar6 = uVar1 - 2;
  if (-1 < iVar6) {
    pmVar3 = rp + uVar1;
    do {
      pmVar3[-2] = 0xffffffff;
      iVar6 = iVar6 + -1;
      pmVar3 = pmVar3 + -1;
    } while (-1 < iVar6);
  }
  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))
            (PTR___gmp_rands_0009b27c,&ranm_1,0x20);
  puVar17 = PTR___gmp_rands_0009b27c;
  uVar1 = (ranm_1 & 3) + 1;
  if (uVar1 == 0) {
    trap(7);
  }
  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;
  do {
    iVar6 = 0x20;
    pmVar8 = (mp_limb_t *)puVar17;
    pmVar9 = &ranm_1;
    (**(code **)(*(int *)(puVar17 + 0x10) + 4))();
    if (uVar1 == 0) {
      trap(7);
    }
    uVar2 = ranm_1 % uVar1 + 1;
    uVar11 = uVar10 - uVar2;
    if ((uVar10 < uVar2) || (uVar11 == 0)) break;
    rp[uVar11 >> 5] = rp[uVar11 >> 5] ^ 1 << (uVar11 & 0x1f);
    iVar6 = 0x20;
    pmVar9 = &ranm_1;
    (**(code **)(*(int *)(puVar17 + 0x10) + 4))(puVar17);
    if (uVar1 == 0) {
      trap(7);
    }
    uVar2 = ranm_1 % uVar1 + 1;
    uVar10 = uVar11 - uVar2;
    if (uVar11 < uVar2) {
      uVar10 = 0;
      uVar2 = 0;
    }
    else {
      uVar2 = uVar10 >> 5;
    }
    pmVar3 = rp + uVar2;
    pmVar7 = (mp_limb_t *)(1 << (uVar10 & 0x1f));
    pmVar8 = (mp_limb_t *)((int)pmVar7 + *pmVar3);
    *pmVar3 = (mp_limb_t)pmVar8;
    if (pmVar8 < pmVar7) {
      do {
        pmVar3 = pmVar3 + 1;
        mVar16 = *pmVar3;
        *pmVar3 = mVar16 + 1;
      } while (mVar16 + 1 == 0);
    }
  } while (uVar10 != 0);
  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {
    puVar17 = PTR___stack_chk_fail_0009b4d0;
    (*(code *)PTR___stack_chk_fail_0009b4d0)();
    if (in_a3 < 2) {
      if (in_a3 == 0) {
        *pmVar8 = 1;
      }
      else if (iVar6 != 0) {
        iVar14 = iVar6 + -1;
        mVar16 = *pmVar9;
        pmVar7 = pmVar8;
        if (iVar14 != 0) {
          do {
            pmVar9 = pmVar9 + 1;
            *pmVar7 = mVar16;
            iVar14 = iVar14 + -1;
            mVar16 = *pmVar9;
            pmVar7 = pmVar7 + 1;
          } while (iVar14 != 0);
          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;
        }
        *pmVar8 = mVar16;
      }
    }
    else {
      uVar10 = 0;
      uVar2 = 0x20;
      uVar1 = in_a3;
      do {
        uVar10 = uVar10 ^ uVar1;
        uVar1 = uVar1 >> 1;
        uVar2 = uVar2 - 1;
      } while (uVar1 != 0);
      iVar14 = in_a3 << (uVar2 & 0x1f);
      if (iVar6 == 1) {
        mVar16 = *pmVar9;
        pmVar7 = (mp_limb_t *)&_gp;
        if ((uVar2 & 1) != 0) {
          pmVar7 = pmVar8;
          pmVar8 = (mp_limb_t *)&_gp;
        }
        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);
        iVar6 = 2 - (uint)(pmVar8[1] == 0);
        iVar12 = 0x1f - uVar2;
        while( true ) {
          pmVar9 = pmVar7;
          iVar14 = iVar14 << 1;
          if (iVar14 < 0) {
            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);
            pmVar8[iVar6] = mVar4;
            iVar6 = iVar6 + (uint)(mVar4 != 0);
          }
          iVar12 = iVar12 + -1;
          if (iVar12 == 0) break;
          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);
          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);
          pmVar7 = pmVar8;
          pmVar8 = pmVar9;
        }
      }
      else {
        pmVar7 = (mp_limb_t *)&_gp;
        if (((uVar10 ^ uVar2) & 1) == 0) {
          pmVar7 = pmVar8;
          pmVar8 = (mp_limb_t *)&_gp;
        }
        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);
        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);
        iVar15 = 0x1f - uVar2;
        while( true ) {
          iVar14 = iVar14 << 1;
          pmVar13 = pmVar7;
          if (iVar14 < 0) {
            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);
            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);
            pmVar13 = pmVar8;
            pmVar8 = pmVar7;
          }
          pmVar7 = pmVar8;
          iVar15 = iVar15 + -1;
          if (iVar15 == 0) break;
          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);
          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);
          pmVar8 = pmVar13;
        }
      }
    }
    return;
  }
  return;
}



int __gmpn_random2(int param_1,int param_2,undefined4 param_3,uint param_4)

{
  uint uVar1;
  int iVar2;
  int *piVar3;
  uint uVar4;
  uint *puVar5;
  int iVar6;
  int iVar7;
  uint *puVar8;
  uint *puVar9;
  uint uVar10;
  uint uVar11;
  uint *puVar12;
  int iVar13;
  int iVar14;
  undefined *puVar15;
  uint local_2c;
  uint local_28;
  int local_24;
  
  local_24 = *(int *)PTR___stack_chk_guard_0009b540;
  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {
    *PTR___gmp_rands_initialized_0009b188 = 1;
    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);
  }
  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))
            (PTR___gmp_rands_0009b27c,&local_2c,0x20);
  uVar10 = param_2 * 0x20 - (local_2c & 0x1f);
  uVar1 = uVar10 + 0x1f >> 5;
  *(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);
  iVar7 = uVar1 - 2;
  if (-1 < iVar7) {
    iVar2 = param_1 + uVar1 * 4;
    do {
      *(undefined4 *)(iVar2 + -8) = 0xffffffff;
      iVar7 = iVar7 + -1;
      iVar2 = iVar2 + -4;
    } while (-1 < iVar7);
  }
  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))
            (PTR___gmp_rands_0009b27c,&local_28,0x20);
  puVar15 = PTR___gmp_rands_0009b27c;
  uVar1 = (local_28 & 3) + 1;
  if (uVar1 == 0) {
    trap(7);
  }
  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;
  do {
    iVar7 = 0x20;
    puVar9 = (uint *)puVar15;
    puVar5 = &local_28;
    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();
    if (uVar1 == 0) {
      trap(7);
    }
    uVar4 = local_28 % uVar1 + 1;
    uVar11 = uVar10 - uVar4;
    if ((uVar10 < uVar4) || (uVar11 == 0)) break;
    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);
    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);
    iVar7 = 0x20;
    puVar5 = &local_28;
    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);
    if (uVar1 == 0) {
      trap(7);
    }
    uVar4 = local_28 % uVar1 + 1;
    uVar10 = uVar11 - uVar4;
    if (uVar11 < uVar4) {
      uVar10 = 0;
      uVar4 = 0;
    }
    else {
      uVar4 = uVar10 >> 5;
    }
    piVar3 = (int *)(param_1 + uVar4 * 4);
    puVar8 = (uint *)(1 << (uVar10 & 0x1f));
    puVar9 = (uint *)((int)puVar8 + *piVar3);
    *piVar3 = (int)puVar9;
    if (puVar9 < puVar8) {
      do {
        piVar3 = piVar3 + 1;
        iVar2 = *piVar3;
        *piVar3 = iVar2 + 1;
      } while (iVar2 + 1 == 0);
    }
  } while (uVar10 != 0);
  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {
    puVar15 = PTR___stack_chk_fail_0009b4d0;
    (*(code *)PTR___stack_chk_fail_0009b4d0)();
    if (param_4 < 2) {
      if (param_4 == 0) {
        *puVar9 = 1;
        iVar2 = 1;
      }
      else {
        iVar2 = iVar7;
        if (iVar7 != 0) {
          iVar13 = iVar7 + -1;
          uVar1 = *puVar5;
          puVar8 = puVar9;
          if (iVar13 != 0) {
            do {
              puVar5 = puVar5 + 1;
              *puVar8 = uVar1;
              iVar13 = iVar13 + -1;
              uVar1 = *puVar5;
              puVar8 = puVar8 + 1;
            } while (iVar13 != 0);
            puVar9 = puVar9 + iVar7 + 0x3fffffff;
          }
          *puVar9 = uVar1;
        }
      }
    }
    else {
      uVar10 = 0;
      uVar4 = 0x20;
      uVar1 = param_4;
      do {
        uVar10 = uVar10 ^ uVar1;
        uVar1 = uVar1 >> 1;
        uVar4 = uVar4 - 1;
      } while (uVar1 != 0);
      iVar13 = param_4 << (uVar4 & 0x1f);
      if (iVar7 == 1) {
        uVar1 = *puVar5;
        puVar8 = (uint *)&_gp_1;
        if ((uVar4 & 1) != 0) {
          puVar8 = puVar9;
          puVar9 = (uint *)&_gp_1;
        }
        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);
        iVar2 = 2 - (uint)(puVar9[1] == 0);
        iVar7 = 0x1f - uVar4;
        while( true ) {
          puVar5 = puVar8;
          iVar13 = iVar13 << 1;
          if (iVar13 < 0) {
            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);
            puVar9[iVar2] = uVar10;
            iVar2 = iVar2 + (uint)(uVar10 != 0);
          }
          iVar7 = iVar7 + -1;
          if (iVar7 == 0) break;
          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);
          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);
          puVar8 = puVar9;
          puVar9 = puVar5;
        }
      }
      else {
        puVar8 = (uint *)&_gp_1;
        if (((uVar10 ^ uVar4) & 1) == 0) {
          puVar8 = puVar9;
          puVar9 = (uint *)&_gp_1;
        }
        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);
        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);
        iVar14 = 0x1f - uVar4;
        while( true ) {
          iVar13 = iVar13 << 1;
          puVar12 = puVar8;
          if (iVar13 < 0) {
            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);
            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);
            puVar12 = puVar9;
            puVar9 = puVar8;
          }
          puVar8 = puVar9;
          iVar14 = iVar14 + -1;
          if (iVar14 == 0) break;
          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);
          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);
          puVar9 = puVar12;
        }
      }
    }
    return iVar2;
  }
  return *(int *)PTR___stack_chk_guard_0009b540;
}


lui gp,0x6
addiu gp,gp,-0x20d0
addu gp,gp,t9
addiu sp,sp,-0x48
sw ra,0x44(sp)
sw s6,0x40(sp)
sw s5,0x3c(sp)
sw s4,0x38(sp)
sw s3,0x34(sp)
sw s2,0x30(sp)
sw s1,0x2c(sp)
sw s0,0x28(sp)
sw gp,0x10(sp)
or s2,a0,zero
or s0,a1,zero
lw v0,-0x7b00(gp)
lw v0,0x0(v0)
sw v0,0x24(sp)
lw v0,-0x7eb8(gp)
lb v0,0x0(v0)
beq v0,zero,0x00045234
_lw v0,-0x7eb8(gp)
lw a0,-0x7dc4(gp)
lw v0,0x10(a0)
lw t9,0x4(v0)
li a2,0x20
addiu a1,sp,0x1c
jalr t9
_nop
lw gp,0x10(sp)
sll s0,s0,0x5
lw v0,0x1c(sp)
andi v0,v0,0x1f
subu s0,s0,v0
addiu v0,s0,0x1f
srl v0,v0,0x5
addiu v1,v0,-0x1
sll v1,v1,0x2
addu v1,s2,v1
subu a1,zero,s0
li a0,-0x1
srlv a0,a0,a1
sw a0,0x0(v1)
addiu v1,v0,-0x2
bltz v1,0x000451e0
_sll v0,v0,0x2
addu v0,s2,v0
li a0,-0x1
sw a0,-0x8(v0)
addiu v1,v1,-0x1
bgez v1,0x000451d0
_addiu v0,v0,-0x4
lw a0,-0x7dc4(gp)
lw v0,0x10(a0)
lw t9,0x4(v0)
li a2,0x20
addiu a1,sp,0x20
jalr t9
_nop
lw gp,0x10(sp)
lw v0,0x20(sp)
andi v0,v0,0x3
addiu v0,v0,0x1
teq v0,zero
divu s0,v0
mflo s1
sltu v0,s0,v0
addu s1,v0,s1
addiu s5,sp,0x20
lw s3,-0x7dc4(gp)
li s4,0x1
b 0x00045288
_or s6,zero,zero
li v1,0x1
sb v1,0x0(v0)
lw a0,-0x7dc4(gp)
lw t9,-0x7a40(gp)
jalr t9
_nop
lw gp,0x10(sp)
b 0x0004516c
_lw a0,-0x7dc4(gp)
or s0,s6,zero
srl v0,s0,0x5
sll v0,v0,0x2
addu v0,s2,v0
sllv v1,s4,s0
lw a0,0x0(v0)
addu a0,v1,a0
sltu v1,a0,v1
bne v1,zero,0x00045330
_sw a0,0x0(v0)
beq s0,zero,0x0004534c
_nop
lw v0,0x10(s3)
lw t9,0x4(v0)
li a2,0x20
or a1,s5,zero
or a0,s3,zero
jalr t9
_nop
lw gp,0x10(sp)
lw v0,0x20(sp)
teq s1,zero
divu v0,s1
mfhi v0
addiu v0,v0,0x1
sltu v1,s0,v0
bne v1,zero,0x0004534c
_subu s0,s0,v0
beq s0,zero,0x0004534c
_srl v0,s0,0x5
sll v0,v0,0x2
addu v0,s2,v0
sllv v1,s4,s0
lw a0,0x0(v0)
xor v1,a0,v1
sw v1,0x0(v0)
lw v0,0x10(s3)
lw t9,0x4(v0)
li a2,0x20
or a1,s5,zero
or a0,s3,zero
jalr t9
_nop
lw gp,0x10(sp)
lw v0,0x20(sp)
teq s1,zero
divu v0,s1
mfhi v0
addiu v0,v0,0x1
sltu v1,s0,v0
bne v1,zero,0x00045258
_subu s0,s0,v0
b 0x00045260
_srl v0,s0,0x5
addiu v0,v0,0x4
lw v1,0x0(v0)
addiu v1,v1,0x1
beq v1,zero,0x00045330
_sw v1,0x0(v0)
b 0x00045280
_nop
lw v1,0x24(sp)
lw v0,-0x7b00(gp)
lw v0,0x0(v0)
bne v1,v0,0x00045384
_lw ra,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x48
lw t9,-0x7b70(gp)
jalr t9
_nop
(translation_unit "int __gmpn_random2(int param_1,int param_2,undefined4 param_3,uint param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  int *piVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  int iVar7;\n  uint *puVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint *puVar12;\n  int iVar13;\n  int iVar14;\n  undefined *puVar15;\n  uint local_2c;\n  uint local_28;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);\n  uVar10 = param_2 * 0x20 - (local_2c & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  *(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar7 = uVar1 - 2;\n  if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);\n  puVar15 = PTR___gmp_rands_0009b27c;\n  uVar1 = (local_28 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }\n  return *(int *)PTR___stack_chk_guard_0009b540;\n}\n\n" (function_definition "int __gmpn_random2(int param_1,int param_2,undefined4 param_3,uint param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  int *piVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  int iVar7;\n  uint *puVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint *puVar12;\n  int iVar13;\n  int iVar14;\n  undefined *puVar15;\n  uint local_2c;\n  uint local_28;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);\n  uVar10 = param_2 * 0x20 - (local_2c & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  *(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar7 = uVar1 - 2;\n  if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);\n  puVar15 = PTR___gmp_rands_0009b27c;\n  uVar1 = (local_28 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }\n  return *(int *)PTR___stack_chk_guard_0009b540;\n}" primitive_type (function_declarator "__gmpn_random2(int param_1,int param_2,undefined4 param_3,uint param_4)" identifier (parameter_list "(int param_1,int param_2,undefined4 param_3,uint param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int *piVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  int iVar7;\n  uint *puVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint *puVar12;\n  int iVar13;\n  int iVar14;\n  undefined *puVar15;\n  uint local_2c;\n  uint local_28;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);\n  uVar10 = param_2 * 0x20 - (local_2c & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  *(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar7 = uVar1 - 2;\n  if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);\n  puVar15 = PTR___gmp_rands_0009b27c;\n  uVar1 = (local_28 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }\n  return *(int *)PTR___stack_chk_guard_0009b540;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "uint *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "undefined *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "uint local_2c;" type_identifier identifier ;) (declaration "uint local_28;" type_identifier identifier ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "local_24 = *(int *)PTR___stack_chk_guard_0009b540;" (assignment_expression "local_24 = *(int *)PTR___stack_chk_guard_0009b540" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" * (cast_expression "(int *)PTR___stack_chk_guard_0009b540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }" if (parenthesized_expression "(*PTR___gmp_rands_initialized_0009b188 == '\0')" ( (binary_expression "*PTR___gmp_rands_initialized_0009b188 == '\0'" (pointer_expression "*PTR___gmp_rands_initialized_0009b188" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }" { (expression_statement "*PTR___gmp_rands_initialized_0009b188 = 1;" (assignment_expression "*PTR___gmp_rands_initialized_0009b188 = 1" (pointer_expression "*PTR___gmp_rands_initialized_0009b188" * identifier) = number_literal) ;) (expression_statement "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);" (call_expression "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c)" (parenthesized_expression "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)" ( (pointer_expression "*(code *)PTR___gmp_randinit_mt_noseed_0009b600" * (cast_expression "(code *)PTR___gmp_randinit_mt_noseed_0009b600" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR___gmp_rands_0009b27c)" ( identifier ))) ;) })) (expression_statement "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);" (call_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20)" (parenthesized_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (binary_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4" (pointer_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10)" * (cast_expression "(int *)(PTR___gmp_rands_0009b27c + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR___gmp_rands_0009b27c + 0x10)" ( (binary_expression "PTR___gmp_rands_0009b27c + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(PTR___gmp_rands_0009b27c,&local_2c,0x20)" ( identifier , (pointer_expression "&local_2c" & identifier) , number_literal ))) ;) (expression_statement "uVar10 = param_2 * 0x20 - (local_2c & 0x1f);" (assignment_expression "uVar10 = param_2 * 0x20 - (local_2c & 0x1f)" identifier = (binary_expression "param_2 * 0x20 - (local_2c & 0x1f)" (binary_expression "param_2 * 0x20" identifier * number_literal) - (parenthesized_expression "(local_2c & 0x1f)" ( (binary_expression "local_2c & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar1 = uVar10 + 0x1f >> 5;" (assignment_expression "uVar1 = uVar10 + 0x1f >> 5" identifier = (binary_expression "uVar10 + 0x1f >> 5" (binary_expression "uVar10 + 0x1f" identifier + number_literal) >> number_literal)) ;) (expression_statement "*(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);" (assignment_expression "*(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f)" (pointer_expression "*(uint *)(param_1 + (uVar1 - 1) * 4)" * (cast_expression "(uint *)(param_1 + (uVar1 - 1) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (uVar1 - 1) * 4)" ( (binary_expression "param_1 + (uVar1 - 1) * 4" identifier + (binary_expression "(uVar1 - 1) * 4" (parenthesized_expression "(uVar1 - 1)" ( (binary_expression "uVar1 - 1" identifier - number_literal) )) * number_literal)) )))) = (binary_expression "0xffffffff >> (-uVar10 & 0x1f)" number_literal >> (parenthesized_expression "(-uVar10 & 0x1f)" ( (binary_expression "-uVar10 & 0x1f" (unary_expression "-uVar10" - identifier) & number_literal) )))) ;) (expression_statement "iVar7 = uVar1 - 2;" (assignment_expression "iVar7 = uVar1 - 2" identifier = (binary_expression "uVar1 - 2" identifier - number_literal)) ;) (if_statement "if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }" if (parenthesized_expression "(-1 < iVar7)" ( (binary_expression "-1 < iVar7" number_literal < identifier) )) (compound_statement "{\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }" { (expression_statement "iVar2 = param_1 + uVar1 * 4;" (assignment_expression "iVar2 = param_1 + uVar1 * 4" identifier = (binary_expression "param_1 + uVar1 * 4" identifier + (binary_expression "uVar1 * 4" identifier * number_literal))) ;) (do_statement "do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);" do (compound_statement "{\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    }" { (expression_statement "*(undefined4 *)(iVar2 + -8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(iVar2 + -8) = 0xffffffff" (pointer_expression "*(undefined4 *)(iVar2 + -8)" * (cast_expression "(undefined4 *)(iVar2 + -8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + -8)" ( (binary_expression "iVar2 + -8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "iVar2 = iVar2 + -4;" (assignment_expression "iVar2 = iVar2 + -4" identifier = (binary_expression "iVar2 + -4" identifier + number_literal)) ;) }) while (parenthesized_expression "(-1 < iVar7)" ( (binary_expression "-1 < iVar7" number_literal < identifier) )) ;) })) (expression_statement "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);" (call_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20)" (parenthesized_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (binary_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4" (pointer_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10)" * (cast_expression "(int *)(PTR___gmp_rands_0009b27c + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR___gmp_rands_0009b27c + 0x10)" ( (binary_expression "PTR___gmp_rands_0009b27c + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(PTR___gmp_rands_0009b27c,&local_28,0x20)" ( identifier , (pointer_expression "&local_28" & identifier) , number_literal ))) ;) (expression_statement "puVar15 = PTR___gmp_rands_0009b27c;" (assignment_expression "puVar15 = PTR___gmp_rands_0009b27c" identifier = identifier) ;) (expression_statement "uVar1 = (local_28 & 3) + 1;" (assignment_expression "uVar1 = (local_28 & 3) + 1" identifier = (binary_expression "(local_28 & 3) + 1" (parenthesized_expression "(local_28 & 3)" ( (binary_expression "local_28 & 3" identifier & number_literal) )) + number_literal)) ;) (if_statement "if (uVar1 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;" (assignment_expression "uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1" identifier = (binary_expression "(uint)(uVar10 < uVar1) + uVar10 / uVar1" (call_expression "(uint)(uVar10 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar10 < uVar1)" ( (binary_expression "uVar10 < uVar1" identifier < identifier) ))) + (binary_expression "uVar10 / uVar1" identifier / identifier))) ;) (do_statement "do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);" do (compound_statement "{\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  }" { (expression_statement "iVar7 = 0x20;" (assignment_expression "iVar7 = 0x20" identifier = number_literal) ;) (expression_statement "puVar9 = (uint *)puVar15;" (assignment_expression "puVar9 = (uint *)puVar15" identifier = (cast_expression "(uint *)puVar15" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "puVar5 = &local_28;" (assignment_expression "puVar5 = &local_28" identifier = (pointer_expression "&local_28" & identifier)) ;) (expression_statement "(**(code **)(*(int *)(puVar15 + 0x10) + 4))();" (call_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))()" (parenthesized_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(puVar15 + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(puVar15 + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(puVar15 + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(puVar15 + 0x10) + 4)" ( (binary_expression "*(int *)(puVar15 + 0x10) + 4" (pointer_expression "*(int *)(puVar15 + 0x10)" * (cast_expression "(int *)(puVar15 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar15 + 0x10)" ( (binary_expression "puVar15 + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (if_statement "if (uVar1 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar4 = local_28 % uVar1 + 1;" (assignment_expression "uVar4 = local_28 % uVar1 + 1" identifier = (binary_expression "local_28 % uVar1 + 1" (binary_expression "local_28 % uVar1" identifier % identifier) + number_literal)) ;) (expression_statement "uVar11 = uVar10 - uVar4;" (assignment_expression "uVar11 = uVar10 - uVar4" identifier = (binary_expression "uVar10 - uVar4" identifier - identifier)) ;) (if_statement "if ((uVar10 < uVar4) || (uVar11 == 0)) break;" if (parenthesized_expression "((uVar10 < uVar4) || (uVar11 == 0))" ( (binary_expression "(uVar10 < uVar4) || (uVar11 == 0)" (parenthesized_expression "(uVar10 < uVar4)" ( (binary_expression "uVar10 < uVar4" identifier < identifier) )) || (parenthesized_expression "(uVar11 == 0)" ( (binary_expression "uVar11 == 0" identifier == number_literal) ))) )) (break_statement "break;" break ;)) (expression_statement "puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);" (assignment_expression "puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4)" identifier = (cast_expression "(uint *)(param_1 + (uVar11 >> 5) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (uVar11 >> 5) * 4)" ( (binary_expression "param_1 + (uVar11 >> 5) * 4" identifier + (binary_expression "(uVar11 >> 5) * 4" (parenthesized_expression "(uVar11 >> 5)" ( (binary_expression "uVar11 >> 5" identifier >> number_literal) )) * number_literal)) )))) ;) (expression_statement "*puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);" (assignment_expression "*puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f)" (pointer_expression "*puVar5" * identifier) = (binary_expression "*puVar5 ^ 1 << (uVar11 & 0x1f)" (pointer_expression "*puVar5" * identifier) ^ (binary_expression "1 << (uVar11 & 0x1f)" number_literal << (parenthesized_expression "(uVar11 & 0x1f)" ( (binary_expression "uVar11 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "iVar7 = 0x20;" (assignment_expression "iVar7 = 0x20" identifier = number_literal) ;) (expression_statement "puVar5 = &local_28;" (assignment_expression "puVar5 = &local_28" identifier = (pointer_expression "&local_28" & identifier)) ;) (expression_statement "(**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);" (call_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15)" (parenthesized_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(puVar15 + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(puVar15 + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(puVar15 + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(puVar15 + 0x10) + 4)" ( (binary_expression "*(int *)(puVar15 + 0x10) + 4" (pointer_expression "*(int *)(puVar15 + 0x10)" * (cast_expression "(int *)(puVar15 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar15 + 0x10)" ( (binary_expression "puVar15 + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(puVar15)" ( identifier ))) ;) (if_statement "if (uVar1 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar4 = local_28 % uVar1 + 1;" (assignment_expression "uVar4 = local_28 % uVar1 + 1" identifier = (binary_expression "local_28 % uVar1 + 1" (binary_expression "local_28 % uVar1" identifier % identifier) + number_literal)) ;) (expression_statement "uVar10 = uVar11 - uVar4;" (assignment_expression "uVar10 = uVar11 - uVar4" identifier = (binary_expression "uVar11 - uVar4" identifier - identifier)) ;) (if_statement "if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }" if (parenthesized_expression "(uVar11 < uVar4)" ( (binary_expression "uVar11 < uVar4" identifier < identifier) )) (compound_statement "{\n      uVar10 = 0;\n      uVar4 = 0;\n    }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      uVar4 = uVar10 >> 5;\n    }" else (compound_statement "{\n      uVar4 = uVar10 >> 5;\n    }" { (expression_statement "uVar4 = uVar10 >> 5;" (assignment_expression "uVar4 = uVar10 >> 5" identifier = (binary_expression "uVar10 >> 5" identifier >> number_literal)) ;) }))) (expression_statement "piVar3 = (int *)(param_1 + uVar4 * 4);" (assignment_expression "piVar3 = (int *)(param_1 + uVar4 * 4)" identifier = (cast_expression "(int *)(param_1 + uVar4 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + uVar4 * 4)" ( (binary_expression "param_1 + uVar4 * 4" identifier + (binary_expression "uVar4 * 4" identifier * number_literal)) )))) ;) (expression_statement "puVar8 = (uint *)(1 << (uVar10 & 0x1f));" (assignment_expression "puVar8 = (uint *)(1 << (uVar10 & 0x1f))" identifier = (cast_expression "(uint *)(1 << (uVar10 & 0x1f))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(1 << (uVar10 & 0x1f))" ( (binary_expression "1 << (uVar10 & 0x1f)" number_literal << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) )))) ;) (expression_statement "puVar9 = (uint *)((int)puVar8 + *piVar3);" (assignment_expression "puVar9 = (uint *)((int)puVar8 + *piVar3)" identifier = (cast_expression "(uint *)((int)puVar8 + *piVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar8 + *piVar3)" ( (binary_expression "(int)puVar8 + *piVar3" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*piVar3" * identifier)) )))) ;) (expression_statement "*piVar3 = (int)puVar9;" (assignment_expression "*piVar3 = (int)puVar9" (pointer_expression "*piVar3" * identifier) = (cast_expression "(int)puVar9" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }" if (parenthesized_expression "(puVar9 < puVar8)" ( (binary_expression "puVar9 < puVar8" identifier < identifier) )) (compound_statement "{\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }" { (do_statement "do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);" do (compound_statement "{\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      }" { (expression_statement "piVar3 = piVar3 + 1;" (assignment_expression "piVar3 = piVar3 + 1" identifier = (binary_expression "piVar3 + 1" identifier + number_literal)) ;) (expression_statement "iVar2 = *piVar3;" (assignment_expression "iVar2 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "*piVar3 = iVar2 + 1;" (assignment_expression "*piVar3 = iVar2 + 1" (pointer_expression "*piVar3" * identifier) = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar2 + 1 == 0)" ( (binary_expression "iVar2 + 1 == 0" (binary_expression "iVar2 + 1" identifier + number_literal) == number_literal) )) ;) })) }) while (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) ;) (if_statement "if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }" if (parenthesized_expression "(local_24 != *(int *)PTR___stack_chk_guard_0009b540)" ( (binary_expression "local_24 != *(int *)PTR___stack_chk_guard_0009b540" identifier != (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" * (cast_expression "(int *)PTR___stack_chk_guard_0009b540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }" { (expression_statement "puVar15 = PTR___stack_chk_fail_0009b4d0;" (assignment_expression "puVar15 = PTR___stack_chk_fail_0009b4d0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_0009b4d0)();" (call_expression "(*(code *)PTR___stack_chk_fail_0009b4d0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0009b4d0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0009b4d0" * (cast_expression "(code *)PTR___stack_chk_fail_0009b4d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }" if (parenthesized_expression "(param_4 < 2)" ( (binary_expression "param_4 < 2" identifier < number_literal) )) (compound_statement "{\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }" { (if_statement "if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        *puVar9 = 1;\n        iVar2 = 1;\n      }" { (expression_statement "*puVar9 = 1;" (assignment_expression "*puVar9 = 1" (pointer_expression "*puVar9" * identifier) = number_literal) ;) (expression_statement "iVar2 = 1;" (assignment_expression "iVar2 = 1" identifier = number_literal) ;) }) (else_clause "else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }" else (compound_statement "{\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }" { (expression_statement "iVar2 = iVar7;" (assignment_expression "iVar2 = iVar7" identifier = identifier) ;) (if_statement "if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }" { (expression_statement "iVar13 = iVar7 + -1;" (assignment_expression "iVar13 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (if_statement "if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }" if (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) (compound_statement "{\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }" { (do_statement "do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);" do (compound_statement "{\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            }" { (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "*puVar8 = uVar1;" (assignment_expression "*puVar8 = uVar1" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "iVar13 = iVar13 + -1;" (assignment_expression "iVar13 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) ;) (expression_statement "puVar9 = puVar9 + iVar7 + 0x3fffffff;" (assignment_expression "puVar9 = puVar9 + iVar7 + 0x3fffffff" identifier = (binary_expression "puVar9 + iVar7 + 0x3fffffff" (binary_expression "puVar9 + iVar7" identifier + identifier) + number_literal)) ;) })) (expression_statement "*puVar9 = uVar1;" (assignment_expression "*puVar9 = uVar1" (pointer_expression "*puVar9" * identifier) = identifier) ;) })) }))) }) (else_clause "else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }" else (compound_statement "{\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0x20;" (assignment_expression "uVar4 = 0x20" identifier = number_literal) ;) (expression_statement "uVar1 = param_4;" (assignment_expression "uVar1 = param_4" identifier = identifier) ;) (do_statement "do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);" do (compound_statement "{\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      }" { (expression_statement "uVar10 = uVar10 ^ uVar1;" (assignment_expression "uVar10 = uVar10 ^ uVar1" identifier = (binary_expression "uVar10 ^ uVar1" identifier ^ identifier)) ;) (expression_statement "uVar1 = uVar1 >> 1;" (assignment_expression "uVar1 = uVar1 >> 1" identifier = (binary_expression "uVar1 >> 1" identifier >> number_literal)) ;) (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) )) ;) (expression_statement "iVar13 = param_4 << (uVar4 & 0x1f);" (assignment_expression "iVar13 = param_4 << (uVar4 & 0x1f)" identifier = (binary_expression "param_4 << (uVar4 & 0x1f)" identifier << (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }" if (parenthesized_expression "(iVar7 == 1)" ( (binary_expression "iVar7 == 1" identifier == number_literal) )) (compound_statement "{\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }" { (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar8 = (uint *)&_gp_1;" (assignment_expression "puVar8 = (uint *)&_gp_1" identifier = (cast_expression "(uint *)&_gp_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp_1" & identifier))) ;) (if_statement "if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" if (parenthesized_expression "((uVar4 & 1) != 0)" ( (binary_expression "(uVar4 & 1) != 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" { (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (expression_statement "puVar9 = (uint *)&_gp_1;" (assignment_expression "puVar9 = (uint *)&_gp_1" identifier = (cast_expression "(uint *)&_gp_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp_1" & identifier))) ;) })) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" ( (pointer_expression "**(code **)(puVar15 + 0x56004)" * (pointer_expression "*(code **)(puVar15 + 0x56004)" * (cast_expression "(code **)(puVar15 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x56004)" ( (binary_expression "puVar15 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(puVar9,puVar5,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "iVar2 = 2 - (uint)(puVar9[1] == 0);" (assignment_expression "iVar2 = 2 - (uint)(puVar9[1] == 0)" identifier = (binary_expression "2 - (uint)(puVar9[1] == 0)" number_literal - (call_expression "(uint)(puVar9[1] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(puVar9[1] == 0)" ( (binary_expression "puVar9[1] == 0" (subscript_expression "puVar9[1]" identifier [ number_literal ]) == number_literal) ))))) ;) (expression_statement "iVar7 = 0x1f - uVar4;" (assignment_expression "iVar7 = 0x1f - uVar4" identifier = (binary_expression "0x1f - uVar4" number_literal - identifier)) ;) (while_statement "while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }" { (expression_statement "puVar5 = puVar8;" (assignment_expression "puVar5 = puVar8" identifier = identifier) ;) (expression_statement "iVar13 = iVar13 << 1;" (assignment_expression "iVar13 = iVar13 << 1" identifier = (binary_expression "iVar13 << 1" identifier << number_literal)) ;) (if_statement "if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }" if (parenthesized_expression "(iVar13 < 0)" ( (binary_expression "iVar13 < 0" identifier < number_literal) )) (compound_statement "{\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }" { (expression_statement "uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);" (assignment_expression "uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1)" identifier = (call_expression "(**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1)" (parenthesized_expression "(**(code **)(puVar15 + 0x55d14))" ( (pointer_expression "**(code **)(puVar15 + 0x55d14)" * (pointer_expression "*(code **)(puVar15 + 0x55d14)" * (cast_expression "(code **)(puVar15 + 0x55d14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x55d14)" ( (binary_expression "puVar15 + 0x55d14" identifier + number_literal) ))))) )) (argument_list "(puVar9,puVar9,iVar2,uVar1)" ( identifier , identifier , identifier , identifier )))) ;) (expression_statement "puVar9[iVar2] = uVar10;" (assignment_expression "puVar9[iVar2] = uVar10" (subscript_expression "puVar9[iVar2]" identifier [ identifier ]) = identifier) ;) (expression_statement "iVar2 = iVar2 + (uint)(uVar10 != 0);" (assignment_expression "iVar2 = iVar2 + (uint)(uVar10 != 0)" identifier = (binary_expression "iVar2 + (uint)(uVar10 != 0)" identifier + (call_expression "(uint)(uVar10 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) ))))) ;) })) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (if_statement "if (iVar7 == 0) break;" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" ( (pointer_expression "**(code **)(puVar15 + 0x56004)" * (pointer_expression "*(code **)(puVar15 + 0x56004)" * (cast_expression "(code **)(puVar15 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x56004)" ( (binary_expression "puVar15 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(puVar5,puVar9,iVar2)" ( identifier , identifier , identifier ))) ;) (expression_statement "iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" identifier = (binary_expression "iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar2 * 2" identifier * number_literal) - (call_expression "(uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" ( (binary_expression "puVar5[iVar2 * 2 + 0x3fffffff] == 0" (subscript_expression "puVar5[iVar2 * 2 + 0x3fffffff]" identifier [ (binary_expression "iVar2 * 2 + 0x3fffffff" (binary_expression "iVar2 * 2" identifier * number_literal) + number_literal) ]) == number_literal) ))))) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (expression_statement "puVar9 = puVar5;" (assignment_expression "puVar9 = puVar5" identifier = identifier) ;) })) }) (else_clause "else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }" else (compound_statement "{\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }" { (expression_statement "puVar8 = (uint *)&_gp_1;" (assignment_expression "puVar8 = (uint *)&_gp_1" identifier = (cast_expression "(uint *)&_gp_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp_1" & identifier))) ;) (if_statement "if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" if (parenthesized_expression "(((uVar10 ^ uVar4) & 1) == 0)" ( (binary_expression "((uVar10 ^ uVar4) & 1) == 0" (parenthesized_expression "((uVar10 ^ uVar4) & 1)" ( (binary_expression "(uVar10 ^ uVar4) & 1" (parenthesized_expression "(uVar10 ^ uVar4)" ( (binary_expression "uVar10 ^ uVar4" identifier ^ identifier) )) & number_literal) )) == number_literal) )) (compound_statement "{\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" { (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (expression_statement "puVar9 = (uint *)&_gp_1;" (assignment_expression "puVar9 = (uint *)&_gp_1" identifier = (cast_expression "(uint *)&_gp_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp_1" & identifier))) ;) })) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" ( (pointer_expression "**(code **)(puVar15 + 0x56004)" * (pointer_expression "*(code **)(puVar15 + 0x56004)" * (cast_expression "(code **)(puVar15 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x56004)" ( (binary_expression "puVar15 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(puVar9,puVar5,iVar7)" ( identifier , identifier , identifier ))) ;) (expression_statement "iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" identifier = (binary_expression "iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar7 * 2" identifier * number_literal) - (call_expression "(uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" ( (binary_expression "puVar9[iVar7 * 2 + 0x3fffffff] == 0" (subscript_expression "puVar9[iVar7 * 2 + 0x3fffffff]" identifier [ (binary_expression "iVar7 * 2 + 0x3fffffff" (binary_expression "iVar7 * 2" identifier * number_literal) + number_literal) ]) == number_literal) ))))) ;) (expression_statement "iVar14 = 0x1f - uVar4;" (assignment_expression "iVar14 = 0x1f - uVar4" identifier = (binary_expression "0x1f - uVar4" number_literal - identifier)) ;) (while_statement "while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }" { (expression_statement "iVar13 = iVar13 << 1;" (assignment_expression "iVar13 = iVar13 << 1" identifier = (binary_expression "iVar13 << 1" identifier << number_literal)) ;) (expression_statement "puVar12 = puVar8;" (assignment_expression "puVar12 = puVar8" identifier = identifier) ;) (if_statement "if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }" if (parenthesized_expression "(iVar13 < 0)" ( (binary_expression "iVar13 < 0" identifier < number_literal) )) (compound_statement "{\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }" { (expression_statement "iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);" (assignment_expression "iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7)" identifier = (call_expression "(**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7)" (parenthesized_expression "(**(code **)(puVar15 + 0x55f24))" ( (pointer_expression "**(code **)(puVar15 + 0x55f24)" * (pointer_expression "*(code **)(puVar15 + 0x55f24)" * (cast_expression "(code **)(puVar15 + 0x55f24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x55f24)" ( (binary_expression "puVar15 + 0x55f24" identifier + number_literal) ))))) )) (argument_list "(puVar8,puVar9,iVar2,puVar5,iVar7)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);" (assignment_expression "iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0)" identifier = (binary_expression "(iVar2 + iVar7) - (uint)(iVar6 == 0)" (parenthesized_expression "(iVar2 + iVar7)" ( (binary_expression "iVar2 + iVar7" identifier + identifier) )) - (call_expression "(uint)(iVar6 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) ))))) ;) (expression_statement "puVar12 = puVar9;" (assignment_expression "puVar12 = puVar9" identifier = identifier) ;) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" identifier = identifier) ;) })) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (expression_statement "iVar14 = iVar14 + -1;" (assignment_expression "iVar14 = iVar14 + -1" identifier = (binary_expression "iVar14 + -1" identifier + number_literal)) ;) (if_statement "if (iVar14 == 0) break;" if (parenthesized_expression "(iVar14 == 0)" ( (binary_expression "iVar14 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" ( (pointer_expression "**(code **)(puVar15 + 0x56004)" * (pointer_expression "*(code **)(puVar15 + 0x56004)" * (cast_expression "(code **)(puVar15 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x56004)" ( (binary_expression "puVar15 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(puVar12,puVar8,iVar2)" ( identifier , identifier , identifier ))) ;) (expression_statement "iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" identifier = (binary_expression "iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar2 * 2" identifier * number_literal) - (call_expression "(uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" ( (binary_expression "puVar12[iVar2 * 2 + 0x3fffffff] == 0" (subscript_expression "puVar12[iVar2 * 2 + 0x3fffffff]" identifier [ (binary_expression "iVar2 * 2 + 0x3fffffff" (binary_expression "iVar2 * 2" identifier * number_literal) + number_literal) ]) == number_literal) ))))) ;) (expression_statement "puVar9 = puVar12;" (assignment_expression "puVar9 = puVar12" identifier = identifier) ;) })) }))) }))) (return_statement "return iVar2;" return identifier ;) })) (return_statement "return *(int *)PTR___stack_chk_guard_0009b540;" return (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" * (cast_expression "(int *)PTR___stack_chk_guard_0009b540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) })))
(translation_unit "void __gmpn_random2(mp_ptr rp,mp_size_t n)\n\n{\n  uint uVar1;\n  uint uVar2;\n  mp_ptr pmVar3;\n  mp_limb_t mVar4;\n  int iVar5;\n  int iVar6;\n  mp_limb_t *pmVar7;\n  mp_limb_t *pmVar8;\n  mp_limb_t *pmVar9;\n  uint in_a3;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  mp_limb_t *pmVar13;\n  int iVar14;\n  int iVar15;\n  mp_limb_t mVar16;\n  undefined *puVar17;\n  mp_limb_t ranm;\n  mp_limb_t ranm_1;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))(PTR___gmp_rands_0009b27c,&ranm,0x20);\n  uVar10 = n * 0x20 - (ranm & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  rp[uVar1 - 1] = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar6 = uVar1 - 2;\n  if (-1 < iVar6) {\n    pmVar3 = rp + uVar1;\n    do {\n      pmVar3[-2] = 0xffffffff;\n      iVar6 = iVar6 + -1;\n      pmVar3 = pmVar3 + -1;\n    } while (-1 < iVar6);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&ranm_1,0x20);\n  puVar17 = PTR___gmp_rands_0009b27c;\n  uVar1 = (ranm_1 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar6 = 0x20;\n    pmVar8 = (mp_limb_t *)puVar17;\n    pmVar9 = &ranm_1;\n    (**(code **)(*(int *)(puVar17 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar2 = ranm_1 % uVar1 + 1;\n    uVar11 = uVar10 - uVar2;\n    if ((uVar10 < uVar2) || (uVar11 == 0)) break;\n    rp[uVar11 >> 5] = rp[uVar11 >> 5] ^ 1 << (uVar11 & 0x1f);\n    iVar6 = 0x20;\n    pmVar9 = &ranm_1;\n    (**(code **)(*(int *)(puVar17 + 0x10) + 4))(puVar17);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar2 = ranm_1 % uVar1 + 1;\n    uVar10 = uVar11 - uVar2;\n    if (uVar11 < uVar2) {\n      uVar10 = 0;\n      uVar2 = 0;\n    }\n    else {\n      uVar2 = uVar10 >> 5;\n    }\n    pmVar3 = rp + uVar2;\n    pmVar7 = (mp_limb_t *)(1 << (uVar10 & 0x1f));\n    pmVar8 = (mp_limb_t *)((int)pmVar7 + *pmVar3);\n    *pmVar3 = (mp_limb_t)pmVar8;\n    if (pmVar8 < pmVar7) {\n      do {\n        pmVar3 = pmVar3 + 1;\n        mVar16 = *pmVar3;\n        *pmVar3 = mVar16 + 1;\n      } while (mVar16 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar17 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (in_a3 < 2) {\n      if (in_a3 == 0) {\n        *pmVar8 = 1;\n      }\n      else if (iVar6 != 0) {\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar2 = 0x20;\n      uVar1 = in_a3;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar2 = uVar2 - 1;\n      } while (uVar1 != 0);\n      iVar14 = in_a3 << (uVar2 & 0x1f);\n      if (iVar6 == 1) {\n        mVar16 = *pmVar9;\n        pmVar7 = (mp_limb_t *)&_gp;\n        if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);\n        iVar6 = 2 - (uint)(pmVar8[1] == 0);\n        iVar12 = 0x1f - uVar2;\n        while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }\n      }\n      else {\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }\n    }\n    return;\n  }\n  return;\n}\n\n" (function_definition "void __gmpn_random2(mp_ptr rp,mp_size_t n)\n\n{\n  uint uVar1;\n  uint uVar2;\n  mp_ptr pmVar3;\n  mp_limb_t mVar4;\n  int iVar5;\n  int iVar6;\n  mp_limb_t *pmVar7;\n  mp_limb_t *pmVar8;\n  mp_limb_t *pmVar9;\n  uint in_a3;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  mp_limb_t *pmVar13;\n  int iVar14;\n  int iVar15;\n  mp_limb_t mVar16;\n  undefined *puVar17;\n  mp_limb_t ranm;\n  mp_limb_t ranm_1;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))(PTR___gmp_rands_0009b27c,&ranm,0x20);\n  uVar10 = n * 0x20 - (ranm & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  rp[uVar1 - 1] = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar6 = uVar1 - 2;\n  if (-1 < iVar6) {\n    pmVar3 = rp + uVar1;\n    do {\n      pmVar3[-2] = 0xffffffff;\n      iVar6 = iVar6 + -1;\n      pmVar3 = pmVar3 + -1;\n    } while (-1 < iVar6);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&ranm_1,0x20);\n  puVar17 = PTR___gmp_rands_0009b27c;\n  uVar1 = (ranm_1 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar6 = 0x20;\n    pmVar8 = (mp_limb_t *)puVar17;\n    pmVar9 = &ranm_1;\n    (**(code **)(*(int *)(puVar17 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar2 = ranm_1 % uVar1 + 1;\n    uVar11 = uVar10 - uVar2;\n    if ((uVar10 < uVar2) || (uVar11 == 0)) break;\n    rp[uVar11 >> 5] = rp[uVar11 >> 5] ^ 1 << (uVar11 & 0x1f);\n    iVar6 = 0x20;\n    pmVar9 = &ranm_1;\n    (**(code **)(*(int *)(puVar17 + 0x10) + 4))(puVar17);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar2 = ranm_1 % uVar1 + 1;\n    uVar10 = uVar11 - uVar2;\n    if (uVar11 < uVar2) {\n      uVar10 = 0;\n      uVar2 = 0;\n    }\n    else {\n      uVar2 = uVar10 >> 5;\n    }\n    pmVar3 = rp + uVar2;\n    pmVar7 = (mp_limb_t *)(1 << (uVar10 & 0x1f));\n    pmVar8 = (mp_limb_t *)((int)pmVar7 + *pmVar3);\n    *pmVar3 = (mp_limb_t)pmVar8;\n    if (pmVar8 < pmVar7) {\n      do {\n        pmVar3 = pmVar3 + 1;\n        mVar16 = *pmVar3;\n        *pmVar3 = mVar16 + 1;\n      } while (mVar16 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar17 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (in_a3 < 2) {\n      if (in_a3 == 0) {\n        *pmVar8 = 1;\n      }\n      else if (iVar6 != 0) {\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar2 = 0x20;\n      uVar1 = in_a3;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar2 = uVar2 - 1;\n      } while (uVar1 != 0);\n      iVar14 = in_a3 << (uVar2 & 0x1f);\n      if (iVar6 == 1) {\n        mVar16 = *pmVar9;\n        pmVar7 = (mp_limb_t *)&_gp;\n        if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);\n        iVar6 = 2 - (uint)(pmVar8[1] == 0);\n        iVar12 = 0x1f - uVar2;\n        while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }\n      }\n      else {\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }\n    }\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "__gmpn_random2(mp_ptr rp,mp_size_t n)" identifier (parameter_list "(mp_ptr rp,mp_size_t n)" ( (parameter_declaration "mp_ptr rp" type_identifier identifier) , (parameter_declaration "mp_size_t n" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  mp_ptr pmVar3;\n  mp_limb_t mVar4;\n  int iVar5;\n  int iVar6;\n  mp_limb_t *pmVar7;\n  mp_limb_t *pmVar8;\n  mp_limb_t *pmVar9;\n  uint in_a3;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  mp_limb_t *pmVar13;\n  int iVar14;\n  int iVar15;\n  mp_limb_t mVar16;\n  undefined *puVar17;\n  mp_limb_t ranm;\n  mp_limb_t ranm_1;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))(PTR___gmp_rands_0009b27c,&ranm,0x20);\n  uVar10 = n * 0x20 - (ranm & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  rp[uVar1 - 1] = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar6 = uVar1 - 2;\n  if (-1 < iVar6) {\n    pmVar3 = rp + uVar1;\n    do {\n      pmVar3[-2] = 0xffffffff;\n      iVar6 = iVar6 + -1;\n      pmVar3 = pmVar3 + -1;\n    } while (-1 < iVar6);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&ranm_1,0x20);\n  puVar17 = PTR___gmp_rands_0009b27c;\n  uVar1 = (ranm_1 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar6 = 0x20;\n    pmVar8 = (mp_limb_t *)puVar17;\n    pmVar9 = &ranm_1;\n    (**(code **)(*(int *)(puVar17 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar2 = ranm_1 % uVar1 + 1;\n    uVar11 = uVar10 - uVar2;\n    if ((uVar10 < uVar2) || (uVar11 == 0)) break;\n    rp[uVar11 >> 5] = rp[uVar11 >> 5] ^ 1 << (uVar11 & 0x1f);\n    iVar6 = 0x20;\n    pmVar9 = &ranm_1;\n    (**(code **)(*(int *)(puVar17 + 0x10) + 4))(puVar17);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar2 = ranm_1 % uVar1 + 1;\n    uVar10 = uVar11 - uVar2;\n    if (uVar11 < uVar2) {\n      uVar10 = 0;\n      uVar2 = 0;\n    }\n    else {\n      uVar2 = uVar10 >> 5;\n    }\n    pmVar3 = rp + uVar2;\n    pmVar7 = (mp_limb_t *)(1 << (uVar10 & 0x1f));\n    pmVar8 = (mp_limb_t *)((int)pmVar7 + *pmVar3);\n    *pmVar3 = (mp_limb_t)pmVar8;\n    if (pmVar8 < pmVar7) {\n      do {\n        pmVar3 = pmVar3 + 1;\n        mVar16 = *pmVar3;\n        *pmVar3 = mVar16 + 1;\n      } while (mVar16 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar17 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (in_a3 < 2) {\n      if (in_a3 == 0) {\n        *pmVar8 = 1;\n      }\n      else if (iVar6 != 0) {\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar2 = 0x20;\n      uVar1 = in_a3;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar2 = uVar2 - 1;\n      } while (uVar1 != 0);\n      iVar14 = in_a3 << (uVar2 & 0x1f);\n      if (iVar6 == 1) {\n        mVar16 = *pmVar9;\n        pmVar7 = (mp_limb_t *)&_gp;\n        if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);\n        iVar6 = 2 - (uint)(pmVar8[1] == 0);\n        iVar12 = 0x1f - uVar2;\n        while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }\n      }\n      else {\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }\n    }\n    return;\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "mp_ptr pmVar3;" type_identifier identifier ;) (declaration "mp_limb_t mVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "mp_limb_t *pmVar7;" type_identifier (pointer_declarator "*pmVar7" * identifier) ;) (declaration "mp_limb_t *pmVar8;" type_identifier (pointer_declarator "*pmVar8" * identifier) ;) (declaration "mp_limb_t *pmVar9;" type_identifier (pointer_declarator "*pmVar9" * identifier) ;) (declaration "uint in_a3;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "mp_limb_t *pmVar13;" type_identifier (pointer_declarator "*pmVar13" * identifier) ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "mp_limb_t mVar16;" type_identifier identifier ;) (declaration "undefined *puVar17;" type_identifier (pointer_declarator "*puVar17" * identifier) ;) (declaration "mp_limb_t ranm;" type_identifier identifier ;) (declaration "mp_limb_t ranm_1;" type_identifier identifier ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "local_24 = *(int *)PTR___stack_chk_guard_0009b540;" (assignment_expression "local_24 = *(int *)PTR___stack_chk_guard_0009b540" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" * (cast_expression "(int *)PTR___stack_chk_guard_0009b540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }" if (parenthesized_expression "(*PTR___gmp_rands_initialized_0009b188 == '\0')" ( (binary_expression "*PTR___gmp_rands_initialized_0009b188 == '\0'" (pointer_expression "*PTR___gmp_rands_initialized_0009b188" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }" { (expression_statement "*PTR___gmp_rands_initialized_0009b188 = 1;" (assignment_expression "*PTR___gmp_rands_initialized_0009b188 = 1" (pointer_expression "*PTR___gmp_rands_initialized_0009b188" * identifier) = number_literal) ;) (expression_statement "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);" (call_expression "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c)" (parenthesized_expression "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)" ( (pointer_expression "*(code *)PTR___gmp_randinit_mt_noseed_0009b600" * (cast_expression "(code *)PTR___gmp_randinit_mt_noseed_0009b600" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR___gmp_rands_0009b27c)" ( identifier ))) ;) })) (expression_statement "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))(PTR___gmp_rands_0009b27c,&ranm,0x20);" (call_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))(PTR___gmp_rands_0009b27c,&ranm,0x20)" (parenthesized_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (binary_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4" (pointer_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10)" * (cast_expression "(int *)(PTR___gmp_rands_0009b27c + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR___gmp_rands_0009b27c + 0x10)" ( (binary_expression "PTR___gmp_rands_0009b27c + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(PTR___gmp_rands_0009b27c,&ranm,0x20)" ( identifier , (pointer_expression "&ranm" & identifier) , number_literal ))) ;) (expression_statement "uVar10 = n * 0x20 - (ranm & 0x1f);" (assignment_expression "uVar10 = n * 0x20 - (ranm & 0x1f)" identifier = (binary_expression "n * 0x20 - (ranm & 0x1f)" (binary_expression "n * 0x20" identifier * number_literal) - (parenthesized_expression "(ranm & 0x1f)" ( (binary_expression "ranm & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar1 = uVar10 + 0x1f >> 5;" (assignment_expression "uVar1 = uVar10 + 0x1f >> 5" identifier = (binary_expression "uVar10 + 0x1f >> 5" (binary_expression "uVar10 + 0x1f" identifier + number_literal) >> number_literal)) ;) (expression_statement "rp[uVar1 - 1] = 0xffffffff >> (-uVar10 & 0x1f);" (assignment_expression "rp[uVar1 - 1] = 0xffffffff >> (-uVar10 & 0x1f)" (subscript_expression "rp[uVar1 - 1]" identifier [ (binary_expression "uVar1 - 1" identifier - number_literal) ]) = (binary_expression "0xffffffff >> (-uVar10 & 0x1f)" number_literal >> (parenthesized_expression "(-uVar10 & 0x1f)" ( (binary_expression "-uVar10 & 0x1f" (unary_expression "-uVar10" - identifier) & number_literal) )))) ;) (expression_statement "iVar6 = uVar1 - 2;" (assignment_expression "iVar6 = uVar1 - 2" identifier = (binary_expression "uVar1 - 2" identifier - number_literal)) ;) (if_statement "if (-1 < iVar6) {\n    pmVar3 = rp + uVar1;\n    do {\n      pmVar3[-2] = 0xffffffff;\n      iVar6 = iVar6 + -1;\n      pmVar3 = pmVar3 + -1;\n    } while (-1 < iVar6);\n  }" if (parenthesized_expression "(-1 < iVar6)" ( (binary_expression "-1 < iVar6" number_literal < identifier) )) (compound_statement "{\n    pmVar3 = rp + uVar1;\n    do {\n      pmVar3[-2] = 0xffffffff;\n      iVar6 = iVar6 + -1;\n      pmVar3 = pmVar3 + -1;\n    } while (-1 < iVar6);\n  }" { (expression_statement "pmVar3 = rp + uVar1;" (assignment_expression "pmVar3 = rp + uVar1" identifier = (binary_expression "rp + uVar1" identifier + identifier)) ;) (do_statement "do {\n      pmVar3[-2] = 0xffffffff;\n      iVar6 = iVar6 + -1;\n      pmVar3 = pmVar3 + -1;\n    } while (-1 < iVar6);" do (compound_statement "{\n      pmVar3[-2] = 0xffffffff;\n      iVar6 = iVar6 + -1;\n      pmVar3 = pmVar3 + -1;\n    }" { (expression_statement "pmVar3[-2] = 0xffffffff;" (assignment_expression "pmVar3[-2] = 0xffffffff" (subscript_expression "pmVar3[-2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "pmVar3 = pmVar3 + -1;" (assignment_expression "pmVar3 = pmVar3 + -1" identifier = (binary_expression "pmVar3 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(-1 < iVar6)" ( (binary_expression "-1 < iVar6" number_literal < identifier) )) ;) })) (expression_statement "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&ranm_1,0x20);" (call_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&ranm_1,0x20)" (parenthesized_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (binary_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4" (pointer_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10)" * (cast_expression "(int *)(PTR___gmp_rands_0009b27c + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR___gmp_rands_0009b27c + 0x10)" ( (binary_expression "PTR___gmp_rands_0009b27c + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(PTR___gmp_rands_0009b27c,&ranm_1,0x20)" ( identifier , (pointer_expression "&ranm_1" & identifier) , number_literal ))) ;) (expression_statement "puVar17 = PTR___gmp_rands_0009b27c;" (assignment_expression "puVar17 = PTR___gmp_rands_0009b27c" identifier = identifier) ;) (expression_statement "uVar1 = (ranm_1 & 3) + 1;" (assignment_expression "uVar1 = (ranm_1 & 3) + 1" identifier = (binary_expression "(ranm_1 & 3) + 1" (parenthesized_expression "(ranm_1 & 3)" ( (binary_expression "ranm_1 & 3" identifier & number_literal) )) + number_literal)) ;) (if_statement "if (uVar1 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;" (assignment_expression "uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1" identifier = (binary_expression "(uint)(uVar10 < uVar1) + uVar10 / uVar1" (call_expression "(uint)(uVar10 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar10 < uVar1)" ( (binary_expression "uVar10 < uVar1" identifier < identifier) ))) + (binary_expression "uVar10 / uVar1" identifier / identifier))) ;) (do_statement "do {\n    iVar6 = 0x20;\n    pmVar8 = (mp_limb_t *)puVar17;\n    pmVar9 = &ranm_1;\n    (**(code **)(*(int *)(puVar17 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar2 = ranm_1 % uVar1 + 1;\n    uVar11 = uVar10 - uVar2;\n    if ((uVar10 < uVar2) || (uVar11 == 0)) break;\n    rp[uVar11 >> 5] = rp[uVar11 >> 5] ^ 1 << (uVar11 & 0x1f);\n    iVar6 = 0x20;\n    pmVar9 = &ranm_1;\n    (**(code **)(*(int *)(puVar17 + 0x10) + 4))(puVar17);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar2 = ranm_1 % uVar1 + 1;\n    uVar10 = uVar11 - uVar2;\n    if (uVar11 < uVar2) {\n      uVar10 = 0;\n      uVar2 = 0;\n    }\n    else {\n      uVar2 = uVar10 >> 5;\n    }\n    pmVar3 = rp + uVar2;\n    pmVar7 = (mp_limb_t *)(1 << (uVar10 & 0x1f));\n    pmVar8 = (mp_limb_t *)((int)pmVar7 + *pmVar3);\n    *pmVar3 = (mp_limb_t)pmVar8;\n    if (pmVar8 < pmVar7) {\n      do {\n        pmVar3 = pmVar3 + 1;\n        mVar16 = *pmVar3;\n        *pmVar3 = mVar16 + 1;\n      } while (mVar16 + 1 == 0);\n    }\n  } while (uVar10 != 0);" do (compound_statement "{\n    iVar6 = 0x20;\n    pmVar8 = (mp_limb_t *)puVar17;\n    pmVar9 = &ranm_1;\n    (**(code **)(*(int *)(puVar17 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar2 = ranm_1 % uVar1 + 1;\n    uVar11 = uVar10 - uVar2;\n    if ((uVar10 < uVar2) || (uVar11 == 0)) break;\n    rp[uVar11 >> 5] = rp[uVar11 >> 5] ^ 1 << (uVar11 & 0x1f);\n    iVar6 = 0x20;\n    pmVar9 = &ranm_1;\n    (**(code **)(*(int *)(puVar17 + 0x10) + 4))(puVar17);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar2 = ranm_1 % uVar1 + 1;\n    uVar10 = uVar11 - uVar2;\n    if (uVar11 < uVar2) {\n      uVar10 = 0;\n      uVar2 = 0;\n    }\n    else {\n      uVar2 = uVar10 >> 5;\n    }\n    pmVar3 = rp + uVar2;\n    pmVar7 = (mp_limb_t *)(1 << (uVar10 & 0x1f));\n    pmVar8 = (mp_limb_t *)((int)pmVar7 + *pmVar3);\n    *pmVar3 = (mp_limb_t)pmVar8;\n    if (pmVar8 < pmVar7) {\n      do {\n        pmVar3 = pmVar3 + 1;\n        mVar16 = *pmVar3;\n        *pmVar3 = mVar16 + 1;\n      } while (mVar16 + 1 == 0);\n    }\n  }" { (expression_statement "iVar6 = 0x20;" (assignment_expression "iVar6 = 0x20" identifier = number_literal) ;) (expression_statement "pmVar8 = (mp_limb_t *)puVar17;" (assignment_expression "pmVar8 = (mp_limb_t *)puVar17" identifier = (cast_expression "(mp_limb_t *)puVar17" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pmVar9 = &ranm_1;" (assignment_expression "pmVar9 = &ranm_1" identifier = (pointer_expression "&ranm_1" & identifier)) ;) (expression_statement "(**(code **)(*(int *)(puVar17 + 0x10) + 4))();" (call_expression "(**(code **)(*(int *)(puVar17 + 0x10) + 4))()" (parenthesized_expression "(**(code **)(*(int *)(puVar17 + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(puVar17 + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(puVar17 + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(puVar17 + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(puVar17 + 0x10) + 4)" ( (binary_expression "*(int *)(puVar17 + 0x10) + 4" (pointer_expression "*(int *)(puVar17 + 0x10)" * (cast_expression "(int *)(puVar17 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar17 + 0x10)" ( (binary_expression "puVar17 + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (if_statement "if (uVar1 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar2 = ranm_1 % uVar1 + 1;" (assignment_expression "uVar2 = ranm_1 % uVar1 + 1" identifier = (binary_expression "ranm_1 % uVar1 + 1" (binary_expression "ranm_1 % uVar1" identifier % identifier) + number_literal)) ;) (expression_statement "uVar11 = uVar10 - uVar2;" (assignment_expression "uVar11 = uVar10 - uVar2" identifier = (binary_expression "uVar10 - uVar2" identifier - identifier)) ;) (if_statement "if ((uVar10 < uVar2) || (uVar11 == 0)) break;" if (parenthesized_expression "((uVar10 < uVar2) || (uVar11 == 0))" ( (binary_expression "(uVar10 < uVar2) || (uVar11 == 0)" (parenthesized_expression "(uVar10 < uVar2)" ( (binary_expression "uVar10 < uVar2" identifier < identifier) )) || (parenthesized_expression "(uVar11 == 0)" ( (binary_expression "uVar11 == 0" identifier == number_literal) ))) )) (break_statement "break;" break ;)) (expression_statement "rp[uVar11 >> 5] = rp[uVar11 >> 5] ^ 1 << (uVar11 & 0x1f);" (assignment_expression "rp[uVar11 >> 5] = rp[uVar11 >> 5] ^ 1 << (uVar11 & 0x1f)" (subscript_expression "rp[uVar11 >> 5]" identifier [ (binary_expression "uVar11 >> 5" identifier >> number_literal) ]) = (binary_expression "rp[uVar11 >> 5] ^ 1 << (uVar11 & 0x1f)" (subscript_expression "rp[uVar11 >> 5]" identifier [ (binary_expression "uVar11 >> 5" identifier >> number_literal) ]) ^ (binary_expression "1 << (uVar11 & 0x1f)" number_literal << (parenthesized_expression "(uVar11 & 0x1f)" ( (binary_expression "uVar11 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "iVar6 = 0x20;" (assignment_expression "iVar6 = 0x20" identifier = number_literal) ;) (expression_statement "pmVar9 = &ranm_1;" (assignment_expression "pmVar9 = &ranm_1" identifier = (pointer_expression "&ranm_1" & identifier)) ;) (expression_statement "(**(code **)(*(int *)(puVar17 + 0x10) + 4))(puVar17);" (call_expression "(**(code **)(*(int *)(puVar17 + 0x10) + 4))(puVar17)" (parenthesized_expression "(**(code **)(*(int *)(puVar17 + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(puVar17 + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(puVar17 + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(puVar17 + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(puVar17 + 0x10) + 4)" ( (binary_expression "*(int *)(puVar17 + 0x10) + 4" (pointer_expression "*(int *)(puVar17 + 0x10)" * (cast_expression "(int *)(puVar17 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar17 + 0x10)" ( (binary_expression "puVar17 + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(puVar17)" ( identifier ))) ;) (if_statement "if (uVar1 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar2 = ranm_1 % uVar1 + 1;" (assignment_expression "uVar2 = ranm_1 % uVar1 + 1" identifier = (binary_expression "ranm_1 % uVar1 + 1" (binary_expression "ranm_1 % uVar1" identifier % identifier) + number_literal)) ;) (expression_statement "uVar10 = uVar11 - uVar2;" (assignment_expression "uVar10 = uVar11 - uVar2" identifier = (binary_expression "uVar11 - uVar2" identifier - identifier)) ;) (if_statement "if (uVar11 < uVar2) {\n      uVar10 = 0;\n      uVar2 = 0;\n    }\n    else {\n      uVar2 = uVar10 >> 5;\n    }" if (parenthesized_expression "(uVar11 < uVar2)" ( (binary_expression "uVar11 < uVar2" identifier < identifier) )) (compound_statement "{\n      uVar10 = 0;\n      uVar2 = 0;\n    }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      uVar2 = uVar10 >> 5;\n    }" else (compound_statement "{\n      uVar2 = uVar10 >> 5;\n    }" { (expression_statement "uVar2 = uVar10 >> 5;" (assignment_expression "uVar2 = uVar10 >> 5" identifier = (binary_expression "uVar10 >> 5" identifier >> number_literal)) ;) }))) (expression_statement "pmVar3 = rp + uVar2;" (assignment_expression "pmVar3 = rp + uVar2" identifier = (binary_expression "rp + uVar2" identifier + identifier)) ;) (expression_statement "pmVar7 = (mp_limb_t *)(1 << (uVar10 & 0x1f));" (assignment_expression "pmVar7 = (mp_limb_t *)(1 << (uVar10 & 0x1f))" identifier = (cast_expression "(mp_limb_t *)(1 << (uVar10 & 0x1f))" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(1 << (uVar10 & 0x1f))" ( (binary_expression "1 << (uVar10 & 0x1f)" number_literal << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) )))) ;) (expression_statement "pmVar8 = (mp_limb_t *)((int)pmVar7 + *pmVar3);" (assignment_expression "pmVar8 = (mp_limb_t *)((int)pmVar7 + *pmVar3)" identifier = (cast_expression "(mp_limb_t *)((int)pmVar7 + *pmVar3)" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pmVar7 + *pmVar3)" ( (binary_expression "(int)pmVar7 + *pmVar3" (cast_expression "(int)pmVar7" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*pmVar3" * identifier)) )))) ;) (expression_statement "*pmVar3 = (mp_limb_t)pmVar8;" (assignment_expression "*pmVar3 = (mp_limb_t)pmVar8" (pointer_expression "*pmVar3" * identifier) = (cast_expression "(mp_limb_t)pmVar8" ( (type_descriptor "mp_limb_t" type_identifier) ) identifier)) ;) (if_statement "if (pmVar8 < pmVar7) {\n      do {\n        pmVar3 = pmVar3 + 1;\n        mVar16 = *pmVar3;\n        *pmVar3 = mVar16 + 1;\n      } while (mVar16 + 1 == 0);\n    }" if (parenthesized_expression "(pmVar8 < pmVar7)" ( (binary_expression "pmVar8 < pmVar7" identifier < identifier) )) (compound_statement "{\n      do {\n        pmVar3 = pmVar3 + 1;\n        mVar16 = *pmVar3;\n        *pmVar3 = mVar16 + 1;\n      } while (mVar16 + 1 == 0);\n    }" { (do_statement "do {\n        pmVar3 = pmVar3 + 1;\n        mVar16 = *pmVar3;\n        *pmVar3 = mVar16 + 1;\n      } while (mVar16 + 1 == 0);" do (compound_statement "{\n        pmVar3 = pmVar3 + 1;\n        mVar16 = *pmVar3;\n        *pmVar3 = mVar16 + 1;\n      }" { (expression_statement "pmVar3 = pmVar3 + 1;" (assignment_expression "pmVar3 = pmVar3 + 1" identifier = (binary_expression "pmVar3 + 1" identifier + number_literal)) ;) (expression_statement "mVar16 = *pmVar3;" (assignment_expression "mVar16 = *pmVar3" identifier = (pointer_expression "*pmVar3" * identifier)) ;) (expression_statement "*pmVar3 = mVar16 + 1;" (assignment_expression "*pmVar3 = mVar16 + 1" (pointer_expression "*pmVar3" * identifier) = (binary_expression "mVar16 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(mVar16 + 1 == 0)" ( (binary_expression "mVar16 + 1 == 0" (binary_expression "mVar16 + 1" identifier + number_literal) == number_literal) )) ;) })) }) while (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) ;) (if_statement "if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar17 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (in_a3 < 2) {\n      if (in_a3 == 0) {\n        *pmVar8 = 1;\n      }\n      else if (iVar6 != 0) {\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar2 = 0x20;\n      uVar1 = in_a3;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar2 = uVar2 - 1;\n      } while (uVar1 != 0);\n      iVar14 = in_a3 << (uVar2 & 0x1f);\n      if (iVar6 == 1) {\n        mVar16 = *pmVar9;\n        pmVar7 = (mp_limb_t *)&_gp;\n        if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);\n        iVar6 = 2 - (uint)(pmVar8[1] == 0);\n        iVar12 = 0x1f - uVar2;\n        while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }\n      }\n      else {\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }\n    }\n    return;\n  }" if (parenthesized_expression "(local_24 != *(int *)PTR___stack_chk_guard_0009b540)" ( (binary_expression "local_24 != *(int *)PTR___stack_chk_guard_0009b540" identifier != (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" * (cast_expression "(int *)PTR___stack_chk_guard_0009b540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    puVar17 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (in_a3 < 2) {\n      if (in_a3 == 0) {\n        *pmVar8 = 1;\n      }\n      else if (iVar6 != 0) {\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar2 = 0x20;\n      uVar1 = in_a3;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar2 = uVar2 - 1;\n      } while (uVar1 != 0);\n      iVar14 = in_a3 << (uVar2 & 0x1f);\n      if (iVar6 == 1) {\n        mVar16 = *pmVar9;\n        pmVar7 = (mp_limb_t *)&_gp;\n        if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);\n        iVar6 = 2 - (uint)(pmVar8[1] == 0);\n        iVar12 = 0x1f - uVar2;\n        while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }\n      }\n      else {\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }\n    }\n    return;\n  }" { (expression_statement "puVar17 = PTR___stack_chk_fail_0009b4d0;" (assignment_expression "puVar17 = PTR___stack_chk_fail_0009b4d0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_0009b4d0)();" (call_expression "(*(code *)PTR___stack_chk_fail_0009b4d0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0009b4d0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0009b4d0" * (cast_expression "(code *)PTR___stack_chk_fail_0009b4d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (in_a3 < 2) {\n      if (in_a3 == 0) {\n        *pmVar8 = 1;\n      }\n      else if (iVar6 != 0) {\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar2 = 0x20;\n      uVar1 = in_a3;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar2 = uVar2 - 1;\n      } while (uVar1 != 0);\n      iVar14 = in_a3 << (uVar2 & 0x1f);\n      if (iVar6 == 1) {\n        mVar16 = *pmVar9;\n        pmVar7 = (mp_limb_t *)&_gp;\n        if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);\n        iVar6 = 2 - (uint)(pmVar8[1] == 0);\n        iVar12 = 0x1f - uVar2;\n        while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }\n      }\n      else {\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }\n    }" if (parenthesized_expression "(in_a3 < 2)" ( (binary_expression "in_a3 < 2" identifier < number_literal) )) (compound_statement "{\n      if (in_a3 == 0) {\n        *pmVar8 = 1;\n      }\n      else if (iVar6 != 0) {\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }\n    }" { (if_statement "if (in_a3 == 0) {\n        *pmVar8 = 1;\n      }\n      else if (iVar6 != 0) {\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }" if (parenthesized_expression "(in_a3 == 0)" ( (binary_expression "in_a3 == 0" identifier == number_literal) )) (compound_statement "{\n        *pmVar8 = 1;\n      }" { (expression_statement "*pmVar8 = 1;" (assignment_expression "*pmVar8 = 1" (pointer_expression "*pmVar8" * identifier) = number_literal) ;) }) (else_clause "else if (iVar6 != 0) {\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }" else (if_statement "if (iVar6 != 0) {\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar14 = iVar6 + -1;\n        mVar16 = *pmVar9;\n        pmVar7 = pmVar8;\n        if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }\n        *pmVar8 = mVar16;\n      }" { (expression_statement "iVar14 = iVar6 + -1;" (assignment_expression "iVar14 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "mVar16 = *pmVar9;" (assignment_expression "mVar16 = *pmVar9" identifier = (pointer_expression "*pmVar9" * identifier)) ;) (expression_statement "pmVar7 = pmVar8;" (assignment_expression "pmVar7 = pmVar8" identifier = identifier) ;) (if_statement "if (iVar14 != 0) {\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }" if (parenthesized_expression "(iVar14 != 0)" ( (binary_expression "iVar14 != 0" identifier != number_literal) )) (compound_statement "{\n          do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);\n          pmVar8 = pmVar8 + iVar6 + 0x3fffffff;\n        }" { (do_statement "do {\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          } while (iVar14 != 0);" do (compound_statement "{\n            pmVar9 = pmVar9 + 1;\n            *pmVar7 = mVar16;\n            iVar14 = iVar14 + -1;\n            mVar16 = *pmVar9;\n            pmVar7 = pmVar7 + 1;\n          }" { (expression_statement "pmVar9 = pmVar9 + 1;" (assignment_expression "pmVar9 = pmVar9 + 1" identifier = (binary_expression "pmVar9 + 1" identifier + number_literal)) ;) (expression_statement "*pmVar7 = mVar16;" (assignment_expression "*pmVar7 = mVar16" (pointer_expression "*pmVar7" * identifier) = identifier) ;) (expression_statement "iVar14 = iVar14 + -1;" (assignment_expression "iVar14 = iVar14 + -1" identifier = (binary_expression "iVar14 + -1" identifier + number_literal)) ;) (expression_statement "mVar16 = *pmVar9;" (assignment_expression "mVar16 = *pmVar9" identifier = (pointer_expression "*pmVar9" * identifier)) ;) (expression_statement "pmVar7 = pmVar7 + 1;" (assignment_expression "pmVar7 = pmVar7 + 1" identifier = (binary_expression "pmVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar14 != 0)" ( (binary_expression "iVar14 != 0" identifier != number_literal) )) ;) (expression_statement "pmVar8 = pmVar8 + iVar6 + 0x3fffffff;" (assignment_expression "pmVar8 = pmVar8 + iVar6 + 0x3fffffff" identifier = (binary_expression "pmVar8 + iVar6 + 0x3fffffff" (binary_expression "pmVar8 + iVar6" identifier + identifier) + number_literal)) ;) })) (expression_statement "*pmVar8 = mVar16;" (assignment_expression "*pmVar8 = mVar16" (pointer_expression "*pmVar8" * identifier) = identifier) ;) })))) }) (else_clause "else {\n      uVar10 = 0;\n      uVar2 = 0x20;\n      uVar1 = in_a3;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar2 = uVar2 - 1;\n      } while (uVar1 != 0);\n      iVar14 = in_a3 << (uVar2 & 0x1f);\n      if (iVar6 == 1) {\n        mVar16 = *pmVar9;\n        pmVar7 = (mp_limb_t *)&_gp;\n        if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);\n        iVar6 = 2 - (uint)(pmVar8[1] == 0);\n        iVar12 = 0x1f - uVar2;\n        while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }\n      }\n      else {\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }\n    }" else (compound_statement "{\n      uVar10 = 0;\n      uVar2 = 0x20;\n      uVar1 = in_a3;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar2 = uVar2 - 1;\n      } while (uVar1 != 0);\n      iVar14 = in_a3 << (uVar2 & 0x1f);\n      if (iVar6 == 1) {\n        mVar16 = *pmVar9;\n        pmVar7 = (mp_limb_t *)&_gp;\n        if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);\n        iVar6 = 2 - (uint)(pmVar8[1] == 0);\n        iVar12 = 0x1f - uVar2;\n        while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }\n      }\n      else {\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }\n    }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0x20;" (assignment_expression "uVar2 = 0x20" identifier = number_literal) ;) (expression_statement "uVar1 = in_a3;" (assignment_expression "uVar1 = in_a3" identifier = identifier) ;) (do_statement "do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar2 = uVar2 - 1;\n      } while (uVar1 != 0);" do (compound_statement "{\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar2 = uVar2 - 1;\n      }" { (expression_statement "uVar10 = uVar10 ^ uVar1;" (assignment_expression "uVar10 = uVar10 ^ uVar1" identifier = (binary_expression "uVar10 ^ uVar1" identifier ^ identifier)) ;) (expression_statement "uVar1 = uVar1 >> 1;" (assignment_expression "uVar1 = uVar1 >> 1" identifier = (binary_expression "uVar1 >> 1" identifier >> number_literal)) ;) (expression_statement "uVar2 = uVar2 - 1;" (assignment_expression "uVar2 = uVar2 - 1" identifier = (binary_expression "uVar2 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) )) ;) (expression_statement "iVar14 = in_a3 << (uVar2 & 0x1f);" (assignment_expression "iVar14 = in_a3 << (uVar2 & 0x1f)" identifier = (binary_expression "in_a3 << (uVar2 & 0x1f)" identifier << (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if (iVar6 == 1) {\n        mVar16 = *pmVar9;\n        pmVar7 = (mp_limb_t *)&_gp;\n        if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);\n        iVar6 = 2 - (uint)(pmVar8[1] == 0);\n        iVar12 = 0x1f - uVar2;\n        while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }\n      }\n      else {\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }" if (parenthesized_expression "(iVar6 == 1)" ( (binary_expression "iVar6 == 1" identifier == number_literal) )) (compound_statement "{\n        mVar16 = *pmVar9;\n        pmVar7 = (mp_limb_t *)&_gp;\n        if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);\n        iVar6 = 2 - (uint)(pmVar8[1] == 0);\n        iVar12 = 0x1f - uVar2;\n        while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }\n      }" { (expression_statement "mVar16 = *pmVar9;" (assignment_expression "mVar16 = *pmVar9" identifier = (pointer_expression "*pmVar9" * identifier)) ;) (expression_statement "pmVar7 = (mp_limb_t *)&_gp;" (assignment_expression "pmVar7 = (mp_limb_t *)&_gp" identifier = (cast_expression "(mp_limb_t *)&_gp" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp" & identifier))) ;) (if_statement "if ((uVar2 & 1) != 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }" if (parenthesized_expression "((uVar2 & 1) != 0)" ( (binary_expression "(uVar2 & 1) != 0" (parenthesized_expression "(uVar2 & 1)" ( (binary_expression "uVar2 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }" { (expression_statement "pmVar7 = pmVar8;" (assignment_expression "pmVar7 = pmVar8" identifier = identifier) ;) (expression_statement "pmVar8 = (mp_limb_t *)&_gp;" (assignment_expression "pmVar8 = (mp_limb_t *)&_gp" identifier = (cast_expression "(mp_limb_t *)&_gp" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp" & identifier))) ;) })) (expression_statement "(**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1);" (call_expression "(**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,1)" (parenthesized_expression "(**(code **)(puVar17 + 0x56004))" ( (pointer_expression "**(code **)(puVar17 + 0x56004)" * (pointer_expression "*(code **)(puVar17 + 0x56004)" * (cast_expression "(code **)(puVar17 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x56004)" ( (binary_expression "puVar17 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(pmVar8,pmVar9,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "iVar6 = 2 - (uint)(pmVar8[1] == 0);" (assignment_expression "iVar6 = 2 - (uint)(pmVar8[1] == 0)" identifier = (binary_expression "2 - (uint)(pmVar8[1] == 0)" number_literal - (call_expression "(uint)(pmVar8[1] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pmVar8[1] == 0)" ( (binary_expression "pmVar8[1] == 0" (subscript_expression "pmVar8[1]" identifier [ number_literal ]) == number_literal) ))))) ;) (expression_statement "iVar12 = 0x1f - uVar2;" (assignment_expression "iVar12 = 0x1f - uVar2" identifier = (binary_expression "0x1f - uVar2" number_literal - identifier)) ;) (while_statement "while( true ) {\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          pmVar9 = pmVar7;\n          iVar14 = iVar14 << 1;\n          if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }\n          iVar12 = iVar12 + -1;\n          if (iVar12 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);\n          iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);\n          pmVar7 = pmVar8;\n          pmVar8 = pmVar9;\n        }" { (expression_statement "pmVar9 = pmVar7;" (assignment_expression "pmVar9 = pmVar7" identifier = identifier) ;) (expression_statement "iVar14 = iVar14 << 1;" (assignment_expression "iVar14 = iVar14 << 1" identifier = (binary_expression "iVar14 << 1" identifier << number_literal)) ;) (if_statement "if (iVar14 < 0) {\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }" if (parenthesized_expression "(iVar14 < 0)" ( (binary_expression "iVar14 < 0" identifier < number_literal) )) (compound_statement "{\n            mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);\n            pmVar8[iVar6] = mVar4;\n            iVar6 = iVar6 + (uint)(mVar4 != 0);\n          }" { (expression_statement "mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16);" (assignment_expression "mVar4 = (**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16)" identifier = (call_expression "(**(code **)(puVar17 + 0x55d14))(pmVar8,pmVar8,iVar6,mVar16)" (parenthesized_expression "(**(code **)(puVar17 + 0x55d14))" ( (pointer_expression "**(code **)(puVar17 + 0x55d14)" * (pointer_expression "*(code **)(puVar17 + 0x55d14)" * (cast_expression "(code **)(puVar17 + 0x55d14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x55d14)" ( (binary_expression "puVar17 + 0x55d14" identifier + number_literal) ))))) )) (argument_list "(pmVar8,pmVar8,iVar6,mVar16)" ( identifier , identifier , identifier , identifier )))) ;) (expression_statement "pmVar8[iVar6] = mVar4;" (assignment_expression "pmVar8[iVar6] = mVar4" (subscript_expression "pmVar8[iVar6]" identifier [ identifier ]) = identifier) ;) (expression_statement "iVar6 = iVar6 + (uint)(mVar4 != 0);" (assignment_expression "iVar6 = iVar6 + (uint)(mVar4 != 0)" identifier = (binary_expression "iVar6 + (uint)(mVar4 != 0)" identifier + (call_expression "(uint)(mVar4 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(mVar4 != 0)" ( (binary_expression "mVar4 != 0" identifier != number_literal) ))))) ;) })) (expression_statement "iVar12 = iVar12 + -1;" (assignment_expression "iVar12 = iVar12 + -1" identifier = (binary_expression "iVar12 + -1" identifier + number_literal)) ;) (if_statement "if (iVar12 == 0) break;" if (parenthesized_expression "(iVar12 == 0)" ( (binary_expression "iVar12 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "(**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6);" (call_expression "(**(code **)(puVar17 + 0x56004))(pmVar9,pmVar8,iVar6)" (parenthesized_expression "(**(code **)(puVar17 + 0x56004))" ( (pointer_expression "**(code **)(puVar17 + 0x56004)" * (pointer_expression "*(code **)(puVar17 + 0x56004)" * (cast_expression "(code **)(puVar17 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x56004)" ( (binary_expression "puVar17 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(pmVar9,pmVar8,iVar6)" ( identifier , identifier , identifier ))) ;) (expression_statement "iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar6 = iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0)" identifier = (binary_expression "iVar6 * 2 - (uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar6 * 2" identifier * number_literal) - (call_expression "(uint)(pmVar9[iVar6 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pmVar9[iVar6 * 2 + 0x3fffffff] == 0)" ( (binary_expression "pmVar9[iVar6 * 2 + 0x3fffffff] == 0" (subscript_expression "pmVar9[iVar6 * 2 + 0x3fffffff]" identifier [ (binary_expression "iVar6 * 2 + 0x3fffffff" (binary_expression "iVar6 * 2" identifier * number_literal) + number_literal) ]) == number_literal) ))))) ;) (expression_statement "pmVar7 = pmVar8;" (assignment_expression "pmVar7 = pmVar8" identifier = identifier) ;) (expression_statement "pmVar8 = pmVar9;" (assignment_expression "pmVar8 = pmVar9" identifier = identifier) ;) })) }) (else_clause "else {\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }" else (compound_statement "{\n        pmVar7 = (mp_limb_t *)&_gp;\n        if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }\n        (**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);\n        iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);\n        iVar15 = 0x1f - uVar2;\n        while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }\n      }" { (expression_statement "pmVar7 = (mp_limb_t *)&_gp;" (assignment_expression "pmVar7 = (mp_limb_t *)&_gp" identifier = (cast_expression "(mp_limb_t *)&_gp" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp" & identifier))) ;) (if_statement "if (((uVar10 ^ uVar2) & 1) == 0) {\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }" if (parenthesized_expression "(((uVar10 ^ uVar2) & 1) == 0)" ( (binary_expression "((uVar10 ^ uVar2) & 1) == 0" (parenthesized_expression "((uVar10 ^ uVar2) & 1)" ( (binary_expression "(uVar10 ^ uVar2) & 1" (parenthesized_expression "(uVar10 ^ uVar2)" ( (binary_expression "uVar10 ^ uVar2" identifier ^ identifier) )) & number_literal) )) == number_literal) )) (compound_statement "{\n          pmVar7 = pmVar8;\n          pmVar8 = (mp_limb_t *)&_gp;\n        }" { (expression_statement "pmVar7 = pmVar8;" (assignment_expression "pmVar7 = pmVar8" identifier = identifier) ;) (expression_statement "pmVar8 = (mp_limb_t *)&_gp;" (assignment_expression "pmVar8 = (mp_limb_t *)&_gp" identifier = (cast_expression "(mp_limb_t *)&_gp" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp" & identifier))) ;) })) (expression_statement "(**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6);" (call_expression "(**(code **)(puVar17 + 0x56004))(pmVar8,pmVar9,iVar6)" (parenthesized_expression "(**(code **)(puVar17 + 0x56004))" ( (pointer_expression "**(code **)(puVar17 + 0x56004)" * (pointer_expression "*(code **)(puVar17 + 0x56004)" * (cast_expression "(code **)(puVar17 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x56004)" ( (binary_expression "puVar17 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(pmVar8,pmVar9,iVar6)" ( identifier , identifier , identifier ))) ;) (expression_statement "iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar12 = iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0)" identifier = (binary_expression "iVar6 * 2 - (uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar6 * 2" identifier * number_literal) - (call_expression "(uint)(pmVar8[iVar6 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pmVar8[iVar6 * 2 + 0x3fffffff] == 0)" ( (binary_expression "pmVar8[iVar6 * 2 + 0x3fffffff] == 0" (subscript_expression "pmVar8[iVar6 * 2 + 0x3fffffff]" identifier [ (binary_expression "iVar6 * 2 + 0x3fffffff" (binary_expression "iVar6 * 2" identifier * number_literal) + number_literal) ]) == number_literal) ))))) ;) (expression_statement "iVar15 = 0x1f - uVar2;" (assignment_expression "iVar15 = 0x1f - uVar2" identifier = (binary_expression "0x1f - uVar2" number_literal - identifier)) ;) (while_statement "while( true ) {\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          iVar14 = iVar14 << 1;\n          pmVar13 = pmVar7;\n          if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }\n          pmVar7 = pmVar8;\n          iVar15 = iVar15 + -1;\n          if (iVar15 == 0) break;\n          (**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);\n          iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);\n          pmVar8 = pmVar13;\n        }" { (expression_statement "iVar14 = iVar14 << 1;" (assignment_expression "iVar14 = iVar14 << 1" identifier = (binary_expression "iVar14 << 1" identifier << number_literal)) ;) (expression_statement "pmVar13 = pmVar7;" (assignment_expression "pmVar13 = pmVar7" identifier = identifier) ;) (if_statement "if (iVar14 < 0) {\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }" if (parenthesized_expression "(iVar14 < 0)" ( (binary_expression "iVar14 < 0" identifier < number_literal) )) (compound_statement "{\n            iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);\n            iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);\n            pmVar13 = pmVar8;\n            pmVar8 = pmVar7;\n          }" { (expression_statement "iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6);" (assignment_expression "iVar5 = (**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6)" identifier = (call_expression "(**(code **)(puVar17 + 0x55f24))(pmVar7,pmVar8,iVar12,pmVar9,iVar6)" (parenthesized_expression "(**(code **)(puVar17 + 0x55f24))" ( (pointer_expression "**(code **)(puVar17 + 0x55f24)" * (pointer_expression "*(code **)(puVar17 + 0x55f24)" * (cast_expression "(code **)(puVar17 + 0x55f24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x55f24)" ( (binary_expression "puVar17 + 0x55f24" identifier + number_literal) ))))) )) (argument_list "(pmVar7,pmVar8,iVar12,pmVar9,iVar6)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0);" (assignment_expression "iVar12 = (iVar12 + iVar6) - (uint)(iVar5 == 0)" identifier = (binary_expression "(iVar12 + iVar6) - (uint)(iVar5 == 0)" (parenthesized_expression "(iVar12 + iVar6)" ( (binary_expression "iVar12 + iVar6" identifier + identifier) )) - (call_expression "(uint)(iVar5 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) ))))) ;) (expression_statement "pmVar13 = pmVar8;" (assignment_expression "pmVar13 = pmVar8" identifier = identifier) ;) (expression_statement "pmVar8 = pmVar7;" (assignment_expression "pmVar8 = pmVar7" identifier = identifier) ;) })) (expression_statement "pmVar7 = pmVar8;" (assignment_expression "pmVar7 = pmVar8" identifier = identifier) ;) (expression_statement "iVar15 = iVar15 + -1;" (assignment_expression "iVar15 = iVar15 + -1" identifier = (binary_expression "iVar15 + -1" identifier + number_literal)) ;) (if_statement "if (iVar15 == 0) break;" if (parenthesized_expression "(iVar15 == 0)" ( (binary_expression "iVar15 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "(**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12);" (call_expression "(**(code **)(puVar17 + 0x56004))(pmVar13,pmVar7,iVar12)" (parenthesized_expression "(**(code **)(puVar17 + 0x56004))" ( (pointer_expression "**(code **)(puVar17 + 0x56004)" * (pointer_expression "*(code **)(puVar17 + 0x56004)" * (cast_expression "(code **)(puVar17 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x56004)" ( (binary_expression "puVar17 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(pmVar13,pmVar7,iVar12)" ( identifier , identifier , identifier ))) ;) (expression_statement "iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar12 = iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0)" identifier = (binary_expression "iVar12 * 2 - (uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar12 * 2" identifier * number_literal) - (call_expression "(uint)(pmVar13[iVar12 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pmVar13[iVar12 * 2 + 0x3fffffff] == 0)" ( (binary_expression "pmVar13[iVar12 * 2 + 0x3fffffff] == 0" (subscript_expression "pmVar13[iVar12 * 2 + 0x3fffffff]" identifier [ (binary_expression "iVar12 * 2 + 0x3fffffff" (binary_expression "iVar12 * 2" identifier * number_literal) + number_literal) ]) == number_literal) ))))) ;) (expression_statement "pmVar8 = pmVar13;" (assignment_expression "pmVar8 = pmVar13" identifier = identifier) ;) })) }))) }))) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "int __gmpn_random2(int param_1,int param_2,undefined4 param_3,uint param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  int *piVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  int iVar7;\n  uint *puVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint *puVar12;\n  int iVar13;\n  int iVar14;\n  undefined *puVar15;\n  uint local_2c;\n  uint local_28;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);\n  uVar10 = param_2 * 0x20 - (local_2c & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  *(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar7 = uVar1 - 2;\n  if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);\n  puVar15 = PTR___gmp_rands_0009b27c;\n  uVar1 = (local_28 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }\n  return *(int *)PTR___stack_chk_guard_0009b540;\n}\n\n" (function_definition "int __gmpn_random2(int param_1,int param_2,undefined4 param_3,uint param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  int *piVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  int iVar7;\n  uint *puVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint *puVar12;\n  int iVar13;\n  int iVar14;\n  undefined *puVar15;\n  uint local_2c;\n  uint local_28;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);\n  uVar10 = param_2 * 0x20 - (local_2c & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  *(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar7 = uVar1 - 2;\n  if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);\n  puVar15 = PTR___gmp_rands_0009b27c;\n  uVar1 = (local_28 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }\n  return *(int *)PTR___stack_chk_guard_0009b540;\n}" primitive_type (function_declarator "__gmpn_random2(int param_1,int param_2,undefined4 param_3,uint param_4)" identifier (parameter_list "(int param_1,int param_2,undefined4 param_3,uint param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int *piVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  int iVar7;\n  uint *puVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint *puVar12;\n  int iVar13;\n  int iVar14;\n  undefined *puVar15;\n  uint local_2c;\n  uint local_28;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);\n  uVar10 = param_2 * 0x20 - (local_2c & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  *(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar7 = uVar1 - 2;\n  if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);\n  puVar15 = PTR___gmp_rands_0009b27c;\n  uVar1 = (local_28 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }\n  return *(int *)PTR___stack_chk_guard_0009b540;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "uint *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "undefined *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "uint local_2c;" type_identifier identifier ;) (declaration "uint local_28;" type_identifier identifier ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "local_24 = *(int *)PTR___stack_chk_guard_0009b540;" (assignment_expression "local_24 = *(int *)PTR___stack_chk_guard_0009b540" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" * (cast_expression "(int *)PTR___stack_chk_guard_0009b540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }" if (parenthesized_expression "(*PTR___gmp_rands_initialized_0009b188 == '\0')" ( (binary_expression "*PTR___gmp_rands_initialized_0009b188 == '\0'" (pointer_expression "*PTR___gmp_rands_initialized_0009b188" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }" { (expression_statement "*PTR___gmp_rands_initialized_0009b188 = 1;" (assignment_expression "*PTR___gmp_rands_initialized_0009b188 = 1" (pointer_expression "*PTR___gmp_rands_initialized_0009b188" * identifier) = number_literal) ;) (expression_statement "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);" (call_expression "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c)" (parenthesized_expression "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)" ( (pointer_expression "*(code *)PTR___gmp_randinit_mt_noseed_0009b600" * (cast_expression "(code *)PTR___gmp_randinit_mt_noseed_0009b600" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR___gmp_rands_0009b27c)" ( identifier ))) ;) })) (expression_statement "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);" (call_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20)" (parenthesized_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (binary_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4" (pointer_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10)" * (cast_expression "(int *)(PTR___gmp_rands_0009b27c + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR___gmp_rands_0009b27c + 0x10)" ( (binary_expression "PTR___gmp_rands_0009b27c + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(PTR___gmp_rands_0009b27c,&local_2c,0x20)" ( identifier , (pointer_expression "&local_2c" & identifier) , number_literal ))) ;) (expression_statement "uVar10 = param_2 * 0x20 - (local_2c & 0x1f);" (assignment_expression "uVar10 = param_2 * 0x20 - (local_2c & 0x1f)" identifier = (binary_expression "param_2 * 0x20 - (local_2c & 0x1f)" (binary_expression "param_2 * 0x20" identifier * number_literal) - (parenthesized_expression "(local_2c & 0x1f)" ( (binary_expression "local_2c & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar1 = uVar10 + 0x1f >> 5;" (assignment_expression "uVar1 = uVar10 + 0x1f >> 5" identifier = (binary_expression "uVar10 + 0x1f >> 5" (binary_expression "uVar10 + 0x1f" identifier + number_literal) >> number_literal)) ;) (expression_statement "*(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);" (assignment_expression "*(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f)" (pointer_expression "*(uint *)(param_1 + (uVar1 - 1) * 4)" * (cast_expression "(uint *)(param_1 + (uVar1 - 1) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (uVar1 - 1) * 4)" ( (binary_expression "param_1 + (uVar1 - 1) * 4" identifier + (binary_expression "(uVar1 - 1) * 4" (parenthesized_expression "(uVar1 - 1)" ( (binary_expression "uVar1 - 1" identifier - number_literal) )) * number_literal)) )))) = (binary_expression "0xffffffff >> (-uVar10 & 0x1f)" number_literal >> (parenthesized_expression "(-uVar10 & 0x1f)" ( (binary_expression "-uVar10 & 0x1f" (unary_expression "-uVar10" - identifier) & number_literal) )))) ;) (expression_statement "iVar7 = uVar1 - 2;" (assignment_expression "iVar7 = uVar1 - 2" identifier = (binary_expression "uVar1 - 2" identifier - number_literal)) ;) (if_statement "if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }" if (parenthesized_expression "(-1 < iVar7)" ( (binary_expression "-1 < iVar7" number_literal < identifier) )) (compound_statement "{\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }" { (expression_statement "iVar2 = param_1 + uVar1 * 4;" (assignment_expression "iVar2 = param_1 + uVar1 * 4" identifier = (binary_expression "param_1 + uVar1 * 4" identifier + (binary_expression "uVar1 * 4" identifier * number_literal))) ;) (do_statement "do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);" do (compound_statement "{\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    }" { (expression_statement "*(undefined4 *)(iVar2 + -8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(iVar2 + -8) = 0xffffffff" (pointer_expression "*(undefined4 *)(iVar2 + -8)" * (cast_expression "(undefined4 *)(iVar2 + -8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + -8)" ( (binary_expression "iVar2 + -8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "iVar2 = iVar2 + -4;" (assignment_expression "iVar2 = iVar2 + -4" identifier = (binary_expression "iVar2 + -4" identifier + number_literal)) ;) }) while (parenthesized_expression "(-1 < iVar7)" ( (binary_expression "-1 < iVar7" number_literal < identifier) )) ;) })) (expression_statement "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);" (call_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20)" (parenthesized_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" ( (binary_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4" (pointer_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10)" * (cast_expression "(int *)(PTR___gmp_rands_0009b27c + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR___gmp_rands_0009b27c + 0x10)" ( (binary_expression "PTR___gmp_rands_0009b27c + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(PTR___gmp_rands_0009b27c,&local_28,0x20)" ( identifier , (pointer_expression "&local_28" & identifier) , number_literal ))) ;) (expression_statement "puVar15 = PTR___gmp_rands_0009b27c;" (assignment_expression "puVar15 = PTR___gmp_rands_0009b27c" identifier = identifier) ;) (expression_statement "uVar1 = (local_28 & 3) + 1;" (assignment_expression "uVar1 = (local_28 & 3) + 1" identifier = (binary_expression "(local_28 & 3) + 1" (parenthesized_expression "(local_28 & 3)" ( (binary_expression "local_28 & 3" identifier & number_literal) )) + number_literal)) ;) (if_statement "if (uVar1 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;" (assignment_expression "uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1" identifier = (binary_expression "(uint)(uVar10 < uVar1) + uVar10 / uVar1" (call_expression "(uint)(uVar10 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar10 < uVar1)" ( (binary_expression "uVar10 < uVar1" identifier < identifier) ))) + (binary_expression "uVar10 / uVar1" identifier / identifier))) ;) (do_statement "do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);" do (compound_statement "{\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  }" { (expression_statement "iVar7 = 0x20;" (assignment_expression "iVar7 = 0x20" identifier = number_literal) ;) (expression_statement "puVar9 = (uint *)puVar15;" (assignment_expression "puVar9 = (uint *)puVar15" identifier = (cast_expression "(uint *)puVar15" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "puVar5 = &local_28;" (assignment_expression "puVar5 = &local_28" identifier = (pointer_expression "&local_28" & identifier)) ;) (expression_statement "(**(code **)(*(int *)(puVar15 + 0x10) + 4))();" (call_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))()" (parenthesized_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(puVar15 + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(puVar15 + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(puVar15 + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(puVar15 + 0x10) + 4)" ( (binary_expression "*(int *)(puVar15 + 0x10) + 4" (pointer_expression "*(int *)(puVar15 + 0x10)" * (cast_expression "(int *)(puVar15 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar15 + 0x10)" ( (binary_expression "puVar15 + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (if_statement "if (uVar1 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar4 = local_28 % uVar1 + 1;" (assignment_expression "uVar4 = local_28 % uVar1 + 1" identifier = (binary_expression "local_28 % uVar1 + 1" (binary_expression "local_28 % uVar1" identifier % identifier) + number_literal)) ;) (expression_statement "uVar11 = uVar10 - uVar4;" (assignment_expression "uVar11 = uVar10 - uVar4" identifier = (binary_expression "uVar10 - uVar4" identifier - identifier)) ;) (if_statement "if ((uVar10 < uVar4) || (uVar11 == 0)) break;" if (parenthesized_expression "((uVar10 < uVar4) || (uVar11 == 0))" ( (binary_expression "(uVar10 < uVar4) || (uVar11 == 0)" (parenthesized_expression "(uVar10 < uVar4)" ( (binary_expression "uVar10 < uVar4" identifier < identifier) )) || (parenthesized_expression "(uVar11 == 0)" ( (binary_expression "uVar11 == 0" identifier == number_literal) ))) )) (break_statement "break;" break ;)) (expression_statement "puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);" (assignment_expression "puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4)" identifier = (cast_expression "(uint *)(param_1 + (uVar11 >> 5) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (uVar11 >> 5) * 4)" ( (binary_expression "param_1 + (uVar11 >> 5) * 4" identifier + (binary_expression "(uVar11 >> 5) * 4" (parenthesized_expression "(uVar11 >> 5)" ( (binary_expression "uVar11 >> 5" identifier >> number_literal) )) * number_literal)) )))) ;) (expression_statement "*puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);" (assignment_expression "*puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f)" (pointer_expression "*puVar5" * identifier) = (binary_expression "*puVar5 ^ 1 << (uVar11 & 0x1f)" (pointer_expression "*puVar5" * identifier) ^ (binary_expression "1 << (uVar11 & 0x1f)" number_literal << (parenthesized_expression "(uVar11 & 0x1f)" ( (binary_expression "uVar11 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "iVar7 = 0x20;" (assignment_expression "iVar7 = 0x20" identifier = number_literal) ;) (expression_statement "puVar5 = &local_28;" (assignment_expression "puVar5 = &local_28" identifier = (pointer_expression "&local_28" & identifier)) ;) (expression_statement "(**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);" (call_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15)" (parenthesized_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))" ( (pointer_expression "**(code **)(*(int *)(puVar15 + 0x10) + 4)" * (pointer_expression "*(code **)(*(int *)(puVar15 + 0x10) + 4)" * (cast_expression "(code **)(*(int *)(puVar15 + 0x10) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(puVar15 + 0x10) + 4)" ( (binary_expression "*(int *)(puVar15 + 0x10) + 4" (pointer_expression "*(int *)(puVar15 + 0x10)" * (cast_expression "(int *)(puVar15 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar15 + 0x10)" ( (binary_expression "puVar15 + 0x10" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(puVar15)" ( identifier ))) ;) (if_statement "if (uVar1 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar4 = local_28 % uVar1 + 1;" (assignment_expression "uVar4 = local_28 % uVar1 + 1" identifier = (binary_expression "local_28 % uVar1 + 1" (binary_expression "local_28 % uVar1" identifier % identifier) + number_literal)) ;) (expression_statement "uVar10 = uVar11 - uVar4;" (assignment_expression "uVar10 = uVar11 - uVar4" identifier = (binary_expression "uVar11 - uVar4" identifier - identifier)) ;) (if_statement "if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }" if (parenthesized_expression "(uVar11 < uVar4)" ( (binary_expression "uVar11 < uVar4" identifier < identifier) )) (compound_statement "{\n      uVar10 = 0;\n      uVar4 = 0;\n    }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      uVar4 = uVar10 >> 5;\n    }" else (compound_statement "{\n      uVar4 = uVar10 >> 5;\n    }" { (expression_statement "uVar4 = uVar10 >> 5;" (assignment_expression "uVar4 = uVar10 >> 5" identifier = (binary_expression "uVar10 >> 5" identifier >> number_literal)) ;) }))) (expression_statement "piVar3 = (int *)(param_1 + uVar4 * 4);" (assignment_expression "piVar3 = (int *)(param_1 + uVar4 * 4)" identifier = (cast_expression "(int *)(param_1 + uVar4 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + uVar4 * 4)" ( (binary_expression "param_1 + uVar4 * 4" identifier + (binary_expression "uVar4 * 4" identifier * number_literal)) )))) ;) (expression_statement "puVar8 = (uint *)(1 << (uVar10 & 0x1f));" (assignment_expression "puVar8 = (uint *)(1 << (uVar10 & 0x1f))" identifier = (cast_expression "(uint *)(1 << (uVar10 & 0x1f))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(1 << (uVar10 & 0x1f))" ( (binary_expression "1 << (uVar10 & 0x1f)" number_literal << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) )))) ;) (expression_statement "puVar9 = (uint *)((int)puVar8 + *piVar3);" (assignment_expression "puVar9 = (uint *)((int)puVar8 + *piVar3)" identifier = (cast_expression "(uint *)((int)puVar8 + *piVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar8 + *piVar3)" ( (binary_expression "(int)puVar8 + *piVar3" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*piVar3" * identifier)) )))) ;) (expression_statement "*piVar3 = (int)puVar9;" (assignment_expression "*piVar3 = (int)puVar9" (pointer_expression "*piVar3" * identifier) = (cast_expression "(int)puVar9" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }" if (parenthesized_expression "(puVar9 < puVar8)" ( (binary_expression "puVar9 < puVar8" identifier < identifier) )) (compound_statement "{\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }" { (do_statement "do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);" do (compound_statement "{\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      }" { (expression_statement "piVar3 = piVar3 + 1;" (assignment_expression "piVar3 = piVar3 + 1" identifier = (binary_expression "piVar3 + 1" identifier + number_literal)) ;) (expression_statement "iVar2 = *piVar3;" (assignment_expression "iVar2 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "*piVar3 = iVar2 + 1;" (assignment_expression "*piVar3 = iVar2 + 1" (pointer_expression "*piVar3" * identifier) = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar2 + 1 == 0)" ( (binary_expression "iVar2 + 1 == 0" (binary_expression "iVar2 + 1" identifier + number_literal) == number_literal) )) ;) })) }) while (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) ;) (if_statement "if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }" if (parenthesized_expression "(local_24 != *(int *)PTR___stack_chk_guard_0009b540)" ( (binary_expression "local_24 != *(int *)PTR___stack_chk_guard_0009b540" identifier != (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" * (cast_expression "(int *)PTR___stack_chk_guard_0009b540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }" { (expression_statement "puVar15 = PTR___stack_chk_fail_0009b4d0;" (assignment_expression "puVar15 = PTR___stack_chk_fail_0009b4d0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_0009b4d0)();" (call_expression "(*(code *)PTR___stack_chk_fail_0009b4d0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0009b4d0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0009b4d0" * (cast_expression "(code *)PTR___stack_chk_fail_0009b4d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }" if (parenthesized_expression "(param_4 < 2)" ( (binary_expression "param_4 < 2" identifier < number_literal) )) (compound_statement "{\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }" { (if_statement "if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        *puVar9 = 1;\n        iVar2 = 1;\n      }" { (expression_statement "*puVar9 = 1;" (assignment_expression "*puVar9 = 1" (pointer_expression "*puVar9" * identifier) = number_literal) ;) (expression_statement "iVar2 = 1;" (assignment_expression "iVar2 = 1" identifier = number_literal) ;) }) (else_clause "else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }" else (compound_statement "{\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }" { (expression_statement "iVar2 = iVar7;" (assignment_expression "iVar2 = iVar7" identifier = identifier) ;) (if_statement "if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }" { (expression_statement "iVar13 = iVar7 + -1;" (assignment_expression "iVar13 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (if_statement "if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }" if (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) (compound_statement "{\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }" { (do_statement "do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);" do (compound_statement "{\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            }" { (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "*puVar8 = uVar1;" (assignment_expression "*puVar8 = uVar1" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "iVar13 = iVar13 + -1;" (assignment_expression "iVar13 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) ;) (expression_statement "puVar9 = puVar9 + iVar7 + 0x3fffffff;" (assignment_expression "puVar9 = puVar9 + iVar7 + 0x3fffffff" identifier = (binary_expression "puVar9 + iVar7 + 0x3fffffff" (binary_expression "puVar9 + iVar7" identifier + identifier) + number_literal)) ;) })) (expression_statement "*puVar9 = uVar1;" (assignment_expression "*puVar9 = uVar1" (pointer_expression "*puVar9" * identifier) = identifier) ;) })) }))) }) (else_clause "else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }" else (compound_statement "{\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0x20;" (assignment_expression "uVar4 = 0x20" identifier = number_literal) ;) (expression_statement "uVar1 = param_4;" (assignment_expression "uVar1 = param_4" identifier = identifier) ;) (do_statement "do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);" do (compound_statement "{\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      }" { (expression_statement "uVar10 = uVar10 ^ uVar1;" (assignment_expression "uVar10 = uVar10 ^ uVar1" identifier = (binary_expression "uVar10 ^ uVar1" identifier ^ identifier)) ;) (expression_statement "uVar1 = uVar1 >> 1;" (assignment_expression "uVar1 = uVar1 >> 1" identifier = (binary_expression "uVar1 >> 1" identifier >> number_literal)) ;) (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) )) ;) (expression_statement "iVar13 = param_4 << (uVar4 & 0x1f);" (assignment_expression "iVar13 = param_4 << (uVar4 & 0x1f)" identifier = (binary_expression "param_4 << (uVar4 & 0x1f)" identifier << (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }" if (parenthesized_expression "(iVar7 == 1)" ( (binary_expression "iVar7 == 1" identifier == number_literal) )) (compound_statement "{\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }" { (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar8 = (uint *)&_gp_1;" (assignment_expression "puVar8 = (uint *)&_gp_1" identifier = (cast_expression "(uint *)&_gp_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp_1" & identifier))) ;) (if_statement "if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" if (parenthesized_expression "((uVar4 & 1) != 0)" ( (binary_expression "(uVar4 & 1) != 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" { (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (expression_statement "puVar9 = (uint *)&_gp_1;" (assignment_expression "puVar9 = (uint *)&_gp_1" identifier = (cast_expression "(uint *)&_gp_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp_1" & identifier))) ;) })) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" ( (pointer_expression "**(code **)(puVar15 + 0x56004)" * (pointer_expression "*(code **)(puVar15 + 0x56004)" * (cast_expression "(code **)(puVar15 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x56004)" ( (binary_expression "puVar15 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(puVar9,puVar5,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "iVar2 = 2 - (uint)(puVar9[1] == 0);" (assignment_expression "iVar2 = 2 - (uint)(puVar9[1] == 0)" identifier = (binary_expression "2 - (uint)(puVar9[1] == 0)" number_literal - (call_expression "(uint)(puVar9[1] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(puVar9[1] == 0)" ( (binary_expression "puVar9[1] == 0" (subscript_expression "puVar9[1]" identifier [ number_literal ]) == number_literal) ))))) ;) (expression_statement "iVar7 = 0x1f - uVar4;" (assignment_expression "iVar7 = 0x1f - uVar4" identifier = (binary_expression "0x1f - uVar4" number_literal - identifier)) ;) (while_statement "while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }" { (expression_statement "puVar5 = puVar8;" (assignment_expression "puVar5 = puVar8" identifier = identifier) ;) (expression_statement "iVar13 = iVar13 << 1;" (assignment_expression "iVar13 = iVar13 << 1" identifier = (binary_expression "iVar13 << 1" identifier << number_literal)) ;) (if_statement "if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }" if (parenthesized_expression "(iVar13 < 0)" ( (binary_expression "iVar13 < 0" identifier < number_literal) )) (compound_statement "{\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }" { (expression_statement "uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);" (assignment_expression "uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1)" identifier = (call_expression "(**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1)" (parenthesized_expression "(**(code **)(puVar15 + 0x55d14))" ( (pointer_expression "**(code **)(puVar15 + 0x55d14)" * (pointer_expression "*(code **)(puVar15 + 0x55d14)" * (cast_expression "(code **)(puVar15 + 0x55d14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x55d14)" ( (binary_expression "puVar15 + 0x55d14" identifier + number_literal) ))))) )) (argument_list "(puVar9,puVar9,iVar2,uVar1)" ( identifier , identifier , identifier , identifier )))) ;) (expression_statement "puVar9[iVar2] = uVar10;" (assignment_expression "puVar9[iVar2] = uVar10" (subscript_expression "puVar9[iVar2]" identifier [ identifier ]) = identifier) ;) (expression_statement "iVar2 = iVar2 + (uint)(uVar10 != 0);" (assignment_expression "iVar2 = iVar2 + (uint)(uVar10 != 0)" identifier = (binary_expression "iVar2 + (uint)(uVar10 != 0)" identifier + (call_expression "(uint)(uVar10 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) ))))) ;) })) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (if_statement "if (iVar7 == 0) break;" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" ( (pointer_expression "**(code **)(puVar15 + 0x56004)" * (pointer_expression "*(code **)(puVar15 + 0x56004)" * (cast_expression "(code **)(puVar15 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x56004)" ( (binary_expression "puVar15 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(puVar5,puVar9,iVar2)" ( identifier , identifier , identifier ))) ;) (expression_statement "iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" identifier = (binary_expression "iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar2 * 2" identifier * number_literal) - (call_expression "(uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" ( (binary_expression "puVar5[iVar2 * 2 + 0x3fffffff] == 0" (subscript_expression "puVar5[iVar2 * 2 + 0x3fffffff]" identifier [ (binary_expression "iVar2 * 2 + 0x3fffffff" (binary_expression "iVar2 * 2" identifier * number_literal) + number_literal) ]) == number_literal) ))))) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (expression_statement "puVar9 = puVar5;" (assignment_expression "puVar9 = puVar5" identifier = identifier) ;) })) }) (else_clause "else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }" else (compound_statement "{\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }" { (expression_statement "puVar8 = (uint *)&_gp_1;" (assignment_expression "puVar8 = (uint *)&_gp_1" identifier = (cast_expression "(uint *)&_gp_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp_1" & identifier))) ;) (if_statement "if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" if (parenthesized_expression "(((uVar10 ^ uVar4) & 1) == 0)" ( (binary_expression "((uVar10 ^ uVar4) & 1) == 0" (parenthesized_expression "((uVar10 ^ uVar4) & 1)" ( (binary_expression "(uVar10 ^ uVar4) & 1" (parenthesized_expression "(uVar10 ^ uVar4)" ( (binary_expression "uVar10 ^ uVar4" identifier ^ identifier) )) & number_literal) )) == number_literal) )) (compound_statement "{\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" { (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (expression_statement "puVar9 = (uint *)&_gp_1;" (assignment_expression "puVar9 = (uint *)&_gp_1" identifier = (cast_expression "(uint *)&_gp_1" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&_gp_1" & identifier))) ;) })) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" ( (pointer_expression "**(code **)(puVar15 + 0x56004)" * (pointer_expression "*(code **)(puVar15 + 0x56004)" * (cast_expression "(code **)(puVar15 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x56004)" ( (binary_expression "puVar15 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(puVar9,puVar5,iVar7)" ( identifier , identifier , identifier ))) ;) (expression_statement "iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" identifier = (binary_expression "iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar7 * 2" identifier * number_literal) - (call_expression "(uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" ( (binary_expression "puVar9[iVar7 * 2 + 0x3fffffff] == 0" (subscript_expression "puVar9[iVar7 * 2 + 0x3fffffff]" identifier [ (binary_expression "iVar7 * 2 + 0x3fffffff" (binary_expression "iVar7 * 2" identifier * number_literal) + number_literal) ]) == number_literal) ))))) ;) (expression_statement "iVar14 = 0x1f - uVar4;" (assignment_expression "iVar14 = 0x1f - uVar4" identifier = (binary_expression "0x1f - uVar4" number_literal - identifier)) ;) (while_statement "while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }" { (expression_statement "iVar13 = iVar13 << 1;" (assignment_expression "iVar13 = iVar13 << 1" identifier = (binary_expression "iVar13 << 1" identifier << number_literal)) ;) (expression_statement "puVar12 = puVar8;" (assignment_expression "puVar12 = puVar8" identifier = identifier) ;) (if_statement "if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }" if (parenthesized_expression "(iVar13 < 0)" ( (binary_expression "iVar13 < 0" identifier < number_literal) )) (compound_statement "{\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }" { (expression_statement "iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);" (assignment_expression "iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7)" identifier = (call_expression "(**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7)" (parenthesized_expression "(**(code **)(puVar15 + 0x55f24))" ( (pointer_expression "**(code **)(puVar15 + 0x55f24)" * (pointer_expression "*(code **)(puVar15 + 0x55f24)" * (cast_expression "(code **)(puVar15 + 0x55f24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x55f24)" ( (binary_expression "puVar15 + 0x55f24" identifier + number_literal) ))))) )) (argument_list "(puVar8,puVar9,iVar2,puVar5,iVar7)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);" (assignment_expression "iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0)" identifier = (binary_expression "(iVar2 + iVar7) - (uint)(iVar6 == 0)" (parenthesized_expression "(iVar2 + iVar7)" ( (binary_expression "iVar2 + iVar7" identifier + identifier) )) - (call_expression "(uint)(iVar6 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) ))))) ;) (expression_statement "puVar12 = puVar9;" (assignment_expression "puVar12 = puVar9" identifier = identifier) ;) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" identifier = identifier) ;) })) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (expression_statement "iVar14 = iVar14 + -1;" (assignment_expression "iVar14 = iVar14 + -1" identifier = (binary_expression "iVar14 + -1" identifier + number_literal)) ;) (if_statement "if (iVar14 == 0) break;" if (parenthesized_expression "(iVar14 == 0)" ( (binary_expression "iVar14 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" ( (pointer_expression "**(code **)(puVar15 + 0x56004)" * (pointer_expression "*(code **)(puVar15 + 0x56004)" * (cast_expression "(code **)(puVar15 + 0x56004)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x56004)" ( (binary_expression "puVar15 + 0x56004" identifier + number_literal) ))))) )) (argument_list "(puVar12,puVar8,iVar2)" ( identifier , identifier , identifier ))) ;) (expression_statement "iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" identifier = (binary_expression "iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar2 * 2" identifier * number_literal) - (call_expression "(uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" ( (binary_expression "puVar12[iVar2 * 2 + 0x3fffffff] == 0" (subscript_expression "puVar12[iVar2 * 2 + 0x3fffffff]" identifier [ (binary_expression "iVar2 * 2 + 0x3fffffff" (binary_expression "iVar2 * 2" identifier * number_literal) + number_literal) ]) == number_literal) ))))) ;) (expression_statement "puVar9 = puVar12;" (assignment_expression "puVar9 = puVar12" identifier = identifier) ;) })) }))) }))) (return_statement "return iVar2;" return identifier ;) })) (return_statement "return *(int *)PTR___stack_chk_guard_0009b540;" return (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" * (cast_expression "(int *)PTR___stack_chk_guard_0009b540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE 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 (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_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 * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) )) (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) - (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) >> LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) * LIT)) )))) = (binary_expression LIT >> (parenthesized_expression ( (binary_expression (unary_expression - IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression LIT < IDENT) )) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) )) (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + (binary_expression IDENT / IDENT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) )) (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT % IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) ^ (binary_expression LIT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) )) (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT % IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression LIT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * IDENT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) == LIT) )) ;) })) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) })) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (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) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) == LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ IDENT) )) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) == LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) == LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) }))) }))) (return_statement return IDENT ;) })) (return_statement return (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) })))
(function_definition "int __gmpn_random2(int param_1,int param_2,undefined4 param_3,uint param_4)\n\n{\n  uint uVar1;\n  int iVar2;\n  int *piVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  int iVar7;\n  uint *puVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint *puVar12;\n  int iVar13;\n  int iVar14;\n  undefined *puVar15;\n  uint local_2c;\n  uint local_28;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);\n  uVar10 = param_2 * 0x20 - (local_2c & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  *(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar7 = uVar1 - 2;\n  if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);\n  puVar15 = PTR___gmp_rands_0009b27c;\n  uVar1 = (local_28 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }\n  return *(int *)PTR___stack_chk_guard_0009b540;\n}" (primitive_type "int") (function_declarator "__gmpn_random2(int param_1,int param_2,undefined4 param_3,uint param_4)" (identifier "__gmpn_random2") (parameter_list "(int param_1,int param_2,undefined4 param_3,uint param_4)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int *piVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  int iVar7;\n  uint *puVar8;\n  uint *puVar9;\n  uint uVar10;\n  uint uVar11;\n  uint *puVar12;\n  int iVar13;\n  int iVar14;\n  undefined *puVar15;\n  uint local_2c;\n  uint local_28;\n  int local_24;\n  \n  local_24 = *(int *)PTR___stack_chk_guard_0009b540;\n  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);\n  uVar10 = param_2 * 0x20 - (local_2c & 0x1f);\n  uVar1 = uVar10 + 0x1f >> 5;\n  *(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);\n  iVar7 = uVar1 - 2;\n  if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }\n  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);\n  puVar15 = PTR___gmp_rands_0009b27c;\n  uVar1 = (local_28 & 3) + 1;\n  if (uVar1 == 0) {\n    trap(7);\n  }\n  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;\n  do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);\n  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }\n  return *(int *)PTR___stack_chk_guard_0009b540;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "uint *puVar8;" (type_identifier "uint") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "uint *puVar9;" (type_identifier "uint") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "uint *puVar12;" (type_identifier "uint") (pointer_declarator "*puVar12" (* "*") (identifier "puVar12")) (; ";")) (declaration "int iVar13;" (primitive_type "int") (identifier "iVar13") (; ";")) (declaration "int iVar14;" (primitive_type "int") (identifier "iVar14") (; ";")) (declaration "undefined *puVar15;" (type_identifier "undefined") (pointer_declarator "*puVar15" (* "*") (identifier "puVar15")) (; ";")) (declaration "uint local_2c;" (type_identifier "uint") (identifier "local_2c") (; ";")) (declaration "uint local_28;" (type_identifier "uint") (identifier "local_28") (; ";")) (declaration "int local_24;" (primitive_type "int") (identifier "local_24") (; ";")) (expression_statement "local_24 = *(int *)PTR___stack_chk_guard_0009b540;" (assignment_expression "local_24 = *(int *)PTR___stack_chk_guard_0009b540" (identifier "local_24") (= "=") (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_0009b540" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_0009b540")))) (; ";")) (if_statement "if (*PTR___gmp_rands_initialized_0009b188 == '\0') {\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }" (if "if") (parenthesized_expression "(*PTR___gmp_rands_initialized_0009b188 == '\0')" (( "(") (binary_expression "*PTR___gmp_rands_initialized_0009b188 == '\0'" (pointer_expression "*PTR___gmp_rands_initialized_0009b188" (* "*") (identifier "PTR___gmp_rands_initialized_0009b188")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    *PTR___gmp_rands_initialized_0009b188 = 1;\n    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);\n  }" ({ "{") (expression_statement "*PTR___gmp_rands_initialized_0009b188 = 1;" (assignment_expression "*PTR___gmp_rands_initialized_0009b188 = 1" (pointer_expression "*PTR___gmp_rands_initialized_0009b188" (* "*") (identifier "PTR___gmp_rands_initialized_0009b188")) (= "=") (number_literal "1")) (; ";")) (expression_statement "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);" (call_expression "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c)" (parenthesized_expression "(*(code *)PTR___gmp_randinit_mt_noseed_0009b600)" (( "(") (pointer_expression "*(code *)PTR___gmp_randinit_mt_noseed_0009b600" (* "*") (cast_expression "(code *)PTR___gmp_randinit_mt_noseed_0009b600" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___gmp_randinit_mt_noseed_0009b600"))) () ")")) (argument_list "(PTR___gmp_rands_0009b27c)" (( "(") (identifier "PTR___gmp_rands_0009b27c") () ")"))) (; ";")) (} "}"))) (expression_statement "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20);" (call_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_2c,0x20)" (parenthesized_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))" (( "(") (pointer_expression "**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" (* "*") (pointer_expression "*(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" (* "*") (cast_expression "(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" (( "(") (binary_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4" (pointer_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10)" (* "*") (cast_expression "(int *)(PTR___gmp_rands_0009b27c + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR___gmp_rands_0009b27c + 0x10)" (( "(") (binary_expression "PTR___gmp_rands_0009b27c + 0x10" (identifier "PTR___gmp_rands_0009b27c") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "4")) () ")"))))) () ")")) (argument_list "(PTR___gmp_rands_0009b27c,&local_2c,0x20)" (( "(") (identifier "PTR___gmp_rands_0009b27c") (, ",") (pointer_expression "&local_2c" (& "&") (identifier "local_2c")) (, ",") (number_literal "0x20") () ")"))) (; ";")) (expression_statement "uVar10 = param_2 * 0x20 - (local_2c & 0x1f);" (assignment_expression "uVar10 = param_2 * 0x20 - (local_2c & 0x1f)" (identifier "uVar10") (= "=") (binary_expression "param_2 * 0x20 - (local_2c & 0x1f)" (binary_expression "param_2 * 0x20" (identifier "param_2") (* "*") (number_literal "0x20")) (- "-") (parenthesized_expression "(local_2c & 0x1f)" (( "(") (binary_expression "local_2c & 0x1f" (identifier "local_2c") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar1 = uVar10 + 0x1f >> 5;" (assignment_expression "uVar1 = uVar10 + 0x1f >> 5" (identifier "uVar1") (= "=") (binary_expression "uVar10 + 0x1f >> 5" (binary_expression "uVar10 + 0x1f" (identifier "uVar10") (+ "+") (number_literal "0x1f")) (>> ">>") (number_literal "5"))) (; ";")) (expression_statement "*(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);" (assignment_expression "*(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f)" (pointer_expression "*(uint *)(param_1 + (uVar1 - 1) * 4)" (* "*") (cast_expression "(uint *)(param_1 + (uVar1 - 1) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + (uVar1 - 1) * 4)" (( "(") (binary_expression "param_1 + (uVar1 - 1) * 4" (identifier "param_1") (+ "+") (binary_expression "(uVar1 - 1) * 4" (parenthesized_expression "(uVar1 - 1)" (( "(") (binary_expression "uVar1 - 1" (identifier "uVar1") (- "-") (number_literal "1")) () ")")) (* "*") (number_literal "4"))) () ")")))) (= "=") (binary_expression "0xffffffff >> (-uVar10 & 0x1f)" (number_literal "0xffffffff") (>> ">>") (parenthesized_expression "(-uVar10 & 0x1f)" (( "(") (binary_expression "-uVar10 & 0x1f" (unary_expression "-uVar10" (- "-") (identifier "uVar10")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "iVar7 = uVar1 - 2;" (assignment_expression "iVar7 = uVar1 - 2" (identifier "iVar7") (= "=") (binary_expression "uVar1 - 2" (identifier "uVar1") (- "-") (number_literal "2"))) (; ";")) (if_statement "if (-1 < iVar7) {\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }" (if "if") (parenthesized_expression "(-1 < iVar7)" (( "(") (binary_expression "-1 < iVar7" (number_literal "-1") (< "<") (identifier "iVar7")) () ")")) (compound_statement "{\n    iVar2 = param_1 + uVar1 * 4;\n    do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);\n  }" ({ "{") (expression_statement "iVar2 = param_1 + uVar1 * 4;" (assignment_expression "iVar2 = param_1 + uVar1 * 4" (identifier "iVar2") (= "=") (binary_expression "param_1 + uVar1 * 4" (identifier "param_1") (+ "+") (binary_expression "uVar1 * 4" (identifier "uVar1") (* "*") (number_literal "4")))) (; ";")) (do_statement "do {\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    } while (-1 < iVar7);" (do "do") (compound_statement "{\n      *(undefined4 *)(iVar2 + -8) = 0xffffffff;\n      iVar7 = iVar7 + -1;\n      iVar2 = iVar2 + -4;\n    }" ({ "{") (expression_statement "*(undefined4 *)(iVar2 + -8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(iVar2 + -8) = 0xffffffff" (pointer_expression "*(undefined4 *)(iVar2 + -8)" (* "*") (cast_expression "(undefined4 *)(iVar2 + -8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + -8)" (( "(") (binary_expression "iVar2 + -8" (identifier "iVar2") (+ "+") (number_literal "-8")) () ")")))) (= "=") (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 "iVar2 = iVar2 + -4;" (assignment_expression "iVar2 = iVar2 + -4" (identifier "iVar2") (= "=") (binary_expression "iVar2 + -4" (identifier "iVar2") (+ "+") (number_literal "-4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(-1 < iVar7)" (( "(") (binary_expression "-1 < iVar7" (number_literal "-1") (< "<") (identifier "iVar7")) () ")")) (; ";")) (} "}"))) (expression_statement "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20);" (call_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))\n            (PTR___gmp_rands_0009b27c,&local_28,0x20)" (parenthesized_expression "(**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))" (( "(") (pointer_expression "**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" (* "*") (pointer_expression "*(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" (* "*") (cast_expression "(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4)" (( "(") (binary_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4" (pointer_expression "*(int *)(PTR___gmp_rands_0009b27c + 0x10)" (* "*") (cast_expression "(int *)(PTR___gmp_rands_0009b27c + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR___gmp_rands_0009b27c + 0x10)" (( "(") (binary_expression "PTR___gmp_rands_0009b27c + 0x10" (identifier "PTR___gmp_rands_0009b27c") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "4")) () ")"))))) () ")")) (argument_list "(PTR___gmp_rands_0009b27c,&local_28,0x20)" (( "(") (identifier "PTR___gmp_rands_0009b27c") (, ",") (pointer_expression "&local_28" (& "&") (identifier "local_28")) (, ",") (number_literal "0x20") () ")"))) (; ";")) (expression_statement "puVar15 = PTR___gmp_rands_0009b27c;" (assignment_expression "puVar15 = PTR___gmp_rands_0009b27c" (identifier "puVar15") (= "=") (identifier "PTR___gmp_rands_0009b27c")) (; ";")) (expression_statement "uVar1 = (local_28 & 3) + 1;" (assignment_expression "uVar1 = (local_28 & 3) + 1" (identifier "uVar1") (= "=") (binary_expression "(local_28 & 3) + 1" (parenthesized_expression "(local_28 & 3)" (( "(") (binary_expression "local_28 & 3" (identifier "local_28") (& "&") (number_literal "3")) () ")")) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar1 == 0) {\n    trap(7);\n  }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    trap(7);\n  }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;" (assignment_expression "uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1" (identifier "uVar1") (= "=") (binary_expression "(uint)(uVar10 < uVar1) + uVar10 / uVar1" (call_expression "(uint)(uVar10 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar10 < uVar1)" (( "(") (binary_expression "uVar10 < uVar1" (identifier "uVar10") (< "<") (identifier "uVar1")) () ")"))) (+ "+") (binary_expression "uVar10 / uVar1" (identifier "uVar10") (/ "/") (identifier "uVar1")))) (; ";")) (do_statement "do {\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  } while (uVar10 != 0);" (do "do") (compound_statement "{\n    iVar7 = 0x20;\n    puVar9 = (uint *)puVar15;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar11 = uVar10 - uVar4;\n    if ((uVar10 < uVar4) || (uVar11 == 0)) break;\n    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);\n    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);\n    iVar7 = 0x20;\n    puVar5 = &local_28;\n    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);\n    if (uVar1 == 0) {\n      trap(7);\n    }\n    uVar4 = local_28 % uVar1 + 1;\n    uVar10 = uVar11 - uVar4;\n    if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }\n    piVar3 = (int *)(param_1 + uVar4 * 4);\n    puVar8 = (uint *)(1 << (uVar10 & 0x1f));\n    puVar9 = (uint *)((int)puVar8 + *piVar3);\n    *piVar3 = (int)puVar9;\n    if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }\n  }" ({ "{") (expression_statement "iVar7 = 0x20;" (assignment_expression "iVar7 = 0x20" (identifier "iVar7") (= "=") (number_literal "0x20")) (; ";")) (expression_statement "puVar9 = (uint *)puVar15;" (assignment_expression "puVar9 = (uint *)puVar15" (identifier "puVar9") (= "=") (cast_expression "(uint *)puVar15" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar15"))) (; ";")) (expression_statement "puVar5 = &local_28;" (assignment_expression "puVar5 = &local_28" (identifier "puVar5") (= "=") (pointer_expression "&local_28" (& "&") (identifier "local_28"))) (; ";")) (expression_statement "(**(code **)(*(int *)(puVar15 + 0x10) + 4))();" (call_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))()" (parenthesized_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))" (( "(") (pointer_expression "**(code **)(*(int *)(puVar15 + 0x10) + 4)" (* "*") (pointer_expression "*(code **)(*(int *)(puVar15 + 0x10) + 4)" (* "*") (cast_expression "(code **)(*(int *)(puVar15 + 0x10) + 4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(puVar15 + 0x10) + 4)" (( "(") (binary_expression "*(int *)(puVar15 + 0x10) + 4" (pointer_expression "*(int *)(puVar15 + 0x10)" (* "*") (cast_expression "(int *)(puVar15 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar15 + 0x10)" (( "(") (binary_expression "puVar15 + 0x10" (identifier "puVar15") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "4")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (uVar1 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar4 = local_28 % uVar1 + 1;" (assignment_expression "uVar4 = local_28 % uVar1 + 1" (identifier "uVar4") (= "=") (binary_expression "local_28 % uVar1 + 1" (binary_expression "local_28 % uVar1" (identifier "local_28") (% "%") (identifier "uVar1")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar11 = uVar10 - uVar4;" (assignment_expression "uVar11 = uVar10 - uVar4" (identifier "uVar11") (= "=") (binary_expression "uVar10 - uVar4" (identifier "uVar10") (- "-") (identifier "uVar4"))) (; ";")) (if_statement "if ((uVar10 < uVar4) || (uVar11 == 0)) break;" (if "if") (parenthesized_expression "((uVar10 < uVar4) || (uVar11 == 0))" (( "(") (binary_expression "(uVar10 < uVar4) || (uVar11 == 0)" (parenthesized_expression "(uVar10 < uVar4)" (( "(") (binary_expression "uVar10 < uVar4" (identifier "uVar10") (< "<") (identifier "uVar4")) () ")")) (|| "||") (parenthesized_expression "(uVar11 == 0)" (( "(") (binary_expression "uVar11 == 0" (identifier "uVar11") (== "==") (number_literal "0")) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);" (assignment_expression "puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4)" (identifier "puVar5") (= "=") (cast_expression "(uint *)(param_1 + (uVar11 >> 5) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + (uVar11 >> 5) * 4)" (( "(") (binary_expression "param_1 + (uVar11 >> 5) * 4" (identifier "param_1") (+ "+") (binary_expression "(uVar11 >> 5) * 4" (parenthesized_expression "(uVar11 >> 5)" (( "(") (binary_expression "uVar11 >> 5" (identifier "uVar11") (>> ">>") (number_literal "5")) () ")")) (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "*puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);" (assignment_expression "*puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f)" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (binary_expression "*puVar5 ^ 1 << (uVar11 & 0x1f)" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (^ "^") (binary_expression "1 << (uVar11 & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "(uVar11 & 0x1f)" (( "(") (binary_expression "uVar11 & 0x1f" (identifier "uVar11") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "iVar7 = 0x20;" (assignment_expression "iVar7 = 0x20" (identifier "iVar7") (= "=") (number_literal "0x20")) (; ";")) (expression_statement "puVar5 = &local_28;" (assignment_expression "puVar5 = &local_28" (identifier "puVar5") (= "=") (pointer_expression "&local_28" (& "&") (identifier "local_28"))) (; ";")) (expression_statement "(**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);" (call_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15)" (parenthesized_expression "(**(code **)(*(int *)(puVar15 + 0x10) + 4))" (( "(") (pointer_expression "**(code **)(*(int *)(puVar15 + 0x10) + 4)" (* "*") (pointer_expression "*(code **)(*(int *)(puVar15 + 0x10) + 4)" (* "*") (cast_expression "(code **)(*(int *)(puVar15 + 0x10) + 4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(puVar15 + 0x10) + 4)" (( "(") (binary_expression "*(int *)(puVar15 + 0x10) + 4" (pointer_expression "*(int *)(puVar15 + 0x10)" (* "*") (cast_expression "(int *)(puVar15 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar15 + 0x10)" (( "(") (binary_expression "puVar15 + 0x10" (identifier "puVar15") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "4")) () ")"))))) () ")")) (argument_list "(puVar15)" (( "(") (identifier "puVar15") () ")"))) (; ";")) (if_statement "if (uVar1 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar4 = local_28 % uVar1 + 1;" (assignment_expression "uVar4 = local_28 % uVar1 + 1" (identifier "uVar4") (= "=") (binary_expression "local_28 % uVar1 + 1" (binary_expression "local_28 % uVar1" (identifier "local_28") (% "%") (identifier "uVar1")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar10 = uVar11 - uVar4;" (assignment_expression "uVar10 = uVar11 - uVar4" (identifier "uVar10") (= "=") (binary_expression "uVar11 - uVar4" (identifier "uVar11") (- "-") (identifier "uVar4"))) (; ";")) (if_statement "if (uVar11 < uVar4) {\n      uVar10 = 0;\n      uVar4 = 0;\n    }\n    else {\n      uVar4 = uVar10 >> 5;\n    }" (if "if") (parenthesized_expression "(uVar11 < uVar4)" (( "(") (binary_expression "uVar11 < uVar4" (identifier "uVar11") (< "<") (identifier "uVar4")) () ")")) (compound_statement "{\n      uVar10 = 0;\n      uVar4 = 0;\n    }" ({ "{") (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" (identifier "uVar10") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      uVar4 = uVar10 >> 5;\n    }" (else "else") (compound_statement "{\n      uVar4 = uVar10 >> 5;\n    }" ({ "{") (expression_statement "uVar4 = uVar10 >> 5;" (assignment_expression "uVar4 = uVar10 >> 5" (identifier "uVar4") (= "=") (binary_expression "uVar10 >> 5" (identifier "uVar10") (>> ">>") (number_literal "5"))) (; ";")) (} "}")))) (expression_statement "piVar3 = (int *)(param_1 + uVar4 * 4);" (assignment_expression "piVar3 = (int *)(param_1 + uVar4 * 4)" (identifier "piVar3") (= "=") (cast_expression "(int *)(param_1 + uVar4 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + uVar4 * 4)" (( "(") (binary_expression "param_1 + uVar4 * 4" (identifier "param_1") (+ "+") (binary_expression "uVar4 * 4" (identifier "uVar4") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "puVar8 = (uint *)(1 << (uVar10 & 0x1f));" (assignment_expression "puVar8 = (uint *)(1 << (uVar10 & 0x1f))" (identifier "puVar8") (= "=") (cast_expression "(uint *)(1 << (uVar10 & 0x1f))" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(1 << (uVar10 & 0x1f))" (( "(") (binary_expression "1 << (uVar10 & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "(uVar10 & 0x1f)" (( "(") (binary_expression "uVar10 & 0x1f" (identifier "uVar10") (& "&") (number_literal "0x1f")) () ")"))) () ")")))) (; ";")) (expression_statement "puVar9 = (uint *)((int)puVar8 + *piVar3);" (assignment_expression "puVar9 = (uint *)((int)puVar8 + *piVar3)" (identifier "puVar9") (= "=") (cast_expression "(uint *)((int)puVar8 + *piVar3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar8 + *piVar3)" (( "(") (binary_expression "(int)puVar8 + *piVar3" (cast_expression "(int)puVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar8")) (+ "+") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) () ")")))) (; ";")) (expression_statement "*piVar3 = (int)puVar9;" (assignment_expression "*piVar3 = (int)puVar9" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (= "=") (cast_expression "(int)puVar9" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar9"))) (; ";")) (if_statement "if (puVar9 < puVar8) {\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }" (if "if") (parenthesized_expression "(puVar9 < puVar8)" (( "(") (binary_expression "puVar9 < puVar8" (identifier "puVar9") (< "<") (identifier "puVar8")) () ")")) (compound_statement "{\n      do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);\n    }" ({ "{") (do_statement "do {\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      } while (iVar2 + 1 == 0);" (do "do") (compound_statement "{\n        piVar3 = piVar3 + 1;\n        iVar2 = *piVar3;\n        *piVar3 = iVar2 + 1;\n      }" ({ "{") (expression_statement "piVar3 = piVar3 + 1;" (assignment_expression "piVar3 = piVar3 + 1" (identifier "piVar3") (= "=") (binary_expression "piVar3 + 1" (identifier "piVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar2 = *piVar3;" (assignment_expression "iVar2 = *piVar3" (identifier "iVar2") (= "=") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) (; ";")) (expression_statement "*piVar3 = iVar2 + 1;" (assignment_expression "*piVar3 = iVar2 + 1" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (= "=") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar2 + 1 == 0)" (( "(") (binary_expression "iVar2 + 1 == 0" (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1")) (== "==") (number_literal "0")) () ")")) (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (; ";")) (if_statement "if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }" (if "if") (parenthesized_expression "(local_24 != *(int *)PTR___stack_chk_guard_0009b540)" (( "(") (binary_expression "local_24 != *(int *)PTR___stack_chk_guard_0009b540" (identifier "local_24") (!= "!=") (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_0009b540" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_0009b540")))) () ")")) (compound_statement "{\n    puVar15 = PTR___stack_chk_fail_0009b4d0;\n    (*(code *)PTR___stack_chk_fail_0009b4d0)();\n    if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }\n    return iVar2;\n  }" ({ "{") (expression_statement "puVar15 = PTR___stack_chk_fail_0009b4d0;" (assignment_expression "puVar15 = PTR___stack_chk_fail_0009b4d0" (identifier "puVar15") (= "=") (identifier "PTR___stack_chk_fail_0009b4d0")) (; ";")) (expression_statement "(*(code *)PTR___stack_chk_fail_0009b4d0)();" (call_expression "(*(code *)PTR___stack_chk_fail_0009b4d0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0009b4d0)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_0009b4d0" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_0009b4d0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_0009b4d0"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (param_4 < 2) {\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }\n    else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }" (if "if") (parenthesized_expression "(param_4 < 2)" (( "(") (binary_expression "param_4 < 2" (identifier "param_4") (< "<") (number_literal "2")) () ")")) (compound_statement "{\n      if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }\n    }" ({ "{") (if_statement "if (param_4 == 0) {\n        *puVar9 = 1;\n        iVar2 = 1;\n      }\n      else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        *puVar9 = 1;\n        iVar2 = 1;\n      }" ({ "{") (expression_statement "*puVar9 = 1;" (assignment_expression "*puVar9 = 1" (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (= "=") (number_literal "1")) (; ";")) (expression_statement "iVar2 = 1;" (assignment_expression "iVar2 = 1" (identifier "iVar2") (= "=") (number_literal "1")) (; ";")) (} "}")) (else_clause "else {\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }" (else "else") (compound_statement "{\n        iVar2 = iVar7;\n        if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }\n      }" ({ "{") (expression_statement "iVar2 = iVar7;" (assignment_expression "iVar2 = iVar7" (identifier "iVar2") (= "=") (identifier "iVar7")) (; ";")) (if_statement "if (iVar7 != 0) {\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }" (if "if") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          iVar13 = iVar7 + -1;\n          uVar1 = *puVar5;\n          puVar8 = puVar9;\n          if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }\n          *puVar9 = uVar1;\n        }" ({ "{") (expression_statement "iVar13 = iVar7 + -1;" (assignment_expression "iVar13 = iVar7 + -1" (identifier "iVar13") (= "=") (binary_expression "iVar7 + -1" (identifier "iVar7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" (identifier "uVar1") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" (identifier "puVar8") (= "=") (identifier "puVar9")) (; ";")) (if_statement "if (iVar13 != 0) {\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }" (if "if") (parenthesized_expression "(iVar13 != 0)" (( "(") (binary_expression "iVar13 != 0" (identifier "iVar13") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);\n            puVar9 = puVar9 + iVar7 + 0x3fffffff;\n          }" ({ "{") (do_statement "do {\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            } while (iVar13 != 0);" (do "do") (compound_statement "{\n              puVar5 = puVar5 + 1;\n              *puVar8 = uVar1;\n              iVar13 = iVar13 + -1;\n              uVar1 = *puVar5;\n              puVar8 = puVar8 + 1;\n            }" ({ "{") (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar8 = uVar1;" (assignment_expression "*puVar8 = uVar1" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "iVar13 = iVar13 + -1;" (assignment_expression "iVar13 = iVar13 + -1" (identifier "iVar13") (= "=") (binary_expression "iVar13 + -1" (identifier "iVar13") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" (identifier "uVar1") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (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 "(iVar13 != 0)" (( "(") (binary_expression "iVar13 != 0" (identifier "iVar13") (!= "!=") (number_literal "0")) () ")")) (; ";")) (expression_statement "puVar9 = puVar9 + iVar7 + 0x3fffffff;" (assignment_expression "puVar9 = puVar9 + iVar7 + 0x3fffffff" (identifier "puVar9") (= "=") (binary_expression "puVar9 + iVar7 + 0x3fffffff" (binary_expression "puVar9 + iVar7" (identifier "puVar9") (+ "+") (identifier "iVar7")) (+ "+") (number_literal "0x3fffffff"))) (; ";")) (} "}"))) (expression_statement "*puVar9 = uVar1;" (assignment_expression "*puVar9 = uVar1" (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (= "=") (identifier "uVar1")) (; ";")) (} "}"))) (} "}")))) (} "}")) (else_clause "else {\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }" (else "else") (compound_statement "{\n      uVar10 = 0;\n      uVar4 = 0x20;\n      uVar1 = param_4;\n      do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);\n      iVar13 = param_4 << (uVar4 & 0x1f);\n      if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }\n    }" ({ "{") (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" (identifier "uVar10") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar4 = 0x20;" (assignment_expression "uVar4 = 0x20" (identifier "uVar4") (= "=") (number_literal "0x20")) (; ";")) (expression_statement "uVar1 = param_4;" (assignment_expression "uVar1 = param_4" (identifier "uVar1") (= "=") (identifier "param_4")) (; ";")) (do_statement "do {\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      } while (uVar1 != 0);" (do "do") (compound_statement "{\n        uVar10 = uVar10 ^ uVar1;\n        uVar1 = uVar1 >> 1;\n        uVar4 = uVar4 - 1;\n      }" ({ "{") (expression_statement "uVar10 = uVar10 ^ uVar1;" (assignment_expression "uVar10 = uVar10 ^ uVar1" (identifier "uVar10") (= "=") (binary_expression "uVar10 ^ uVar1" (identifier "uVar10") (^ "^") (identifier "uVar1"))) (; ";")) (expression_statement "uVar1 = uVar1 >> 1;" (assignment_expression "uVar1 = uVar1 >> 1" (identifier "uVar1") (= "=") (binary_expression "uVar1 >> 1" (identifier "uVar1") (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar1 != 0)" (( "(") (binary_expression "uVar1 != 0" (identifier "uVar1") (!= "!=") (number_literal "0")) () ")")) (; ";")) (expression_statement "iVar13 = param_4 << (uVar4 & 0x1f);" (assignment_expression "iVar13 = param_4 << (uVar4 & 0x1f)" (identifier "iVar13") (= "=") (binary_expression "param_4 << (uVar4 & 0x1f)" (identifier "param_4") (<< "<<") (parenthesized_expression "(uVar4 & 0x1f)" (( "(") (binary_expression "uVar4 & 0x1f" (identifier "uVar4") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if (iVar7 == 1) {\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }\n      else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }" (if "if") (parenthesized_expression "(iVar7 == 1)" (( "(") (binary_expression "iVar7 == 1" (identifier "iVar7") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n        uVar1 = *puVar5;\n        puVar8 = (uint *)&_gp_1;\n        if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);\n        iVar2 = 2 - (uint)(puVar9[1] == 0);\n        iVar7 = 0x1f - uVar4;\n        while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }\n      }" ({ "{") (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" (identifier "uVar1") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "puVar8 = (uint *)&_gp_1;" (assignment_expression "puVar8 = (uint *)&_gp_1" (identifier "puVar8") (= "=") (cast_expression "(uint *)&_gp_1" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&_gp_1" (& "&") (identifier "_gp_1")))) (; ";")) (if_statement "if ((uVar4 & 1) != 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" (if "if") (parenthesized_expression "((uVar4 & 1) != 0)" (( "(") (binary_expression "(uVar4 & 1) != 0" (parenthesized_expression "(uVar4 & 1)" (( "(") (binary_expression "uVar4 & 1" (identifier "uVar4") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" ({ "{") (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" (identifier "puVar8") (= "=") (identifier "puVar9")) (; ";")) (expression_statement "puVar9 = (uint *)&_gp_1;" (assignment_expression "puVar9 = (uint *)&_gp_1" (identifier "puVar9") (= "=") (cast_expression "(uint *)&_gp_1" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&_gp_1" (& "&") (identifier "_gp_1")))) (; ";")) (} "}"))) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" (( "(") (pointer_expression "**(code **)(puVar15 + 0x56004)" (* "*") (pointer_expression "*(code **)(puVar15 + 0x56004)" (* "*") (cast_expression "(code **)(puVar15 + 0x56004)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x56004)" (( "(") (binary_expression "puVar15 + 0x56004" (identifier "puVar15") (+ "+") (number_literal "0x56004")) () ")"))))) () ")")) (argument_list "(puVar9,puVar5,1)" (( "(") (identifier "puVar9") (, ",") (identifier "puVar5") (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "iVar2 = 2 - (uint)(puVar9[1] == 0);" (assignment_expression "iVar2 = 2 - (uint)(puVar9[1] == 0)" (identifier "iVar2") (= "=") (binary_expression "2 - (uint)(puVar9[1] == 0)" (number_literal "2") (- "-") (call_expression "(uint)(puVar9[1] == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(puVar9[1] == 0)" (( "(") (binary_expression "puVar9[1] == 0" (subscript_expression "puVar9[1]" (identifier "puVar9") ([ "[") (number_literal "1") (] "]")) (== "==") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "iVar7 = 0x1f - uVar4;" (assignment_expression "iVar7 = 0x1f - uVar4" (identifier "iVar7") (= "=") (binary_expression "0x1f - uVar4" (number_literal "0x1f") (- "-") (identifier "uVar4"))) (; ";")) (while_statement "while( true ) {\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          puVar5 = puVar8;\n          iVar13 = iVar13 << 1;\n          if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }\n          iVar7 = iVar7 + -1;\n          if (iVar7 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar8 = puVar9;\n          puVar9 = puVar5;\n        }" ({ "{") (expression_statement "puVar5 = puVar8;" (assignment_expression "puVar5 = puVar8" (identifier "puVar5") (= "=") (identifier "puVar8")) (; ";")) (expression_statement "iVar13 = iVar13 << 1;" (assignment_expression "iVar13 = iVar13 << 1" (identifier "iVar13") (= "=") (binary_expression "iVar13 << 1" (identifier "iVar13") (<< "<<") (number_literal "1"))) (; ";")) (if_statement "if (iVar13 < 0) {\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }" (if "if") (parenthesized_expression "(iVar13 < 0)" (( "(") (binary_expression "iVar13 < 0" (identifier "iVar13") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);\n            puVar9[iVar2] = uVar10;\n            iVar2 = iVar2 + (uint)(uVar10 != 0);\n          }" ({ "{") (expression_statement "uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);" (assignment_expression "uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1)" (identifier "uVar10") (= "=") (call_expression "(**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1)" (parenthesized_expression "(**(code **)(puVar15 + 0x55d14))" (( "(") (pointer_expression "**(code **)(puVar15 + 0x55d14)" (* "*") (pointer_expression "*(code **)(puVar15 + 0x55d14)" (* "*") (cast_expression "(code **)(puVar15 + 0x55d14)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x55d14)" (( "(") (binary_expression "puVar15 + 0x55d14" (identifier "puVar15") (+ "+") (number_literal "0x55d14")) () ")"))))) () ")")) (argument_list "(puVar9,puVar9,iVar2,uVar1)" (( "(") (identifier "puVar9") (, ",") (identifier "puVar9") (, ",") (identifier "iVar2") (, ",") (identifier "uVar1") () ")")))) (; ";")) (expression_statement "puVar9[iVar2] = uVar10;" (assignment_expression "puVar9[iVar2] = uVar10" (subscript_expression "puVar9[iVar2]" (identifier "puVar9") ([ "[") (identifier "iVar2") (] "]")) (= "=") (identifier "uVar10")) (; ";")) (expression_statement "iVar2 = iVar2 + (uint)(uVar10 != 0);" (assignment_expression "iVar2 = iVar2 + (uint)(uVar10 != 0)" (identifier "iVar2") (= "=") (binary_expression "iVar2 + (uint)(uVar10 != 0)" (identifier "iVar2") (+ "+") (call_expression "(uint)(uVar10 != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")"))))) (; ";")) (} "}"))) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + -1" (identifier "iVar7") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar7 == 0) break;" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" (( "(") (pointer_expression "**(code **)(puVar15 + 0x56004)" (* "*") (pointer_expression "*(code **)(puVar15 + 0x56004)" (* "*") (cast_expression "(code **)(puVar15 + 0x56004)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x56004)" (( "(") (binary_expression "puVar15 + 0x56004" (identifier "puVar15") (+ "+") (number_literal "0x56004")) () ")"))))) () ")")) (argument_list "(puVar5,puVar9,iVar2)" (( "(") (identifier "puVar5") (, ",") (identifier "puVar9") (, ",") (identifier "iVar2") () ")"))) (; ";")) (expression_statement "iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" (identifier "iVar2") (= "=") (binary_expression "iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar2 * 2" (identifier "iVar2") (* "*") (number_literal "2")) (- "-") (call_expression "(uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(puVar5[iVar2 * 2 + 0x3fffffff] == 0)" (( "(") (binary_expression "puVar5[iVar2 * 2 + 0x3fffffff] == 0" (subscript_expression "puVar5[iVar2 * 2 + 0x3fffffff]" (identifier "puVar5") ([ "[") (binary_expression "iVar2 * 2 + 0x3fffffff" (binary_expression "iVar2 * 2" (identifier "iVar2") (* "*") (number_literal "2")) (+ "+") (number_literal "0x3fffffff")) (] "]")) (== "==") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" (identifier "puVar8") (= "=") (identifier "puVar9")) (; ";")) (expression_statement "puVar9 = puVar5;" (assignment_expression "puVar9 = puVar5" (identifier "puVar9") (= "=") (identifier "puVar5")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }" (else "else") (compound_statement "{\n        puVar8 = (uint *)&_gp_1;\n        if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }\n        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);\n        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);\n        iVar14 = 0x1f - uVar4;\n        while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }\n      }" ({ "{") (expression_statement "puVar8 = (uint *)&_gp_1;" (assignment_expression "puVar8 = (uint *)&_gp_1" (identifier "puVar8") (= "=") (cast_expression "(uint *)&_gp_1" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&_gp_1" (& "&") (identifier "_gp_1")))) (; ";")) (if_statement "if (((uVar10 ^ uVar4) & 1) == 0) {\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" (if "if") (parenthesized_expression "(((uVar10 ^ uVar4) & 1) == 0)" (( "(") (binary_expression "((uVar10 ^ uVar4) & 1) == 0" (parenthesized_expression "((uVar10 ^ uVar4) & 1)" (( "(") (binary_expression "(uVar10 ^ uVar4) & 1" (parenthesized_expression "(uVar10 ^ uVar4)" (( "(") (binary_expression "uVar10 ^ uVar4" (identifier "uVar10") (^ "^") (identifier "uVar4")) () ")")) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          puVar8 = puVar9;\n          puVar9 = (uint *)&_gp_1;\n        }" ({ "{") (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" (identifier "puVar8") (= "=") (identifier "puVar9")) (; ";")) (expression_statement "puVar9 = (uint *)&_gp_1;" (assignment_expression "puVar9 = (uint *)&_gp_1" (identifier "puVar9") (= "=") (cast_expression "(uint *)&_gp_1" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&_gp_1" (& "&") (identifier "_gp_1")))) (; ";")) (} "}"))) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" (( "(") (pointer_expression "**(code **)(puVar15 + 0x56004)" (* "*") (pointer_expression "*(code **)(puVar15 + 0x56004)" (* "*") (cast_expression "(code **)(puVar15 + 0x56004)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x56004)" (( "(") (binary_expression "puVar15 + 0x56004" (identifier "puVar15") (+ "+") (number_literal "0x56004")) () ")"))))) () ")")) (argument_list "(puVar9,puVar5,iVar7)" (( "(") (identifier "puVar9") (, ",") (identifier "puVar5") (, ",") (identifier "iVar7") () ")"))) (; ";")) (expression_statement "iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" (identifier "iVar2") (= "=") (binary_expression "iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar7 * 2" (identifier "iVar7") (* "*") (number_literal "2")) (- "-") (call_expression "(uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(puVar9[iVar7 * 2 + 0x3fffffff] == 0)" (( "(") (binary_expression "puVar9[iVar7 * 2 + 0x3fffffff] == 0" (subscript_expression "puVar9[iVar7 * 2 + 0x3fffffff]" (identifier "puVar9") ([ "[") (binary_expression "iVar7 * 2 + 0x3fffffff" (binary_expression "iVar7 * 2" (identifier "iVar7") (* "*") (number_literal "2")) (+ "+") (number_literal "0x3fffffff")) (] "]")) (== "==") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "iVar14 = 0x1f - uVar4;" (assignment_expression "iVar14 = 0x1f - uVar4" (identifier "iVar14") (= "=") (binary_expression "0x1f - uVar4" (number_literal "0x1f") (- "-") (identifier "uVar4"))) (; ";")) (while_statement "while( true ) {\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          iVar13 = iVar13 << 1;\n          puVar12 = puVar8;\n          if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }\n          puVar8 = puVar9;\n          iVar14 = iVar14 + -1;\n          if (iVar14 == 0) break;\n          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);\n          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);\n          puVar9 = puVar12;\n        }" ({ "{") (expression_statement "iVar13 = iVar13 << 1;" (assignment_expression "iVar13 = iVar13 << 1" (identifier "iVar13") (= "=") (binary_expression "iVar13 << 1" (identifier "iVar13") (<< "<<") (number_literal "1"))) (; ";")) (expression_statement "puVar12 = puVar8;" (assignment_expression "puVar12 = puVar8" (identifier "puVar12") (= "=") (identifier "puVar8")) (; ";")) (if_statement "if (iVar13 < 0) {\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }" (if "if") (parenthesized_expression "(iVar13 < 0)" (( "(") (binary_expression "iVar13 < 0" (identifier "iVar13") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);\n            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);\n            puVar12 = puVar9;\n            puVar9 = puVar8;\n          }" ({ "{") (expression_statement "iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);" (assignment_expression "iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7)" (identifier "iVar6") (= "=") (call_expression "(**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7)" (parenthesized_expression "(**(code **)(puVar15 + 0x55f24))" (( "(") (pointer_expression "**(code **)(puVar15 + 0x55f24)" (* "*") (pointer_expression "*(code **)(puVar15 + 0x55f24)" (* "*") (cast_expression "(code **)(puVar15 + 0x55f24)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x55f24)" (( "(") (binary_expression "puVar15 + 0x55f24" (identifier "puVar15") (+ "+") (number_literal "0x55f24")) () ")"))))) () ")")) (argument_list "(puVar8,puVar9,iVar2,puVar5,iVar7)" (( "(") (identifier "puVar8") (, ",") (identifier "puVar9") (, ",") (identifier "iVar2") (, ",") (identifier "puVar5") (, ",") (identifier "iVar7") () ")")))) (; ";")) (expression_statement "iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);" (assignment_expression "iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0)" (identifier "iVar2") (= "=") (binary_expression "(iVar2 + iVar7) - (uint)(iVar6 == 0)" (parenthesized_expression "(iVar2 + iVar7)" (( "(") (binary_expression "iVar2 + iVar7" (identifier "iVar2") (+ "+") (identifier "iVar7")) () ")")) (- "-") (call_expression "(uint)(iVar6 == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "puVar12 = puVar9;" (assignment_expression "puVar12 = puVar9" (identifier "puVar12") (= "=") (identifier "puVar9")) (; ";")) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" (identifier "puVar9") (= "=") (identifier "puVar8")) (; ";")) (} "}"))) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" (identifier "puVar8") (= "=") (identifier "puVar9")) (; ";")) (expression_statement "iVar14 = iVar14 + -1;" (assignment_expression "iVar14 = iVar14 + -1" (identifier "iVar14") (= "=") (binary_expression "iVar14 + -1" (identifier "iVar14") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar14 == 0) break;" (if "if") (parenthesized_expression "(iVar14 == 0)" (( "(") (binary_expression "iVar14 == 0" (identifier "iVar14") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "(**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);" (call_expression "(**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2)" (parenthesized_expression "(**(code **)(puVar15 + 0x56004))" (( "(") (pointer_expression "**(code **)(puVar15 + 0x56004)" (* "*") (pointer_expression "*(code **)(puVar15 + 0x56004)" (* "*") (cast_expression "(code **)(puVar15 + 0x56004)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x56004)" (( "(") (binary_expression "puVar15 + 0x56004" (identifier "puVar15") (+ "+") (number_literal "0x56004")) () ")"))))) () ")")) (argument_list "(puVar12,puVar8,iVar2)" (( "(") (identifier "puVar12") (, ",") (identifier "puVar8") (, ",") (identifier "iVar2") () ")"))) (; ";")) (expression_statement "iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);" (assignment_expression "iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" (identifier "iVar2") (= "=") (binary_expression "iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" (binary_expression "iVar2 * 2" (identifier "iVar2") (* "*") (number_literal "2")) (- "-") (call_expression "(uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(puVar12[iVar2 * 2 + 0x3fffffff] == 0)" (( "(") (binary_expression "puVar12[iVar2 * 2 + 0x3fffffff] == 0" (subscript_expression "puVar12[iVar2 * 2 + 0x3fffffff]" (identifier "puVar12") ([ "[") (binary_expression "iVar2 * 2 + 0x3fffffff" (binary_expression "iVar2 * 2" (identifier "iVar2") (* "*") (number_literal "2")) (+ "+") (number_literal "0x3fffffff")) (] "]")) (== "==") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "puVar9 = puVar12;" (assignment_expression "puVar9 = puVar12" (identifier "puVar9") (= "=") (identifier "puVar12")) (; ";")) (} "}"))) (} "}")))) (} "}")))) (return_statement "return iVar2;" (return "return") (identifier "iVar2") (; ";")) (} "}"))) (return_statement "return *(int *)PTR___stack_chk_guard_0009b540;" (return "return") (pointer_expression "*(int *)PTR___stack_chk_guard_0009b540" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_0009b540" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_0009b540"))) (; ";")) (} "}")))

void function_1(type_1 var_7,type_2 var_2)

{
  type_3 var_5;
  type_3 var_12;
  type_1 var_8;
  type_4 var_21;
  int var_23;
  int var_6;
  type_4 *var_15;
  type_4 *var_14;
  type_4 *var_20;
  type_3 var_18;
  type_3 var_4;
  type_3 var_13;
  int var_22;
  type_4 *pmVar13;
  int var_19;
  int var_24;
  type_4 var_16;
  type_5 *var_11;
  type_4 var_3;
  type_4 var_9;
  int var_17;
  
  var_17 = *(int *)PTR___stack_chk_guard_0009b540;
  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {
    *PTR___gmp_rands_initialized_0009b188 = 1;
    (*(type_6 *)PTR___gmp_randinit_mt_noseed_0009b600)(var_1);
  }
  (**(type_6 **)(*(int *)(var_1 + 0x10) + 4))(var_1,&var_3,0x20);
  var_4 = var_2 * 0x20 - (var_3 & 0x1f);
  var_5 = var_4 + 0x1f >> 5;
  var_7[var_5 - 1] = 0xffffffff >> (-var_4 & 0x1f);
  var_6 = var_5 - 2;
  if (-1 < var_6) {
    var_8 = var_7 + var_5;
    do {
      var_8[-2] = 0xffffffff;
      var_6 = var_6 + -1;
      var_8 = var_8 + -1;
    } while (-1 < var_6);
  }
  (**(type_6 **)(*(int *)(var_1 + 0x10) + 4))
            (var_1,&var_9,0x20);
  var_11 = var_1;
  var_5 = (var_9 & 3) + 1;
  if (var_5 == 0) {
    var_10(7);
  }
  var_5 = (type_3)(var_4 < var_5) + var_4 / var_5;
  do {
    var_6 = 0x20;
    var_14 = (type_4 *)var_11;
    var_20 = &var_9;
    (**(type_6 **)(*(int *)(var_11 + 0x10) + 4))();
    if (var_5 == 0) {
      var_10(7);
    }
    var_12 = var_9 % var_5 + 1;
    var_13 = var_4 - var_12;
    if ((var_4 < var_12) || (var_13 == 0)) break;
    var_7[var_13 >> 5] = var_7[var_13 >> 5] ^ 1 << (var_13 & 0x1f);
    var_6 = 0x20;
    var_20 = &var_9;
    (**(type_6 **)(*(int *)(var_11 + 0x10) + 4))(var_11);
    if (var_5 == 0) {
      var_10(7);
    }
    var_12 = var_9 % var_5 + 1;
    var_4 = var_13 - var_12;
    if (var_13 < var_12) {
      var_4 = 0;
      var_12 = 0;
    }
    else {
      var_12 = var_4 >> 5;
    }
    var_8 = var_7 + var_12;
    var_15 = (type_4 *)(1 << (var_4 & 0x1f));
    var_14 = (type_4 *)((int)var_15 + *var_8);
    *var_8 = (type_4)var_14;
    if (var_14 < var_15) {
      do {
        var_8 = var_8 + 1;
        var_16 = *var_8;
        *var_8 = var_16 + 1;
      } while (var_16 + 1 == 0);
    }
  } while (var_4 != 0);
  if (var_17 != *(int *)PTR___stack_chk_guard_0009b540) {
    var_11 = PTR___stack_chk_fail_0009b4d0;
    (*(type_6 *)PTR___stack_chk_fail_0009b4d0)();
    if (var_18 < 2) {
      if (var_18 == 0) {
        *var_14 = 1;
      }
      else if (var_6 != 0) {
        var_19 = var_6 + -1;
        var_16 = *var_20;
        var_15 = var_14;
        if (var_19 != 0) {
          do {
            var_20 = var_20 + 1;
            *var_15 = var_16;
            var_19 = var_19 + -1;
            var_16 = *var_20;
            var_15 = var_15 + 1;
          } while (var_19 != 0);
          var_14 = var_14 + var_6 + 0x3fffffff;
        }
        *var_14 = var_16;
      }
    }
    else {
      var_4 = 0;
      var_12 = 0x20;
      var_5 = var_18;
      do {
        var_4 = var_4 ^ var_5;
        var_5 = var_5 >> 1;
        var_12 = var_12 - 1;
      } while (var_5 != 0);
      var_19 = var_18 << (var_12 & 0x1f);
      if (var_6 == 1) {
        var_16 = *var_20;
        var_15 = (type_4 *)&_gp;
        if ((var_12 & 1) != 0) {
          var_15 = var_14;
          var_14 = (type_4 *)&_gp;
        }
        (**(type_6 **)(var_11 + 0x56004))(var_14,var_20,1);
        var_6 = 2 - (type_3)(var_14[1] == 0);
        var_22 = 0x1f - var_12;
        while( true ) {
          var_20 = var_15;
          var_19 = var_19 << 1;
          if (var_19 < 0) {
            var_21 = (**(type_6 **)(var_11 + 0x55d14))(var_14,var_14,var_6,var_16);
            var_14[var_6] = var_21;
            var_6 = var_6 + (type_3)(var_21 != 0);
          }
          var_22 = var_22 + -1;
          if (var_22 == 0) break;
          (**(type_6 **)(var_11 + 0x56004))(var_20,var_14,var_6);
          var_6 = var_6 * 2 - (type_3)(var_20[var_6 * 2 + 0x3fffffff] == 0);
          var_15 = var_14;
          var_14 = var_20;
        }
      }
      else {
        var_15 = (type_4 *)&_gp;
        if (((var_4 ^ var_12) & 1) == 0) {
          var_15 = var_14;
          var_14 = (type_4 *)&_gp;
        }
        (**(type_6 **)(var_11 + 0x56004))(var_14,var_20,var_6);
        var_22 = var_6 * 2 - (type_3)(var_14[var_6 * 2 + 0x3fffffff] == 0);
        var_24 = 0x1f - var_12;
        while( true ) {
          var_19 = var_19 << 1;
          pmVar13 = var_15;
          if (var_19 < 0) {
            var_23 = (**(type_6 **)(var_11 + 0x55f24))(var_15,var_14,var_22,var_20,var_6);
            var_22 = (var_22 + var_6) - (type_3)(var_23 == 0);
            pmVar13 = var_14;
            var_14 = var_15;
          }
          var_15 = var_14;
          var_24 = var_24 + -1;
          if (var_24 == 0) break;
          (**(type_6 **)(var_11 + 0x56004))(pmVar13,var_15,var_22);
          var_22 = var_22 * 2 - (type_3)(pmVar13[var_22 * 2 + 0x3fffffff] == 0);
          var_14 = pmVar13;
        }
      }
    }
    return;
  }
  return;
}


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

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

{
  uint uVar1;
  int iVar2;
  int *piVar3;
  uint uVar4;
  uint *puVar5;
  int iVar6;
  int iVar7;
  uint *puVar8;
  uint *puVar9;
  uint uVar10;
  uint uVar11;
  uint *puVar12;
  int iVar13;
  int iVar14;
  undefined *puVar15;
  uint local_2c;
  uint local_28;
  int local_24;
  
  local_24 = *(int *)PTR___stack_chk_guard_0009b540;
  if (*PTR___gmp_rands_initialized_0009b188 == '\0') {
    *PTR___gmp_rands_initialized_0009b188 = 1;
    (*(code *)PTR___gmp_randinit_mt_noseed_0009b600)(PTR___gmp_rands_0009b27c);
  }
  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))
            (PTR___gmp_rands_0009b27c,&local_2c,0x20);
  uVar10 = param_2 * 0x20 - (local_2c & 0x1f);
  uVar1 = uVar10 + 0x1f >> 5;
  *(uint *)(param_1 + (uVar1 - 1) * 4) = 0xffffffff >> (-uVar10 & 0x1f);
  iVar7 = uVar1 - 2;
  if (-1 < iVar7) {
    iVar2 = param_1 + uVar1 * 4;
    do {
      *(undefined4 *)(iVar2 + -8) = 0xffffffff;
      iVar7 = iVar7 + -1;
      iVar2 = iVar2 + -4;
    } while (-1 < iVar7);
  }
  (**(code **)(*(int *)(PTR___gmp_rands_0009b27c + 0x10) + 4))
            (PTR___gmp_rands_0009b27c,&local_28,0x20);
  puVar15 = PTR___gmp_rands_0009b27c;
  uVar1 = (local_28 & 3) + 1;
  if (uVar1 == 0) {
    trap(7);
  }
  uVar1 = (uint)(uVar10 < uVar1) + uVar10 / uVar1;
  do {
    iVar7 = 0x20;
    puVar9 = (uint *)puVar15;
    puVar5 = &local_28;
    (**(code **)(*(int *)(puVar15 + 0x10) + 4))();
    if (uVar1 == 0) {
      trap(7);
    }
    uVar4 = local_28 % uVar1 + 1;
    uVar11 = uVar10 - uVar4;
    if ((uVar10 < uVar4) || (uVar11 == 0)) break;
    puVar5 = (uint *)(param_1 + (uVar11 >> 5) * 4);
    *puVar5 = *puVar5 ^ 1 << (uVar11 & 0x1f);
    iVar7 = 0x20;
    puVar5 = &local_28;
    (**(code **)(*(int *)(puVar15 + 0x10) + 4))(puVar15);
    if (uVar1 == 0) {
      trap(7);
    }
    uVar4 = local_28 % uVar1 + 1;
    uVar10 = uVar11 - uVar4;
    if (uVar11 < uVar4) {
      uVar10 = 0;
      uVar4 = 0;
    }
    else {
      uVar4 = uVar10 >> 5;
    }
    piVar3 = (int *)(param_1 + uVar4 * 4);
    puVar8 = (uint *)(1 << (uVar10 & 0x1f));
    puVar9 = (uint *)((int)puVar8 + *piVar3);
    *piVar3 = (int)puVar9;
    if (puVar9 < puVar8) {
      do {
        piVar3 = piVar3 + 1;
        iVar2 = *piVar3;
        *piVar3 = iVar2 + 1;
      } while (iVar2 + 1 == 0);
    }
  } while (uVar10 != 0);
  if (local_24 != *(int *)PTR___stack_chk_guard_0009b540) {
    puVar15 = PTR___stack_chk_fail_0009b4d0;
    (*(code *)PTR___stack_chk_fail_0009b4d0)();
    if (param_4 < 2) {
      if (param_4 == 0) {
        *puVar9 = 1;
        iVar2 = 1;
      }
      else {
        iVar2 = iVar7;
        if (iVar7 != 0) {
          iVar13 = iVar7 + -1;
          uVar1 = *puVar5;
          puVar8 = puVar9;
          if (iVar13 != 0) {
            do {
              puVar5 = puVar5 + 1;
              *puVar8 = uVar1;
              iVar13 = iVar13 + -1;
              uVar1 = *puVar5;
              puVar8 = puVar8 + 1;
            } while (iVar13 != 0);
            puVar9 = puVar9 + iVar7 + 0x3fffffff;
          }
          *puVar9 = uVar1;
        }
      }
    }
    else {
      uVar10 = 0;
      uVar4 = 0x20;
      uVar1 = param_4;
      do {
        uVar10 = uVar10 ^ uVar1;
        uVar1 = uVar1 >> 1;
        uVar4 = uVar4 - 1;
      } while (uVar1 != 0);
      iVar13 = param_4 << (uVar4 & 0x1f);
      if (iVar7 == 1) {
        uVar1 = *puVar5;
        puVar8 = (uint *)&_gp_1;
        if ((uVar4 & 1) != 0) {
          puVar8 = puVar9;
          puVar9 = (uint *)&_gp_1;
        }
        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,1);
        iVar2 = 2 - (uint)(puVar9[1] == 0);
        iVar7 = 0x1f - uVar4;
        while( true ) {
          puVar5 = puVar8;
          iVar13 = iVar13 << 1;
          if (iVar13 < 0) {
            uVar10 = (**(code **)(puVar15 + 0x55d14))(puVar9,puVar9,iVar2,uVar1);
            puVar9[iVar2] = uVar10;
            iVar2 = iVar2 + (uint)(uVar10 != 0);
          }
          iVar7 = iVar7 + -1;
          if (iVar7 == 0) break;
          (**(code **)(puVar15 + 0x56004))(puVar5,puVar9,iVar2);
          iVar2 = iVar2 * 2 - (uint)(puVar5[iVar2 * 2 + 0x3fffffff] == 0);
          puVar8 = puVar9;
          puVar9 = puVar5;
        }
      }
      else {
        puVar8 = (uint *)&_gp_1;
        if (((uVar10 ^ uVar4) & 1) == 0) {
          puVar8 = puVar9;
          puVar9 = (uint *)&_gp_1;
        }
        (**(code **)(puVar15 + 0x56004))(puVar9,puVar5,iVar7);
        iVar2 = iVar7 * 2 - (uint)(puVar9[iVar7 * 2 + 0x3fffffff] == 0);
        iVar14 = 0x1f - uVar4;
        while( true ) {
          iVar13 = iVar13 << 1;
          puVar12 = puVar8;
          if (iVar13 < 0) {
            iVar6 = (**(code **)(puVar15 + 0x55f24))(puVar8,puVar9,iVar2,puVar5,iVar7);
            iVar2 = (iVar2 + iVar7) - (uint)(iVar6 == 0);
            puVar12 = puVar9;
            puVar9 = puVar8;
          }
          puVar8 = puVar9;
          iVar14 = iVar14 + -1;
          if (iVar14 == 0) break;
          (**(code **)(puVar15 + 0x56004))(puVar12,puVar8,iVar2);
          iVar2 = iVar2 * 2 - (uint)(puVar12[iVar2 * 2 + 0x3fffffff] == 0);
          puVar9 = puVar12;
        }
      }
    }
    return iVar2;
  }
  return *(int *)PTR___stack_chk_guard_0009b540;
}

