
void vdbePmaWriteBlob(PmaWriter *p,u8 *pData,int nData)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  
  if ((0 < nData) && (p->eFWErr == 0)) {
    iVar4 = p->nBuffer;
    iVar6 = nData;
    do {
      iVar5 = iVar4 - p->iBufEnd;
      if (iVar6 < iVar5) {
        iVar5 = iVar6;
      }
      (*(code *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,pData + (nData - iVar6));
      iVar6 = iVar6 - iVar5;
      iVar4 = p->nBuffer;
      iVar5 = iVar5 + p->iBufEnd;
      p->iBufEnd = iVar5;
      if (iVar5 == iVar4) {
        uVar1 = p->iBufStart;
        uVar2 = uVar1 + (int)p->iWriteOff;
        iVar5 = (*p->pFd->pMethods->xWrite)
                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,
                           CONCAT44((uint)(uVar2 < uVar1) +
                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));
        iVar4 = p->nBuffer;
        uVar2 = (uint)p->iWriteOff;
        iVar3 = *(int *)&p->iWriteOff;
        p->eFWErr = iVar5;
        uVar1 = uVar2 + iVar4;
        p->iBufEnd = 0;
        p->iBufStart = 0;
        *(uint *)((int)&p->iWriteOff + 4) = uVar1;
        *(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);
      }
    } while ((0 < iVar6) && (p->eFWErr == 0));
    return;
  }
  return;
}



void FUN_00025910(int *param_1,int param_2,int param_3)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  
  if ((0 < param_3) && (*param_1 == 0)) {
    iVar3 = param_1[2];
    iVar6 = param_3;
    do {
      iVar4 = iVar3 - param_1[4];
      if (iVar6 < iVar4) {
        iVar4 = iVar6;
      }
      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));
      iVar1 = param_1[4];
      iVar6 = iVar6 - iVar4;
      iVar3 = param_1[2];
      param_1[4] = iVar4 + iVar1;
      if (iVar4 + iVar1 == iVar3) {
        uVar2 = param_1[3];
        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);
        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))
                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,
                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);
        iVar3 = param_1[2];
        uVar5 = param_1[7];
        *param_1 = iVar4;
        uVar2 = uVar5 + iVar3;
        param_1[4] = 0;
        param_1[3] = 0;
        param_1[7] = uVar2;
        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);
      }
    } while ((0 < iVar6) && (*param_1 == 0));
    return;
  }
  return;
}


