
void sqlite3BitvecClear(Bitvec *p,u32 i,void *pBuf)

{
  undefined *puVar1;
  uint uVar2;
  u32 *puVar3;
  int iVar4;
  anon_union_500_3_7c964c52_for_u *paVar5;
  u32 uVar6;
  u32 uVar7;
  u32 uVar8;
  int *piVar9;
  u32 uVar10;
  uint uVar11;
  uint uVar12;
  
  if (p == (Bitvec *)0x0) {
    return;
  }
  uVar11 = i - 1;
  do {
    uVar2 = p->iDivisor;
    if (uVar2 == 0) {
      if (p->iSize < 0xfa1) {
        (p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];
        return;
      }
      puVar3 = (u32 *)pBuf;
      paVar5 = &p->u;
      do {
        uVar10 = paVar5->aHash[0];
        uVar8 = paVar5->aHash[1];
        uVar7 = paVar5->aHash[2];
        uVar6 = paVar5->aHash[3];
        paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);
        *puVar3 = uVar10;
        puVar3[1] = uVar8;
        puVar3[2] = uVar7;
        puVar3[3] = uVar6;
        puVar1 = PTR_memset_0015b9b4;
        puVar3 = puVar3 + 4;
      } while (paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0));
      *puVar3 = paVar5->aHash[0];
      (*(code *)puVar1)(&p->u,0,500);
      p->nSet = 0;
      piVar9 = (int *)((int)pBuf + 500);
                    /* WARNING: Load size is inaccurate */
      while ((iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1))) {
        pBuf = (void *)((int)pBuf + 4);
        if (piVar9 == (int *)pBuf) {
          return;
        }
      }
      p->nSet = p->nSet + 1;
      FUN_00025d4c(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d);
      return;
    }
    if (uVar2 == 0) {
      trap(7);
    }
    uVar12 = uVar11 / uVar2;
    uVar11 = uVar11 % uVar2;
    p = *(Bitvec **)((int)&p->u + uVar12 * 4);
  } while (p != (Bitvec *)0x0);
  return;
}



void FUN_00025b90(uint *param_1,int param_2,uint *param_3)

{
  uint *puVar1;
  undefined *puVar2;
  uint uVar3;
  uint *puVar4;
  uint *puVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  
  if (param_1 == (uint *)0x0) {
    return;
  }
  uVar9 = param_2 - 1;
  while (uVar3 = param_1[2], uVar3 != 0) {
    if (uVar3 == 0) {
      trap(7);
    }
    uVar6 = uVar9 / uVar3;
    uVar9 = uVar9 % uVar3;
    param_1 = (uint *)param_1[uVar6 + 3];
    if (param_1 == (uint *)0x0) {
      return;
    }
  }
  if (*param_1 < 0xfa1) {
    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =
         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);
    return;
  }
  puVar4 = param_3;
  puVar5 = param_1 + 3;
  do {
    uVar8 = *puVar5;
    uVar7 = puVar5[1];
    uVar6 = puVar5[2];
    uVar3 = puVar5[3];
    puVar5 = puVar5 + 4;
    *puVar4 = uVar8;
    puVar4[1] = uVar7;
    puVar4[2] = uVar6;
    puVar4[3] = uVar3;
    puVar2 = PTR_memset_0015b9b4;
    puVar4 = puVar4 + 4;
  } while (puVar5 != param_1 + 0x7f);
  *puVar4 = *puVar5;
  (*(code *)puVar2)(param_1 + 3,0,500);
  param_1[1] = 0;
  puVar4 = param_3 + 0x7d;
  while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {
LAB_00025ce8:
    param_3 = param_3 + 1;
    if (puVar4 == param_3) {
      return;
    }
  }
  param_1[1] = param_1[1] + 1;
  uVar3 = (uVar3 - 1) % 0x7d;
  do {
    puVar5 = param_1 + uVar3;
    do {
      puVar1 = puVar5 + 3;
      puVar5 = puVar5 + 1;
      if (*puVar1 == 0) {
        param_1[uVar3 + 3] = *param_3;
        goto LAB_00025ce8;
      }
      uVar3 = uVar3 + 1;
    } while (uVar3 != 0x7d);
    uVar3 = 0;
  } while( true );
}