lui gp,0xd
addiu gp,gp,0x7990
addu gp,gp,t9
blez a2,0x00025a5c
_nop
lw v0,0x0(a0)
bne v0,zero,0x00025a5c
_nop
addiu sp,sp,-0x38
sw s3,0x2c(sp)
or s3,a2,zero
sw gp,0x18(sp)
sw s4,0x30(sp)
or s4,a1,zero
sw s2,0x28(sp)
or s2,s3,zero
sw s0,0x20(sp)
or s0,a0,zero
sw ra,0x34(sp)
sw s1,0x24(sp)
b 0x00025974
_lw a2,0x8(a0)
lw v0,0x0(s0)
bne v0,zero,0x00025a40
_nop
lw v0,0x10(s0)
subu a1,s3,s2
lw a0,0x4(s0)
lw t9,-0x7d34(gp)
addu a1,s4,a1
subu a2,a2,v0
addu a0,a0,v0
slt s1,s2,a2
movn a2,s2,s1
jalr t9
_or s1,a2,zero
lw v0,0x10(s0)
subu s2,s2,s1
lw a2,0x8(s0)
lw gp,0x18(sp)
addu s1,s1,v0
bne s1,a2,0x00025a38
_sw s1,0x10(s0)
lw v0,0xc(s0)
lw v1,0x1c(s0)
lw a0,0x20(s0)
lw a3,0x18(s0)
sra t0,v0,0x1f
addu v1,v0,v1
lw a1,0x4(s0)
subu a2,a2,v0
addu t0,t0,a3
lw t1,0x0(a0)
sltu a3,v1,v0
sw v1,0x14(sp)
addu v1,a3,t0
sw v1,0x10(sp)
lw t9,0xc(t1)
jalr t9
_addu a1,a1,v0
lw a2,0x8(s0)
lw v1,0x1c(s0)
lw a0,0x18(s0)
sra a1,a2,0x1f
lw gp,0x18(sp)
sw v0,0x0(s0)
addu v0,v1,a2
addu a0,a0,a1
sw zero,0x10(s0)
sltu v1,v0,v1
sw zero,0xc(s0)
addu v1,v1,a0
sw v0,0x1c(s0)
sw v1,0x18(s0)
bgtz s2,0x00025968
_lw ra,0x34(sp)
lw s4,0x30(sp)
lw s3,0x2c(sp)
lw s2,0x28(sp)
lw s1,0x24(sp)
lw s0,0x20(sp)
jr ra
_addiu sp,sp,0x38
jr ra
_nop
(translation_unit "void FUN_00025910(int *param_1,int param_2,int param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }\n  return;\n}\n\n" (function_definition "void FUN_00025910(int *param_1,int param_2,int param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00025910(int *param_1,int param_2,int param_3)" identifier (parameter_list "(int *param_1,int param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (if_statement "if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }" if (parenthesized_expression "((0 < param_3) && (*param_1 == 0))" ( (binary_expression "(0 < param_3) && (*param_1 == 0)" (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) )) && (parenthesized_expression "(*param_1 == 0)" ( (binary_expression "*param_1 == 0" (pointer_expression "*param_1" * identifier) == number_literal) ))) )) (compound_statement "{\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }" { (expression_statement "iVar3 = param_1[2];" (assignment_expression "iVar3 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = param_3;" (assignment_expression "iVar6 = param_3" identifier = identifier) ;) (do_statement "do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));" do (compound_statement "{\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    }" { (expression_statement "iVar4 = iVar3 - param_1[4];" (assignment_expression "iVar4 = iVar3 - param_1[4]" identifier = (binary_expression "iVar3 - param_1[4]" identifier - (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (if_statement "if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }" if (parenthesized_expression "(iVar6 < iVar4)" ( (binary_expression "iVar6 < iVar4" identifier < identifier) )) (compound_statement "{\n        iVar4 = iVar6;\n      }" { (expression_statement "iVar4 = iVar6;" (assignment_expression "iVar4 = iVar6" identifier = identifier) ;) })) (expression_statement "(*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));" (call_expression "(*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6))" (parenthesized_expression "(*(code *)PTR_memcpy_000f556c)" ( (pointer_expression "*(code *)PTR_memcpy_000f556c" * (cast_expression "(code *)PTR_memcpy_000f556c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1[1] + param_1[4],param_2 + (param_3 - iVar6))" ( (binary_expression "param_1[1] + param_1[4]" (subscript_expression "param_1[1]" identifier [ number_literal ]) + (subscript_expression "param_1[4]" identifier [ number_literal ])) , (binary_expression "param_2 + (param_3 - iVar6)" identifier + (parenthesized_expression "(param_3 - iVar6)" ( (binary_expression "param_3 - iVar6" identifier - identifier) ))) ))) ;) (expression_statement "iVar1 = param_1[4];" (assignment_expression "iVar1 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = iVar6 - iVar4;" (assignment_expression "iVar6 = iVar6 - iVar4" identifier = (binary_expression "iVar6 - iVar4" identifier - identifier)) ;) (expression_statement "iVar3 = param_1[2];" (assignment_expression "iVar3 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "param_1[4] = iVar4 + iVar1;" (assignment_expression "param_1[4] = iVar4 + iVar1" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "iVar4 + iVar1" identifier + identifier)) ;) (if_statement "if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }" if (parenthesized_expression "(iVar4 + iVar1 == iVar3)" ( (binary_expression "iVar4 + iVar1 == iVar3" (binary_expression "iVar4 + iVar1" identifier + identifier) == identifier) )) (compound_statement "{\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }" { (expression_statement "uVar2 = param_1[3];" (assignment_expression "uVar2 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "uVar5 = (uint)(uVar2 + param_1[7] < uVar2);" (assignment_expression "uVar5 = (uint)(uVar2 + param_1[7] < uVar2)" identifier = (call_expression "(uint)(uVar2 + param_1[7] < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 + param_1[7] < uVar2)" ( (binary_expression "uVar2 + param_1[7] < uVar2" (binary_expression "uVar2 + param_1[7]" identifier + (subscript_expression "param_1[7]" identifier [ number_literal ])) < identifier) )))) ;) (expression_statement "iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);" (assignment_expression "iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7])" identifier = (call_expression "(**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7])" (parenthesized_expression "(**(code **)(*(int *)param_1[8] + 0xc))" ( (pointer_expression "**(code **)(*(int *)param_1[8] + 0xc)" * (pointer_expression "*(code **)(*(int *)param_1[8] + 0xc)" * (cast_expression "(code **)(*(int *)param_1[8] + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)param_1[8] + 0xc)" ( (binary_expression "*(int *)param_1[8] + 0xc" (pointer_expression "*(int *)param_1[8]" * (cast_expression "(int *)param_1[8]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ]))) + number_literal) ))))) )) (argument_list "((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7])" ( (cast_expression "(int *)param_1[8]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ])) , (binary_expression "param_1[1] + uVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) + identifier) , (binary_expression "iVar3 - uVar2" identifier - identifier) , identifier , (binary_expression "uVar5 + ((int)uVar2 >> 0x1f) + param_1[6]" (binary_expression "uVar5 + ((int)uVar2 >> 0x1f)" identifier + (parenthesized_expression "((int)uVar2 >> 0x1f)" ( (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) + (subscript_expression "param_1[6]" identifier [ number_literal ])) , (binary_expression "uVar2 + param_1[7]" identifier + (subscript_expression "param_1[7]" identifier [ number_literal ])) )))) ;) (expression_statement "iVar3 = param_1[2];" (assignment_expression "iVar3 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "uVar5 = param_1[7];" (assignment_expression "uVar5 = param_1[7]" identifier = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) (expression_statement "*param_1 = iVar4;" (assignment_expression "*param_1 = iVar4" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "uVar2 = uVar5 + iVar3;" (assignment_expression "uVar2 = uVar5 + iVar3" identifier = (binary_expression "uVar5 + iVar3" identifier + identifier)) ;) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = uVar2;" (assignment_expression "param_1[7] = uVar2" (subscript_expression "param_1[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);" (assignment_expression "param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f)" (subscript_expression "param_1[6]" identifier [ number_literal ]) = (binary_expression "(uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f)" (binary_expression "(uint)(uVar2 < uVar5) + param_1[6]" (call_expression "(uint)(uVar2 < uVar5)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar5)" ( (binary_expression "uVar2 < uVar5" identifier < identifier) ))) + (subscript_expression "param_1[6]" identifier [ number_literal ])) + (parenthesized_expression "(iVar3 >> 0x1f)" ( (binary_expression "iVar3 >> 0x1f" identifier >> number_literal) )))) ;) })) }) while (parenthesized_expression "((0 < iVar6) && (*param_1 == 0))" ( (binary_expression "(0 < iVar6) && (*param_1 == 0)" (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) && (parenthesized_expression "(*param_1 == 0)" ( (binary_expression "*param_1 == 0" (pointer_expression "*param_1" * identifier) == number_literal) ))) )) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "void vdbePmaWriteBlob(PmaWriter *p,u8 *pData,int nData)\n\n{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  if ((0 < nData) && (p->eFWErr == 0)) {\n    iVar4 = p->nBuffer;\n    iVar6 = nData;\n    do {\n      iVar5 = iVar4 - p->iBufEnd;\n      if (iVar6 < iVar5) {\n        iVar5 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,pData + (nData - iVar6));\n      iVar6 = iVar6 - iVar5;\n      iVar4 = p->nBuffer;\n      iVar5 = iVar5 + p->iBufEnd;\n      p->iBufEnd = iVar5;\n      if (iVar5 == iVar4) {\n        uVar1 = p->iBufStart;\n        uVar2 = uVar1 + (int)p->iWriteOff;\n        iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));\n        iVar4 = p->nBuffer;\n        uVar2 = (uint)p->iWriteOff;\n        iVar3 = *(int *)&p->iWriteOff;\n        p->eFWErr = iVar5;\n        uVar1 = uVar2 + iVar4;\n        p->iBufEnd = 0;\n        p->iBufStart = 0;\n        *(uint *)((int)&p->iWriteOff + 4) = uVar1;\n        *(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (p->eFWErr == 0));\n    return;\n  }\n  return;\n}\n\n" (function_definition "void vdbePmaWriteBlob(PmaWriter *p,u8 *pData,int nData)\n\n{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  if ((0 < nData) && (p->eFWErr == 0)) {\n    iVar4 = p->nBuffer;\n    iVar6 = nData;\n    do {\n      iVar5 = iVar4 - p->iBufEnd;\n      if (iVar6 < iVar5) {\n        iVar5 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,pData + (nData - iVar6));\n      iVar6 = iVar6 - iVar5;\n      iVar4 = p->nBuffer;\n      iVar5 = iVar5 + p->iBufEnd;\n      p->iBufEnd = iVar5;\n      if (iVar5 == iVar4) {\n        uVar1 = p->iBufStart;\n        uVar2 = uVar1 + (int)p->iWriteOff;\n        iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));\n        iVar4 = p->nBuffer;\n        uVar2 = (uint)p->iWriteOff;\n        iVar3 = *(int *)&p->iWriteOff;\n        p->eFWErr = iVar5;\n        uVar1 = uVar2 + iVar4;\n        p->iBufEnd = 0;\n        p->iBufStart = 0;\n        *(uint *)((int)&p->iWriteOff + 4) = uVar1;\n        *(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (p->eFWErr == 0));\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "vdbePmaWriteBlob(PmaWriter *p,u8 *pData,int nData)" identifier (parameter_list "(PmaWriter *p,u8 *pData,int nData)" ( (parameter_declaration "PmaWriter *p" type_identifier (pointer_declarator "*p" * identifier)) , (parameter_declaration "u8 *pData" type_identifier (pointer_declarator "*pData" * identifier)) , (parameter_declaration "int nData" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  \n  if ((0 < nData) && (p->eFWErr == 0)) {\n    iVar4 = p->nBuffer;\n    iVar6 = nData;\n    do {\n      iVar5 = iVar4 - p->iBufEnd;\n      if (iVar6 < iVar5) {\n        iVar5 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,pData + (nData - iVar6));\n      iVar6 = iVar6 - iVar5;\n      iVar4 = p->nBuffer;\n      iVar5 = iVar5 + p->iBufEnd;\n      p->iBufEnd = iVar5;\n      if (iVar5 == iVar4) {\n        uVar1 = p->iBufStart;\n        uVar2 = uVar1 + (int)p->iWriteOff;\n        iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));\n        iVar4 = p->nBuffer;\n        uVar2 = (uint)p->iWriteOff;\n        iVar3 = *(int *)&p->iWriteOff;\n        p->eFWErr = iVar5;\n        uVar1 = uVar2 + iVar4;\n        p->iBufEnd = 0;\n        p->iBufStart = 0;\n        *(uint *)((int)&p->iWriteOff + 4) = uVar1;\n        *(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (p->eFWErr == 0));\n    return;\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (if_statement "if ((0 < nData) && (p->eFWErr == 0)) {\n    iVar4 = p->nBuffer;\n    iVar6 = nData;\n    do {\n      iVar5 = iVar4 - p->iBufEnd;\n      if (iVar6 < iVar5) {\n        iVar5 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,pData + (nData - iVar6));\n      iVar6 = iVar6 - iVar5;\n      iVar4 = p->nBuffer;\n      iVar5 = iVar5 + p->iBufEnd;\n      p->iBufEnd = iVar5;\n      if (iVar5 == iVar4) {\n        uVar1 = p->iBufStart;\n        uVar2 = uVar1 + (int)p->iWriteOff;\n        iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));\n        iVar4 = p->nBuffer;\n        uVar2 = (uint)p->iWriteOff;\n        iVar3 = *(int *)&p->iWriteOff;\n        p->eFWErr = iVar5;\n        uVar1 = uVar2 + iVar4;\n        p->iBufEnd = 0;\n        p->iBufStart = 0;\n        *(uint *)((int)&p->iWriteOff + 4) = uVar1;\n        *(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (p->eFWErr == 0));\n    return;\n  }" if (parenthesized_expression "((0 < nData) && (p->eFWErr == 0))" ( (binary_expression "(0 < nData) && (p->eFWErr == 0)" (parenthesized_expression "(0 < nData)" ( (binary_expression "0 < nData" number_literal < identifier) )) && (parenthesized_expression "(p->eFWErr == 0)" ( (binary_expression "p->eFWErr == 0" (field_expression "p->eFWErr" identifier -> field_identifier) == number_literal) ))) )) (compound_statement "{\n    iVar4 = p->nBuffer;\n    iVar6 = nData;\n    do {\n      iVar5 = iVar4 - p->iBufEnd;\n      if (iVar6 < iVar5) {\n        iVar5 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,pData + (nData - iVar6));\n      iVar6 = iVar6 - iVar5;\n      iVar4 = p->nBuffer;\n      iVar5 = iVar5 + p->iBufEnd;\n      p->iBufEnd = iVar5;\n      if (iVar5 == iVar4) {\n        uVar1 = p->iBufStart;\n        uVar2 = uVar1 + (int)p->iWriteOff;\n        iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));\n        iVar4 = p->nBuffer;\n        uVar2 = (uint)p->iWriteOff;\n        iVar3 = *(int *)&p->iWriteOff;\n        p->eFWErr = iVar5;\n        uVar1 = uVar2 + iVar4;\n        p->iBufEnd = 0;\n        p->iBufStart = 0;\n        *(uint *)((int)&p->iWriteOff + 4) = uVar1;\n        *(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (p->eFWErr == 0));\n    return;\n  }" { (expression_statement "iVar4 = p->nBuffer;" (assignment_expression "iVar4 = p->nBuffer" identifier = (field_expression "p->nBuffer" identifier -> field_identifier)) ;) (expression_statement "iVar6 = nData;" (assignment_expression "iVar6 = nData" identifier = identifier) ;) (do_statement "do {\n      iVar5 = iVar4 - p->iBufEnd;\n      if (iVar6 < iVar5) {\n        iVar5 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,pData + (nData - iVar6));\n      iVar6 = iVar6 - iVar5;\n      iVar4 = p->nBuffer;\n      iVar5 = iVar5 + p->iBufEnd;\n      p->iBufEnd = iVar5;\n      if (iVar5 == iVar4) {\n        uVar1 = p->iBufStart;\n        uVar2 = uVar1 + (int)p->iWriteOff;\n        iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));\n        iVar4 = p->nBuffer;\n        uVar2 = (uint)p->iWriteOff;\n        iVar3 = *(int *)&p->iWriteOff;\n        p->eFWErr = iVar5;\n        uVar1 = uVar2 + iVar4;\n        p->iBufEnd = 0;\n        p->iBufStart = 0;\n        *(uint *)((int)&p->iWriteOff + 4) = uVar1;\n        *(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (p->eFWErr == 0));" do (compound_statement "{\n      iVar5 = iVar4 - p->iBufEnd;\n      if (iVar6 < iVar5) {\n        iVar5 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,pData + (nData - iVar6));\n      iVar6 = iVar6 - iVar5;\n      iVar4 = p->nBuffer;\n      iVar5 = iVar5 + p->iBufEnd;\n      p->iBufEnd = iVar5;\n      if (iVar5 == iVar4) {\n        uVar1 = p->iBufStart;\n        uVar2 = uVar1 + (int)p->iWriteOff;\n        iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));\n        iVar4 = p->nBuffer;\n        uVar2 = (uint)p->iWriteOff;\n        iVar3 = *(int *)&p->iWriteOff;\n        p->eFWErr = iVar5;\n        uVar1 = uVar2 + iVar4;\n        p->iBufEnd = 0;\n        p->iBufStart = 0;\n        *(uint *)((int)&p->iWriteOff + 4) = uVar1;\n        *(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);\n      }\n    }" { (expression_statement "iVar5 = iVar4 - p->iBufEnd;" (assignment_expression "iVar5 = iVar4 - p->iBufEnd" identifier = (binary_expression "iVar4 - p->iBufEnd" identifier - (field_expression "p->iBufEnd" identifier -> field_identifier))) ;) (if_statement "if (iVar6 < iVar5) {\n        iVar5 = iVar6;\n      }" if (parenthesized_expression "(iVar6 < iVar5)" ( (binary_expression "iVar6 < iVar5" identifier < identifier) )) (compound_statement "{\n        iVar5 = iVar6;\n      }" { (expression_statement "iVar5 = iVar6;" (assignment_expression "iVar5 = iVar6" identifier = identifier) ;) })) (expression_statement "(*(code *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,pData + (nData - iVar6));" (call_expression "(*(code *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,pData + (nData - iVar6))" (parenthesized_expression "(*(code *)PTR_memcpy_000f556c)" ( (pointer_expression "*(code *)PTR_memcpy_000f556c" * (cast_expression "(code *)PTR_memcpy_000f556c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(p->aBuffer + p->iBufEnd,pData + (nData - iVar6))" ( (binary_expression "p->aBuffer + p->iBufEnd" (field_expression "p->aBuffer" identifier -> field_identifier) + (field_expression "p->iBufEnd" identifier -> field_identifier)) , (binary_expression "pData + (nData - iVar6)" identifier + (parenthesized_expression "(nData - iVar6)" ( (binary_expression "nData - iVar6" identifier - identifier) ))) ))) ;) (expression_statement "iVar6 = iVar6 - iVar5;" (assignment_expression "iVar6 = iVar6 - iVar5" identifier = (binary_expression "iVar6 - iVar5" identifier - identifier)) ;) (expression_statement "iVar4 = p->nBuffer;" (assignment_expression "iVar4 = p->nBuffer" identifier = (field_expression "p->nBuffer" identifier -> field_identifier)) ;) (expression_statement "iVar5 = iVar5 + p->iBufEnd;" (assignment_expression "iVar5 = iVar5 + p->iBufEnd" identifier = (binary_expression "iVar5 + p->iBufEnd" identifier + (field_expression "p->iBufEnd" identifier -> field_identifier))) ;) (expression_statement "p->iBufEnd = iVar5;" (assignment_expression "p->iBufEnd = iVar5" (field_expression "p->iBufEnd" identifier -> field_identifier) = identifier) ;) (if_statement "if (iVar5 == iVar4) {\n        uVar1 = p->iBufStart;\n        uVar2 = uVar1 + (int)p->iWriteOff;\n        iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));\n        iVar4 = p->nBuffer;\n        uVar2 = (uint)p->iWriteOff;\n        iVar3 = *(int *)&p->iWriteOff;\n        p->eFWErr = iVar5;\n        uVar1 = uVar2 + iVar4;\n        p->iBufEnd = 0;\n        p->iBufStart = 0;\n        *(uint *)((int)&p->iWriteOff + 4) = uVar1;\n        *(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);\n      }" if (parenthesized_expression "(iVar5 == iVar4)" ( (binary_expression "iVar5 == iVar4" identifier == identifier) )) (compound_statement "{\n        uVar1 = p->iBufStart;\n        uVar2 = uVar1 + (int)p->iWriteOff;\n        iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));\n        iVar4 = p->nBuffer;\n        uVar2 = (uint)p->iWriteOff;\n        iVar3 = *(int *)&p->iWriteOff;\n        p->eFWErr = iVar5;\n        uVar1 = uVar2 + iVar4;\n        p->iBufEnd = 0;\n        p->iBufStart = 0;\n        *(uint *)((int)&p->iWriteOff + 4) = uVar1;\n        *(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);\n      }" { (expression_statement "uVar1 = p->iBufStart;" (assignment_expression "uVar1 = p->iBufStart" identifier = (field_expression "p->iBufStart" identifier -> field_identifier)) ;) (expression_statement "uVar2 = uVar1 + (int)p->iWriteOff;" (assignment_expression "uVar2 = uVar1 + (int)p->iWriteOff" identifier = (binary_expression "uVar1 + (int)p->iWriteOff" identifier + (cast_expression "(int)p->iWriteOff" ( (type_descriptor "int" primitive_type) ) (field_expression "p->iWriteOff" identifier -> field_identifier)))) ;) (expression_statement "iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2));" (assignment_expression "iVar5 = (*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2))" identifier = (call_expression "(*p->pFd->pMethods->xWrite)\n                          (p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2))" (parenthesized_expression "(*p->pFd->pMethods->xWrite)" ( (pointer_expression "*p->pFd->pMethods->xWrite" * (field_expression "p->pFd->pMethods->xWrite" (field_expression "p->pFd->pMethods" (field_expression "p->pFd" identifier -> field_identifier) -> field_identifier) -> field_identifier)) )) (argument_list "(p->pFd,p->aBuffer + uVar1,iVar4 - uVar1,\n                           CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2))" ( (field_expression "p->pFd" identifier -> field_identifier) , (binary_expression "p->aBuffer + uVar1" (field_expression "p->aBuffer" identifier -> field_identifier) + identifier) , (binary_expression "iVar4 - uVar1" identifier - identifier) , (call_expression "CONCAT44((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2)" identifier (argument_list "((uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff,uVar2)" ( (binary_expression "(uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f) + *(int *)&p->iWriteOff" (binary_expression "(uint)(uVar2 < uVar1) +\n                                    ((int)uVar1 >> 0x1f)" (call_expression "(uint)(uVar2 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) ))) + (parenthesized_expression "((int)uVar1 >> 0x1f)" ( (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) + (pointer_expression "*(int *)&p->iWriteOff" * (cast_expression "(int *)&p->iWriteOff" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&p->iWriteOff" & (field_expression "p->iWriteOff" identifier -> field_identifier))))) , identifier ))) )))) ;) (expression_statement "iVar4 = p->nBuffer;" (assignment_expression "iVar4 = p->nBuffer" identifier = (field_expression "p->nBuffer" identifier -> field_identifier)) ;) (expression_statement "uVar2 = (uint)p->iWriteOff;" (assignment_expression "uVar2 = (uint)p->iWriteOff" identifier = (cast_expression "(uint)p->iWriteOff" ( (type_descriptor "uint" type_identifier) ) (field_expression "p->iWriteOff" identifier -> field_identifier))) ;) (expression_statement "iVar3 = *(int *)&p->iWriteOff;" (assignment_expression "iVar3 = *(int *)&p->iWriteOff" identifier = (pointer_expression "*(int *)&p->iWriteOff" * (cast_expression "(int *)&p->iWriteOff" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&p->iWriteOff" & (field_expression "p->iWriteOff" identifier -> field_identifier))))) ;) (expression_statement "p->eFWErr = iVar5;" (assignment_expression "p->eFWErr = iVar5" (field_expression "p->eFWErr" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar1 = uVar2 + iVar4;" (assignment_expression "uVar1 = uVar2 + iVar4" identifier = (binary_expression "uVar2 + iVar4" identifier + identifier)) ;) (expression_statement "p->iBufEnd = 0;" (assignment_expression "p->iBufEnd = 0" (field_expression "p->iBufEnd" identifier -> field_identifier) = number_literal) ;) (expression_statement "p->iBufStart = 0;" (assignment_expression "p->iBufStart = 0" (field_expression "p->iBufStart" identifier -> field_identifier) = number_literal) ;) (expression_statement "*(uint *)((int)&p->iWriteOff + 4) = uVar1;" (assignment_expression "*(uint *)((int)&p->iWriteOff + 4) = uVar1" (pointer_expression "*(uint *)((int)&p->iWriteOff + 4)" * (cast_expression "(uint *)((int)&p->iWriteOff + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&p->iWriteOff + 4)" ( (binary_expression "(int)&p->iWriteOff + 4" (cast_expression "(int)&p->iWriteOff" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&p->iWriteOff" & (field_expression "p->iWriteOff" identifier -> field_identifier))) + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f);" (assignment_expression "*(uint *)&p->iWriteOff = (uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f)" (pointer_expression "*(uint *)&p->iWriteOff" * (cast_expression "(uint *)&p->iWriteOff" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&p->iWriteOff" & (field_expression "p->iWriteOff" identifier -> field_identifier)))) = (binary_expression "(uint)(uVar1 < uVar2) + iVar3 + (iVar4 >> 0x1f)" (binary_expression "(uint)(uVar1 < uVar2) + iVar3" (call_expression "(uint)(uVar1 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 < uVar2)" ( (binary_expression "uVar1 < uVar2" identifier < identifier) ))) + identifier) + (parenthesized_expression "(iVar4 >> 0x1f)" ( (binary_expression "iVar4 >> 0x1f" identifier >> number_literal) )))) ;) })) }) while (parenthesized_expression "((0 < iVar6) && (p->eFWErr == 0))" ( (binary_expression "(0 < iVar6) && (p->eFWErr == 0)" (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) && (parenthesized_expression "(p->eFWErr == 0)" ( (binary_expression "p->eFWErr == 0" (field_expression "p->eFWErr" identifier -> field_identifier) == number_literal) ))) )) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00025910(int *param_1,int param_2,int param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }\n  return;\n}\n\n" (function_definition "void FUN_00025910(int *param_1,int param_2,int param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00025910(int *param_1,int param_2,int param_3)" identifier (parameter_list "(int *param_1,int param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (if_statement "if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }" if (parenthesized_expression "((0 < param_3) && (*param_1 == 0))" ( (binary_expression "(0 < param_3) && (*param_1 == 0)" (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) )) && (parenthesized_expression "(*param_1 == 0)" ( (binary_expression "*param_1 == 0" (pointer_expression "*param_1" * identifier) == number_literal) ))) )) (compound_statement "{\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }" { (expression_statement "iVar3 = param_1[2];" (assignment_expression "iVar3 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = param_3;" (assignment_expression "iVar6 = param_3" identifier = identifier) ;) (do_statement "do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));" do (compound_statement "{\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    }" { (expression_statement "iVar4 = iVar3 - param_1[4];" (assignment_expression "iVar4 = iVar3 - param_1[4]" identifier = (binary_expression "iVar3 - param_1[4]" identifier - (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (if_statement "if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }" if (parenthesized_expression "(iVar6 < iVar4)" ( (binary_expression "iVar6 < iVar4" identifier < identifier) )) (compound_statement "{\n        iVar4 = iVar6;\n      }" { (expression_statement "iVar4 = iVar6;" (assignment_expression "iVar4 = iVar6" identifier = identifier) ;) })) (expression_statement "(*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));" (call_expression "(*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6))" (parenthesized_expression "(*(code *)PTR_memcpy_000f556c)" ( (pointer_expression "*(code *)PTR_memcpy_000f556c" * (cast_expression "(code *)PTR_memcpy_000f556c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1[1] + param_1[4],param_2 + (param_3 - iVar6))" ( (binary_expression "param_1[1] + param_1[4]" (subscript_expression "param_1[1]" identifier [ number_literal ]) + (subscript_expression "param_1[4]" identifier [ number_literal ])) , (binary_expression "param_2 + (param_3 - iVar6)" identifier + (parenthesized_expression "(param_3 - iVar6)" ( (binary_expression "param_3 - iVar6" identifier - identifier) ))) ))) ;) (expression_statement "iVar1 = param_1[4];" (assignment_expression "iVar1 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = iVar6 - iVar4;" (assignment_expression "iVar6 = iVar6 - iVar4" identifier = (binary_expression "iVar6 - iVar4" identifier - identifier)) ;) (expression_statement "iVar3 = param_1[2];" (assignment_expression "iVar3 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "param_1[4] = iVar4 + iVar1;" (assignment_expression "param_1[4] = iVar4 + iVar1" (subscript_expression "param_1[4]" identifier [ number_literal ]) = (binary_expression "iVar4 + iVar1" identifier + identifier)) ;) (if_statement "if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }" if (parenthesized_expression "(iVar4 + iVar1 == iVar3)" ( (binary_expression "iVar4 + iVar1 == iVar3" (binary_expression "iVar4 + iVar1" identifier + identifier) == identifier) )) (compound_statement "{\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }" { (expression_statement "uVar2 = param_1[3];" (assignment_expression "uVar2 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "uVar5 = (uint)(uVar2 + param_1[7] < uVar2);" (assignment_expression "uVar5 = (uint)(uVar2 + param_1[7] < uVar2)" identifier = (call_expression "(uint)(uVar2 + param_1[7] < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 + param_1[7] < uVar2)" ( (binary_expression "uVar2 + param_1[7] < uVar2" (binary_expression "uVar2 + param_1[7]" identifier + (subscript_expression "param_1[7]" identifier [ number_literal ])) < identifier) )))) ;) (expression_statement "iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);" (assignment_expression "iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7])" identifier = (call_expression "(**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7])" (parenthesized_expression "(**(code **)(*(int *)param_1[8] + 0xc))" ( (pointer_expression "**(code **)(*(int *)param_1[8] + 0xc)" * (pointer_expression "*(code **)(*(int *)param_1[8] + 0xc)" * (cast_expression "(code **)(*(int *)param_1[8] + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)param_1[8] + 0xc)" ( (binary_expression "*(int *)param_1[8] + 0xc" (pointer_expression "*(int *)param_1[8]" * (cast_expression "(int *)param_1[8]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ]))) + number_literal) ))))) )) (argument_list "((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7])" ( (cast_expression "(int *)param_1[8]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ])) , (binary_expression "param_1[1] + uVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) + identifier) , (binary_expression "iVar3 - uVar2" identifier - identifier) , identifier , (binary_expression "uVar5 + ((int)uVar2 >> 0x1f) + param_1[6]" (binary_expression "uVar5 + ((int)uVar2 >> 0x1f)" identifier + (parenthesized_expression "((int)uVar2 >> 0x1f)" ( (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) + (subscript_expression "param_1[6]" identifier [ number_literal ])) , (binary_expression "uVar2 + param_1[7]" identifier + (subscript_expression "param_1[7]" identifier [ number_literal ])) )))) ;) (expression_statement "iVar3 = param_1[2];" (assignment_expression "iVar3 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "uVar5 = param_1[7];" (assignment_expression "uVar5 = param_1[7]" identifier = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) (expression_statement "*param_1 = iVar4;" (assignment_expression "*param_1 = iVar4" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "uVar2 = uVar5 + iVar3;" (assignment_expression "uVar2 = uVar5 + iVar3" identifier = (binary_expression "uVar5 + iVar3" identifier + identifier)) ;) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = uVar2;" (assignment_expression "param_1[7] = uVar2" (subscript_expression "param_1[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);" (assignment_expression "param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f)" (subscript_expression "param_1[6]" identifier [ number_literal ]) = (binary_expression "(uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f)" (binary_expression "(uint)(uVar2 < uVar5) + param_1[6]" (call_expression "(uint)(uVar2 < uVar5)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar5)" ( (binary_expression "uVar2 < uVar5" identifier < identifier) ))) + (subscript_expression "param_1[6]" identifier [ number_literal ])) + (parenthesized_expression "(iVar3 >> 0x1f)" ( (binary_expression "iVar3 >> 0x1f" identifier >> number_literal) )))) ;) })) }) while (parenthesized_expression "((0 < iVar6) && (*param_1 == 0))" ( (binary_expression "(0 < iVar6) && (*param_1 == 0)" (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) && (parenthesized_expression "(*param_1 == 0)" ( (binary_expression "*param_1 == 0" (pointer_expression "*param_1" * identifier) == number_literal) ))) )) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + (subscript_expression IDENT [ LIT ])) , (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - IDENT) ))) ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT + (subscript_expression IDENT [ LIT ])) < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) , (binary_expression IDENT - IDENT) , IDENT , (binary_expression (binary_expression IDENT + (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) + (subscript_expression IDENT [ LIT ])) , (binary_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 (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + (subscript_expression IDENT [ LIT ])) + (parenthesized_expression ( (binary_expression IDENT >> LIT) )))) ;) })) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) ))) )) ;) (return_statement return ;) })) (return_statement return ;) })))
(function_definition "void FUN_00025910(int *param_1,int param_2,int param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00025910(int *param_1,int param_2,int param_3)" (identifier "FUN_00025910") (parameter_list "(int *param_1,int param_2,int param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (if_statement "if ((0 < param_3) && (*param_1 == 0)) {\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }" (if "if") (parenthesized_expression "((0 < param_3) && (*param_1 == 0))" (( "(") (binary_expression "(0 < param_3) && (*param_1 == 0)" (parenthesized_expression "(0 < param_3)" (( "(") (binary_expression "0 < param_3" (number_literal "0") (< "<") (identifier "param_3")) () ")")) (&& "&&") (parenthesized_expression "(*param_1 == 0)" (( "(") (binary_expression "*param_1 == 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    iVar3 = param_1[2];\n    iVar6 = param_3;\n    do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));\n    return;\n  }" ({ "{") (expression_statement "iVar3 = param_1[2];" (assignment_expression "iVar3 = param_1[2]" (identifier "iVar3") (= "=") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "iVar6 = param_3;" (assignment_expression "iVar6 = param_3" (identifier "iVar6") (= "=") (identifier "param_3")) (; ";")) (do_statement "do {\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    } while ((0 < iVar6) && (*param_1 == 0));" (do "do") (compound_statement "{\n      iVar4 = iVar3 - param_1[4];\n      if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }\n      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));\n      iVar1 = param_1[4];\n      iVar6 = iVar6 - iVar4;\n      iVar3 = param_1[2];\n      param_1[4] = iVar4 + iVar1;\n      if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }\n    }" ({ "{") (expression_statement "iVar4 = iVar3 - param_1[4];" (assignment_expression "iVar4 = iVar3 - param_1[4]" (identifier "iVar4") (= "=") (binary_expression "iVar3 - param_1[4]" (identifier "iVar3") (- "-") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")))) (; ";")) (if_statement "if (iVar6 < iVar4) {\n        iVar4 = iVar6;\n      }" (if "if") (parenthesized_expression "(iVar6 < iVar4)" (( "(") (binary_expression "iVar6 < iVar4" (identifier "iVar6") (< "<") (identifier "iVar4")) () ")")) (compound_statement "{\n        iVar4 = iVar6;\n      }" ({ "{") (expression_statement "iVar4 = iVar6;" (assignment_expression "iVar4 = iVar6" (identifier "iVar4") (= "=") (identifier "iVar6")) (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));" (call_expression "(*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6))" (parenthesized_expression "(*(code *)PTR_memcpy_000f556c)" (( "(") (pointer_expression "*(code *)PTR_memcpy_000f556c" (* "*") (cast_expression "(code *)PTR_memcpy_000f556c" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_memcpy_000f556c"))) () ")")) (argument_list "(param_1[1] + param_1[4],param_2 + (param_3 - iVar6))" (( "(") (binary_expression "param_1[1] + param_1[4]" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (+ "+") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (, ",") (binary_expression "param_2 + (param_3 - iVar6)" (identifier "param_2") (+ "+") (parenthesized_expression "(param_3 - iVar6)" (( "(") (binary_expression "param_3 - iVar6" (identifier "param_3") (- "-") (identifier "iVar6")) () ")"))) () ")"))) (; ";")) (expression_statement "iVar1 = param_1[4];" (assignment_expression "iVar1 = param_1[4]" (identifier "iVar1") (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "iVar6 = iVar6 - iVar4;" (assignment_expression "iVar6 = iVar6 - iVar4" (identifier "iVar6") (= "=") (binary_expression "iVar6 - iVar4" (identifier "iVar6") (- "-") (identifier "iVar4"))) (; ";")) (expression_statement "iVar3 = param_1[2];" (assignment_expression "iVar3 = param_1[2]" (identifier "iVar3") (= "=") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "param_1[4] = iVar4 + iVar1;" (assignment_expression "param_1[4] = iVar4 + iVar1" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (binary_expression "iVar4 + iVar1" (identifier "iVar4") (+ "+") (identifier "iVar1"))) (; ";")) (if_statement "if (iVar4 + iVar1 == iVar3) {\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }" (if "if") (parenthesized_expression "(iVar4 + iVar1 == iVar3)" (( "(") (binary_expression "iVar4 + iVar1 == iVar3" (binary_expression "iVar4 + iVar1" (identifier "iVar4") (+ "+") (identifier "iVar1")) (== "==") (identifier "iVar3")) () ")")) (compound_statement "{\n        uVar2 = param_1[3];\n        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);\n        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);\n        iVar3 = param_1[2];\n        uVar5 = param_1[7];\n        *param_1 = iVar4;\n        uVar2 = uVar5 + iVar3;\n        param_1[4] = 0;\n        param_1[3] = 0;\n        param_1[7] = uVar2;\n        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);\n      }" ({ "{") (expression_statement "uVar2 = param_1[3];" (assignment_expression "uVar2 = param_1[3]" (identifier "uVar2") (= "=") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "uVar5 = (uint)(uVar2 + param_1[7] < uVar2);" (assignment_expression "uVar5 = (uint)(uVar2 + param_1[7] < uVar2)" (identifier "uVar5") (= "=") (call_expression "(uint)(uVar2 + param_1[7] < uVar2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar2 + param_1[7] < uVar2)" (( "(") (binary_expression "uVar2 + param_1[7] < uVar2" (binary_expression "uVar2 + param_1[7]" (identifier "uVar2") (+ "+") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]"))) (< "<") (identifier "uVar2")) () ")")))) (; ";")) (expression_statement "iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);" (assignment_expression "iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7])" (identifier "iVar4") (= "=") (call_expression "(**(code **)(*(int *)param_1[8] + 0xc))\n                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7])" (parenthesized_expression "(**(code **)(*(int *)param_1[8] + 0xc))" (( "(") (pointer_expression "**(code **)(*(int *)param_1[8] + 0xc)" (* "*") (pointer_expression "*(code **)(*(int *)param_1[8] + 0xc)" (* "*") (cast_expression "(code **)(*(int *)param_1[8] + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)param_1[8] + 0xc)" (( "(") (binary_expression "*(int *)param_1[8] + 0xc" (pointer_expression "*(int *)param_1[8]" (* "*") (cast_expression "(int *)param_1[8]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")))) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,\n                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7])" (( "(") (cast_expression "(int *)param_1[8]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]"))) (, ",") (binary_expression "param_1[1] + uVar2" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (+ "+") (identifier "uVar2")) (, ",") (binary_expression "iVar3 - uVar2" (identifier "iVar3") (- "-") (identifier "uVar2")) (, ",") (identifier "uVar5") (, ",") (binary_expression "uVar5 + ((int)uVar2 >> 0x1f) + param_1[6]" (binary_expression "uVar5 + ((int)uVar2 >> 0x1f)" (identifier "uVar5") (+ "+") (parenthesized_expression "((int)uVar2 >> 0x1f)" (( "(") (binary_expression "(int)uVar2 >> 0x1f" (cast_expression "(int)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar2")) (>> ">>") (number_literal "0x1f")) () ")"))) (+ "+") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (, ",") (binary_expression "uVar2 + param_1[7]" (identifier "uVar2") (+ "+") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]"))) () ")")))) (; ";")) (expression_statement "iVar3 = param_1[2];" (assignment_expression "iVar3 = param_1[2]" (identifier "iVar3") (= "=") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "uVar5 = param_1[7];" (assignment_expression "uVar5 = param_1[7]" (identifier "uVar5") (= "=") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]"))) (; ";")) (expression_statement "*param_1 = iVar4;" (assignment_expression "*param_1 = iVar4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "iVar4")) (; ";")) (expression_statement "uVar2 = uVar5 + iVar3;" (assignment_expression "uVar2 = uVar5 + iVar3" (identifier "uVar2") (= "=") (binary_expression "uVar5 + iVar3" (identifier "uVar5") (+ "+") (identifier "iVar3"))) (; ";")) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[7] = uVar2;" (assignment_expression "param_1[7] = uVar2" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);" (assignment_expression "param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f)" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (binary_expression "(uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f)" (binary_expression "(uint)(uVar2 < uVar5) + param_1[6]" (call_expression "(uint)(uVar2 < uVar5)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar2 < uVar5)" (( "(") (binary_expression "uVar2 < uVar5" (identifier "uVar2") (< "<") (identifier "uVar5")) () ")"))) (+ "+") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (+ "+") (parenthesized_expression "(iVar3 >> 0x1f)" (( "(") (binary_expression "iVar3 >> 0x1f" (identifier "iVar3") (>> ">>") (number_literal "0x1f")) () ")")))) (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "((0 < iVar6) && (*param_1 == 0))" (( "(") (binary_expression "(0 < iVar6) && (*param_1 == 0)" (parenthesized_expression "(0 < iVar6)" (( "(") (binary_expression "0 < iVar6" (number_literal "0") (< "<") (identifier "iVar6")) () ")")) (&& "&&") (parenthesized_expression "(*param_1 == 0)" (( "(") (binary_expression "*param_1 == 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (number_literal "0")) () ")"))) () ")")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 *p,type_2 *var_5,int var_1)

{
  type_3 var_6;
  type_3 var_8;
  int var_9;
  int var_2;
  int var_4;
  int var_3;
  
  if ((0 < var_1) && (p->eFWErr == 0)) {
    var_2 = p->nBuffer;
    var_3 = var_1;
    do {
      var_4 = var_2 - p->iBufEnd;
      if (var_3 < var_4) {
        var_4 = var_3;
      }
      (*(type_4 *)PTR_memcpy_000f556c)(p->aBuffer + p->iBufEnd,var_5 + (var_1 - var_3));
      var_3 = var_3 - var_4;
      var_2 = p->nBuffer;
      var_4 = var_4 + p->iBufEnd;
      p->iBufEnd = var_4;
      if (var_4 == var_2) {
        var_6 = p->iBufStart;
        var_8 = var_6 + (int)p->iWriteOff;
        var_4 = (*p->pFd->pMethods->xWrite)
                          (p->pFd,p->aBuffer + var_6,var_2 - var_6,
                           var_7((type_3)(var_8 < var_6) +
                                    ((int)var_6 >> 0x1f) + *(int *)&p->iWriteOff,var_8));
        var_2 = p->nBuffer;
        var_8 = (type_3)p->iWriteOff;
        var_9 = *(int *)&p->iWriteOff;
        p->eFWErr = var_4;
        var_6 = var_8 + var_2;
        p->iBufEnd = 0;
        p->iBufStart = 0;
        *(type_3 *)((int)&p->iWriteOff + 4) = var_6;
        *(type_3 *)&p->iWriteOff = (type_3)(var_6 < var_8) + var_9 + (var_2 >> 0x1f);
      }
    } while ((0 < var_3) && (p->eFWErr == 0));
    return;
  }
  return;
}


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

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

{
  int iVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  
  if ((0 < param_3) && (*param_1 == 0)) {
    iVar3 = param_1[2];
    iVar6 = param_3;
    do {
      iVar4 = iVar3 - param_1[4];
      if (iVar6 < iVar4) {
        iVar4 = iVar6;
      }
      (*(code *)PTR_memcpy_000f556c)(param_1[1] + param_1[4],param_2 + (param_3 - iVar6));
      iVar1 = param_1[4];
      iVar6 = iVar6 - iVar4;
      iVar3 = param_1[2];
      param_1[4] = iVar4 + iVar1;
      if (iVar4 + iVar1 == iVar3) {
        uVar2 = param_1[3];
        uVar5 = (uint)(uVar2 + param_1[7] < uVar2);
        iVar4 = (**(code **)(*(int *)param_1[8] + 0xc))
                          ((int *)param_1[8],param_1[1] + uVar2,iVar3 - uVar2,uVar5,
                           uVar5 + ((int)uVar2 >> 0x1f) + param_1[6],uVar2 + param_1[7]);
        iVar3 = param_1[2];
        uVar5 = param_1[7];
        *param_1 = iVar4;
        uVar2 = uVar5 + iVar3;
        param_1[4] = 0;
        param_1[3] = 0;
        param_1[7] = uVar2;
        param_1[6] = (uint)(uVar2 < uVar5) + param_1[6] + (iVar3 >> 0x1f);
      }
    } while ((0 < iVar6) && (*param_1 == 0));
    return;
  }
  return;
}