lui gp,0x14
addiu gp,gp,-0x25e0
addu gp,gp,t9
beq a0,zero,0x00025c48
_nop
addiu sp,sp,-0x28
sw gp,0x10(sp)
sw s2,0x20(sp)
addiu s2,a1,-0x1
sw s1,0x1c(sp)
or s1,a0,zero
sw s0,0x18(sp)
or s0,a2,zero
b 0x00025bf0
_sw ra,0x24(sp)
teq v0,zero
divu s2,v0
mflo v0
addiu v0,v0,0x2
sll v0,v0,0x2
addu v0,s1,v0
lw s1,0x4(v0)
beq s1,zero,0x00025c30
_mfhi s2
lw v0,0x8(s1)
bne v0,zero,0x00025bcc
_nop
lw v0,0x0(s1)
sltiu v0,v0,0xfa1
beq v0,zero,0x00025c50
_addiu a0,s1,0xc
srl v0,s2,0x3
andi s2,s2,0x7
addu s1,s1,v0
li v0,0x1
lbu v1,0xc(s1)
sllv v0,v0,s2
nor v0,zero,v0
and v0,v0,v1
sb v0,0xc(s1)
lw ra,0x24(sp)
lw s2,0x20(sp)
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
jr ra
_nop
addiu t1,s1,0x1fc
or v1,a0,zero
or v0,s0,zero
lwl t0,0x0(v1)
lwl a3,0x4(v1)
lwl a2,0x8(v1)
lwl a1,0xc(v1)
lwr t0,0x3(v1)
lwr a3,0x7(v1)
lwr a2,0xb(v1)
lwr a1,0xf(v1)
addiu v1,v1,0x10
swl t0,0x0(v0)
swr t0,0x3(v0)
swl a3,0x4(v0)
swr a3,0x7(v0)
swl a2,0x8(v0)
swr a2,0xb(v0)
swl a1,0xc(v0)
swr a1,0xf(v0)
bne v1,t1,0x00025c5c
_addiu v0,v0,0x10
lwl a3,0x0(v1)
li a2,0x1f4
lw t9,-0x7bfc(gp)
or a1,zero,zero
addiu s2,s2,0x1
lwr a3,0x3(v1)
swl a3,0x0(v0)
jalr t9
_swr a3,0x3(v0)
lui t0,0x1062
or a2,s0,zero
sw zero,0x4(s1)
addiu a3,s0,0x1f4
addiu t0,t0,0x4dd3
b 0x00025cf4
_li a1,0x7d
addiu a2,a2,0x4
beq a3,a2,0x00025c34
_lw ra,0x24(sp)
lw v0,0x0(a2)
beq v0,zero,0x00025ce8
_nop
beq v0,s2,0x00025ce8
_addiu v1,v0,-0x1
lw a0,0x4(s1)
multu v1,t0
addiu a0,a0,0x1
sw a0,0x4(s1)
mfhi v0
srl v0,v0,0x3
sll a0,v0,0x5
subu a0,a0,v0
sll a0,a0,0x2
addu v0,a0,v0
subu v0,v1,v0
sll v1,v0,0x2
b 0x00025d4c
_addu v1,s1,v1
addiu v0,v0,0x1
beq v0,a1,0x00025d70
_nop
lw a0,0xc(v1)
bne a0,zero,0x00025d40
_addiu v1,v1,0x4
addiu v0,v0,0x2
lw v1,0x0(a2)
sll v0,v0,0x2
addu v0,s1,v0
b 0x00025ce8
_sw v1,0x4(v0)
b 0x00025d34
_or v0,zero,zero
(translation_unit "void FUN_00025b90(uint *param_1,int param_2,uint *param_3)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if (param_1 == (uint *)0x0) {\n    return;\n  }\n  uVar9 = param_2 - 1;\n  while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }\n  if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }\n  puVar4 = param_3;\n  puVar5 = param_1 + 3;\n  do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);\n  *puVar4 = *puVar5;\n  (*(code *)puVar2)(param_1 + 3,0,500);\n  param_1[1] = 0;\n  puVar4 = param_3 + 0x7d;\n  while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }\n  param_1[1] = param_1[1] + 1;\n  uVar3 = (uVar3 - 1) % 0x7d;\n  do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );\n}\n\n" (function_definition "void FUN_00025b90(uint *param_1,int param_2,uint *param_3)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if (param_1 == (uint *)0x0) {\n    return;\n  }\n  uVar9 = param_2 - 1;\n  while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }\n  if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }\n  puVar4 = param_3;\n  puVar5 = param_1 + 3;\n  do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);\n  *puVar4 = *puVar5;\n  (*(code *)puVar2)(param_1 + 3,0,500);\n  param_1[1] = 0;\n  puVar4 = param_3 + 0x7d;\n  while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }\n  param_1[1] = param_1[1] + 1;\n  uVar3 = (uVar3 - 1) % 0x7d;\n  do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );\n}" primitive_type (function_declarator "FUN_00025b90(uint *param_1,int param_2,uint *param_3)" identifier (parameter_list "(uint *param_1,int param_2,uint *param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  uint *puVar1;\n  undefined *puVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if (param_1 == (uint *)0x0) {\n    return;\n  }\n  uVar9 = param_2 - 1;\n  while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }\n  if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }\n  puVar4 = param_3;\n  puVar5 = param_1 + 3;\n  do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);\n  *puVar4 = *puVar5;\n  (*(code *)puVar2)(param_1 + 3,0,500);\n  param_1[1] = 0;\n  puVar4 = param_3 + 0x7d;\n  while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }\n  param_1[1] = param_1[1] + 1;\n  uVar3 = (uVar3 - 1) % 0x7d;\n  do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (if_statement "if (param_1 == (uint *)0x0) {\n    return;\n  }" if (parenthesized_expression "(param_1 == (uint *)0x0)" ( (binary_expression "param_1 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar9 = param_2 - 1;" (assignment_expression "uVar9 = param_2 - 1" identifier = (binary_expression "param_2 - 1" identifier - number_literal)) ;) (while_statement "while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }" while (parenthesized_expression "(uVar3 = param_1[2], uVar3 != 0)" ( (comma_expression "uVar3 = param_1[2], uVar3 != 0" (assignment_expression "uVar3 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) , (binary_expression "uVar3 != 0" identifier != number_literal)) )) (compound_statement "{\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }" { (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 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 "uVar6 = uVar9 / uVar3;" (assignment_expression "uVar6 = uVar9 / uVar3" identifier = (binary_expression "uVar9 / uVar3" identifier / identifier)) ;) (expression_statement "uVar9 = uVar9 % uVar3;" (assignment_expression "uVar9 = uVar9 % uVar3" identifier = (binary_expression "uVar9 % uVar3" identifier % identifier)) ;) (expression_statement "param_1 = (uint *)param_1[uVar6 + 3];" (assignment_expression "param_1 = (uint *)param_1[uVar6 + 3]" identifier = (cast_expression "(uint *)param_1[uVar6 + 3]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[uVar6 + 3]" identifier [ (binary_expression "uVar6 + 3" identifier + number_literal) ]))) ;) (if_statement "if (param_1 == (uint *)0x0) {\n      return;\n    }" if (parenthesized_expression "(param_1 == (uint *)0x0)" ( (binary_expression "param_1 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) })) (if_statement "if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }" if (parenthesized_expression "(*param_1 < 0xfa1)" ( (binary_expression "*param_1 < 0xfa1" (pointer_expression "*param_1" * identifier) < number_literal) )) (compound_statement "{\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }" { (expression_statement "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);" (assignment_expression "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" (pointer_expression "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" * (cast_expression "(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + (uVar9 >> 3) + 0xc)" ( (binary_expression "(int)param_1 + (uVar9 >> 3) + 0xc" (binary_expression "(int)param_1 + (uVar9 >> 3)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(uVar9 >> 3)" ( (binary_expression "uVar9 >> 3" identifier >> number_literal) ))) + number_literal) )))) = (binary_expression "~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" (unary_expression "~(byte)(1 << (uVar9 & 7))" ~ (call_expression "(byte)(1 << (uVar9 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(1 << (uVar9 & 7))" ( (binary_expression "1 << (uVar9 & 7)" number_literal << (parenthesized_expression "(uVar9 & 7)" ( (binary_expression "uVar9 & 7" identifier & number_literal) ))) )))) & (pointer_expression "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" * (cast_expression "(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + (uVar9 >> 3) + 0xc)" ( (binary_expression "(int)param_1 + (uVar9 >> 3) + 0xc" (binary_expression "(int)param_1 + (uVar9 >> 3)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(uVar9 >> 3)" ( (binary_expression "uVar9 >> 3" identifier >> number_literal) ))) + number_literal) )))))) ;) (return_statement "return;" return ;) })) (expression_statement "puVar4 = param_3;" (assignment_expression "puVar4 = param_3" identifier = identifier) ;) (expression_statement "puVar5 = param_1 + 3;" (assignment_expression "puVar5 = param_1 + 3" identifier = (binary_expression "param_1 + 3" identifier + number_literal)) ;) (do_statement "do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);" do (compound_statement "{\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  }" { (expression_statement "uVar8 = *puVar5;" (assignment_expression "uVar8 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "uVar7 = puVar5[1];" (assignment_expression "uVar7 = puVar5[1]" identifier = (subscript_expression "puVar5[1]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = puVar5[2];" (assignment_expression "uVar6 = puVar5[2]" identifier = (subscript_expression "puVar5[2]" identifier [ number_literal ])) ;) (expression_statement "uVar3 = puVar5[3];" (assignment_expression "uVar3 = puVar5[3]" identifier = (subscript_expression "puVar5[3]" identifier [ number_literal ])) ;) (expression_statement "puVar5 = puVar5 + 4;" (assignment_expression "puVar5 = puVar5 + 4" identifier = (binary_expression "puVar5 + 4" identifier + number_literal)) ;) (expression_statement "*puVar4 = uVar8;" (assignment_expression "*puVar4 = uVar8" (pointer_expression "*puVar4" * identifier) = identifier) ;) (expression_statement "puVar4[1] = uVar7;" (assignment_expression "puVar4[1] = uVar7" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar4[2] = uVar6;" (assignment_expression "puVar4[2] = uVar6" (subscript_expression "puVar4[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar4[3] = uVar3;" (assignment_expression "puVar4[3] = uVar3" (subscript_expression "puVar4[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar2 = PTR_memset_0015b9b4;" (assignment_expression "puVar2 = PTR_memset_0015b9b4" identifier = identifier) ;) (expression_statement "puVar4 = puVar4 + 4;" (assignment_expression "puVar4 = puVar4 + 4" identifier = (binary_expression "puVar4 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar5 != param_1 + 0x7f)" ( (binary_expression "puVar5 != param_1 + 0x7f" identifier != (binary_expression "param_1 + 0x7f" identifier + number_literal)) )) ;) (expression_statement "*puVar4 = *puVar5;" (assignment_expression "*puVar4 = *puVar5" (pointer_expression "*puVar4" * identifier) = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "(*(code *)puVar2)(param_1 + 3,0,500);" (call_expression "(*(code *)puVar2)(param_1 + 3,0,500)" (parenthesized_expression "(*(code *)puVar2)" ( (pointer_expression "*(code *)puVar2" * (cast_expression "(code *)puVar2" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1 + 3,0,500)" ( (binary_expression "param_1 + 3" identifier + number_literal) , number_literal , number_literal ))) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar4 = param_3 + 0x7d;" (assignment_expression "puVar4 = param_3 + 0x7d" identifier = (binary_expression "param_3 + 0x7d" identifier + number_literal)) ;) (while_statement "while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }" while (parenthesized_expression "((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1)))" ( (parenthesized_expression "(uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))" ( (comma_expression "uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1)" (assignment_expression "uVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) , (binary_expression "uVar3 == 0 || (uVar3 == uVar9 + 1)" (binary_expression "uVar3 == 0" identifier == number_literal) || (parenthesized_expression "(uVar3 == uVar9 + 1)" ( (binary_expression "uVar3 == uVar9 + 1" identifier == (binary_expression "uVar9 + 1" identifier + number_literal)) )))) )) )) (compound_statement "{\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }" { (labeled_statement "LAB_00025ce8:\n    param_3 = param_3 + 1;" statement_identifier : (expression_statement "param_3 = param_3 + 1;" (assignment_expression "param_3 = param_3 + 1" identifier = (binary_expression "param_3 + 1" identifier + number_literal)) ;)) (if_statement "if (puVar4 == param_3) {\n      return;\n    }" if (parenthesized_expression "(puVar4 == param_3)" ( (binary_expression "puVar4 == param_3" identifier == identifier) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) })) (expression_statement "param_1[1] = param_1[1] + 1;" (assignment_expression "param_1[1] = param_1[1] + 1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_1[1] + 1" (subscript_expression "param_1[1]" identifier [ number_literal ]) + number_literal)) ;) (expression_statement "uVar3 = (uVar3 - 1) % 0x7d;" (assignment_expression "uVar3 = (uVar3 - 1) % 0x7d" identifier = (binary_expression "(uVar3 - 1) % 0x7d" (parenthesized_expression "(uVar3 - 1)" ( (binary_expression "uVar3 - 1" identifier - number_literal) )) % number_literal)) ;) (do_statement "do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );" do (compound_statement "{\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  }" { (expression_statement "puVar5 = param_1 + uVar3;" (assignment_expression "puVar5 = param_1 + uVar3" identifier = (binary_expression "param_1 + uVar3" identifier + identifier)) ;) (do_statement "do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);" do (compound_statement "{\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    }" { (expression_statement "puVar1 = puVar5 + 3;" (assignment_expression "puVar1 = puVar5 + 3" identifier = (binary_expression "puVar5 + 3" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (if_statement "if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }" if (parenthesized_expression "(*puVar1 == 0)" ( (binary_expression "*puVar1 == 0" (pointer_expression "*puVar1" * identifier) == number_literal) )) (compound_statement "{\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }" { (expression_statement "param_1[uVar3 + 3] = *param_3;" (assignment_expression "param_1[uVar3 + 3] = *param_3" (subscript_expression "param_1[uVar3 + 3]" identifier [ (binary_expression "uVar3 + 3" identifier + number_literal) ]) = (pointer_expression "*param_3" * identifier)) ;) (goto_statement "goto LAB_00025ce8;" goto statement_identifier ;) })) (expression_statement "uVar3 = uVar3 + 1;" (assignment_expression "uVar3 = uVar3 + 1" identifier = (binary_expression "uVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar3 != 0x7d)" ( (binary_expression "uVar3 != 0x7d" identifier != number_literal) )) ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "void sqlite3BitvecClear(Bitvec *p,u32 i,void *pBuf)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  u32 *puVar3;\n  int iVar4;\n  anon_union_500_3_7c964c52_for_u *paVar5;\n  u32 uVar6;\n  u32 uVar7;\n  u32 uVar8;\n  int *piVar9;\n  u32 uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  if (p == (Bitvec *)0x0) {\n    return;\n  }\n  uVar11 = i - 1;\n  do {\n    uVar2 = p->iDivisor;\n    if (uVar2 == 0) {\n      if (p->iSize < 0xfa1) {\n        (p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];\n        return;\n      }\n      puVar3 = (u32 *)pBuf;\n      paVar5 = &p->u;\n      do {\n        uVar10 = paVar5->aHash[0];\n        uVar8 = paVar5->aHash[1];\n        uVar7 = paVar5->aHash[2];\n        uVar6 = paVar5->aHash[3];\n        paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);\n        *puVar3 = uVar10;\n        puVar3[1] = uVar8;\n        puVar3[2] = uVar7;\n        puVar3[3] = uVar6;\n        puVar1 = PTR_memset_0015b9b4;\n        puVar3 = puVar3 + 4;\n      } while (paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0));\n      *puVar3 = paVar5->aHash[0];\n      (*(code *)puVar1)(&p->u,0,500);\n      p->nSet = 0;\n      piVar9 = (int *)((int)pBuf + 500);\n                    /* WARNING: Load size is inaccurate */\n      while ((iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1))) {\n        pBuf = (void *)((int)pBuf + 4);\n        if (piVar9 == (int *)pBuf) {\n          return;\n        }\n      }\n      p->nSet = p->nSet + 1;\n      FUN_00025d4c(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d);\n      return;\n    }\n    if (uVar2 == 0) {\n      trap(7);\n    }\n    uVar12 = uVar11 / uVar2;\n    uVar11 = uVar11 % uVar2;\n    p = *(Bitvec **)((int)&p->u + uVar12 * 4);\n  } while (p != (Bitvec *)0x0);\n  return;\n}\n\n" (function_definition "void sqlite3BitvecClear(Bitvec *p,u32 i,void *pBuf)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  u32 *puVar3;\n  int iVar4;\n  anon_union_500_3_7c964c52_for_u *paVar5;\n  u32 uVar6;\n  u32 uVar7;\n  u32 uVar8;\n  int *piVar9;\n  u32 uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  if (p == (Bitvec *)0x0) {\n    return;\n  }\n  uVar11 = i - 1;\n  do {\n    uVar2 = p->iDivisor;\n    if (uVar2 == 0) {\n      if (p->iSize < 0xfa1) {\n        (p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];\n        return;\n      }\n      puVar3 = (u32 *)pBuf;\n      paVar5 = &p->u;\n      do {\n        uVar10 = paVar5->aHash[0];\n        uVar8 = paVar5->aHash[1];\n        uVar7 = paVar5->aHash[2];\n        uVar6 = paVar5->aHash[3];\n        paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);\n        *puVar3 = uVar10;\n        puVar3[1] = uVar8;\n        puVar3[2] = uVar7;\n        puVar3[3] = uVar6;\n        puVar1 = PTR_memset_0015b9b4;\n        puVar3 = puVar3 + 4;\n      } while (paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0));\n      *puVar3 = paVar5->aHash[0];\n      (*(code *)puVar1)(&p->u,0,500);\n      p->nSet = 0;\n      piVar9 = (int *)((int)pBuf + 500);\n                    /* WARNING: Load size is inaccurate */\n      while ((iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1))) {\n        pBuf = (void *)((int)pBuf + 4);\n        if (piVar9 == (int *)pBuf) {\n          return;\n        }\n      }\n      p->nSet = p->nSet + 1;\n      FUN_00025d4c(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d);\n      return;\n    }\n    if (uVar2 == 0) {\n      trap(7);\n    }\n    uVar12 = uVar11 / uVar2;\n    uVar11 = uVar11 % uVar2;\n    p = *(Bitvec **)((int)&p->u + uVar12 * 4);\n  } while (p != (Bitvec *)0x0);\n  return;\n}" primitive_type (function_declarator "sqlite3BitvecClear(Bitvec *p,u32 i,void *pBuf)" identifier (parameter_list "(Bitvec *p,u32 i,void *pBuf)" ( (parameter_declaration "Bitvec *p" type_identifier (pointer_declarator "*p" * identifier)) , (parameter_declaration "u32 i" type_identifier identifier) , (parameter_declaration "void *pBuf" primitive_type (pointer_declarator "*pBuf" * identifier)) ))) (compound_statement "{\n  undefined *puVar1;\n  uint uVar2;\n  u32 *puVar3;\n  int iVar4;\n  anon_union_500_3_7c964c52_for_u *paVar5;\n  u32 uVar6;\n  u32 uVar7;\n  u32 uVar8;\n  int *piVar9;\n  u32 uVar10;\n  uint uVar11;\n  uint uVar12;\n  \n  if (p == (Bitvec *)0x0) {\n    return;\n  }\n  uVar11 = i - 1;\n  do {\n    uVar2 = p->iDivisor;\n    if (uVar2 == 0) {\n      if (p->iSize < 0xfa1) {\n        (p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];\n        return;\n      }\n      puVar3 = (u32 *)pBuf;\n      paVar5 = &p->u;\n      do {\n        uVar10 = paVar5->aHash[0];\n        uVar8 = paVar5->aHash[1];\n        uVar7 = paVar5->aHash[2];\n        uVar6 = paVar5->aHash[3];\n        paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);\n        *puVar3 = uVar10;\n        puVar3[1] = uVar8;\n        puVar3[2] = uVar7;\n        puVar3[3] = uVar6;\n        puVar1 = PTR_memset_0015b9b4;\n        puVar3 = puVar3 + 4;\n      } while (paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0));\n      *puVar3 = paVar5->aHash[0];\n      (*(code *)puVar1)(&p->u,0,500);\n      p->nSet = 0;\n      piVar9 = (int *)((int)pBuf + 500);\n                    /* WARNING: Load size is inaccurate */\n      while ((iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1))) {\n        pBuf = (void *)((int)pBuf + 4);\n        if (piVar9 == (int *)pBuf) {\n          return;\n        }\n      }\n      p->nSet = p->nSet + 1;\n      FUN_00025d4c(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d);\n      return;\n    }\n    if (uVar2 == 0) {\n      trap(7);\n    }\n    uVar12 = uVar11 / uVar2;\n    uVar11 = uVar11 % uVar2;\n    p = *(Bitvec **)((int)&p->u + uVar12 * 4);\n  } while (p != (Bitvec *)0x0);\n  return;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "u32 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "anon_union_500_3_7c964c52_for_u *paVar5;" type_identifier (pointer_declarator "*paVar5" * identifier) ;) (declaration "u32 uVar6;" type_identifier identifier ;) (declaration "u32 uVar7;" type_identifier identifier ;) (declaration "u32 uVar8;" type_identifier identifier ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "u32 uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (if_statement "if (p == (Bitvec *)0x0) {\n    return;\n  }" if (parenthesized_expression "(p == (Bitvec *)0x0)" ( (binary_expression "p == (Bitvec *)0x0" identifier == (cast_expression "(Bitvec *)0x0" ( (type_descriptor "Bitvec *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar11 = i - 1;" (assignment_expression "uVar11 = i - 1" identifier = (binary_expression "i - 1" identifier - number_literal)) ;) (do_statement "do {\n    uVar2 = p->iDivisor;\n    if (uVar2 == 0) {\n      if (p->iSize < 0xfa1) {\n        (p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];\n        return;\n      }\n      puVar3 = (u32 *)pBuf;\n      paVar5 = &p->u;\n      do {\n        uVar10 = paVar5->aHash[0];\n        uVar8 = paVar5->aHash[1];\n        uVar7 = paVar5->aHash[2];\n        uVar6 = paVar5->aHash[3];\n        paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);\n        *puVar3 = uVar10;\n        puVar3[1] = uVar8;\n        puVar3[2] = uVar7;\n        puVar3[3] = uVar6;\n        puVar1 = PTR_memset_0015b9b4;\n        puVar3 = puVar3 + 4;\n      } while (paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0));\n      *puVar3 = paVar5->aHash[0];\n      (*(code *)puVar1)(&p->u,0,500);\n      p->nSet = 0;\n      piVar9 = (int *)((int)pBuf + 500);\n                    /* WARNING: Load size is inaccurate */\n      while ((iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1))) {\n        pBuf = (void *)((int)pBuf + 4);\n        if (piVar9 == (int *)pBuf) {\n          return;\n        }\n      }\n      p->nSet = p->nSet + 1;\n      FUN_00025d4c(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d);\n      return;\n    }\n    if (uVar2 == 0) {\n      trap(7);\n    }\n    uVar12 = uVar11 / uVar2;\n    uVar11 = uVar11 % uVar2;\n    p = *(Bitvec **)((int)&p->u + uVar12 * 4);\n  } while (p != (Bitvec *)0x0);" do (compound_statement "{\n    uVar2 = p->iDivisor;\n    if (uVar2 == 0) {\n      if (p->iSize < 0xfa1) {\n        (p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];\n        return;\n      }\n      puVar3 = (u32 *)pBuf;\n      paVar5 = &p->u;\n      do {\n        uVar10 = paVar5->aHash[0];\n        uVar8 = paVar5->aHash[1];\n        uVar7 = paVar5->aHash[2];\n        uVar6 = paVar5->aHash[3];\n        paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);\n        *puVar3 = uVar10;\n        puVar3[1] = uVar8;\n        puVar3[2] = uVar7;\n        puVar3[3] = uVar6;\n        puVar1 = PTR_memset_0015b9b4;\n        puVar3 = puVar3 + 4;\n      } while (paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0));\n      *puVar3 = paVar5->aHash[0];\n      (*(code *)puVar1)(&p->u,0,500);\n      p->nSet = 0;\n      piVar9 = (int *)((int)pBuf + 500);\n                    /* WARNING: Load size is inaccurate */\n      while ((iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1))) {\n        pBuf = (void *)((int)pBuf + 4);\n        if (piVar9 == (int *)pBuf) {\n          return;\n        }\n      }\n      p->nSet = p->nSet + 1;\n      FUN_00025d4c(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d);\n      return;\n    }\n    if (uVar2 == 0) {\n      trap(7);\n    }\n    uVar12 = uVar11 / uVar2;\n    uVar11 = uVar11 % uVar2;\n    p = *(Bitvec **)((int)&p->u + uVar12 * 4);\n  }" { (expression_statement "uVar2 = p->iDivisor;" (assignment_expression "uVar2 = p->iDivisor" identifier = (field_expression "p->iDivisor" identifier -> field_identifier)) ;) (if_statement "if (uVar2 == 0) {\n      if (p->iSize < 0xfa1) {\n        (p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];\n        return;\n      }\n      puVar3 = (u32 *)pBuf;\n      paVar5 = &p->u;\n      do {\n        uVar10 = paVar5->aHash[0];\n        uVar8 = paVar5->aHash[1];\n        uVar7 = paVar5->aHash[2];\n        uVar6 = paVar5->aHash[3];\n        paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);\n        *puVar3 = uVar10;\n        puVar3[1] = uVar8;\n        puVar3[2] = uVar7;\n        puVar3[3] = uVar6;\n        puVar1 = PTR_memset_0015b9b4;\n        puVar3 = puVar3 + 4;\n      } while (paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0));\n      *puVar3 = paVar5->aHash[0];\n      (*(code *)puVar1)(&p->u,0,500);\n      p->nSet = 0;\n      piVar9 = (int *)((int)pBuf + 500);\n                    /* WARNING: Load size is inaccurate */\n      while ((iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1))) {\n        pBuf = (void *)((int)pBuf + 4);\n        if (piVar9 == (int *)pBuf) {\n          return;\n        }\n      }\n      p->nSet = p->nSet + 1;\n      FUN_00025d4c(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d);\n      return;\n    }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      if (p->iSize < 0xfa1) {\n        (p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];\n        return;\n      }\n      puVar3 = (u32 *)pBuf;\n      paVar5 = &p->u;\n      do {\n        uVar10 = paVar5->aHash[0];\n        uVar8 = paVar5->aHash[1];\n        uVar7 = paVar5->aHash[2];\n        uVar6 = paVar5->aHash[3];\n        paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);\n        *puVar3 = uVar10;\n        puVar3[1] = uVar8;\n        puVar3[2] = uVar7;\n        puVar3[3] = uVar6;\n        puVar1 = PTR_memset_0015b9b4;\n        puVar3 = puVar3 + 4;\n      } while (paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0));\n      *puVar3 = paVar5->aHash[0];\n      (*(code *)puVar1)(&p->u,0,500);\n      p->nSet = 0;\n      piVar9 = (int *)((int)pBuf + 500);\n                    /* WARNING: Load size is inaccurate */\n      while ((iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1))) {\n        pBuf = (void *)((int)pBuf + 4);\n        if (piVar9 == (int *)pBuf) {\n          return;\n        }\n      }\n      p->nSet = p->nSet + 1;\n      FUN_00025d4c(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d);\n      return;\n    }" { (if_statement "if (p->iSize < 0xfa1) {\n        (p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];\n        return;\n      }" if (parenthesized_expression "(p->iSize < 0xfa1)" ( (binary_expression "p->iSize < 0xfa1" (field_expression "p->iSize" identifier -> field_identifier) < number_literal) )) (compound_statement "{\n        (p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];\n        return;\n      }" { (expression_statement "(p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3];" (assignment_expression "(p->u).aBitmap[uVar11 >> 3] = ~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3]" (subscript_expression "(p->u).aBitmap[uVar11 >> 3]" (field_expression "(p->u).aBitmap" (parenthesized_expression "(p->u)" ( (field_expression "p->u" identifier -> field_identifier) )) . field_identifier) [ (binary_expression "uVar11 >> 3" identifier >> number_literal) ]) = (binary_expression "~(byte)(1 << (uVar11 & 7)) & (p->u).aBitmap[uVar11 >> 3]" (unary_expression "~(byte)(1 << (uVar11 & 7))" ~ (call_expression "(byte)(1 << (uVar11 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(1 << (uVar11 & 7))" ( (binary_expression "1 << (uVar11 & 7)" number_literal << (parenthesized_expression "(uVar11 & 7)" ( (binary_expression "uVar11 & 7" identifier & number_literal) ))) )))) & (subscript_expression "(p->u).aBitmap[uVar11 >> 3]" (field_expression "(p->u).aBitmap" (parenthesized_expression "(p->u)" ( (field_expression "p->u" identifier -> field_identifier) )) . field_identifier) [ (binary_expression "uVar11 >> 3" identifier >> number_literal) ]))) ;) (return_statement "return;" return ;) })) (expression_statement "puVar3 = (u32 *)pBuf;" (assignment_expression "puVar3 = (u32 *)pBuf" identifier = (cast_expression "(u32 *)pBuf" ( (type_descriptor "u32 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "paVar5 = &p->u;" (assignment_expression "paVar5 = &p->u" identifier = (pointer_expression "&p->u" & (field_expression "p->u" identifier -> field_identifier))) ;) (do_statement "do {\n        uVar10 = paVar5->aHash[0];\n        uVar8 = paVar5->aHash[1];\n        uVar7 = paVar5->aHash[2];\n        uVar6 = paVar5->aHash[3];\n        paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);\n        *puVar3 = uVar10;\n        puVar3[1] = uVar8;\n        puVar3[2] = uVar7;\n        puVar3[3] = uVar6;\n        puVar1 = PTR_memset_0015b9b4;\n        puVar3 = puVar3 + 4;\n      } while (paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0));" do (compound_statement "{\n        uVar10 = paVar5->aHash[0];\n        uVar8 = paVar5->aHash[1];\n        uVar7 = paVar5->aHash[2];\n        uVar6 = paVar5->aHash[3];\n        paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);\n        *puVar3 = uVar10;\n        puVar3[1] = uVar8;\n        puVar3[2] = uVar7;\n        puVar3[3] = uVar6;\n        puVar1 = PTR_memset_0015b9b4;\n        puVar3 = puVar3 + 4;\n      }" { (expression_statement "uVar10 = paVar5->aHash[0];" (assignment_expression "uVar10 = paVar5->aHash[0]" identifier = (subscript_expression "paVar5->aHash[0]" (field_expression "paVar5->aHash" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "uVar8 = paVar5->aHash[1];" (assignment_expression "uVar8 = paVar5->aHash[1]" identifier = (subscript_expression "paVar5->aHash[1]" (field_expression "paVar5->aHash" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "uVar7 = paVar5->aHash[2];" (assignment_expression "uVar7 = paVar5->aHash[2]" identifier = (subscript_expression "paVar5->aHash[2]" (field_expression "paVar5->aHash" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "uVar6 = paVar5->aHash[3];" (assignment_expression "uVar6 = paVar5->aHash[3]" identifier = (subscript_expression "paVar5->aHash[3]" (field_expression "paVar5->aHash" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4);" (assignment_expression "paVar5 = (anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4)" identifier = (cast_expression "(anon_union_500_3_7c964c52_for_u *)(paVar5->aHash + 4)" ( (type_descriptor "anon_union_500_3_7c964c52_for_u *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(paVar5->aHash + 4)" ( (binary_expression "paVar5->aHash + 4" (field_expression "paVar5->aHash" identifier -> field_identifier) + number_literal) )))) ;) (expression_statement "*puVar3 = uVar10;" (assignment_expression "*puVar3 = uVar10" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "puVar3[1] = uVar8;" (assignment_expression "puVar3[1] = uVar8" (subscript_expression "puVar3[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar3[2] = uVar7;" (assignment_expression "puVar3[2] = uVar7" (subscript_expression "puVar3[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar3[3] = uVar6;" (assignment_expression "puVar3[3] = uVar6" (subscript_expression "puVar3[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar1 = PTR_memset_0015b9b4;" (assignment_expression "puVar1 = PTR_memset_0015b9b4" identifier = identifier) ;) (expression_statement "puVar3 = puVar3 + 4;" (assignment_expression "puVar3 = puVar3 + 4" identifier = (binary_expression "puVar3 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0))" ( (binary_expression "paVar5 != (anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0)" identifier != (cast_expression "(anon_union_500_3_7c964c52_for_u *)((int)&p->u + 0x1f0)" ( (type_descriptor "anon_union_500_3_7c964c52_for_u *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&p->u + 0x1f0)" ( (binary_expression "(int)&p->u + 0x1f0" (cast_expression "(int)&p->u" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&p->u" & (field_expression "p->u" identifier -> field_identifier))) + number_literal) )))) )) ;) (expression_statement "*puVar3 = paVar5->aHash[0];" (assignment_expression "*puVar3 = paVar5->aHash[0]" (pointer_expression "*puVar3" * identifier) = (subscript_expression "paVar5->aHash[0]" (field_expression "paVar5->aHash" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "(*(code *)puVar1)(&p->u,0,500);" (call_expression "(*(code *)puVar1)(&p->u,0,500)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(&p->u,0,500)" ( (pointer_expression "&p->u" & (field_expression "p->u" identifier -> field_identifier)) , number_literal , number_literal ))) ;) (expression_statement "p->nSet = 0;" (assignment_expression "p->nSet = 0" (field_expression "p->nSet" identifier -> field_identifier) = number_literal) ;) (expression_statement "piVar9 = (int *)((int)pBuf + 500);" (assignment_expression "piVar9 = (int *)((int)pBuf + 500)" identifier = (cast_expression "(int *)((int)pBuf + 500)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBuf + 500)" ( (binary_expression "(int)pBuf + 500" (cast_expression "(int)pBuf" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) comment (while_statement "while ((iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1))) {\n        pBuf = (void *)((int)pBuf + 4);\n        if (piVar9 == (int *)pBuf) {\n          return;\n        }\n      }" while (parenthesized_expression "((iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1)))" ( (parenthesized_expression "(iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1))" ( (comma_expression "iVar4 = *pBuf, iVar4 == 0 || (iVar4 == uVar11 + 1)" (assignment_expression "iVar4 = *pBuf" identifier = (pointer_expression "*pBuf" * identifier)) , (binary_expression "iVar4 == 0 || (iVar4 == uVar11 + 1)" (binary_expression "iVar4 == 0" identifier == number_literal) || (parenthesized_expression "(iVar4 == uVar11 + 1)" ( (binary_expression "iVar4 == uVar11 + 1" identifier == (binary_expression "uVar11 + 1" identifier + number_literal)) )))) )) )) (compound_statement "{\n        pBuf = (void *)((int)pBuf + 4);\n        if (piVar9 == (int *)pBuf) {\n          return;\n        }\n      }" { (expression_statement "pBuf = (void *)((int)pBuf + 4);" (assignment_expression "pBuf = (void *)((int)pBuf + 4)" identifier = (cast_expression "(void *)((int)pBuf + 4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBuf + 4)" ( (binary_expression "(int)pBuf + 4" (cast_expression "(int)pBuf" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (if_statement "if (piVar9 == (int *)pBuf) {\n          return;\n        }" if (parenthesized_expression "(piVar9 == (int *)pBuf)" ( (binary_expression "piVar9 == (int *)pBuf" identifier == (cast_expression "(int *)pBuf" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "p->nSet = p->nSet + 1;" (assignment_expression "p->nSet = p->nSet + 1" (field_expression "p->nSet" identifier -> field_identifier) = (binary_expression "p->nSet + 1" (field_expression "p->nSet" identifier -> field_identifier) + number_literal)) ;) (expression_statement "FUN_00025d4c(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d);" (call_expression "FUN_00025d4c(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d)" identifier (argument_list "(((iVar4 - 1U) / 0x7d) * 0x7c,0x7d)" ( (binary_expression "((iVar4 - 1U) / 0x7d) * 0x7c" (parenthesized_expression "((iVar4 - 1U) / 0x7d)" ( (binary_expression "(iVar4 - 1U) / 0x7d" (parenthesized_expression "(iVar4 - 1U)" ( (binary_expression "iVar4 - 1U" identifier - number_literal) )) / number_literal) )) * number_literal) , number_literal ))) ;) (return_statement "return;" return ;) })) (if_statement "if (uVar2 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 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 "uVar12 = uVar11 / uVar2;" (assignment_expression "uVar12 = uVar11 / uVar2" identifier = (binary_expression "uVar11 / uVar2" identifier / identifier)) ;) (expression_statement "uVar11 = uVar11 % uVar2;" (assignment_expression "uVar11 = uVar11 % uVar2" identifier = (binary_expression "uVar11 % uVar2" identifier % identifier)) ;) (expression_statement "p = *(Bitvec **)((int)&p->u + uVar12 * 4);" (assignment_expression "p = *(Bitvec **)((int)&p->u + uVar12 * 4)" identifier = (pointer_expression "*(Bitvec **)((int)&p->u + uVar12 * 4)" * (cast_expression "(Bitvec **)((int)&p->u + uVar12 * 4)" ( (type_descriptor "Bitvec **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)&p->u + uVar12 * 4)" ( (binary_expression "(int)&p->u + uVar12 * 4" (cast_expression "(int)&p->u" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&p->u" & (field_expression "p->u" identifier -> field_identifier))) + (binary_expression "uVar12 * 4" identifier * number_literal)) ))))) ;) }) while (parenthesized_expression "(p != (Bitvec *)0x0)" ( (binary_expression "p != (Bitvec *)0x0" identifier != (cast_expression "(Bitvec *)0x0" ( (type_descriptor "Bitvec *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00025b90(uint *param_1,int param_2,uint *param_3)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if (param_1 == (uint *)0x0) {\n    return;\n  }\n  uVar9 = param_2 - 1;\n  while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }\n  if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }\n  puVar4 = param_3;\n  puVar5 = param_1 + 3;\n  do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);\n  *puVar4 = *puVar5;\n  (*(code *)puVar2)(param_1 + 3,0,500);\n  param_1[1] = 0;\n  puVar4 = param_3 + 0x7d;\n  while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }\n  param_1[1] = param_1[1] + 1;\n  uVar3 = (uVar3 - 1) % 0x7d;\n  do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );\n}\n\n" (function_definition "void FUN_00025b90(uint *param_1,int param_2,uint *param_3)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if (param_1 == (uint *)0x0) {\n    return;\n  }\n  uVar9 = param_2 - 1;\n  while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }\n  if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }\n  puVar4 = param_3;\n  puVar5 = param_1 + 3;\n  do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);\n  *puVar4 = *puVar5;\n  (*(code *)puVar2)(param_1 + 3,0,500);\n  param_1[1] = 0;\n  puVar4 = param_3 + 0x7d;\n  while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }\n  param_1[1] = param_1[1] + 1;\n  uVar3 = (uVar3 - 1) % 0x7d;\n  do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );\n}" primitive_type (function_declarator "FUN_00025b90(uint *param_1,int param_2,uint *param_3)" identifier (parameter_list "(uint *param_1,int param_2,uint *param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  uint *puVar1;\n  undefined *puVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if (param_1 == (uint *)0x0) {\n    return;\n  }\n  uVar9 = param_2 - 1;\n  while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }\n  if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }\n  puVar4 = param_3;\n  puVar5 = param_1 + 3;\n  do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);\n  *puVar4 = *puVar5;\n  (*(code *)puVar2)(param_1 + 3,0,500);\n  param_1[1] = 0;\n  puVar4 = param_3 + 0x7d;\n  while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }\n  param_1[1] = param_1[1] + 1;\n  uVar3 = (uVar3 - 1) % 0x7d;\n  do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (if_statement "if (param_1 == (uint *)0x0) {\n    return;\n  }" if (parenthesized_expression "(param_1 == (uint *)0x0)" ( (binary_expression "param_1 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar9 = param_2 - 1;" (assignment_expression "uVar9 = param_2 - 1" identifier = (binary_expression "param_2 - 1" identifier - number_literal)) ;) (while_statement "while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }" while (parenthesized_expression "(uVar3 = param_1[2], uVar3 != 0)" ( (comma_expression "uVar3 = param_1[2], uVar3 != 0" (assignment_expression "uVar3 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) , (binary_expression "uVar3 != 0" identifier != number_literal)) )) (compound_statement "{\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }" { (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 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 "uVar6 = uVar9 / uVar3;" (assignment_expression "uVar6 = uVar9 / uVar3" identifier = (binary_expression "uVar9 / uVar3" identifier / identifier)) ;) (expression_statement "uVar9 = uVar9 % uVar3;" (assignment_expression "uVar9 = uVar9 % uVar3" identifier = (binary_expression "uVar9 % uVar3" identifier % identifier)) ;) (expression_statement "param_1 = (uint *)param_1[uVar6 + 3];" (assignment_expression "param_1 = (uint *)param_1[uVar6 + 3]" identifier = (cast_expression "(uint *)param_1[uVar6 + 3]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[uVar6 + 3]" identifier [ (binary_expression "uVar6 + 3" identifier + number_literal) ]))) ;) (if_statement "if (param_1 == (uint *)0x0) {\n      return;\n    }" if (parenthesized_expression "(param_1 == (uint *)0x0)" ( (binary_expression "param_1 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) })) (if_statement "if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }" if (parenthesized_expression "(*param_1 < 0xfa1)" ( (binary_expression "*param_1 < 0xfa1" (pointer_expression "*param_1" * identifier) < number_literal) )) (compound_statement "{\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }" { (expression_statement "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);" (assignment_expression "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" (pointer_expression "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" * (cast_expression "(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + (uVar9 >> 3) + 0xc)" ( (binary_expression "(int)param_1 + (uVar9 >> 3) + 0xc" (binary_expression "(int)param_1 + (uVar9 >> 3)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(uVar9 >> 3)" ( (binary_expression "uVar9 >> 3" identifier >> number_literal) ))) + number_literal) )))) = (binary_expression "~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" (unary_expression "~(byte)(1 << (uVar9 & 7))" ~ (call_expression "(byte)(1 << (uVar9 & 7))" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(1 << (uVar9 & 7))" ( (binary_expression "1 << (uVar9 & 7)" number_literal << (parenthesized_expression "(uVar9 & 7)" ( (binary_expression "uVar9 & 7" identifier & number_literal) ))) )))) & (pointer_expression "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" * (cast_expression "(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + (uVar9 >> 3) + 0xc)" ( (binary_expression "(int)param_1 + (uVar9 >> 3) + 0xc" (binary_expression "(int)param_1 + (uVar9 >> 3)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(uVar9 >> 3)" ( (binary_expression "uVar9 >> 3" identifier >> number_literal) ))) + number_literal) )))))) ;) (return_statement "return;" return ;) })) (expression_statement "puVar4 = param_3;" (assignment_expression "puVar4 = param_3" identifier = identifier) ;) (expression_statement "puVar5 = param_1 + 3;" (assignment_expression "puVar5 = param_1 + 3" identifier = (binary_expression "param_1 + 3" identifier + number_literal)) ;) (do_statement "do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);" do (compound_statement "{\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  }" { (expression_statement "uVar8 = *puVar5;" (assignment_expression "uVar8 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "uVar7 = puVar5[1];" (assignment_expression "uVar7 = puVar5[1]" identifier = (subscript_expression "puVar5[1]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = puVar5[2];" (assignment_expression "uVar6 = puVar5[2]" identifier = (subscript_expression "puVar5[2]" identifier [ number_literal ])) ;) (expression_statement "uVar3 = puVar5[3];" (assignment_expression "uVar3 = puVar5[3]" identifier = (subscript_expression "puVar5[3]" identifier [ number_literal ])) ;) (expression_statement "puVar5 = puVar5 + 4;" (assignment_expression "puVar5 = puVar5 + 4" identifier = (binary_expression "puVar5 + 4" identifier + number_literal)) ;) (expression_statement "*puVar4 = uVar8;" (assignment_expression "*puVar4 = uVar8" (pointer_expression "*puVar4" * identifier) = identifier) ;) (expression_statement "puVar4[1] = uVar7;" (assignment_expression "puVar4[1] = uVar7" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar4[2] = uVar6;" (assignment_expression "puVar4[2] = uVar6" (subscript_expression "puVar4[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar4[3] = uVar3;" (assignment_expression "puVar4[3] = uVar3" (subscript_expression "puVar4[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar2 = PTR_memset_0015b9b4;" (assignment_expression "puVar2 = PTR_memset_0015b9b4" identifier = identifier) ;) (expression_statement "puVar4 = puVar4 + 4;" (assignment_expression "puVar4 = puVar4 + 4" identifier = (binary_expression "puVar4 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar5 != param_1 + 0x7f)" ( (binary_expression "puVar5 != param_1 + 0x7f" identifier != (binary_expression "param_1 + 0x7f" identifier + number_literal)) )) ;) (expression_statement "*puVar4 = *puVar5;" (assignment_expression "*puVar4 = *puVar5" (pointer_expression "*puVar4" * identifier) = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "(*(code *)puVar2)(param_1 + 3,0,500);" (call_expression "(*(code *)puVar2)(param_1 + 3,0,500)" (parenthesized_expression "(*(code *)puVar2)" ( (pointer_expression "*(code *)puVar2" * (cast_expression "(code *)puVar2" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1 + 3,0,500)" ( (binary_expression "param_1 + 3" identifier + number_literal) , number_literal , number_literal ))) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar4 = param_3 + 0x7d;" (assignment_expression "puVar4 = param_3 + 0x7d" identifier = (binary_expression "param_3 + 0x7d" identifier + number_literal)) ;) (while_statement "while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }" while (parenthesized_expression "((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1)))" ( (parenthesized_expression "(uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))" ( (comma_expression "uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1)" (assignment_expression "uVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) , (binary_expression "uVar3 == 0 || (uVar3 == uVar9 + 1)" (binary_expression "uVar3 == 0" identifier == number_literal) || (parenthesized_expression "(uVar3 == uVar9 + 1)" ( (binary_expression "uVar3 == uVar9 + 1" identifier == (binary_expression "uVar9 + 1" identifier + number_literal)) )))) )) )) (compound_statement "{\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }" { (labeled_statement "LAB_00025ce8:\n    param_3 = param_3 + 1;" statement_identifier : (expression_statement "param_3 = param_3 + 1;" (assignment_expression "param_3 = param_3 + 1" identifier = (binary_expression "param_3 + 1" identifier + number_literal)) ;)) (if_statement "if (puVar4 == param_3) {\n      return;\n    }" if (parenthesized_expression "(puVar4 == param_3)" ( (binary_expression "puVar4 == param_3" identifier == identifier) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) })) (expression_statement "param_1[1] = param_1[1] + 1;" (assignment_expression "param_1[1] = param_1[1] + 1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_1[1] + 1" (subscript_expression "param_1[1]" identifier [ number_literal ]) + number_literal)) ;) (expression_statement "uVar3 = (uVar3 - 1) % 0x7d;" (assignment_expression "uVar3 = (uVar3 - 1) % 0x7d" identifier = (binary_expression "(uVar3 - 1) % 0x7d" (parenthesized_expression "(uVar3 - 1)" ( (binary_expression "uVar3 - 1" identifier - number_literal) )) % number_literal)) ;) (do_statement "do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );" do (compound_statement "{\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  }" { (expression_statement "puVar5 = param_1 + uVar3;" (assignment_expression "puVar5 = param_1 + uVar3" identifier = (binary_expression "param_1 + uVar3" identifier + identifier)) ;) (do_statement "do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);" do (compound_statement "{\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    }" { (expression_statement "puVar1 = puVar5 + 3;" (assignment_expression "puVar1 = puVar5 + 3" identifier = (binary_expression "puVar5 + 3" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (if_statement "if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }" if (parenthesized_expression "(*puVar1 == 0)" ( (binary_expression "*puVar1 == 0" (pointer_expression "*puVar1" * identifier) == number_literal) )) (compound_statement "{\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }" { (expression_statement "param_1[uVar3 + 3] = *param_3;" (assignment_expression "param_1[uVar3 + 3] = *param_3" (subscript_expression "param_1[uVar3 + 3]" identifier [ (binary_expression "uVar3 + 3" identifier + number_literal) ]) = (pointer_expression "*param_3" * identifier)) ;) (goto_statement "goto LAB_00025ce8;" goto statement_identifier ;) })) (expression_statement "uVar3 = uVar3 + 1;" (assignment_expression "uVar3 = uVar3 + 1" identifier = (binary_expression "uVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar3 != 0x7d)" ( (binary_expression "uVar3 != 0x7d" identifier != number_literal) )) ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) , (binary_expression IDENT != LIT)) )) (compound_statement { (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 IDENT / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT % IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (parenthesized_expression ( (binary_expression IDENT >> LIT) ))) + LIT) )))) = (binary_expression (unary_expression ~ (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) )))) & (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (parenthesized_expression ( (binary_expression IDENT >> LIT) ))) + LIT) )))))) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + LIT)) )) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + LIT) , LIT , LIT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (while_statement while (parenthesized_expression ( (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * IDENT)) , (binary_expression (binary_expression IDENT == LIT) || (parenthesized_expression ( (binary_expression IDENT == (binary_expression IDENT + LIT)) )))) )) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return ;) })) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) % LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = (pointer_expression * IDENT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "void FUN_00025b90(uint *param_1,int param_2,uint *param_3)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if (param_1 == (uint *)0x0) {\n    return;\n  }\n  uVar9 = param_2 - 1;\n  while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }\n  if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }\n  puVar4 = param_3;\n  puVar5 = param_1 + 3;\n  do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);\n  *puVar4 = *puVar5;\n  (*(code *)puVar2)(param_1 + 3,0,500);\n  param_1[1] = 0;\n  puVar4 = param_3 + 0x7d;\n  while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }\n  param_1[1] = param_1[1] + 1;\n  uVar3 = (uVar3 - 1) % 0x7d;\n  do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );\n}" (primitive_type "void") (function_declarator "FUN_00025b90(uint *param_1,int param_2,uint *param_3)" (identifier "FUN_00025b90") (parameter_list "(uint *param_1,int param_2,uint *param_3)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  uint *puVar1;\n  undefined *puVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  \n  if (param_1 == (uint *)0x0) {\n    return;\n  }\n  uVar9 = param_2 - 1;\n  while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }\n  if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }\n  puVar4 = param_3;\n  puVar5 = param_1 + 3;\n  do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);\n  *puVar4 = *puVar5;\n  (*(code *)puVar2)(param_1 + 3,0,500);\n  param_1[1] = 0;\n  puVar4 = param_3 + 0x7d;\n  while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }\n  param_1[1] = param_1[1] + 1;\n  uVar3 = (uVar3 - 1) % 0x7d;\n  do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint *puVar4;" (type_identifier "uint") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (if_statement "if (param_1 == (uint *)0x0) {\n    return;\n  }" (if "if") (parenthesized_expression "(param_1 == (uint *)0x0)" (( "(") (binary_expression "param_1 == (uint *)0x0" (identifier "param_1") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar9 = param_2 - 1;" (assignment_expression "uVar9 = param_2 - 1" (identifier "uVar9") (= "=") (binary_expression "param_2 - 1" (identifier "param_2") (- "-") (number_literal "1"))) (; ";")) (while_statement "while (uVar3 = param_1[2], uVar3 != 0) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }" (while "while") (parenthesized_expression "(uVar3 = param_1[2], uVar3 != 0)" (( "(") (comma_expression "uVar3 = param_1[2], uVar3 != 0" (assignment_expression "uVar3 = param_1[2]" (identifier "uVar3") (= "=") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (, ",") (binary_expression "uVar3 != 0" (identifier "uVar3") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = uVar9 / uVar3;\n    uVar9 = uVar9 % uVar3;\n    param_1 = (uint *)param_1[uVar6 + 3];\n    if (param_1 == (uint *)0x0) {\n      return;\n    }\n  }" ({ "{") (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (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 "uVar6 = uVar9 / uVar3;" (assignment_expression "uVar6 = uVar9 / uVar3" (identifier "uVar6") (= "=") (binary_expression "uVar9 / uVar3" (identifier "uVar9") (/ "/") (identifier "uVar3"))) (; ";")) (expression_statement "uVar9 = uVar9 % uVar3;" (assignment_expression "uVar9 = uVar9 % uVar3" (identifier "uVar9") (= "=") (binary_expression "uVar9 % uVar3" (identifier "uVar9") (% "%") (identifier "uVar3"))) (; ";")) (expression_statement "param_1 = (uint *)param_1[uVar6 + 3];" (assignment_expression "param_1 = (uint *)param_1[uVar6 + 3]" (identifier "param_1") (= "=") (cast_expression "(uint *)param_1[uVar6 + 3]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[uVar6 + 3]" (identifier "param_1") ([ "[") (binary_expression "uVar6 + 3" (identifier "uVar6") (+ "+") (number_literal "3")) (] "]")))) (; ";")) (if_statement "if (param_1 == (uint *)0x0) {\n      return;\n    }" (if "if") (parenthesized_expression "(param_1 == (uint *)0x0)" (( "(") (binary_expression "param_1 == (uint *)0x0" (identifier "param_1") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (if_statement "if (*param_1 < 0xfa1) {\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }" (if "if") (parenthesized_expression "(*param_1 < 0xfa1)" (( "(") (binary_expression "*param_1 < 0xfa1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (< "<") (number_literal "0xfa1")) () ")")) (compound_statement "{\n    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);\n    return;\n  }" ({ "{") (expression_statement "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);" (assignment_expression "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =\n         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" (pointer_expression "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" (* "*") (cast_expression "(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + (uVar9 >> 3) + 0xc)" (( "(") (binary_expression "(int)param_1 + (uVar9 >> 3) + 0xc" (binary_expression "(int)param_1 + (uVar9 >> 3)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (parenthesized_expression "(uVar9 >> 3)" (( "(") (binary_expression "uVar9 >> 3" (identifier "uVar9") (>> ">>") (number_literal "3")) () ")"))) (+ "+") (number_literal "0xc")) () ")")))) (= "=") (binary_expression "~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" (unary_expression "~(byte)(1 << (uVar9 & 7))" (~ "~") (call_expression "(byte)(1 << (uVar9 & 7))" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(1 << (uVar9 & 7))" (( "(") (binary_expression "1 << (uVar9 & 7)" (number_literal "1") (<< "<<") (parenthesized_expression "(uVar9 & 7)" (( "(") (binary_expression "uVar9 & 7" (identifier "uVar9") (& "&") (number_literal "7")) () ")"))) () ")")))) (& "&") (pointer_expression "*(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" (* "*") (cast_expression "(byte *)((int)param_1 + (uVar9 >> 3) + 0xc)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + (uVar9 >> 3) + 0xc)" (( "(") (binary_expression "(int)param_1 + (uVar9 >> 3) + 0xc" (binary_expression "(int)param_1 + (uVar9 >> 3)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (parenthesized_expression "(uVar9 >> 3)" (( "(") (binary_expression "uVar9 >> 3" (identifier "uVar9") (>> ">>") (number_literal "3")) () ")"))) (+ "+") (number_literal "0xc")) () ")")))))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "puVar4 = param_3;" (assignment_expression "puVar4 = param_3" (identifier "puVar4") (= "=") (identifier "param_3")) (; ";")) (expression_statement "puVar5 = param_1 + 3;" (assignment_expression "puVar5 = param_1 + 3" (identifier "puVar5") (= "=") (binary_expression "param_1 + 3" (identifier "param_1") (+ "+") (number_literal "3"))) (; ";")) (do_statement "do {\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  } while (puVar5 != param_1 + 0x7f);" (do "do") (compound_statement "{\n    uVar8 = *puVar5;\n    uVar7 = puVar5[1];\n    uVar6 = puVar5[2];\n    uVar3 = puVar5[3];\n    puVar5 = puVar5 + 4;\n    *puVar4 = uVar8;\n    puVar4[1] = uVar7;\n    puVar4[2] = uVar6;\n    puVar4[3] = uVar3;\n    puVar2 = PTR_memset_0015b9b4;\n    puVar4 = puVar4 + 4;\n  }" ({ "{") (expression_statement "uVar8 = *puVar5;" (assignment_expression "uVar8 = *puVar5" (identifier "uVar8") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "uVar7 = puVar5[1];" (assignment_expression "uVar7 = puVar5[1]" (identifier "uVar7") (= "=") (subscript_expression "puVar5[1]" (identifier "puVar5") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar6 = puVar5[2];" (assignment_expression "uVar6 = puVar5[2]" (identifier "uVar6") (= "=") (subscript_expression "puVar5[2]" (identifier "puVar5") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "uVar3 = puVar5[3];" (assignment_expression "uVar3 = puVar5[3]" (identifier "uVar3") (= "=") (subscript_expression "puVar5[3]" (identifier "puVar5") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "puVar5 = puVar5 + 4;" (assignment_expression "puVar5 = puVar5 + 4" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 4" (identifier "puVar5") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "*puVar4 = uVar8;" (assignment_expression "*puVar4 = uVar8" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (identifier "uVar8")) (; ";")) (expression_statement "puVar4[1] = uVar7;" (assignment_expression "puVar4[1] = uVar7" (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "puVar4[2] = uVar6;" (assignment_expression "puVar4[2] = uVar6" (subscript_expression "puVar4[2]" (identifier "puVar4") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "puVar4[3] = uVar3;" (assignment_expression "puVar4[3] = uVar3" (subscript_expression "puVar4[3]" (identifier "puVar4") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "puVar2 = PTR_memset_0015b9b4;" (assignment_expression "puVar2 = PTR_memset_0015b9b4" (identifier "puVar2") (= "=") (identifier "PTR_memset_0015b9b4")) (; ";")) (expression_statement "puVar4 = puVar4 + 4;" (assignment_expression "puVar4 = puVar4 + 4" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 4" (identifier "puVar4") (+ "+") (number_literal "4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar5 != param_1 + 0x7f)" (( "(") (binary_expression "puVar5 != param_1 + 0x7f" (identifier "puVar5") (!= "!=") (binary_expression "param_1 + 0x7f" (identifier "param_1") (+ "+") (number_literal "0x7f"))) () ")")) (; ";")) (expression_statement "*puVar4 = *puVar5;" (assignment_expression "*puVar4 = *puVar5" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "(*(code *)puVar2)(param_1 + 3,0,500);" (call_expression "(*(code *)puVar2)(param_1 + 3,0,500)" (parenthesized_expression "(*(code *)puVar2)" (( "(") (pointer_expression "*(code *)puVar2" (* "*") (cast_expression "(code *)puVar2" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar2"))) () ")")) (argument_list "(param_1 + 3,0,500)" (( "(") (binary_expression "param_1 + 3" (identifier "param_1") (+ "+") (number_literal "3")) (, ",") (number_literal "0") (, ",") (number_literal "500") () ")"))) (; ";")) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar4 = param_3 + 0x7d;" (assignment_expression "puVar4 = param_3 + 0x7d" (identifier "puVar4") (= "=") (binary_expression "param_3 + 0x7d" (identifier "param_3") (+ "+") (number_literal "0x7d"))) (; ";")) (while_statement "while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }" (while "while") (parenthesized_expression "((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1)))" (( "(") (parenthesized_expression "(uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))" (( "(") (comma_expression "uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1)" (assignment_expression "uVar3 = *param_3" (identifier "uVar3") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (, ",") (binary_expression "uVar3 == 0 || (uVar3 == uVar9 + 1)" (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) (|| "||") (parenthesized_expression "(uVar3 == uVar9 + 1)" (( "(") (binary_expression "uVar3 == uVar9 + 1" (identifier "uVar3") (== "==") (binary_expression "uVar9 + 1" (identifier "uVar9") (+ "+") (number_literal "1"))) () ")")))) () ")")) () ")")) (compound_statement "{\nLAB_00025ce8:\n    param_3 = param_3 + 1;\n    if (puVar4 == param_3) {\n      return;\n    }\n  }" ({ "{") (labeled_statement "LAB_00025ce8:\n    param_3 = param_3 + 1;" (statement_identifier "LAB_00025ce8") (: ":") (expression_statement "param_3 = param_3 + 1;" (assignment_expression "param_3 = param_3 + 1" (identifier "param_3") (= "=") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1"))) (; ";"))) (if_statement "if (puVar4 == param_3) {\n      return;\n    }" (if "if") (parenthesized_expression "(puVar4 == param_3)" (( "(") (binary_expression "puVar4 == param_3" (identifier "puVar4") (== "==") (identifier "param_3")) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (expression_statement "param_1[1] = param_1[1] + 1;" (assignment_expression "param_1[1] = param_1[1] + 1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "param_1[1] + 1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar3 = (uVar3 - 1) % 0x7d;" (assignment_expression "uVar3 = (uVar3 - 1) % 0x7d" (identifier "uVar3") (= "=") (binary_expression "(uVar3 - 1) % 0x7d" (parenthesized_expression "(uVar3 - 1)" (( "(") (binary_expression "uVar3 - 1" (identifier "uVar3") (- "-") (number_literal "1")) () ")")) (% "%") (number_literal "0x7d"))) (; ";")) (do_statement "do {\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  } while( true );" (do "do") (compound_statement "{\n    puVar5 = param_1 + uVar3;\n    do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);\n    uVar3 = 0;\n  }" ({ "{") (expression_statement "puVar5 = param_1 + uVar3;" (assignment_expression "puVar5 = param_1 + uVar3" (identifier "puVar5") (= "=") (binary_expression "param_1 + uVar3" (identifier "param_1") (+ "+") (identifier "uVar3"))) (; ";")) (do_statement "do {\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    } while (uVar3 != 0x7d);" (do "do") (compound_statement "{\n      puVar1 = puVar5 + 3;\n      puVar5 = puVar5 + 1;\n      if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }\n      uVar3 = uVar3 + 1;\n    }" ({ "{") (expression_statement "puVar1 = puVar5 + 3;" (assignment_expression "puVar1 = puVar5 + 3" (identifier "puVar1") (= "=") (binary_expression "puVar5 + 3" (identifier "puVar5") (+ "+") (number_literal "3"))) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (*puVar1 == 0) {\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }" (if "if") (parenthesized_expression "(*puVar1 == 0)" (( "(") (binary_expression "*puVar1 == 0" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        param_1[uVar3 + 3] = *param_3;\n        goto LAB_00025ce8;\n      }" ({ "{") (expression_statement "param_1[uVar3 + 3] = *param_3;" (assignment_expression "param_1[uVar3 + 3] = *param_3" (subscript_expression "param_1[uVar3 + 3]" (identifier "param_1") ([ "[") (binary_expression "uVar3 + 3" (identifier "uVar3") (+ "+") (number_literal "3")) (] "]")) (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (goto_statement "goto LAB_00025ce8;" (goto "goto") (statement_identifier "LAB_00025ce8") (; ";")) (} "}"))) (expression_statement "uVar3 = uVar3 + 1;" (assignment_expression "uVar3 = uVar3 + 1" (identifier "uVar3") (= "=") (binary_expression "uVar3 + 1" (identifier "uVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar3 != 0x7d)" (( "(") (binary_expression "uVar3 != 0x7d" (identifier "uVar3") (!= "!=") (number_literal "0x7d")) () ")")) (; ";")) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal)))) body: (compound_statement (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: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))))) right: (binary_expression left: (unary_expression argument: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))))))) (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal) (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (while_statement condition: (parenthesized_expression (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier))) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) body: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal))) right: (pointer_expression argument: (identifier)))) (goto_statement label: (statement_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: (number_literal)))) condition: (parenthesized_expression (true))))))

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

{
  uint *puVar1;
  undefined *puVar2;
  uint uVar3;
  uint *puVar4;
  uint *puVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  
  if (param_1 == (uint *)0x0) {
    return;
  }
  uVar9 = param_2 - 1;
  while (uVar3 = param_1[2], uVar3 != 0) {
    if (uVar3 == 0) {
      trap(7);
    }
    uVar6 = uVar9 / uVar3;
    uVar9 = uVar9 % uVar3;
    param_1 = (uint *)param_1[uVar6 + 3];
    if (param_1 == (uint *)0x0) {
      return;
    }
  }
  if (*param_1 < 0xfa1) {
    *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc) =
         ~(byte)(1 << (uVar9 & 7)) & *(byte *)((int)param_1 + (uVar9 >> 3) + 0xc);
    return;
  }
  puVar4 = param_3;
  puVar5 = param_1 + 3;
  do {
    uVar8 = *puVar5;
    uVar7 = puVar5[1];
    uVar6 = puVar5[2];
    uVar3 = puVar5[3];
    puVar5 = puVar5 + 4;
    *puVar4 = uVar8;
    puVar4[1] = uVar7;
    puVar4[2] = uVar6;
    puVar4[3] = uVar3;
    puVar2 = PTR_memset_0015b9b4;
    puVar4 = puVar4 + 4;
  } while (puVar5 != param_1 + 0x7f);
  *puVar4 = *puVar5;
  (*(code *)puVar2)(param_1 + 3,0,500);
  param_1[1] = 0;
  puVar4 = param_3 + 0x7d;
  while ((uVar3 = *param_3, uVar3 == 0 || (uVar3 == uVar9 + 1))) {
LAB_00025ce8:
    param_3 = param_3 + 1;
    if (puVar4 == param_3) {
      return;
    }
  }
  param_1[1] = param_1[1] + 1;
  uVar3 = (uVar3 - 1) % 0x7d;
  do {
    puVar5 = param_1 + uVar3;
    do {
      puVar1 = puVar5 + 3;
      puVar5 = puVar5 + 1;
      if (*puVar1 == 0) {
        param_1[uVar3 + 3] = *param_3;
        goto LAB_00025ce8;
      }
      uVar3 = uVar3 + 1;
    } while (uVar3 != 0x7d);
    uVar3 = 0;
  } while( true );
}

