
/* WARNING: Type propagation algorithm not settling */

int whereRangeVectorLen(Parse *pParse,int iCur,Index *pIdx,int nEq,WhereTerm *pTerm)

{
  byte *pbVar1;
  undefined *puVar2;
  u8 uVar9;
  int iVar3;
  code *pcVar4;
  code *pcVar5;
  code *pcVar6;
  undefined4 uVar7;
  undefined4 *puVar8;
  byte *pbVar10;
  byte *pbVar11;
  Expr *pEVar12;
  Select *pSVar13;
  uint uVar14;
  int iVar15;
  Expr *pEVar16;
  char *pcVar17;
  int iVar18;
  undefined4 uVar19;
  int iVar20;
  int iVar21;
  
  puVar2 = PTR_DAT_0015b694;
  pEVar16 = pTerm->pExpr->pLeft;
  uVar9 = pEVar16->op;
  if (uVar9 == 0xa4) {
    uVar9 = pEVar16->op2;
  }
  if (uVar9 == 0xa5) {
    iVar15 = ((pEVar16->x).pList)->nExpr;
  }
  else {
    if (uVar9 != '\x7f') {
      return 1;
    }
    iVar15 = ((pEVar16->x).pSelect)->pEList->nExpr;
  }
  iVar3 = (uint)pIdx->nColumn - nEq;
  if (iVar3 <= iVar15) {
    iVar15 = iVar3;
  }
  if (iVar15 < 2) {
    return 1;
  }
  iVar20 = 1;
  pEVar12 = pTerm->pExpr->pRight;
  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);
  iVar18 = nEq + 1;
  pSVar13 = (pEVar12->x).pSelect;
  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);
  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);
  iVar3 = 0x14;
  pcVar17 = (char *)((pEVar16->x).pSelect)->addrOpenEphm[0];
  if ((pEVar12->flags & 0x800) == 0) goto LAB_00077b60;
  do {
    uVar19 = *(undefined4 *)((int)&pSVar13->pEList->a[0].pExpr + iVar3);
    iVar21 = iVar20;
    while( true ) {
      if (*pcVar17 != -0x62) {
        return iVar21;
      }
      if (*(int *)(pcVar17 + 0x1c) != iCur) {
        return iVar21;
      }
      if (*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18]) {
        return iVar21;
      }
      if (pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq]) {
        return iVar21;
      }
      uVar7 = (*pcVar4)(pcVar17);
      iVar3 = (*pcVar5)(uVar19,uVar7);
      if (*(int *)(pcVar17 + 0x20) < 0) {
        iVar20 = 0x44;
      }
      else {
        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;
      }
      if (iVar3 != iVar20) {
        return iVar21;
      }
      puVar8 = (undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19);
      if (puVar8 == (undefined4 *)0x0) {
        return iVar21;
      }
      pbVar10 = (byte *)*puVar8;
      uVar14 = (uint)*pbVar10;
      pbVar11 = (byte *)pIdx->azColl[iVar18];
      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {
        return iVar21;
      }
      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {
        pbVar1 = pbVar11 + 1;
        uVar14 = (uint)*pbVar10;
        pbVar11 = pbVar11 + 1;
        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {
          return iVar21;
        }
      }
      iVar20 = iVar21 + 1;
      iVar18 = iVar18 + 1;
      if (iVar15 == iVar20) {
        return iVar20;
      }
      iVar3 = iVar21 * 0x14 + 0x14;
      pEVar16 = pTerm->pExpr->pRight;
      pSVar13 = (pEVar16->x).pSelect;
      pcVar17 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg;
      if ((pEVar16->flags & 0x800) != 0) break;
LAB_00077b60:
      uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14);
      iVar21 = iVar20;
    }
  } while( true );
}



int FUN_000778c0(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)

{
  byte *pbVar1;
  undefined *puVar2;
  char cVar9;
  int iVar3;
  code *pcVar4;
  code *pcVar5;
  code *pcVar6;
  undefined4 uVar7;
  undefined4 *puVar8;
  byte *pbVar10;
  byte *pbVar11;
  int iVar12;
  int *piVar13;
  uint uVar14;
  int iVar15;
  char *pcVar16;
  int iVar17;
  undefined4 uVar18;
  int iVar19;
  
  puVar2 = PTR_DAT_0015b694;
  pcVar16 = *(char **)(*param_5 + 0xc);
  cVar9 = *pcVar16;
  if (cVar9 == -0x5c) {
    cVar9 = pcVar16[0x28];
  }
  if (cVar9 == -0x5b) {
    iVar15 = **(int **)(pcVar16 + 0x14);
  }
  else {
    if (cVar9 != '\x7f') {
      return 1;
    }
    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);
  }
  iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;
  if (iVar3 <= iVar15) {
    iVar15 = iVar3;
  }
  if (iVar15 < 2) {
    return 1;
  }
  iVar19 = 1;
  iVar12 = *(int *)(*param_5 + 0x10);
  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);
  iVar17 = param_4 + 1;
  piVar13 = *(int **)(iVar12 + 0x14);
  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);
  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);
  iVar3 = 0x14;
  pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);
  if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;
  do {
    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);
    while( true ) {
      if (*pcVar16 != -0x62) {
        return iVar19;
      }
      if (*(int *)(pcVar16 + 0x1c) != param_2) {
        return iVar19;
      }
      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {
        return iVar19;
      }
      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=
          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {
        return iVar19;
      }
      uVar7 = (*pcVar4)(pcVar16);
      iVar3 = (*pcVar5)(uVar18,uVar7);
      if (*(int *)(pcVar16 + 0x20) < 0) {
        iVar12 = 0x44;
      }
      else {
        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +
                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);
      }
      if (iVar3 != iVar12) {
        return iVar19;
      }
      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);
      if (puVar8 == (undefined4 *)0x0) {
        return iVar19;
      }
      pbVar10 = (byte *)*puVar8;
      uVar14 = (uint)*pbVar10;
      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);
      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {
        return iVar19;
      }
      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {
        pbVar1 = pbVar11 + 1;
        uVar14 = (uint)*pbVar10;
        pbVar11 = pbVar11 + 1;
        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {
          return iVar19;
        }
      }
      iVar19 = iVar19 + 1;
      iVar17 = iVar17 + 1;
      if (iVar15 == iVar19) {
        return iVar19;
      }
      iVar3 = iVar19 * 0x14;
      iVar12 = *(int *)(*param_5 + 0x10);
      piVar13 = *(int **)(iVar12 + 0x14);
      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);
      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;
LAB_00077b60:
      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);
    }
  } while( true );
}


lui gp,0xf
addiu gp,gp,-0x4310
addu gp,gp,t9
addiu sp,sp,-0x50
li t0,0xa4
lw v0,0x60(sp)
sw gp,0x10(sp)
sw ra,0x4c(sp)
sw s8,0x48(sp)
sw s7,0x44(sp)
sw s6,0x40(sp)
sw s5,0x3c(sp)
sw s4,0x38(sp)
sw s3,0x34(sp)
sw s2,0x30(sp)
sw s1,0x2c(sp)
sw s0,0x28(sp)
lw v1,0x0(v0)
lw t3,0xc(v1)
lbu v0,0x0(t3)
bne v0,t0,0x0007791c
_li t0,0xa5
lbu v0,0x28(t3)
beq v0,t0,0x00077b74
_nop
li t0,0x7f
beq v0,t0,0x00077968
_nop
li s7,0x1
lw ra,0x4c(sp)
or v0,s7,zero
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
lw v0,0x14(t3)
lw v0,0x0(v0)
lw t0,0x0(v0)
lhu v0,0x34(a2)
subu v0,v0,a3
slt s1,t0,v0
movz t0,v0,s1
slti v0,t0,0x2
bne v0,zero,0x00077930
_or s1,t0,zero
lw s4,-0x7f54(gp)
li s7,0x1
or s2,a1,zero
lw a1,0x10(v1)
lw v1,0x14(t3)
or s0,a3,zero
addiu v0,s4,0x5914
lw s8,-0x7f1c(gp)
sw a0,0x24(sp)
or s3,a2,zero
sw v0,0x18(sp)
addiu s5,a3,0x1
lw v0,-0x7f54(gp)
addiu s8,s8,-0x7a28
lw a0,0x4(a1)
lw a1,0x14(a1)
addiu v0,v0,0x5a4c
andi a0,a0,0x800
sw v0,0x1c(sp)
lw v0,-0x7e70(gp)
addiu v0,v0,0x7808
sw v0,0x20(sp)
sll v0,s7,0x2
addu v0,v0,s7
sll v0,v0,0x2
addu v1,v1,v0
beq a0,zero,0x00077b60
_lw s4,0x4(v1)
lw a0,0x0(a1)
addu v0,a0,v0
lw s6,0x4(v0)
lbu a0,0x0(s4)
li v0,0x9e
bne a0,v0,0x00077938
_lw ra,0x4c(sp)
lw v0,0x1c(s4)
bne v0,s2,0x00077938
_sll v0,s5,0x1
lw a0,0x4(s3)
lw a1,0x20(s4)
addu v0,a0,v0
lh v0,0x0(v0)
bne a1,v0,0x0007793c
_or v0,s7,zero
lw v0,0x1c(s3)
addu a0,v0,s5
addu v0,v0,s0
lbu a0,0x0(a0)
lbu v0,0x0(v0)
bne a0,v0,0x00077938
_lw t9,0x18(sp)
jalr t9
_or a0,s4,zero
or a0,s6,zero
lw t9,0x1c(sp)
jalr t9
_or a1,v0,zero
lw a0,0x20(s4)
bltz a0,0x00077b6c
_nop
lw a1,0xc(s3)
sll a0,a0,0x4
lw a1,0x4(a1)
addu a0,a1,a0
lb a0,0xd(a0)
bne v0,a0,0x00077934
_lw t9,0x20(sp)
lw a0,0x24(sp)
or a2,s6,zero
jalr t9
_or a1,s4,zero
beq v0,zero,0x00077938
_lw ra,0x4c(sp)
lw a0,0x20(s3)
sll a1,s5,0x2
lw v1,0x0(v0)
addu a0,a0,a1
lbu a1,0x0(v1)
lw a0,0x0(a0)
addu a2,s8,a1
lbu v0,0x0(a0)
lbu a2,0x0(a2)
addu v0,s8,v0
lbu v0,0x0(v0)
beq v0,a2,0x00077b10
_or v0,s7,zero
b 0x0007793c
_nop
lbu v0,0x1(a0)
lbu a1,0x0(v1)
addu v0,s8,v0
addu a3,s8,a1
lbu v0,0x0(v0)
lbu a3,0x0(a3)
bne a3,v0,0x00077934
_addiu a0,a0,0x1
bne a1,zero,0x00077af0
_addiu v1,v1,0x1
addiu v1,v1,-0x1
addiu s7,s7,0x1
beq s1,s7,0x00077934
_addiu s5,s5,0x1
lw v0,0x60(sp)
lw v1,0x0(v0)
sll v0,s7,0x2
addu v0,v0,s7
lw t3,0xc(v1)
sll v0,v0,0x2
lw a1,0x10(v1)
lw v1,0x14(t3)
lw a0,0x4(a1)
lw a1,0x14(a1)
addu v1,v1,v0
andi a0,a0,0x800
bne a0,zero,0x00077a00
_lw s4,0x4(v1)
addu v0,a1,v0
b 0x00077a0c
_lw s6,0x4(v0)
b 0x00077a94
_li a0,0x44
lw v0,0x14(t3)
b 0x00077974
_lw t0,0x0(v0)
(translation_unit "int FUN_000778c0(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)\n\n{\n  byte *pbVar1;\n  undefined *puVar2;\n  char cVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  int iVar12;\n  int *piVar13;\n  uint uVar14;\n  int iVar15;\n  char *pcVar16;\n  int iVar17;\n  undefined4 uVar18;\n  int iVar19;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pcVar16 = *(char **)(*param_5 + 0xc);\n  cVar9 = *pcVar16;\n  if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }\n  if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }\n  iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar19 = 1;\n  iVar12 = *(int *)(*param_5 + 0x10);\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar17 = param_4 + 1;\n  piVar13 = *(int **)(iVar12 + 0x14);\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);\n  if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );\n}\n\n" (function_definition "int FUN_000778c0(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)\n\n{\n  byte *pbVar1;\n  undefined *puVar2;\n  char cVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  int iVar12;\n  int *piVar13;\n  uint uVar14;\n  int iVar15;\n  char *pcVar16;\n  int iVar17;\n  undefined4 uVar18;\n  int iVar19;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pcVar16 = *(char **)(*param_5 + 0xc);\n  cVar9 = *pcVar16;\n  if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }\n  if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }\n  iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar19 = 1;\n  iVar12 = *(int *)(*param_5 + 0x10);\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar17 = param_4 + 1;\n  piVar13 = *(int **)(iVar12 + 0x14);\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);\n  if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );\n}" primitive_type (function_declarator "FUN_000778c0(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)" identifier (parameter_list "(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int *param_5" primitive_type (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  byte *pbVar1;\n  undefined *puVar2;\n  char cVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  int iVar12;\n  int *piVar13;\n  uint uVar14;\n  int iVar15;\n  char *pcVar16;\n  int iVar17;\n  undefined4 uVar18;\n  int iVar19;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pcVar16 = *(char **)(*param_5 + 0xc);\n  cVar9 = *pcVar16;\n  if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }\n  if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }\n  iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar19 = 1;\n  iVar12 = *(int *)(*param_5 + 0x10);\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar17 = param_4 + 1;\n  piVar13 = *(int **)(iVar12 + 0x14);\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);\n  if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "char cVar9;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "code *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "code *pcVar6;" type_identifier (pointer_declarator "*pcVar6" * identifier) ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "byte *pbVar11;" type_identifier (pointer_declarator "*pbVar11" * identifier) ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "int *piVar13;" primitive_type (pointer_declarator "*piVar13" * identifier) ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "char *pcVar16;" primitive_type (pointer_declarator "*pcVar16" * identifier) ;) (declaration "int iVar17;" primitive_type identifier ;) (declaration "undefined4 uVar18;" type_identifier identifier ;) (declaration "int iVar19;" primitive_type identifier ;) (expression_statement "puVar2 = PTR_DAT_0015b694;" (assignment_expression "puVar2 = PTR_DAT_0015b694" identifier = identifier) ;) (expression_statement "pcVar16 = *(char **)(*param_5 + 0xc);" (assignment_expression "pcVar16 = *(char **)(*param_5 + 0xc)" identifier = (pointer_expression "*(char **)(*param_5 + 0xc)" * (cast_expression "(char **)(*param_5 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_5 + 0xc)" ( (binary_expression "*param_5 + 0xc" (pointer_expression "*param_5" * identifier) + number_literal) ))))) ;) (expression_statement "cVar9 = *pcVar16;" (assignment_expression "cVar9 = *pcVar16" identifier = (pointer_expression "*pcVar16" * identifier)) ;) (if_statement "if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }" if (parenthesized_expression "(cVar9 == -0x5c)" ( (binary_expression "cVar9 == -0x5c" identifier == number_literal) )) (compound_statement "{\n    cVar9 = pcVar16[0x28];\n  }" { (expression_statement "cVar9 = pcVar16[0x28];" (assignment_expression "cVar9 = pcVar16[0x28]" identifier = (subscript_expression "pcVar16[0x28]" identifier [ number_literal ])) ;) })) (if_statement "if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }" if (parenthesized_expression "(cVar9 == -0x5b)" ( (binary_expression "cVar9 == -0x5b" identifier == number_literal) )) (compound_statement "{\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }" { (expression_statement "iVar15 = **(int **)(pcVar16 + 0x14);" (assignment_expression "iVar15 = **(int **)(pcVar16 + 0x14)" identifier = (pointer_expression "**(int **)(pcVar16 + 0x14)" * (pointer_expression "*(int **)(pcVar16 + 0x14)" * (cast_expression "(int **)(pcVar16 + 0x14)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pcVar16 + 0x14)" ( (binary_expression "pcVar16 + 0x14" identifier + number_literal) )))))) ;) }) (else_clause "else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }" else (compound_statement "{\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }" { (if_statement "if (cVar9 != '\x7f') {\n      return 1;\n    }" if (parenthesized_expression "(cVar9 != '\x7f')" ( (binary_expression "cVar9 != '\x7f'" identifier != (char_literal "'\x7f'" ' escape_sequence ')) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);" (assignment_expression "iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14)" identifier = (pointer_expression "*(int *)**(undefined4 **)(pcVar16 + 0x14)" * (cast_expression "(int *)**(undefined4 **)(pcVar16 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(undefined4 **)(pcVar16 + 0x14)" * (pointer_expression "*(undefined4 **)(pcVar16 + 0x14)" * (cast_expression "(undefined4 **)(pcVar16 + 0x14)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pcVar16 + 0x14)" ( (binary_expression "pcVar16 + 0x14" identifier + number_literal) )))))))) ;) }))) (expression_statement "iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;" (assignment_expression "iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4" identifier = (binary_expression "(uint)*(ushort *)(param_3 + 0x34) - param_4" (binary_expression "(uint)*(ushort *)(param_3 + 0x34)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_3 + 0x34)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x34)" ( (binary_expression "param_3 + 0x34" identifier + number_literal) )))) - identifier)) ;) (if_statement "if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }" if (parenthesized_expression "(iVar3 <= iVar15)" ( (binary_expression "iVar3 <= iVar15" identifier <= identifier) )) (compound_statement "{\n    iVar15 = iVar3;\n  }" { (expression_statement "iVar15 = iVar3;" (assignment_expression "iVar15 = iVar3" identifier = identifier) ;) })) (if_statement "if (iVar15 < 2) {\n    return 1;\n  }" if (parenthesized_expression "(iVar15 < 2)" ( (binary_expression "iVar15 < 2" identifier < number_literal) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar19 = 1;" (assignment_expression "iVar19 = 1" identifier = number_literal) ;) (expression_statement "iVar12 = *(int *)(*param_5 + 0x10);" (assignment_expression "iVar12 = *(int *)(*param_5 + 0x10)" identifier = (pointer_expression "*(int *)(*param_5 + 0x10)" * (cast_expression "(int *)(*param_5 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_5 + 0x10)" ( (binary_expression "*param_5 + 0x10" (pointer_expression "*param_5" * identifier) + number_literal) ))))) ;) (expression_statement "pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);" (assignment_expression "pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914)" identifier = (cast_expression "(code *)(PTR_LAB_0015b65c + 0x5914)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015b65c + 0x5914)" ( (binary_expression "PTR_LAB_0015b65c + 0x5914" identifier + number_literal) )))) ;) (expression_statement "iVar17 = param_4 + 1;" (assignment_expression "iVar17 = param_4 + 1" identifier = (binary_expression "param_4 + 1" identifier + number_literal)) ;) (expression_statement "piVar13 = *(int **)(iVar12 + 0x14);" (assignment_expression "piVar13 = *(int **)(iVar12 + 0x14)" identifier = (pointer_expression "*(int **)(iVar12 + 0x14)" * (cast_expression "(int **)(iVar12 + 0x14)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar12 + 0x14)" ( (binary_expression "iVar12 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);" (assignment_expression "pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c)" identifier = (cast_expression "(code *)(PTR_LAB_0015b65c + 0x5a4c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015b65c + 0x5a4c)" ( (binary_expression "PTR_LAB_0015b65c + 0x5a4c" identifier + number_literal) )))) ;) (expression_statement "pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);" (assignment_expression "pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808)" identifier = (cast_expression "(code *)(PTR_LAB_0015b740 + 0x7808)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015b740 + 0x7808)" ( (binary_expression "PTR_LAB_0015b740 + 0x7808" identifier + number_literal) )))) ;) (expression_statement "iVar3 = 0x14;" (assignment_expression "iVar3 = 0x14" identifier = number_literal) ;) (expression_statement "pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);" (assignment_expression "pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18)" identifier = (pointer_expression "*(char **)(*(int *)(pcVar16 + 0x14) + 0x18)" * (cast_expression "(char **)(*(int *)(pcVar16 + 0x14) + 0x18)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(pcVar16 + 0x14) + 0x18)" ( (binary_expression "*(int *)(pcVar16 + 0x14) + 0x18" (pointer_expression "*(int *)(pcVar16 + 0x14)" * (cast_expression "(int *)(pcVar16 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar16 + 0x14)" ( (binary_expression "pcVar16 + 0x14" identifier + number_literal) )))) + number_literal) ))))) ;) (if_statement "if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;" if (parenthesized_expression "((*(uint *)(iVar12 + 4) & 0x800) == 0)" ( (binary_expression "(*(uint *)(iVar12 + 4) & 0x800) == 0" (parenthesized_expression "(*(uint *)(iVar12 + 4) & 0x800)" ( (binary_expression "*(uint *)(iVar12 + 4) & 0x800" (pointer_expression "*(uint *)(iVar12 + 4)" * (cast_expression "(uint *)(iVar12 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar12 + 4)" ( (binary_expression "iVar12 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00077b60;" goto statement_identifier ;)) (do_statement "do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );" do (compound_statement "{\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  }" { (expression_statement "uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);" (assignment_expression "uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4)" identifier = (pointer_expression "*(undefined4 *)(*piVar13 + iVar3 + 4)" * (cast_expression "(undefined4 *)(*piVar13 + iVar3 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar13 + iVar3 + 4)" ( (binary_expression "*piVar13 + iVar3 + 4" (binary_expression "*piVar13 + iVar3" (pointer_expression "*piVar13" * identifier) + identifier) + number_literal) ))))) ;) (while_statement "while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }" { (if_statement "if (*pcVar16 != -0x62) {\n        return iVar19;\n      }" if (parenthesized_expression "(*pcVar16 != -0x62)" ( (binary_expression "*pcVar16 != -0x62" (pointer_expression "*pcVar16" * identifier) != number_literal) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (if_statement "if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }" if (parenthesized_expression "(*(int *)(pcVar16 + 0x1c) != param_2)" ( (binary_expression "*(int *)(pcVar16 + 0x1c) != param_2" (pointer_expression "*(int *)(pcVar16 + 0x1c)" * (cast_expression "(int *)(pcVar16 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar16 + 0x1c)" ( (binary_expression "pcVar16 + 0x1c" identifier + number_literal) )))) != identifier) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (if_statement "if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }" if (parenthesized_expression "(*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2))" ( (binary_expression "*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" (pointer_expression "*(int *)(pcVar16 + 0x20)" * (cast_expression "(int *)(pcVar16 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar16 + 0x20)" ( (binary_expression "pcVar16 + 0x20" identifier + number_literal) )))) != (cast_expression "(int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" * (cast_expression "(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 4) + iVar17 * 2)" ( (binary_expression "*(int *)(param_3 + 4) + iVar17 * 2" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + (binary_expression "iVar17 * 2" identifier * number_literal)) )))))) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (if_statement "if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }" if (parenthesized_expression "(*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4))" ( (binary_expression "*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)" (pointer_expression "*(char *)(*(int *)(param_3 + 0x1c) + iVar17)" * (cast_expression "(char *)(*(int *)(param_3 + 0x1c) + iVar17)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 0x1c) + iVar17)" ( (binary_expression "*(int *)(param_3 + 0x1c) + iVar17" (pointer_expression "*(int *)(param_3 + 0x1c)" * (cast_expression "(int *)(param_3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) + identifier) )))) != (pointer_expression "*(char *)(*(int *)(param_3 + 0x1c) + param_4)" * (cast_expression "(char *)(*(int *)(param_3 + 0x1c) + param_4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 0x1c) + param_4)" ( (binary_expression "*(int *)(param_3 + 0x1c) + param_4" (pointer_expression "*(int *)(param_3 + 0x1c)" * (cast_expression "(int *)(param_3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) + identifier) ))))) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (expression_statement "uVar7 = (*pcVar4)(pcVar16);" (assignment_expression "uVar7 = (*pcVar4)(pcVar16)" identifier = (call_expression "(*pcVar4)(pcVar16)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(pcVar16)" ( identifier )))) ;) (expression_statement "iVar3 = (*pcVar5)(uVar18,uVar7);" (assignment_expression "iVar3 = (*pcVar5)(uVar18,uVar7)" identifier = (call_expression "(*pcVar5)(uVar18,uVar7)" (parenthesized_expression "(*pcVar5)" ( (pointer_expression "*pcVar5" * identifier) )) (argument_list "(uVar18,uVar7)" ( identifier , identifier )))) ;) (if_statement "if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }" if (parenthesized_expression "(*(int *)(pcVar16 + 0x20) < 0)" ( (binary_expression "*(int *)(pcVar16 + 0x20) < 0" (pointer_expression "*(int *)(pcVar16 + 0x20)" * (cast_expression "(int *)(pcVar16 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar16 + 0x20)" ( (binary_expression "pcVar16 + 0x20" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n        iVar12 = 0x44;\n      }" { (expression_statement "iVar12 = 0x44;" (assignment_expression "iVar12 = 0x44" identifier = number_literal) ;) }) (else_clause "else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }" else (compound_statement "{\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }" { (expression_statement "iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);" (assignment_expression "iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" identifier = (cast_expression "(int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" * (cast_expression "(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" ( (binary_expression "*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd" (binary_expression "*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10" (pointer_expression "*(int *)(*(int *)(param_3 + 0xc) + 4)" * (cast_expression "(int *)(*(int *)(param_3 + 0xc) + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 0xc) + 4)" ( (binary_expression "*(int *)(param_3 + 0xc) + 4" (pointer_expression "*(int *)(param_3 + 0xc)" * (cast_expression "(int *)(param_3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xc)" ( (binary_expression "param_3 + 0xc" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "*(int *)(pcVar16 + 0x20) * 0x10" (pointer_expression "*(int *)(pcVar16 + 0x20)" * (cast_expression "(int *)(pcVar16 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar16 + 0x20)" ( (binary_expression "pcVar16 + 0x20" identifier + number_literal) )))) * number_literal)) + number_literal) )))))) ;) }))) (if_statement "if (iVar3 != iVar12) {\n        return iVar19;\n      }" if (parenthesized_expression "(iVar3 != iVar12)" ( (binary_expression "iVar3 != iVar12" identifier != identifier) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (expression_statement "puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);" (assignment_expression "puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18)" identifier = (cast_expression "(undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*pcVar6)(param_1,pcVar16,uVar18)" (parenthesized_expression "(*pcVar6)" ( (pointer_expression "*pcVar6" * identifier) )) (argument_list "(param_1,pcVar16,uVar18)" ( identifier , identifier , identifier ))))) ;) (if_statement "if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }" if (parenthesized_expression "(puVar8 == (undefined4 *)0x0)" ( (binary_expression "puVar8 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (expression_statement "pbVar10 = (byte *)*puVar8;" (assignment_expression "pbVar10 = (byte *)*puVar8" identifier = (cast_expression "(byte *)*puVar8" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar8" * identifier))) ;) (expression_statement "uVar14 = (uint)*pbVar10;" (assignment_expression "uVar14 = (uint)*pbVar10" identifier = (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);" (assignment_expression "pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4)" identifier = (pointer_expression "*(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4)" * (cast_expression "(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_3 + 0x20) + iVar17 * 4)" ( (binary_expression "*(int *)(param_3 + 0x20) + iVar17 * 4" (pointer_expression "*(int *)(param_3 + 0x20)" * (cast_expression "(int *)(param_3 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) + (binary_expression "iVar17 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }" if (parenthesized_expression "(puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28])" ( (binary_expression "puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]" (subscript_expression "puVar2[*pbVar11 - 0x7a28]" identifier [ (binary_expression "*pbVar11 - 0x7a28" (pointer_expression "*pbVar11" * identifier) - number_literal) ]) != (subscript_expression "puVar2[uVar14 - 0x7a28]" identifier [ (binary_expression "uVar14 - 0x7a28" identifier - number_literal) ])) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (while_statement "while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }" while (parenthesized_expression "(pbVar10 = pbVar10 + 1, uVar14 != 0)" ( (comma_expression "pbVar10 = pbVar10 + 1, uVar14 != 0" (assignment_expression "pbVar10 = pbVar10 + 1" identifier = (binary_expression "pbVar10 + 1" identifier + number_literal)) , (binary_expression "uVar14 != 0" identifier != number_literal)) )) (compound_statement "{\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }" { (expression_statement "pbVar1 = pbVar11 + 1;" (assignment_expression "pbVar1 = pbVar11 + 1" identifier = (binary_expression "pbVar11 + 1" identifier + number_literal)) ;) (expression_statement "uVar14 = (uint)*pbVar10;" (assignment_expression "uVar14 = (uint)*pbVar10" identifier = (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar11 = pbVar11 + 1;" (assignment_expression "pbVar11 = pbVar11 + 1" identifier = (binary_expression "pbVar11 + 1" identifier + number_literal)) ;) (if_statement "if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }" if (parenthesized_expression "(puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28])" ( (binary_expression "puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]" (subscript_expression "puVar2[uVar14 - 0x7a28]" identifier [ (binary_expression "uVar14 - 0x7a28" identifier - number_literal) ]) != (subscript_expression "puVar2[*pbVar1 - 0x7a28]" identifier [ (binary_expression "*pbVar1 - 0x7a28" (pointer_expression "*pbVar1" * identifier) - number_literal) ])) )) (compound_statement "{\n          return iVar19;\n        }" { (return_statement "return iVar19;" return identifier ;) })) })) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) (expression_statement "iVar17 = iVar17 + 1;" (assignment_expression "iVar17 = iVar17 + 1" identifier = (binary_expression "iVar17 + 1" identifier + number_literal)) ;) (if_statement "if (iVar15 == iVar19) {\n        return iVar19;\n      }" if (parenthesized_expression "(iVar15 == iVar19)" ( (binary_expression "iVar15 == iVar19" identifier == identifier) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (expression_statement "iVar3 = iVar19 * 0x14;" (assignment_expression "iVar3 = iVar19 * 0x14" identifier = (binary_expression "iVar19 * 0x14" identifier * number_literal)) ;) (expression_statement "iVar12 = *(int *)(*param_5 + 0x10);" (assignment_expression "iVar12 = *(int *)(*param_5 + 0x10)" identifier = (pointer_expression "*(int *)(*param_5 + 0x10)" * (cast_expression "(int *)(*param_5 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_5 + 0x10)" ( (binary_expression "*param_5 + 0x10" (pointer_expression "*param_5" * identifier) + number_literal) ))))) ;) (expression_statement "piVar13 = *(int **)(iVar12 + 0x14);" (assignment_expression "piVar13 = *(int **)(iVar12 + 0x14)" identifier = (pointer_expression "*(int **)(iVar12 + 0x14)" * (cast_expression "(int **)(iVar12 + 0x14)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar12 + 0x14)" ( (binary_expression "iVar12 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);" (assignment_expression "pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" identifier = (pointer_expression "*(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" * (cast_expression "(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" ( (binary_expression "*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4" (binary_expression "*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3" (pointer_expression "*(int *)(*(int *)(*param_5 + 0xc) + 0x14)" * (cast_expression "(int *)(*(int *)(*param_5 + 0xc) + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*param_5 + 0xc) + 0x14)" ( (binary_expression "*(int *)(*param_5 + 0xc) + 0x14" (pointer_expression "*(int *)(*param_5 + 0xc)" * (cast_expression "(int *)(*param_5 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_5 + 0xc)" ( (binary_expression "*param_5 + 0xc" (pointer_expression "*param_5" * identifier) + number_literal) )))) + number_literal) )))) + identifier) + number_literal) ))))) ;) (if_statement "if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;" if (parenthesized_expression "((*(uint *)(iVar12 + 4) & 0x800) != 0)" ( (binary_expression "(*(uint *)(iVar12 + 4) & 0x800) != 0" (parenthesized_expression "(*(uint *)(iVar12 + 4) & 0x800)" ( (binary_expression "*(uint *)(iVar12 + 4) & 0x800" (pointer_expression "*(uint *)(iVar12 + 4)" * (cast_expression "(uint *)(iVar12 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar12 + 4)" ( (binary_expression "iVar12 + 4" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);" statement_identifier : (expression_statement "uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);" (assignment_expression "uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4)" identifier = (pointer_expression "*(undefined4 *)((int)piVar13 + iVar3 + 4)" * (cast_expression "(undefined4 *)((int)piVar13 + iVar3 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar13 + iVar3 + 4)" ( (binary_expression "(int)piVar13 + iVar3 + 4" (binary_expression "(int)piVar13 + iVar3" (cast_expression "(int)piVar13" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) ))))) ;)) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n\nint whereRangeVectorLen(Parse *pParse,int iCur,Index *pIdx,int nEq,WhereTerm *pTerm)\n\n{\n  byte *pbVar1;\n  undefined *puVar2;\n  u8 uVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  Expr *pEVar12;\n  Select *pSVar13;\n  uint uVar14;\n  int iVar15;\n  Expr *pEVar16;\n  char *pcVar17;\n  int iVar18;\n  undefined4 uVar19;\n  int iVar20;\n  int iVar21;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pEVar16 = pTerm->pExpr->pLeft;\n  uVar9 = pEVar16->op;\n  if (uVar9 == 0xa4) {\n    uVar9 = pEVar16->op2;\n  }\n  if (uVar9 == 0xa5) {\n    iVar15 = ((pEVar16->x).pList)->nExpr;\n  }\n  else {\n    if (uVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = ((pEVar16->x).pSelect)->pEList->nExpr;\n  }\n  iVar3 = (uint)pIdx->nColumn - nEq;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar20 = 1;\n  pEVar12 = pTerm->pExpr->pRight;\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar18 = nEq + 1;\n  pSVar13 = (pEVar12->x).pSelect;\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar17 = (char *)((pEVar16->x).pSelect)->addrOpenEphm[0];\n  if ((pEVar12->flags & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar19 = *(undefined4 *)((int)&pSVar13->pEList->a[0].pExpr + iVar3);\n    iVar21 = iVar20;\n    while( true ) {\n      if (*pcVar17 != -0x62) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x1c) != iCur) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18]) {\n        return iVar21;\n      }\n      if (pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq]) {\n        return iVar21;\n      }\n      uVar7 = (*pcVar4)(pcVar17);\n      iVar3 = (*pcVar5)(uVar19,uVar7);\n      if (*(int *)(pcVar17 + 0x20) < 0) {\n        iVar20 = 0x44;\n      }\n      else {\n        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;\n      }\n      if (iVar3 != iVar20) {\n        return iVar21;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar21;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = (byte *)pIdx->azColl[iVar18];\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar21;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar21;\n        }\n      }\n      iVar20 = iVar21 + 1;\n      iVar18 = iVar18 + 1;\n      if (iVar15 == iVar20) {\n        return iVar20;\n      }\n      iVar3 = iVar21 * 0x14 + 0x14;\n      pEVar16 = pTerm->pExpr->pRight;\n      pSVar13 = (pEVar16->x).pSelect;\n      pcVar17 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg;\n      if ((pEVar16->flags & 0x800) != 0) break;\nLAB_00077b60:\n      uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14);\n      iVar21 = iVar20;\n    }\n  } while( true );\n}\n\n" comment (function_definition "int whereRangeVectorLen(Parse *pParse,int iCur,Index *pIdx,int nEq,WhereTerm *pTerm)\n\n{\n  byte *pbVar1;\n  undefined *puVar2;\n  u8 uVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  Expr *pEVar12;\n  Select *pSVar13;\n  uint uVar14;\n  int iVar15;\n  Expr *pEVar16;\n  char *pcVar17;\n  int iVar18;\n  undefined4 uVar19;\n  int iVar20;\n  int iVar21;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pEVar16 = pTerm->pExpr->pLeft;\n  uVar9 = pEVar16->op;\n  if (uVar9 == 0xa4) {\n    uVar9 = pEVar16->op2;\n  }\n  if (uVar9 == 0xa5) {\n    iVar15 = ((pEVar16->x).pList)->nExpr;\n  }\n  else {\n    if (uVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = ((pEVar16->x).pSelect)->pEList->nExpr;\n  }\n  iVar3 = (uint)pIdx->nColumn - nEq;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar20 = 1;\n  pEVar12 = pTerm->pExpr->pRight;\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar18 = nEq + 1;\n  pSVar13 = (pEVar12->x).pSelect;\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar17 = (char *)((pEVar16->x).pSelect)->addrOpenEphm[0];\n  if ((pEVar12->flags & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar19 = *(undefined4 *)((int)&pSVar13->pEList->a[0].pExpr + iVar3);\n    iVar21 = iVar20;\n    while( true ) {\n      if (*pcVar17 != -0x62) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x1c) != iCur) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18]) {\n        return iVar21;\n      }\n      if (pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq]) {\n        return iVar21;\n      }\n      uVar7 = (*pcVar4)(pcVar17);\n      iVar3 = (*pcVar5)(uVar19,uVar7);\n      if (*(int *)(pcVar17 + 0x20) < 0) {\n        iVar20 = 0x44;\n      }\n      else {\n        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;\n      }\n      if (iVar3 != iVar20) {\n        return iVar21;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar21;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = (byte *)pIdx->azColl[iVar18];\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar21;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar21;\n        }\n      }\n      iVar20 = iVar21 + 1;\n      iVar18 = iVar18 + 1;\n      if (iVar15 == iVar20) {\n        return iVar20;\n      }\n      iVar3 = iVar21 * 0x14 + 0x14;\n      pEVar16 = pTerm->pExpr->pRight;\n      pSVar13 = (pEVar16->x).pSelect;\n      pcVar17 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg;\n      if ((pEVar16->flags & 0x800) != 0) break;\nLAB_00077b60:\n      uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14);\n      iVar21 = iVar20;\n    }\n  } while( true );\n}" primitive_type (function_declarator "whereRangeVectorLen(Parse *pParse,int iCur,Index *pIdx,int nEq,WhereTerm *pTerm)" identifier (parameter_list "(Parse *pParse,int iCur,Index *pIdx,int nEq,WhereTerm *pTerm)" ( (parameter_declaration "Parse *pParse" type_identifier (pointer_declarator "*pParse" * identifier)) , (parameter_declaration "int iCur" primitive_type identifier) , (parameter_declaration "Index *pIdx" type_identifier (pointer_declarator "*pIdx" * identifier)) , (parameter_declaration "int nEq" primitive_type identifier) , (parameter_declaration "WhereTerm *pTerm" type_identifier (pointer_declarator "*pTerm" * identifier)) ))) (compound_statement "{\n  byte *pbVar1;\n  undefined *puVar2;\n  u8 uVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  Expr *pEVar12;\n  Select *pSVar13;\n  uint uVar14;\n  int iVar15;\n  Expr *pEVar16;\n  char *pcVar17;\n  int iVar18;\n  undefined4 uVar19;\n  int iVar20;\n  int iVar21;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pEVar16 = pTerm->pExpr->pLeft;\n  uVar9 = pEVar16->op;\n  if (uVar9 == 0xa4) {\n    uVar9 = pEVar16->op2;\n  }\n  if (uVar9 == 0xa5) {\n    iVar15 = ((pEVar16->x).pList)->nExpr;\n  }\n  else {\n    if (uVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = ((pEVar16->x).pSelect)->pEList->nExpr;\n  }\n  iVar3 = (uint)pIdx->nColumn - nEq;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar20 = 1;\n  pEVar12 = pTerm->pExpr->pRight;\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar18 = nEq + 1;\n  pSVar13 = (pEVar12->x).pSelect;\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar17 = (char *)((pEVar16->x).pSelect)->addrOpenEphm[0];\n  if ((pEVar12->flags & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar19 = *(undefined4 *)((int)&pSVar13->pEList->a[0].pExpr + iVar3);\n    iVar21 = iVar20;\n    while( true ) {\n      if (*pcVar17 != -0x62) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x1c) != iCur) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18]) {\n        return iVar21;\n      }\n      if (pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq]) {\n        return iVar21;\n      }\n      uVar7 = (*pcVar4)(pcVar17);\n      iVar3 = (*pcVar5)(uVar19,uVar7);\n      if (*(int *)(pcVar17 + 0x20) < 0) {\n        iVar20 = 0x44;\n      }\n      else {\n        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;\n      }\n      if (iVar3 != iVar20) {\n        return iVar21;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar21;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = (byte *)pIdx->azColl[iVar18];\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar21;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar21;\n        }\n      }\n      iVar20 = iVar21 + 1;\n      iVar18 = iVar18 + 1;\n      if (iVar15 == iVar20) {\n        return iVar20;\n      }\n      iVar3 = iVar21 * 0x14 + 0x14;\n      pEVar16 = pTerm->pExpr->pRight;\n      pSVar13 = (pEVar16->x).pSelect;\n      pcVar17 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg;\n      if ((pEVar16->flags & 0x800) != 0) break;\nLAB_00077b60:\n      uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14);\n      iVar21 = iVar20;\n    }\n  } while( true );\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "u8 uVar9;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "code *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "code *pcVar6;" type_identifier (pointer_declarator "*pcVar6" * identifier) ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "byte *pbVar11;" type_identifier (pointer_declarator "*pbVar11" * identifier) ;) (declaration "Expr *pEVar12;" type_identifier (pointer_declarator "*pEVar12" * identifier) ;) (declaration "Select *pSVar13;" type_identifier (pointer_declarator "*pSVar13" * identifier) ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "Expr *pEVar16;" type_identifier (pointer_declarator "*pEVar16" * identifier) ;) (declaration "char *pcVar17;" primitive_type (pointer_declarator "*pcVar17" * identifier) ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "undefined4 uVar19;" type_identifier identifier ;) (declaration "int iVar20;" primitive_type identifier ;) (declaration "int iVar21;" primitive_type identifier ;) (expression_statement "puVar2 = PTR_DAT_0015b694;" (assignment_expression "puVar2 = PTR_DAT_0015b694" identifier = identifier) ;) (expression_statement "pEVar16 = pTerm->pExpr->pLeft;" (assignment_expression "pEVar16 = pTerm->pExpr->pLeft" identifier = (field_expression "pTerm->pExpr->pLeft" (field_expression "pTerm->pExpr" identifier -> field_identifier) -> field_identifier)) ;) (expression_statement "uVar9 = pEVar16->op;" (assignment_expression "uVar9 = pEVar16->op" identifier = (field_expression "pEVar16->op" identifier -> field_identifier)) ;) (if_statement "if (uVar9 == 0xa4) {\n    uVar9 = pEVar16->op2;\n  }" if (parenthesized_expression "(uVar9 == 0xa4)" ( (binary_expression "uVar9 == 0xa4" identifier == number_literal) )) (compound_statement "{\n    uVar9 = pEVar16->op2;\n  }" { (expression_statement "uVar9 = pEVar16->op2;" (assignment_expression "uVar9 = pEVar16->op2" identifier = (field_expression "pEVar16->op2" identifier -> field_identifier)) ;) })) (if_statement "if (uVar9 == 0xa5) {\n    iVar15 = ((pEVar16->x).pList)->nExpr;\n  }\n  else {\n    if (uVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = ((pEVar16->x).pSelect)->pEList->nExpr;\n  }" if (parenthesized_expression "(uVar9 == 0xa5)" ( (binary_expression "uVar9 == 0xa5" identifier == number_literal) )) (compound_statement "{\n    iVar15 = ((pEVar16->x).pList)->nExpr;\n  }" { (expression_statement "iVar15 = ((pEVar16->x).pList)->nExpr;" (assignment_expression "iVar15 = ((pEVar16->x).pList)->nExpr" identifier = (field_expression "((pEVar16->x).pList)->nExpr" (parenthesized_expression "((pEVar16->x).pList)" ( (field_expression "(pEVar16->x).pList" (parenthesized_expression "(pEVar16->x)" ( (field_expression "pEVar16->x" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier)) ;) }) (else_clause "else {\n    if (uVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = ((pEVar16->x).pSelect)->pEList->nExpr;\n  }" else (compound_statement "{\n    if (uVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = ((pEVar16->x).pSelect)->pEList->nExpr;\n  }" { (if_statement "if (uVar9 != '\x7f') {\n      return 1;\n    }" if (parenthesized_expression "(uVar9 != '\x7f')" ( (binary_expression "uVar9 != '\x7f'" identifier != (char_literal "'\x7f'" ' escape_sequence ')) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar15 = ((pEVar16->x).pSelect)->pEList->nExpr;" (assignment_expression "iVar15 = ((pEVar16->x).pSelect)->pEList->nExpr" identifier = (field_expression "((pEVar16->x).pSelect)->pEList->nExpr" (field_expression "((pEVar16->x).pSelect)->pEList" (parenthesized_expression "((pEVar16->x).pSelect)" ( (field_expression "(pEVar16->x).pSelect" (parenthesized_expression "(pEVar16->x)" ( (field_expression "pEVar16->x" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) -> field_identifier)) ;) }))) (expression_statement "iVar3 = (uint)pIdx->nColumn - nEq;" (assignment_expression "iVar3 = (uint)pIdx->nColumn - nEq" identifier = (binary_expression "(uint)pIdx->nColumn - nEq" (cast_expression "(uint)pIdx->nColumn" ( (type_descriptor "uint" type_identifier) ) (field_expression "pIdx->nColumn" identifier -> field_identifier)) - identifier)) ;) (if_statement "if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }" if (parenthesized_expression "(iVar3 <= iVar15)" ( (binary_expression "iVar3 <= iVar15" identifier <= identifier) )) (compound_statement "{\n    iVar15 = iVar3;\n  }" { (expression_statement "iVar15 = iVar3;" (assignment_expression "iVar15 = iVar3" identifier = identifier) ;) })) (if_statement "if (iVar15 < 2) {\n    return 1;\n  }" if (parenthesized_expression "(iVar15 < 2)" ( (binary_expression "iVar15 < 2" identifier < number_literal) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar20 = 1;" (assignment_expression "iVar20 = 1" identifier = number_literal) ;) (expression_statement "pEVar12 = pTerm->pExpr->pRight;" (assignment_expression "pEVar12 = pTerm->pExpr->pRight" identifier = (field_expression "pTerm->pExpr->pRight" (field_expression "pTerm->pExpr" identifier -> field_identifier) -> field_identifier)) ;) (expression_statement "pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);" (assignment_expression "pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914)" identifier = (cast_expression "(code *)(PTR_LAB_0015b65c + 0x5914)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015b65c + 0x5914)" ( (binary_expression "PTR_LAB_0015b65c + 0x5914" identifier + number_literal) )))) ;) (expression_statement "iVar18 = nEq + 1;" (assignment_expression "iVar18 = nEq + 1" identifier = (binary_expression "nEq + 1" identifier + number_literal)) ;) (expression_statement "pSVar13 = (pEVar12->x).pSelect;" (assignment_expression "pSVar13 = (pEVar12->x).pSelect" identifier = (field_expression "(pEVar12->x).pSelect" (parenthesized_expression "(pEVar12->x)" ( (field_expression "pEVar12->x" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);" (assignment_expression "pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c)" identifier = (cast_expression "(code *)(PTR_LAB_0015b65c + 0x5a4c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015b65c + 0x5a4c)" ( (binary_expression "PTR_LAB_0015b65c + 0x5a4c" identifier + number_literal) )))) ;) (expression_statement "pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);" (assignment_expression "pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808)" identifier = (cast_expression "(code *)(PTR_LAB_0015b740 + 0x7808)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015b740 + 0x7808)" ( (binary_expression "PTR_LAB_0015b740 + 0x7808" identifier + number_literal) )))) ;) (expression_statement "iVar3 = 0x14;" (assignment_expression "iVar3 = 0x14" identifier = number_literal) ;) (expression_statement "pcVar17 = (char *)((pEVar16->x).pSelect)->addrOpenEphm[0];" (assignment_expression "pcVar17 = (char *)((pEVar16->x).pSelect)->addrOpenEphm[0]" identifier = (cast_expression "(char *)((pEVar16->x).pSelect)->addrOpenEphm[0]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "((pEVar16->x).pSelect)->addrOpenEphm[0]" (field_expression "((pEVar16->x).pSelect)->addrOpenEphm" (parenthesized_expression "((pEVar16->x).pSelect)" ( (field_expression "(pEVar16->x).pSelect" (parenthesized_expression "(pEVar16->x)" ( (field_expression "pEVar16->x" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) [ number_literal ]))) ;) (if_statement "if ((pEVar12->flags & 0x800) == 0) goto LAB_00077b60;" if (parenthesized_expression "((pEVar12->flags & 0x800) == 0)" ( (binary_expression "(pEVar12->flags & 0x800) == 0" (parenthesized_expression "(pEVar12->flags & 0x800)" ( (binary_expression "pEVar12->flags & 0x800" (field_expression "pEVar12->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00077b60;" goto statement_identifier ;)) (do_statement "do {\n    uVar19 = *(undefined4 *)((int)&pSVar13->pEList->a[0].pExpr + iVar3);\n    iVar21 = iVar20;\n    while( true ) {\n      if (*pcVar17 != -0x62) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x1c) != iCur) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18]) {\n        return iVar21;\n      }\n      if (pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq]) {\n        return iVar21;\n      }\n      uVar7 = (*pcVar4)(pcVar17);\n      iVar3 = (*pcVar5)(uVar19,uVar7);\n      if (*(int *)(pcVar17 + 0x20) < 0) {\n        iVar20 = 0x44;\n      }\n      else {\n        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;\n      }\n      if (iVar3 != iVar20) {\n        return iVar21;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar21;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = (byte *)pIdx->azColl[iVar18];\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar21;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar21;\n        }\n      }\n      iVar20 = iVar21 + 1;\n      iVar18 = iVar18 + 1;\n      if (iVar15 == iVar20) {\n        return iVar20;\n      }\n      iVar3 = iVar21 * 0x14 + 0x14;\n      pEVar16 = pTerm->pExpr->pRight;\n      pSVar13 = (pEVar16->x).pSelect;\n      pcVar17 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg;\n      if ((pEVar16->flags & 0x800) != 0) break;\nLAB_00077b60:\n      uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14);\n      iVar21 = iVar20;\n    }\n  } while( true );" do (compound_statement "{\n    uVar19 = *(undefined4 *)((int)&pSVar13->pEList->a[0].pExpr + iVar3);\n    iVar21 = iVar20;\n    while( true ) {\n      if (*pcVar17 != -0x62) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x1c) != iCur) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18]) {\n        return iVar21;\n      }\n      if (pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq]) {\n        return iVar21;\n      }\n      uVar7 = (*pcVar4)(pcVar17);\n      iVar3 = (*pcVar5)(uVar19,uVar7);\n      if (*(int *)(pcVar17 + 0x20) < 0) {\n        iVar20 = 0x44;\n      }\n      else {\n        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;\n      }\n      if (iVar3 != iVar20) {\n        return iVar21;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar21;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = (byte *)pIdx->azColl[iVar18];\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar21;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar21;\n        }\n      }\n      iVar20 = iVar21 + 1;\n      iVar18 = iVar18 + 1;\n      if (iVar15 == iVar20) {\n        return iVar20;\n      }\n      iVar3 = iVar21 * 0x14 + 0x14;\n      pEVar16 = pTerm->pExpr->pRight;\n      pSVar13 = (pEVar16->x).pSelect;\n      pcVar17 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg;\n      if ((pEVar16->flags & 0x800) != 0) break;\nLAB_00077b60:\n      uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14);\n      iVar21 = iVar20;\n    }\n  }" { (expression_statement "uVar19 = *(undefined4 *)((int)&pSVar13->pEList->a[0].pExpr + iVar3);" (assignment_expression "uVar19 = *(undefined4 *)((int)&pSVar13->pEList->a[0].pExpr + iVar3)" identifier = (pointer_expression "*(undefined4 *)((int)&pSVar13->pEList->a[0].pExpr + iVar3)" * (cast_expression "(undefined4 *)((int)&pSVar13->pEList->a[0].pExpr + iVar3)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&pSVar13->pEList->a[0].pExpr + iVar3)" ( (binary_expression "(int)&pSVar13->pEList->a[0].pExpr + iVar3" (cast_expression "(int)&pSVar13->pEList->a[0].pExpr" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&pSVar13->pEList->a[0].pExpr" & (field_expression "pSVar13->pEList->a[0].pExpr" (subscript_expression "pSVar13->pEList->a[0]" (field_expression "pSVar13->pEList->a" (field_expression "pSVar13->pEList" identifier -> field_identifier) -> field_identifier) [ number_literal ]) . field_identifier))) + identifier) ))))) ;) (expression_statement "iVar21 = iVar20;" (assignment_expression "iVar21 = iVar20" identifier = identifier) ;) (while_statement "while( true ) {\n      if (*pcVar17 != -0x62) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x1c) != iCur) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18]) {\n        return iVar21;\n      }\n      if (pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq]) {\n        return iVar21;\n      }\n      uVar7 = (*pcVar4)(pcVar17);\n      iVar3 = (*pcVar5)(uVar19,uVar7);\n      if (*(int *)(pcVar17 + 0x20) < 0) {\n        iVar20 = 0x44;\n      }\n      else {\n        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;\n      }\n      if (iVar3 != iVar20) {\n        return iVar21;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar21;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = (byte *)pIdx->azColl[iVar18];\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar21;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar21;\n        }\n      }\n      iVar20 = iVar21 + 1;\n      iVar18 = iVar18 + 1;\n      if (iVar15 == iVar20) {\n        return iVar20;\n      }\n      iVar3 = iVar21 * 0x14 + 0x14;\n      pEVar16 = pTerm->pExpr->pRight;\n      pSVar13 = (pEVar16->x).pSelect;\n      pcVar17 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg;\n      if ((pEVar16->flags & 0x800) != 0) break;\nLAB_00077b60:\n      uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14);\n      iVar21 = iVar20;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (*pcVar17 != -0x62) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x1c) != iCur) {\n        return iVar21;\n      }\n      if (*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18]) {\n        return iVar21;\n      }\n      if (pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq]) {\n        return iVar21;\n      }\n      uVar7 = (*pcVar4)(pcVar17);\n      iVar3 = (*pcVar5)(uVar19,uVar7);\n      if (*(int *)(pcVar17 + 0x20) < 0) {\n        iVar20 = 0x44;\n      }\n      else {\n        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;\n      }\n      if (iVar3 != iVar20) {\n        return iVar21;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar21;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = (byte *)pIdx->azColl[iVar18];\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar21;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar21;\n        }\n      }\n      iVar20 = iVar21 + 1;\n      iVar18 = iVar18 + 1;\n      if (iVar15 == iVar20) {\n        return iVar20;\n      }\n      iVar3 = iVar21 * 0x14 + 0x14;\n      pEVar16 = pTerm->pExpr->pRight;\n      pSVar13 = (pEVar16->x).pSelect;\n      pcVar17 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg;\n      if ((pEVar16->flags & 0x800) != 0) break;\nLAB_00077b60:\n      uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14);\n      iVar21 = iVar20;\n    }" { (if_statement "if (*pcVar17 != -0x62) {\n        return iVar21;\n      }" if (parenthesized_expression "(*pcVar17 != -0x62)" ( (binary_expression "*pcVar17 != -0x62" (pointer_expression "*pcVar17" * identifier) != number_literal) )) (compound_statement "{\n        return iVar21;\n      }" { (return_statement "return iVar21;" return identifier ;) })) (if_statement "if (*(int *)(pcVar17 + 0x1c) != iCur) {\n        return iVar21;\n      }" if (parenthesized_expression "(*(int *)(pcVar17 + 0x1c) != iCur)" ( (binary_expression "*(int *)(pcVar17 + 0x1c) != iCur" (pointer_expression "*(int *)(pcVar17 + 0x1c)" * (cast_expression "(int *)(pcVar17 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar17 + 0x1c)" ( (binary_expression "pcVar17 + 0x1c" identifier + number_literal) )))) != identifier) )) (compound_statement "{\n        return iVar21;\n      }" { (return_statement "return iVar21;" return identifier ;) })) (if_statement "if (*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18]) {\n        return iVar21;\n      }" if (parenthesized_expression "(*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18])" ( (binary_expression "*(int *)(pcVar17 + 0x20) != (int)pIdx->aiColumn[iVar18]" (pointer_expression "*(int *)(pcVar17 + 0x20)" * (cast_expression "(int *)(pcVar17 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar17 + 0x20)" ( (binary_expression "pcVar17 + 0x20" identifier + number_literal) )))) != (cast_expression "(int)pIdx->aiColumn[iVar18]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "pIdx->aiColumn[iVar18]" (field_expression "pIdx->aiColumn" identifier -> field_identifier) [ identifier ]))) )) (compound_statement "{\n        return iVar21;\n      }" { (return_statement "return iVar21;" return identifier ;) })) (if_statement "if (pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq]) {\n        return iVar21;\n      }" if (parenthesized_expression "(pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq])" ( (binary_expression "pIdx->aSortOrder[iVar18] != pIdx->aSortOrder[nEq]" (subscript_expression "pIdx->aSortOrder[iVar18]" (field_expression "pIdx->aSortOrder" identifier -> field_identifier) [ identifier ]) != (subscript_expression "pIdx->aSortOrder[nEq]" (field_expression "pIdx->aSortOrder" identifier -> field_identifier) [ identifier ])) )) (compound_statement "{\n        return iVar21;\n      }" { (return_statement "return iVar21;" return identifier ;) })) (expression_statement "uVar7 = (*pcVar4)(pcVar17);" (assignment_expression "uVar7 = (*pcVar4)(pcVar17)" identifier = (call_expression "(*pcVar4)(pcVar17)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(pcVar17)" ( identifier )))) ;) (expression_statement "iVar3 = (*pcVar5)(uVar19,uVar7);" (assignment_expression "iVar3 = (*pcVar5)(uVar19,uVar7)" identifier = (call_expression "(*pcVar5)(uVar19,uVar7)" (parenthesized_expression "(*pcVar5)" ( (pointer_expression "*pcVar5" * identifier) )) (argument_list "(uVar19,uVar7)" ( identifier , identifier )))) ;) (if_statement "if (*(int *)(pcVar17 + 0x20) < 0) {\n        iVar20 = 0x44;\n      }\n      else {\n        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;\n      }" if (parenthesized_expression "(*(int *)(pcVar17 + 0x20) < 0)" ( (binary_expression "*(int *)(pcVar17 + 0x20) < 0" (pointer_expression "*(int *)(pcVar17 + 0x20)" * (cast_expression "(int *)(pcVar17 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar17 + 0x20)" ( (binary_expression "pcVar17 + 0x20" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n        iVar20 = 0x44;\n      }" { (expression_statement "iVar20 = 0x44;" (assignment_expression "iVar20 = 0x44" identifier = number_literal) ;) }) (else_clause "else {\n        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;\n      }" else (compound_statement "{\n        iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;\n      }" { (expression_statement "iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity;" (assignment_expression "iVar20 = (int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity" identifier = (cast_expression "(int)pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity" ( (type_descriptor "int" primitive_type) ) (field_expression "pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)].affinity" (subscript_expression "pIdx->pTable->aCol[*(int *)(pcVar17 + 0x20)]" (field_expression "pIdx->pTable->aCol" (field_expression "pIdx->pTable" identifier -> field_identifier) -> field_identifier) [ (pointer_expression "*(int *)(pcVar17 + 0x20)" * (cast_expression "(int *)(pcVar17 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar17 + 0x20)" ( (binary_expression "pcVar17 + 0x20" identifier + number_literal) )))) ]) . field_identifier))) ;) }))) (if_statement "if (iVar3 != iVar20) {\n        return iVar21;\n      }" if (parenthesized_expression "(iVar3 != iVar20)" ( (binary_expression "iVar3 != iVar20" identifier != identifier) )) (compound_statement "{\n        return iVar21;\n      }" { (return_statement "return iVar21;" return identifier ;) })) (expression_statement "puVar8 = (undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19);" (assignment_expression "puVar8 = (undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19)" identifier = (cast_expression "(undefined4 *)(*pcVar6)(pParse,pcVar17,uVar19)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*pcVar6)(pParse,pcVar17,uVar19)" (parenthesized_expression "(*pcVar6)" ( (pointer_expression "*pcVar6" * identifier) )) (argument_list "(pParse,pcVar17,uVar19)" ( identifier , identifier , identifier ))))) ;) (if_statement "if (puVar8 == (undefined4 *)0x0) {\n        return iVar21;\n      }" if (parenthesized_expression "(puVar8 == (undefined4 *)0x0)" ( (binary_expression "puVar8 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return iVar21;\n      }" { (return_statement "return iVar21;" return identifier ;) })) (expression_statement "pbVar10 = (byte *)*puVar8;" (assignment_expression "pbVar10 = (byte *)*puVar8" identifier = (cast_expression "(byte *)*puVar8" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar8" * identifier))) ;) (expression_statement "uVar14 = (uint)*pbVar10;" (assignment_expression "uVar14 = (uint)*pbVar10" identifier = (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar11 = (byte *)pIdx->azColl[iVar18];" (assignment_expression "pbVar11 = (byte *)pIdx->azColl[iVar18]" identifier = (cast_expression "(byte *)pIdx->azColl[iVar18]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "pIdx->azColl[iVar18]" (field_expression "pIdx->azColl" identifier -> field_identifier) [ identifier ]))) ;) (if_statement "if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar21;\n      }" if (parenthesized_expression "(puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28])" ( (binary_expression "puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]" (subscript_expression "puVar2[*pbVar11 - 0x7a28]" identifier [ (binary_expression "*pbVar11 - 0x7a28" (pointer_expression "*pbVar11" * identifier) - number_literal) ]) != (subscript_expression "puVar2[uVar14 - 0x7a28]" identifier [ (binary_expression "uVar14 - 0x7a28" identifier - number_literal) ])) )) (compound_statement "{\n        return iVar21;\n      }" { (return_statement "return iVar21;" return identifier ;) })) (while_statement "while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar21;\n        }\n      }" while (parenthesized_expression "(pbVar10 = pbVar10 + 1, uVar14 != 0)" ( (comma_expression "pbVar10 = pbVar10 + 1, uVar14 != 0" (assignment_expression "pbVar10 = pbVar10 + 1" identifier = (binary_expression "pbVar10 + 1" identifier + number_literal)) , (binary_expression "uVar14 != 0" identifier != number_literal)) )) (compound_statement "{\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar21;\n        }\n      }" { (expression_statement "pbVar1 = pbVar11 + 1;" (assignment_expression "pbVar1 = pbVar11 + 1" identifier = (binary_expression "pbVar11 + 1" identifier + number_literal)) ;) (expression_statement "uVar14 = (uint)*pbVar10;" (assignment_expression "uVar14 = (uint)*pbVar10" identifier = (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar11 = pbVar11 + 1;" (assignment_expression "pbVar11 = pbVar11 + 1" identifier = (binary_expression "pbVar11 + 1" identifier + number_literal)) ;) (if_statement "if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar21;\n        }" if (parenthesized_expression "(puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28])" ( (binary_expression "puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]" (subscript_expression "puVar2[uVar14 - 0x7a28]" identifier [ (binary_expression "uVar14 - 0x7a28" identifier - number_literal) ]) != (subscript_expression "puVar2[*pbVar1 - 0x7a28]" identifier [ (binary_expression "*pbVar1 - 0x7a28" (pointer_expression "*pbVar1" * identifier) - number_literal) ])) )) (compound_statement "{\n          return iVar21;\n        }" { (return_statement "return iVar21;" return identifier ;) })) })) (expression_statement "iVar20 = iVar21 + 1;" (assignment_expression "iVar20 = iVar21 + 1" identifier = (binary_expression "iVar21 + 1" identifier + number_literal)) ;) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) (if_statement "if (iVar15 == iVar20) {\n        return iVar20;\n      }" if (parenthesized_expression "(iVar15 == iVar20)" ( (binary_expression "iVar15 == iVar20" identifier == identifier) )) (compound_statement "{\n        return iVar20;\n      }" { (return_statement "return iVar20;" return identifier ;) })) (expression_statement "iVar3 = iVar21 * 0x14 + 0x14;" (assignment_expression "iVar3 = iVar21 * 0x14 + 0x14" identifier = (binary_expression "iVar21 * 0x14 + 0x14" (binary_expression "iVar21 * 0x14" identifier * number_literal) + number_literal)) ;) (expression_statement "pEVar16 = pTerm->pExpr->pRight;" (assignment_expression "pEVar16 = pTerm->pExpr->pRight" identifier = (field_expression "pTerm->pExpr->pRight" (field_expression "pTerm->pExpr" identifier -> field_identifier) -> field_identifier)) ;) (expression_statement "pSVar13 = (pEVar16->x).pSelect;" (assignment_expression "pSVar13 = (pEVar16->x).pSelect" identifier = (field_expression "(pEVar16->x).pSelect" (parenthesized_expression "(pEVar16->x)" ( (field_expression "pEVar16->x" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pcVar17 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg;" (assignment_expression "pcVar17 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg" identifier = (cast_expression "(char *)(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u.iConstExprReg" (field_expression "(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1].u" (subscript_expression "(pTerm->pExpr->pLeft->x).pList[1].a[iVar21 + -1]" (field_expression "(pTerm->pExpr->pLeft->x).pList[1].a" (subscript_expression "(pTerm->pExpr->pLeft->x).pList[1]" (field_expression "(pTerm->pExpr->pLeft->x).pList" (parenthesized_expression "(pTerm->pExpr->pLeft->x)" ( (field_expression "pTerm->pExpr->pLeft->x" (field_expression "pTerm->pExpr->pLeft" (field_expression "pTerm->pExpr" identifier -> field_identifier) -> field_identifier) -> field_identifier) )) . field_identifier) [ number_literal ]) . field_identifier) [ (binary_expression "iVar21 + -1" identifier + number_literal) ]) . field_identifier) . field_identifier))) ;) (if_statement "if ((pEVar16->flags & 0x800) != 0) break;" if (parenthesized_expression "((pEVar16->flags & 0x800) != 0)" ( (binary_expression "(pEVar16->flags & 0x800) != 0" (parenthesized_expression "(pEVar16->flags & 0x800)" ( (binary_expression "pEVar16->flags & 0x800" (field_expression "pEVar16->flags" identifier -> field_identifier) & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_00077b60:\n      uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14);" statement_identifier : (expression_statement "uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14);" (assignment_expression "uVar19 = *(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14)" identifier = (pointer_expression "*(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14)" * (cast_expression "(undefined4 *)((int)pSVar13->addrOpenEphm + iVar3 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pSVar13->addrOpenEphm + iVar3 + -0x14)" ( (binary_expression "(int)pSVar13->addrOpenEphm + iVar3 + -0x14" (binary_expression "(int)pSVar13->addrOpenEphm + iVar3" (cast_expression "(int)pSVar13->addrOpenEphm" ( (type_descriptor "int" primitive_type) ) (field_expression "pSVar13->addrOpenEphm" identifier -> field_identifier)) + identifier) + number_literal) ))))) ;)) (expression_statement "iVar21 = iVar20;" (assignment_expression "iVar21 = iVar20" identifier = identifier) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "int FUN_000778c0(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)\n\n{\n  byte *pbVar1;\n  undefined *puVar2;\n  char cVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  int iVar12;\n  int *piVar13;\n  uint uVar14;\n  int iVar15;\n  char *pcVar16;\n  int iVar17;\n  undefined4 uVar18;\n  int iVar19;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pcVar16 = *(char **)(*param_5 + 0xc);\n  cVar9 = *pcVar16;\n  if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }\n  if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }\n  iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar19 = 1;\n  iVar12 = *(int *)(*param_5 + 0x10);\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar17 = param_4 + 1;\n  piVar13 = *(int **)(iVar12 + 0x14);\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);\n  if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );\n}\n\n" (function_definition "int FUN_000778c0(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)\n\n{\n  byte *pbVar1;\n  undefined *puVar2;\n  char cVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  int iVar12;\n  int *piVar13;\n  uint uVar14;\n  int iVar15;\n  char *pcVar16;\n  int iVar17;\n  undefined4 uVar18;\n  int iVar19;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pcVar16 = *(char **)(*param_5 + 0xc);\n  cVar9 = *pcVar16;\n  if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }\n  if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }\n  iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar19 = 1;\n  iVar12 = *(int *)(*param_5 + 0x10);\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar17 = param_4 + 1;\n  piVar13 = *(int **)(iVar12 + 0x14);\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);\n  if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );\n}" primitive_type (function_declarator "FUN_000778c0(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)" identifier (parameter_list "(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int *param_5" primitive_type (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  byte *pbVar1;\n  undefined *puVar2;\n  char cVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  int iVar12;\n  int *piVar13;\n  uint uVar14;\n  int iVar15;\n  char *pcVar16;\n  int iVar17;\n  undefined4 uVar18;\n  int iVar19;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pcVar16 = *(char **)(*param_5 + 0xc);\n  cVar9 = *pcVar16;\n  if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }\n  if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }\n  iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar19 = 1;\n  iVar12 = *(int *)(*param_5 + 0x10);\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar17 = param_4 + 1;\n  piVar13 = *(int **)(iVar12 + 0x14);\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);\n  if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "char cVar9;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "code *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "code *pcVar6;" type_identifier (pointer_declarator "*pcVar6" * identifier) ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "byte *pbVar11;" type_identifier (pointer_declarator "*pbVar11" * identifier) ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "int *piVar13;" primitive_type (pointer_declarator "*piVar13" * identifier) ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "char *pcVar16;" primitive_type (pointer_declarator "*pcVar16" * identifier) ;) (declaration "int iVar17;" primitive_type identifier ;) (declaration "undefined4 uVar18;" type_identifier identifier ;) (declaration "int iVar19;" primitive_type identifier ;) (expression_statement "puVar2 = PTR_DAT_0015b694;" (assignment_expression "puVar2 = PTR_DAT_0015b694" identifier = identifier) ;) (expression_statement "pcVar16 = *(char **)(*param_5 + 0xc);" (assignment_expression "pcVar16 = *(char **)(*param_5 + 0xc)" identifier = (pointer_expression "*(char **)(*param_5 + 0xc)" * (cast_expression "(char **)(*param_5 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_5 + 0xc)" ( (binary_expression "*param_5 + 0xc" (pointer_expression "*param_5" * identifier) + number_literal) ))))) ;) (expression_statement "cVar9 = *pcVar16;" (assignment_expression "cVar9 = *pcVar16" identifier = (pointer_expression "*pcVar16" * identifier)) ;) (if_statement "if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }" if (parenthesized_expression "(cVar9 == -0x5c)" ( (binary_expression "cVar9 == -0x5c" identifier == number_literal) )) (compound_statement "{\n    cVar9 = pcVar16[0x28];\n  }" { (expression_statement "cVar9 = pcVar16[0x28];" (assignment_expression "cVar9 = pcVar16[0x28]" identifier = (subscript_expression "pcVar16[0x28]" identifier [ number_literal ])) ;) })) (if_statement "if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }" if (parenthesized_expression "(cVar9 == -0x5b)" ( (binary_expression "cVar9 == -0x5b" identifier == number_literal) )) (compound_statement "{\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }" { (expression_statement "iVar15 = **(int **)(pcVar16 + 0x14);" (assignment_expression "iVar15 = **(int **)(pcVar16 + 0x14)" identifier = (pointer_expression "**(int **)(pcVar16 + 0x14)" * (pointer_expression "*(int **)(pcVar16 + 0x14)" * (cast_expression "(int **)(pcVar16 + 0x14)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pcVar16 + 0x14)" ( (binary_expression "pcVar16 + 0x14" identifier + number_literal) )))))) ;) }) (else_clause "else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }" else (compound_statement "{\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }" { (if_statement "if (cVar9 != '\x7f') {\n      return 1;\n    }" if (parenthesized_expression "(cVar9 != '\x7f')" ( (binary_expression "cVar9 != '\x7f'" identifier != (char_literal "'\x7f'" ' escape_sequence ')) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);" (assignment_expression "iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14)" identifier = (pointer_expression "*(int *)**(undefined4 **)(pcVar16 + 0x14)" * (cast_expression "(int *)**(undefined4 **)(pcVar16 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(undefined4 **)(pcVar16 + 0x14)" * (pointer_expression "*(undefined4 **)(pcVar16 + 0x14)" * (cast_expression "(undefined4 **)(pcVar16 + 0x14)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pcVar16 + 0x14)" ( (binary_expression "pcVar16 + 0x14" identifier + number_literal) )))))))) ;) }))) (expression_statement "iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;" (assignment_expression "iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4" identifier = (binary_expression "(uint)*(ushort *)(param_3 + 0x34) - param_4" (binary_expression "(uint)*(ushort *)(param_3 + 0x34)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_3 + 0x34)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x34)" ( (binary_expression "param_3 + 0x34" identifier + number_literal) )))) - identifier)) ;) (if_statement "if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }" if (parenthesized_expression "(iVar3 <= iVar15)" ( (binary_expression "iVar3 <= iVar15" identifier <= identifier) )) (compound_statement "{\n    iVar15 = iVar3;\n  }" { (expression_statement "iVar15 = iVar3;" (assignment_expression "iVar15 = iVar3" identifier = identifier) ;) })) (if_statement "if (iVar15 < 2) {\n    return 1;\n  }" if (parenthesized_expression "(iVar15 < 2)" ( (binary_expression "iVar15 < 2" identifier < number_literal) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar19 = 1;" (assignment_expression "iVar19 = 1" identifier = number_literal) ;) (expression_statement "iVar12 = *(int *)(*param_5 + 0x10);" (assignment_expression "iVar12 = *(int *)(*param_5 + 0x10)" identifier = (pointer_expression "*(int *)(*param_5 + 0x10)" * (cast_expression "(int *)(*param_5 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_5 + 0x10)" ( (binary_expression "*param_5 + 0x10" (pointer_expression "*param_5" * identifier) + number_literal) ))))) ;) (expression_statement "pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);" (assignment_expression "pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914)" identifier = (cast_expression "(code *)(PTR_LAB_0015b65c + 0x5914)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015b65c + 0x5914)" ( (binary_expression "PTR_LAB_0015b65c + 0x5914" identifier + number_literal) )))) ;) (expression_statement "iVar17 = param_4 + 1;" (assignment_expression "iVar17 = param_4 + 1" identifier = (binary_expression "param_4 + 1" identifier + number_literal)) ;) (expression_statement "piVar13 = *(int **)(iVar12 + 0x14);" (assignment_expression "piVar13 = *(int **)(iVar12 + 0x14)" identifier = (pointer_expression "*(int **)(iVar12 + 0x14)" * (cast_expression "(int **)(iVar12 + 0x14)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar12 + 0x14)" ( (binary_expression "iVar12 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);" (assignment_expression "pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c)" identifier = (cast_expression "(code *)(PTR_LAB_0015b65c + 0x5a4c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015b65c + 0x5a4c)" ( (binary_expression "PTR_LAB_0015b65c + 0x5a4c" identifier + number_literal) )))) ;) (expression_statement "pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);" (assignment_expression "pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808)" identifier = (cast_expression "(code *)(PTR_LAB_0015b740 + 0x7808)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015b740 + 0x7808)" ( (binary_expression "PTR_LAB_0015b740 + 0x7808" identifier + number_literal) )))) ;) (expression_statement "iVar3 = 0x14;" (assignment_expression "iVar3 = 0x14" identifier = number_literal) ;) (expression_statement "pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);" (assignment_expression "pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18)" identifier = (pointer_expression "*(char **)(*(int *)(pcVar16 + 0x14) + 0x18)" * (cast_expression "(char **)(*(int *)(pcVar16 + 0x14) + 0x18)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(pcVar16 + 0x14) + 0x18)" ( (binary_expression "*(int *)(pcVar16 + 0x14) + 0x18" (pointer_expression "*(int *)(pcVar16 + 0x14)" * (cast_expression "(int *)(pcVar16 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar16 + 0x14)" ( (binary_expression "pcVar16 + 0x14" identifier + number_literal) )))) + number_literal) ))))) ;) (if_statement "if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;" if (parenthesized_expression "((*(uint *)(iVar12 + 4) & 0x800) == 0)" ( (binary_expression "(*(uint *)(iVar12 + 4) & 0x800) == 0" (parenthesized_expression "(*(uint *)(iVar12 + 4) & 0x800)" ( (binary_expression "*(uint *)(iVar12 + 4) & 0x800" (pointer_expression "*(uint *)(iVar12 + 4)" * (cast_expression "(uint *)(iVar12 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar12 + 4)" ( (binary_expression "iVar12 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00077b60;" goto statement_identifier ;)) (do_statement "do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );" do (compound_statement "{\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  }" { (expression_statement "uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);" (assignment_expression "uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4)" identifier = (pointer_expression "*(undefined4 *)(*piVar13 + iVar3 + 4)" * (cast_expression "(undefined4 *)(*piVar13 + iVar3 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar13 + iVar3 + 4)" ( (binary_expression "*piVar13 + iVar3 + 4" (binary_expression "*piVar13 + iVar3" (pointer_expression "*piVar13" * identifier) + identifier) + number_literal) ))))) ;) (while_statement "while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }" { (if_statement "if (*pcVar16 != -0x62) {\n        return iVar19;\n      }" if (parenthesized_expression "(*pcVar16 != -0x62)" ( (binary_expression "*pcVar16 != -0x62" (pointer_expression "*pcVar16" * identifier) != number_literal) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (if_statement "if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }" if (parenthesized_expression "(*(int *)(pcVar16 + 0x1c) != param_2)" ( (binary_expression "*(int *)(pcVar16 + 0x1c) != param_2" (pointer_expression "*(int *)(pcVar16 + 0x1c)" * (cast_expression "(int *)(pcVar16 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar16 + 0x1c)" ( (binary_expression "pcVar16 + 0x1c" identifier + number_literal) )))) != identifier) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (if_statement "if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }" if (parenthesized_expression "(*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2))" ( (binary_expression "*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" (pointer_expression "*(int *)(pcVar16 + 0x20)" * (cast_expression "(int *)(pcVar16 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar16 + 0x20)" ( (binary_expression "pcVar16 + 0x20" identifier + number_literal) )))) != (cast_expression "(int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" * (cast_expression "(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 4) + iVar17 * 2)" ( (binary_expression "*(int *)(param_3 + 4) + iVar17 * 2" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + (binary_expression "iVar17 * 2" identifier * number_literal)) )))))) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (if_statement "if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }" if (parenthesized_expression "(*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4))" ( (binary_expression "*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)" (pointer_expression "*(char *)(*(int *)(param_3 + 0x1c) + iVar17)" * (cast_expression "(char *)(*(int *)(param_3 + 0x1c) + iVar17)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 0x1c) + iVar17)" ( (binary_expression "*(int *)(param_3 + 0x1c) + iVar17" (pointer_expression "*(int *)(param_3 + 0x1c)" * (cast_expression "(int *)(param_3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) + identifier) )))) != (pointer_expression "*(char *)(*(int *)(param_3 + 0x1c) + param_4)" * (cast_expression "(char *)(*(int *)(param_3 + 0x1c) + param_4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 0x1c) + param_4)" ( (binary_expression "*(int *)(param_3 + 0x1c) + param_4" (pointer_expression "*(int *)(param_3 + 0x1c)" * (cast_expression "(int *)(param_3 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x1c)" ( (binary_expression "param_3 + 0x1c" identifier + number_literal) )))) + identifier) ))))) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (expression_statement "uVar7 = (*pcVar4)(pcVar16);" (assignment_expression "uVar7 = (*pcVar4)(pcVar16)" identifier = (call_expression "(*pcVar4)(pcVar16)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(pcVar16)" ( identifier )))) ;) (expression_statement "iVar3 = (*pcVar5)(uVar18,uVar7);" (assignment_expression "iVar3 = (*pcVar5)(uVar18,uVar7)" identifier = (call_expression "(*pcVar5)(uVar18,uVar7)" (parenthesized_expression "(*pcVar5)" ( (pointer_expression "*pcVar5" * identifier) )) (argument_list "(uVar18,uVar7)" ( identifier , identifier )))) ;) (if_statement "if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }" if (parenthesized_expression "(*(int *)(pcVar16 + 0x20) < 0)" ( (binary_expression "*(int *)(pcVar16 + 0x20) < 0" (pointer_expression "*(int *)(pcVar16 + 0x20)" * (cast_expression "(int *)(pcVar16 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar16 + 0x20)" ( (binary_expression "pcVar16 + 0x20" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n        iVar12 = 0x44;\n      }" { (expression_statement "iVar12 = 0x44;" (assignment_expression "iVar12 = 0x44" identifier = number_literal) ;) }) (else_clause "else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }" else (compound_statement "{\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }" { (expression_statement "iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);" (assignment_expression "iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" identifier = (cast_expression "(int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" * (cast_expression "(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" ( (binary_expression "*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd" (binary_expression "*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10" (pointer_expression "*(int *)(*(int *)(param_3 + 0xc) + 4)" * (cast_expression "(int *)(*(int *)(param_3 + 0xc) + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 0xc) + 4)" ( (binary_expression "*(int *)(param_3 + 0xc) + 4" (pointer_expression "*(int *)(param_3 + 0xc)" * (cast_expression "(int *)(param_3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xc)" ( (binary_expression "param_3 + 0xc" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "*(int *)(pcVar16 + 0x20) * 0x10" (pointer_expression "*(int *)(pcVar16 + 0x20)" * (cast_expression "(int *)(pcVar16 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar16 + 0x20)" ( (binary_expression "pcVar16 + 0x20" identifier + number_literal) )))) * number_literal)) + number_literal) )))))) ;) }))) (if_statement "if (iVar3 != iVar12) {\n        return iVar19;\n      }" if (parenthesized_expression "(iVar3 != iVar12)" ( (binary_expression "iVar3 != iVar12" identifier != identifier) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (expression_statement "puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);" (assignment_expression "puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18)" identifier = (cast_expression "(undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*pcVar6)(param_1,pcVar16,uVar18)" (parenthesized_expression "(*pcVar6)" ( (pointer_expression "*pcVar6" * identifier) )) (argument_list "(param_1,pcVar16,uVar18)" ( identifier , identifier , identifier ))))) ;) (if_statement "if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }" if (parenthesized_expression "(puVar8 == (undefined4 *)0x0)" ( (binary_expression "puVar8 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (expression_statement "pbVar10 = (byte *)*puVar8;" (assignment_expression "pbVar10 = (byte *)*puVar8" identifier = (cast_expression "(byte *)*puVar8" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar8" * identifier))) ;) (expression_statement "uVar14 = (uint)*pbVar10;" (assignment_expression "uVar14 = (uint)*pbVar10" identifier = (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);" (assignment_expression "pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4)" identifier = (pointer_expression "*(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4)" * (cast_expression "(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_3 + 0x20) + iVar17 * 4)" ( (binary_expression "*(int *)(param_3 + 0x20) + iVar17 * 4" (pointer_expression "*(int *)(param_3 + 0x20)" * (cast_expression "(int *)(param_3 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x20)" ( (binary_expression "param_3 + 0x20" identifier + number_literal) )))) + (binary_expression "iVar17 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }" if (parenthesized_expression "(puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28])" ( (binary_expression "puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]" (subscript_expression "puVar2[*pbVar11 - 0x7a28]" identifier [ (binary_expression "*pbVar11 - 0x7a28" (pointer_expression "*pbVar11" * identifier) - number_literal) ]) != (subscript_expression "puVar2[uVar14 - 0x7a28]" identifier [ (binary_expression "uVar14 - 0x7a28" identifier - number_literal) ])) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (while_statement "while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }" while (parenthesized_expression "(pbVar10 = pbVar10 + 1, uVar14 != 0)" ( (comma_expression "pbVar10 = pbVar10 + 1, uVar14 != 0" (assignment_expression "pbVar10 = pbVar10 + 1" identifier = (binary_expression "pbVar10 + 1" identifier + number_literal)) , (binary_expression "uVar14 != 0" identifier != number_literal)) )) (compound_statement "{\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }" { (expression_statement "pbVar1 = pbVar11 + 1;" (assignment_expression "pbVar1 = pbVar11 + 1" identifier = (binary_expression "pbVar11 + 1" identifier + number_literal)) ;) (expression_statement "uVar14 = (uint)*pbVar10;" (assignment_expression "uVar14 = (uint)*pbVar10" identifier = (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar11 = pbVar11 + 1;" (assignment_expression "pbVar11 = pbVar11 + 1" identifier = (binary_expression "pbVar11 + 1" identifier + number_literal)) ;) (if_statement "if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }" if (parenthesized_expression "(puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28])" ( (binary_expression "puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]" (subscript_expression "puVar2[uVar14 - 0x7a28]" identifier [ (binary_expression "uVar14 - 0x7a28" identifier - number_literal) ]) != (subscript_expression "puVar2[*pbVar1 - 0x7a28]" identifier [ (binary_expression "*pbVar1 - 0x7a28" (pointer_expression "*pbVar1" * identifier) - number_literal) ])) )) (compound_statement "{\n          return iVar19;\n        }" { (return_statement "return iVar19;" return identifier ;) })) })) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) (expression_statement "iVar17 = iVar17 + 1;" (assignment_expression "iVar17 = iVar17 + 1" identifier = (binary_expression "iVar17 + 1" identifier + number_literal)) ;) (if_statement "if (iVar15 == iVar19) {\n        return iVar19;\n      }" if (parenthesized_expression "(iVar15 == iVar19)" ( (binary_expression "iVar15 == iVar19" identifier == identifier) )) (compound_statement "{\n        return iVar19;\n      }" { (return_statement "return iVar19;" return identifier ;) })) (expression_statement "iVar3 = iVar19 * 0x14;" (assignment_expression "iVar3 = iVar19 * 0x14" identifier = (binary_expression "iVar19 * 0x14" identifier * number_literal)) ;) (expression_statement "iVar12 = *(int *)(*param_5 + 0x10);" (assignment_expression "iVar12 = *(int *)(*param_5 + 0x10)" identifier = (pointer_expression "*(int *)(*param_5 + 0x10)" * (cast_expression "(int *)(*param_5 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_5 + 0x10)" ( (binary_expression "*param_5 + 0x10" (pointer_expression "*param_5" * identifier) + number_literal) ))))) ;) (expression_statement "piVar13 = *(int **)(iVar12 + 0x14);" (assignment_expression "piVar13 = *(int **)(iVar12 + 0x14)" identifier = (pointer_expression "*(int **)(iVar12 + 0x14)" * (cast_expression "(int **)(iVar12 + 0x14)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar12 + 0x14)" ( (binary_expression "iVar12 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);" (assignment_expression "pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" identifier = (pointer_expression "*(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" * (cast_expression "(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" ( (binary_expression "*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4" (binary_expression "*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3" (pointer_expression "*(int *)(*(int *)(*param_5 + 0xc) + 0x14)" * (cast_expression "(int *)(*(int *)(*param_5 + 0xc) + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*param_5 + 0xc) + 0x14)" ( (binary_expression "*(int *)(*param_5 + 0xc) + 0x14" (pointer_expression "*(int *)(*param_5 + 0xc)" * (cast_expression "(int *)(*param_5 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_5 + 0xc)" ( (binary_expression "*param_5 + 0xc" (pointer_expression "*param_5" * identifier) + number_literal) )))) + number_literal) )))) + identifier) + number_literal) ))))) ;) (if_statement "if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;" if (parenthesized_expression "((*(uint *)(iVar12 + 4) & 0x800) != 0)" ( (binary_expression "(*(uint *)(iVar12 + 4) & 0x800) != 0" (parenthesized_expression "(*(uint *)(iVar12 + 4) & 0x800)" ( (binary_expression "*(uint *)(iVar12 + 4) & 0x800" (pointer_expression "*(uint *)(iVar12 + 4)" * (cast_expression "(uint *)(iVar12 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar12 + 4)" ( (binary_expression "iVar12 + 4" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);" statement_identifier : (expression_statement "uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);" (assignment_expression "uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4)" identifier = (pointer_expression "*(undefined4 *)((int)piVar13 + iVar3 + 4)" * (cast_expression "(undefined4 *)((int)piVar13 + iVar3 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar13 + iVar3 + 4)" ( (binary_expression "(int)piVar13 + iVar3 + 4" (binary_expression "(int)piVar13 + iVar3" (cast_expression "(int)piVar13" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) ))))) ;)) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (goto_statement goto statement_identifier ;)) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) + IDENT) + LIT) ))))) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != IDENT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))))) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) ))))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) + LIT) )))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ (binary_expression (pointer_expression * IDENT) - LIT) ]) != (subscript_expression IDENT [ (binary_expression IDENT - LIT) ])) )) (compound_statement { (return_statement return IDENT ;) })) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression IDENT != LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ (binary_expression IDENT - LIT) ]) != (subscript_expression IDENT [ (binary_expression (pointer_expression * IDENT) - LIT) ])) )) (compound_statement { (return_statement return IDENT ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) + LIT) )))) + IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (break_statement break ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) + LIT) ))))) ;)) })) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "int FUN_000778c0(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)\n\n{\n  byte *pbVar1;\n  undefined *puVar2;\n  char cVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  int iVar12;\n  int *piVar13;\n  uint uVar14;\n  int iVar15;\n  char *pcVar16;\n  int iVar17;\n  undefined4 uVar18;\n  int iVar19;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pcVar16 = *(char **)(*param_5 + 0xc);\n  cVar9 = *pcVar16;\n  if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }\n  if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }\n  iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar19 = 1;\n  iVar12 = *(int *)(*param_5 + 0x10);\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar17 = param_4 + 1;\n  piVar13 = *(int **)(iVar12 + 0x14);\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);\n  if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );\n}" (primitive_type "int") (function_declarator "FUN_000778c0(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)" (identifier "FUN_000778c0") (parameter_list "(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (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")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "int *param_5" (primitive_type "int") (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) () ")"))) (compound_statement "{\n  byte *pbVar1;\n  undefined *puVar2;\n  char cVar9;\n  int iVar3;\n  code *pcVar4;\n  code *pcVar5;\n  code *pcVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  byte *pbVar10;\n  byte *pbVar11;\n  int iVar12;\n  int *piVar13;\n  uint uVar14;\n  int iVar15;\n  char *pcVar16;\n  int iVar17;\n  undefined4 uVar18;\n  int iVar19;\n  \n  puVar2 = PTR_DAT_0015b694;\n  pcVar16 = *(char **)(*param_5 + 0xc);\n  cVar9 = *pcVar16;\n  if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }\n  if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }\n  iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;\n  if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }\n  if (iVar15 < 2) {\n    return 1;\n  }\n  iVar19 = 1;\n  iVar12 = *(int *)(*param_5 + 0x10);\n  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);\n  iVar17 = param_4 + 1;\n  piVar13 = *(int **)(iVar12 + 0x14);\n  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);\n  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);\n  iVar3 = 0x14;\n  pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);\n  if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;\n  do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );\n}" ({ "{") (declaration "byte *pbVar1;" (type_identifier "byte") (pointer_declarator "*pbVar1" (* "*") (identifier "pbVar1")) (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "char cVar9;" (primitive_type "char") (identifier "cVar9") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "code *pcVar4;" (type_identifier "code") (pointer_declarator "*pcVar4" (* "*") (identifier "pcVar4")) (; ";")) (declaration "code *pcVar5;" (type_identifier "code") (pointer_declarator "*pcVar5" (* "*") (identifier "pcVar5")) (; ";")) (declaration "code *pcVar6;" (type_identifier "code") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (declaration "undefined4 uVar7;" (type_identifier "undefined4") (identifier "uVar7") (; ";")) (declaration "undefined4 *puVar8;" (type_identifier "undefined4") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "byte *pbVar10;" (type_identifier "byte") (pointer_declarator "*pbVar10" (* "*") (identifier "pbVar10")) (; ";")) (declaration "byte *pbVar11;" (type_identifier "byte") (pointer_declarator "*pbVar11" (* "*") (identifier "pbVar11")) (; ";")) (declaration "int iVar12;" (primitive_type "int") (identifier "iVar12") (; ";")) (declaration "int *piVar13;" (primitive_type "int") (pointer_declarator "*piVar13" (* "*") (identifier "piVar13")) (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (declaration "int iVar15;" (primitive_type "int") (identifier "iVar15") (; ";")) (declaration "char *pcVar16;" (primitive_type "char") (pointer_declarator "*pcVar16" (* "*") (identifier "pcVar16")) (; ";")) (declaration "int iVar17;" (primitive_type "int") (identifier "iVar17") (; ";")) (declaration "undefined4 uVar18;" (type_identifier "undefined4") (identifier "uVar18") (; ";")) (declaration "int iVar19;" (primitive_type "int") (identifier "iVar19") (; ";")) (expression_statement "puVar2 = PTR_DAT_0015b694;" (assignment_expression "puVar2 = PTR_DAT_0015b694" (identifier "puVar2") (= "=") (identifier "PTR_DAT_0015b694")) (; ";")) (expression_statement "pcVar16 = *(char **)(*param_5 + 0xc);" (assignment_expression "pcVar16 = *(char **)(*param_5 + 0xc)" (identifier "pcVar16") (= "=") (pointer_expression "*(char **)(*param_5 + 0xc)" (* "*") (cast_expression "(char **)(*param_5 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_5 + 0xc)" (( "(") (binary_expression "*param_5 + 0xc" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "cVar9 = *pcVar16;" (assignment_expression "cVar9 = *pcVar16" (identifier "cVar9") (= "=") (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16"))) (; ";")) (if_statement "if (cVar9 == -0x5c) {\n    cVar9 = pcVar16[0x28];\n  }" (if "if") (parenthesized_expression "(cVar9 == -0x5c)" (( "(") (binary_expression "cVar9 == -0x5c" (identifier "cVar9") (== "==") (number_literal "-0x5c")) () ")")) (compound_statement "{\n    cVar9 = pcVar16[0x28];\n  }" ({ "{") (expression_statement "cVar9 = pcVar16[0x28];" (assignment_expression "cVar9 = pcVar16[0x28]" (identifier "cVar9") (= "=") (subscript_expression "pcVar16[0x28]" (identifier "pcVar16") ([ "[") (number_literal "0x28") (] "]"))) (; ";")) (} "}"))) (if_statement "if (cVar9 == -0x5b) {\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }\n  else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }" (if "if") (parenthesized_expression "(cVar9 == -0x5b)" (( "(") (binary_expression "cVar9 == -0x5b" (identifier "cVar9") (== "==") (number_literal "-0x5b")) () ")")) (compound_statement "{\n    iVar15 = **(int **)(pcVar16 + 0x14);\n  }" ({ "{") (expression_statement "iVar15 = **(int **)(pcVar16 + 0x14);" (assignment_expression "iVar15 = **(int **)(pcVar16 + 0x14)" (identifier "iVar15") (= "=") (pointer_expression "**(int **)(pcVar16 + 0x14)" (* "*") (pointer_expression "*(int **)(pcVar16 + 0x14)" (* "*") (cast_expression "(int **)(pcVar16 + 0x14)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(pcVar16 + 0x14)" (( "(") (binary_expression "pcVar16 + 0x14" (identifier "pcVar16") (+ "+") (number_literal "0x14")) () ")")))))) (; ";")) (} "}")) (else_clause "else {\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }" (else "else") (compound_statement "{\n    if (cVar9 != '\x7f') {\n      return 1;\n    }\n    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);\n  }" ({ "{") (if_statement "if (cVar9 != '\x7f') {\n      return 1;\n    }" (if "if") (parenthesized_expression "(cVar9 != '\x7f')" (( "(") (binary_expression "cVar9 != '\x7f'" (identifier "cVar9") (!= "!=") (char_literal "'\x7f'" (' "'") (escape_sequence "\x7f") (' "'"))) () ")")) (compound_statement "{\n      return 1;\n    }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);" (assignment_expression "iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14)" (identifier "iVar15") (= "=") (pointer_expression "*(int *)**(undefined4 **)(pcVar16 + 0x14)" (* "*") (cast_expression "(int *)**(undefined4 **)(pcVar16 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "**(undefined4 **)(pcVar16 + 0x14)" (* "*") (pointer_expression "*(undefined4 **)(pcVar16 + 0x14)" (* "*") (cast_expression "(undefined4 **)(pcVar16 + 0x14)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(pcVar16 + 0x14)" (( "(") (binary_expression "pcVar16 + 0x14" (identifier "pcVar16") (+ "+") (number_literal "0x14")) () ")")))))))) (; ";")) (} "}")))) (expression_statement "iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;" (assignment_expression "iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4" (identifier "iVar3") (= "=") (binary_expression "(uint)*(ushort *)(param_3 + 0x34) - param_4" (binary_expression "(uint)*(ushort *)(param_3 + 0x34)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(param_3 + 0x34)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x34)" (( "(") (binary_expression "param_3 + 0x34" (identifier "param_3") (+ "+") (number_literal "0x34")) () ")")))) (- "-") (identifier "param_4"))) (; ";")) (if_statement "if (iVar3 <= iVar15) {\n    iVar15 = iVar3;\n  }" (if "if") (parenthesized_expression "(iVar3 <= iVar15)" (( "(") (binary_expression "iVar3 <= iVar15" (identifier "iVar3") (<= "<=") (identifier "iVar15")) () ")")) (compound_statement "{\n    iVar15 = iVar3;\n  }" ({ "{") (expression_statement "iVar15 = iVar3;" (assignment_expression "iVar15 = iVar3" (identifier "iVar15") (= "=") (identifier "iVar3")) (; ";")) (} "}"))) (if_statement "if (iVar15 < 2) {\n    return 1;\n  }" (if "if") (parenthesized_expression "(iVar15 < 2)" (( "(") (binary_expression "iVar15 < 2" (identifier "iVar15") (< "<") (number_literal "2")) () ")")) (compound_statement "{\n    return 1;\n  }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "iVar19 = 1;" (assignment_expression "iVar19 = 1" (identifier "iVar19") (= "=") (number_literal "1")) (; ";")) (expression_statement "iVar12 = *(int *)(*param_5 + 0x10);" (assignment_expression "iVar12 = *(int *)(*param_5 + 0x10)" (identifier "iVar12") (= "=") (pointer_expression "*(int *)(*param_5 + 0x10)" (* "*") (cast_expression "(int *)(*param_5 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_5 + 0x10)" (( "(") (binary_expression "*param_5 + 0x10" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);" (assignment_expression "pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914)" (identifier "pcVar4") (= "=") (cast_expression "(code *)(PTR_LAB_0015b65c + 0x5914)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0015b65c + 0x5914)" (( "(") (binary_expression "PTR_LAB_0015b65c + 0x5914" (identifier "PTR_LAB_0015b65c") (+ "+") (number_literal "0x5914")) () ")")))) (; ";")) (expression_statement "iVar17 = param_4 + 1;" (assignment_expression "iVar17 = param_4 + 1" (identifier "iVar17") (= "=") (binary_expression "param_4 + 1" (identifier "param_4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar13 = *(int **)(iVar12 + 0x14);" (assignment_expression "piVar13 = *(int **)(iVar12 + 0x14)" (identifier "piVar13") (= "=") (pointer_expression "*(int **)(iVar12 + 0x14)" (* "*") (cast_expression "(int **)(iVar12 + 0x14)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar12 + 0x14)" (( "(") (binary_expression "iVar12 + 0x14" (identifier "iVar12") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);" (assignment_expression "pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c)" (identifier "pcVar5") (= "=") (cast_expression "(code *)(PTR_LAB_0015b65c + 0x5a4c)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0015b65c + 0x5a4c)" (( "(") (binary_expression "PTR_LAB_0015b65c + 0x5a4c" (identifier "PTR_LAB_0015b65c") (+ "+") (number_literal "0x5a4c")) () ")")))) (; ";")) (expression_statement "pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);" (assignment_expression "pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808)" (identifier "pcVar6") (= "=") (cast_expression "(code *)(PTR_LAB_0015b740 + 0x7808)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0015b740 + 0x7808)" (( "(") (binary_expression "PTR_LAB_0015b740 + 0x7808" (identifier "PTR_LAB_0015b740") (+ "+") (number_literal "0x7808")) () ")")))) (; ";")) (expression_statement "iVar3 = 0x14;" (assignment_expression "iVar3 = 0x14" (identifier "iVar3") (= "=") (number_literal "0x14")) (; ";")) (expression_statement "pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);" (assignment_expression "pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18)" (identifier "pcVar16") (= "=") (pointer_expression "*(char **)(*(int *)(pcVar16 + 0x14) + 0x18)" (* "*") (cast_expression "(char **)(*(int *)(pcVar16 + 0x14) + 0x18)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(pcVar16 + 0x14) + 0x18)" (( "(") (binary_expression "*(int *)(pcVar16 + 0x14) + 0x18" (pointer_expression "*(int *)(pcVar16 + 0x14)" (* "*") (cast_expression "(int *)(pcVar16 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar16 + 0x14)" (( "(") (binary_expression "pcVar16 + 0x14" (identifier "pcVar16") (+ "+") (number_literal "0x14")) () ")")))) (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;" (if "if") (parenthesized_expression "((*(uint *)(iVar12 + 4) & 0x800) == 0)" (( "(") (binary_expression "(*(uint *)(iVar12 + 4) & 0x800) == 0" (parenthesized_expression "(*(uint *)(iVar12 + 4) & 0x800)" (( "(") (binary_expression "*(uint *)(iVar12 + 4) & 0x800" (pointer_expression "*(uint *)(iVar12 + 4)" (* "*") (cast_expression "(uint *)(iVar12 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar12 + 4)" (( "(") (binary_expression "iVar12 + 4" (identifier "iVar12") (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "0x800")) () ")")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00077b60;" (goto "goto") (statement_identifier "LAB_00077b60") (; ";"))) (do_statement "do {\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  } while( true );" (do "do") (compound_statement "{\n    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);\n    while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }\n  }" ({ "{") (expression_statement "uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);" (assignment_expression "uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4)" (identifier "uVar18") (= "=") (pointer_expression "*(undefined4 *)(*piVar13 + iVar3 + 4)" (* "*") (cast_expression "(undefined4 *)(*piVar13 + iVar3 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*piVar13 + iVar3 + 4)" (( "(") (binary_expression "*piVar13 + iVar3 + 4" (binary_expression "*piVar13 + iVar3" (pointer_expression "*piVar13" (* "*") (identifier "piVar13")) (+ "+") (identifier "iVar3")) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (while_statement "while( true ) {\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      if (*pcVar16 != -0x62) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }\n      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }\n      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }\n      uVar7 = (*pcVar4)(pcVar16);\n      iVar3 = (*pcVar5)(uVar18,uVar7);\n      if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }\n      if (iVar3 != iVar12) {\n        return iVar19;\n      }\n      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);\n      if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }\n      pbVar10 = (byte *)*puVar8;\n      uVar14 = (uint)*pbVar10;\n      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);\n      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }\n      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }\n      iVar19 = iVar19 + 1;\n      iVar17 = iVar17 + 1;\n      if (iVar15 == iVar19) {\n        return iVar19;\n      }\n      iVar3 = iVar19 * 0x14;\n      iVar12 = *(int *)(*param_5 + 0x10);\n      piVar13 = *(int **)(iVar12 + 0x14);\n      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);\n      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;\nLAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);\n    }" ({ "{") (if_statement "if (*pcVar16 != -0x62) {\n        return iVar19;\n      }" (if "if") (parenthesized_expression "(*pcVar16 != -0x62)" (( "(") (binary_expression "*pcVar16 != -0x62" (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16")) (!= "!=") (number_literal "-0x62")) () ")")) (compound_statement "{\n        return iVar19;\n      }" ({ "{") (return_statement "return iVar19;" (return "return") (identifier "iVar19") (; ";")) (} "}"))) (if_statement "if (*(int *)(pcVar16 + 0x1c) != param_2) {\n        return iVar19;\n      }" (if "if") (parenthesized_expression "(*(int *)(pcVar16 + 0x1c) != param_2)" (( "(") (binary_expression "*(int *)(pcVar16 + 0x1c) != param_2" (pointer_expression "*(int *)(pcVar16 + 0x1c)" (* "*") (cast_expression "(int *)(pcVar16 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar16 + 0x1c)" (( "(") (binary_expression "pcVar16 + 0x1c" (identifier "pcVar16") (+ "+") (number_literal "0x1c")) () ")")))) (!= "!=") (identifier "param_2")) () ")")) (compound_statement "{\n        return iVar19;\n      }" ({ "{") (return_statement "return iVar19;" (return "return") (identifier "iVar19") (; ";")) (} "}"))) (if_statement "if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {\n        return iVar19;\n      }" (if "if") (parenthesized_expression "(*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2))" (( "(") (binary_expression "*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" (pointer_expression "*(int *)(pcVar16 + 0x20)" (* "*") (cast_expression "(int *)(pcVar16 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar16 + 0x20)" (( "(") (binary_expression "pcVar16 + 0x20" (identifier "pcVar16") (+ "+") (number_literal "0x20")) () ")")))) (!= "!=") (cast_expression "(int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" (* "*") (cast_expression "(short *)(*(int *)(param_3 + 4) + iVar17 * 2)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_3 + 4) + iVar17 * 2)" (( "(") (binary_expression "*(int *)(param_3 + 4) + iVar17 * 2" (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (+ "+") (binary_expression "iVar17 * 2" (identifier "iVar17") (* "*") (number_literal "2"))) () ")")))))) () ")")) (compound_statement "{\n        return iVar19;\n      }" ({ "{") (return_statement "return iVar19;" (return "return") (identifier "iVar19") (; ";")) (} "}"))) (if_statement "if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {\n        return iVar19;\n      }" (if "if") (parenthesized_expression "(*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4))" (( "(") (binary_expression "*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=\n          *(char *)(*(int *)(param_3 + 0x1c) + param_4)" (pointer_expression "*(char *)(*(int *)(param_3 + 0x1c) + iVar17)" (* "*") (cast_expression "(char *)(*(int *)(param_3 + 0x1c) + iVar17)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_3 + 0x1c) + iVar17)" (( "(") (binary_expression "*(int *)(param_3 + 0x1c) + iVar17" (pointer_expression "*(int *)(param_3 + 0x1c)" (* "*") (cast_expression "(int *)(param_3 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c)" (( "(") (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) () ")")))) (+ "+") (identifier "iVar17")) () ")")))) (!= "!=") (pointer_expression "*(char *)(*(int *)(param_3 + 0x1c) + param_4)" (* "*") (cast_expression "(char *)(*(int *)(param_3 + 0x1c) + param_4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_3 + 0x1c) + param_4)" (( "(") (binary_expression "*(int *)(param_3 + 0x1c) + param_4" (pointer_expression "*(int *)(param_3 + 0x1c)" (* "*") (cast_expression "(int *)(param_3 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x1c)" (( "(") (binary_expression "param_3 + 0x1c" (identifier "param_3") (+ "+") (number_literal "0x1c")) () ")")))) (+ "+") (identifier "param_4")) () ")"))))) () ")")) (compound_statement "{\n        return iVar19;\n      }" ({ "{") (return_statement "return iVar19;" (return "return") (identifier "iVar19") (; ";")) (} "}"))) (expression_statement "uVar7 = (*pcVar4)(pcVar16);" (assignment_expression "uVar7 = (*pcVar4)(pcVar16)" (identifier "uVar7") (= "=") (call_expression "(*pcVar4)(pcVar16)" (parenthesized_expression "(*pcVar4)" (( "(") (pointer_expression "*pcVar4" (* "*") (identifier "pcVar4")) () ")")) (argument_list "(pcVar16)" (( "(") (identifier "pcVar16") () ")")))) (; ";")) (expression_statement "iVar3 = (*pcVar5)(uVar18,uVar7);" (assignment_expression "iVar3 = (*pcVar5)(uVar18,uVar7)" (identifier "iVar3") (= "=") (call_expression "(*pcVar5)(uVar18,uVar7)" (parenthesized_expression "(*pcVar5)" (( "(") (pointer_expression "*pcVar5" (* "*") (identifier "pcVar5")) () ")")) (argument_list "(uVar18,uVar7)" (( "(") (identifier "uVar18") (, ",") (identifier "uVar7") () ")")))) (; ";")) (if_statement "if (*(int *)(pcVar16 + 0x20) < 0) {\n        iVar12 = 0x44;\n      }\n      else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }" (if "if") (parenthesized_expression "(*(int *)(pcVar16 + 0x20) < 0)" (( "(") (binary_expression "*(int *)(pcVar16 + 0x20) < 0" (pointer_expression "*(int *)(pcVar16 + 0x20)" (* "*") (cast_expression "(int *)(pcVar16 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar16 + 0x20)" (( "(") (binary_expression "pcVar16 + 0x20" (identifier "pcVar16") (+ "+") (number_literal "0x20")) () ")")))) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        iVar12 = 0x44;\n      }" ({ "{") (expression_statement "iVar12 = 0x44;" (assignment_expression "iVar12 = 0x44" (identifier "iVar12") (= "=") (number_literal "0x44")) (; ";")) (} "}")) (else_clause "else {\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }" (else "else") (compound_statement "{\n        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);\n      }" ({ "{") (expression_statement "iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);" (assignment_expression "iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" (identifier "iVar12") (= "=") (cast_expression "(int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" (* "*") (cast_expression "(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd)" (( "(") (binary_expression "*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd" (binary_expression "*(int *)(*(int *)(param_3 + 0xc) + 4) +\n                                *(int *)(pcVar16 + 0x20) * 0x10" (pointer_expression "*(int *)(*(int *)(param_3 + 0xc) + 4)" (* "*") (cast_expression "(int *)(*(int *)(param_3 + 0xc) + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_3 + 0xc) + 4)" (( "(") (binary_expression "*(int *)(param_3 + 0xc) + 4" (pointer_expression "*(int *)(param_3 + 0xc)" (* "*") (cast_expression "(int *)(param_3 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0xc)" (( "(") (binary_expression "param_3 + 0xc" (identifier "param_3") (+ "+") (number_literal "0xc")) () ")")))) (+ "+") (number_literal "4")) () ")")))) (+ "+") (binary_expression "*(int *)(pcVar16 + 0x20) * 0x10" (pointer_expression "*(int *)(pcVar16 + 0x20)" (* "*") (cast_expression "(int *)(pcVar16 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar16 + 0x20)" (( "(") (binary_expression "pcVar16 + 0x20" (identifier "pcVar16") (+ "+") (number_literal "0x20")) () ")")))) (* "*") (number_literal "0x10"))) (+ "+") (number_literal "0xd")) () ")")))))) (; ";")) (} "}")))) (if_statement "if (iVar3 != iVar12) {\n        return iVar19;\n      }" (if "if") (parenthesized_expression "(iVar3 != iVar12)" (( "(") (binary_expression "iVar3 != iVar12" (identifier "iVar3") (!= "!=") (identifier "iVar12")) () ")")) (compound_statement "{\n        return iVar19;\n      }" ({ "{") (return_statement "return iVar19;" (return "return") (identifier "iVar19") (; ";")) (} "}"))) (expression_statement "puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);" (assignment_expression "puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18)" (identifier "puVar8") (= "=") (cast_expression "(undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*pcVar6)(param_1,pcVar16,uVar18)" (parenthesized_expression "(*pcVar6)" (( "(") (pointer_expression "*pcVar6" (* "*") (identifier "pcVar6")) () ")")) (argument_list "(param_1,pcVar16,uVar18)" (( "(") (identifier "param_1") (, ",") (identifier "pcVar16") (, ",") (identifier "uVar18") () ")"))))) (; ";")) (if_statement "if (puVar8 == (undefined4 *)0x0) {\n        return iVar19;\n      }" (if "if") (parenthesized_expression "(puVar8 == (undefined4 *)0x0)" (( "(") (binary_expression "puVar8 == (undefined4 *)0x0" (identifier "puVar8") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return iVar19;\n      }" ({ "{") (return_statement "return iVar19;" (return "return") (identifier "iVar19") (; ";")) (} "}"))) (expression_statement "pbVar10 = (byte *)*puVar8;" (assignment_expression "pbVar10 = (byte *)*puVar8" (identifier "pbVar10") (= "=") (cast_expression "(byte *)*puVar8" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar8" (* "*") (identifier "puVar8")))) (; ";")) (expression_statement "uVar14 = (uint)*pbVar10;" (assignment_expression "uVar14 = (uint)*pbVar10" (identifier "uVar14") (= "=") (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "pbVar10"))) (; ";")) (expression_statement "pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);" (assignment_expression "pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4)" (identifier "pbVar11") (= "=") (pointer_expression "*(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4)" (* "*") (cast_expression "(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4)" (( "(") (type_descriptor "byte **" (type_identifier "byte") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_3 + 0x20) + iVar17 * 4)" (( "(") (binary_expression "*(int *)(param_3 + 0x20) + iVar17 * 4" (pointer_expression "*(int *)(param_3 + 0x20)" (* "*") (cast_expression "(int *)(param_3 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x20)" (( "(") (binary_expression "param_3 + 0x20" (identifier "param_3") (+ "+") (number_literal "0x20")) () ")")))) (+ "+") (binary_expression "iVar17 * 4" (identifier "iVar17") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {\n        return iVar19;\n      }" (if "if") (parenthesized_expression "(puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28])" (( "(") (binary_expression "puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]" (subscript_expression "puVar2[*pbVar11 - 0x7a28]" (identifier "puVar2") ([ "[") (binary_expression "*pbVar11 - 0x7a28" (pointer_expression "*pbVar11" (* "*") (identifier "pbVar11")) (- "-") (number_literal "0x7a28")) (] "]")) (!= "!=") (subscript_expression "puVar2[uVar14 - 0x7a28]" (identifier "puVar2") ([ "[") (binary_expression "uVar14 - 0x7a28" (identifier "uVar14") (- "-") (number_literal "0x7a28")) (] "]"))) () ")")) (compound_statement "{\n        return iVar19;\n      }" ({ "{") (return_statement "return iVar19;" (return "return") (identifier "iVar19") (; ";")) (} "}"))) (while_statement "while (pbVar10 = pbVar10 + 1, uVar14 != 0) {\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }" (while "while") (parenthesized_expression "(pbVar10 = pbVar10 + 1, uVar14 != 0)" (( "(") (comma_expression "pbVar10 = pbVar10 + 1, uVar14 != 0" (assignment_expression "pbVar10 = pbVar10 + 1" (identifier "pbVar10") (= "=") (binary_expression "pbVar10 + 1" (identifier "pbVar10") (+ "+") (number_literal "1"))) (, ",") (binary_expression "uVar14 != 0" (identifier "uVar14") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n        pbVar1 = pbVar11 + 1;\n        uVar14 = (uint)*pbVar10;\n        pbVar11 = pbVar11 + 1;\n        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }\n      }" ({ "{") (expression_statement "pbVar1 = pbVar11 + 1;" (assignment_expression "pbVar1 = pbVar11 + 1" (identifier "pbVar1") (= "=") (binary_expression "pbVar11 + 1" (identifier "pbVar11") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar14 = (uint)*pbVar10;" (assignment_expression "uVar14 = (uint)*pbVar10" (identifier "uVar14") (= "=") (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "pbVar10"))) (; ";")) (expression_statement "pbVar11 = pbVar11 + 1;" (assignment_expression "pbVar11 = pbVar11 + 1" (identifier "pbVar11") (= "=") (binary_expression "pbVar11 + 1" (identifier "pbVar11") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {\n          return iVar19;\n        }" (if "if") (parenthesized_expression "(puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28])" (( "(") (binary_expression "puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]" (subscript_expression "puVar2[uVar14 - 0x7a28]" (identifier "puVar2") ([ "[") (binary_expression "uVar14 - 0x7a28" (identifier "uVar14") (- "-") (number_literal "0x7a28")) (] "]")) (!= "!=") (subscript_expression "puVar2[*pbVar1 - 0x7a28]" (identifier "puVar2") ([ "[") (binary_expression "*pbVar1 - 0x7a28" (pointer_expression "*pbVar1" (* "*") (identifier "pbVar1")) (- "-") (number_literal "0x7a28")) (] "]"))) () ")")) (compound_statement "{\n          return iVar19;\n        }" ({ "{") (return_statement "return iVar19;" (return "return") (identifier "iVar19") (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" (identifier "iVar19") (= "=") (binary_expression "iVar19 + 1" (identifier "iVar19") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar17 = iVar17 + 1;" (assignment_expression "iVar17 = iVar17 + 1" (identifier "iVar17") (= "=") (binary_expression "iVar17 + 1" (identifier "iVar17") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar15 == iVar19) {\n        return iVar19;\n      }" (if "if") (parenthesized_expression "(iVar15 == iVar19)" (( "(") (binary_expression "iVar15 == iVar19" (identifier "iVar15") (== "==") (identifier "iVar19")) () ")")) (compound_statement "{\n        return iVar19;\n      }" ({ "{") (return_statement "return iVar19;" (return "return") (identifier "iVar19") (; ";")) (} "}"))) (expression_statement "iVar3 = iVar19 * 0x14;" (assignment_expression "iVar3 = iVar19 * 0x14" (identifier "iVar3") (= "=") (binary_expression "iVar19 * 0x14" (identifier "iVar19") (* "*") (number_literal "0x14"))) (; ";")) (expression_statement "iVar12 = *(int *)(*param_5 + 0x10);" (assignment_expression "iVar12 = *(int *)(*param_5 + 0x10)" (identifier "iVar12") (= "=") (pointer_expression "*(int *)(*param_5 + 0x10)" (* "*") (cast_expression "(int *)(*param_5 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_5 + 0x10)" (( "(") (binary_expression "*param_5 + 0x10" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "piVar13 = *(int **)(iVar12 + 0x14);" (assignment_expression "piVar13 = *(int **)(iVar12 + 0x14)" (identifier "piVar13") (= "=") (pointer_expression "*(int **)(iVar12 + 0x14)" (* "*") (cast_expression "(int **)(iVar12 + 0x14)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar12 + 0x14)" (( "(") (binary_expression "iVar12 + 0x14" (identifier "iVar12") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);" (assignment_expression "pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" (identifier "pcVar16") (= "=") (pointer_expression "*(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" (* "*") (cast_expression "(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4)" (( "(") (binary_expression "*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4" (binary_expression "*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3" (pointer_expression "*(int *)(*(int *)(*param_5 + 0xc) + 0x14)" (* "*") (cast_expression "(int *)(*(int *)(*param_5 + 0xc) + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*param_5 + 0xc) + 0x14)" (( "(") (binary_expression "*(int *)(*param_5 + 0xc) + 0x14" (pointer_expression "*(int *)(*param_5 + 0xc)" (* "*") (cast_expression "(int *)(*param_5 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_5 + 0xc)" (( "(") (binary_expression "*param_5 + 0xc" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (+ "+") (number_literal "0xc")) () ")")))) (+ "+") (number_literal "0x14")) () ")")))) (+ "+") (identifier "iVar3")) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;" (if "if") (parenthesized_expression "((*(uint *)(iVar12 + 4) & 0x800) != 0)" (( "(") (binary_expression "(*(uint *)(iVar12 + 4) & 0x800) != 0" (parenthesized_expression "(*(uint *)(iVar12 + 4) & 0x800)" (( "(") (binary_expression "*(uint *)(iVar12 + 4) & 0x800" (pointer_expression "*(uint *)(iVar12 + 4)" (* "*") (cast_expression "(uint *)(iVar12 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar12 + 4)" (( "(") (binary_expression "iVar12 + 4" (identifier "iVar12") (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "0x800")) () ")")) (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (labeled_statement "LAB_00077b60:\n      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);" (statement_identifier "LAB_00077b60") (: ":") (expression_statement "uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);" (assignment_expression "uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4)" (identifier "uVar18") (= "=") (pointer_expression "*(undefined4 *)((int)piVar13 + iVar3 + 4)" (* "*") (cast_expression "(undefined4 *)((int)piVar13 + iVar3 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)piVar13 + iVar3 + 4)" (( "(") (binary_expression "(int)piVar13 + iVar3 + 4" (binary_expression "(int)piVar13 + iVar3" (cast_expression "(int)piVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar13")) (+ "+") (identifier "iVar3")) (+ "+") (number_literal "4")) () ")"))))) (; ";"))) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

/* WARNING: Type propagation algorithm not settling */

int function_1(type_1 *pParse,int var_8,type_2 *pIdx,int var_2,type_3 *pTerm)

{
  type_4 *pbVar1;
  type_5 *puVar2;
  type_6 var_1;
  int var_3;
  type_7 *pcVar4;
  type_7 *pcVar5;
  type_7 *pcVar6;
  type_8 uVar7;
  type_8 *var_10;
  type_4 *var_11;
  type_4 *var_13;
  type_9 *pEVar12;
  type_10 *pSVar13;
  type_11 var_12;
  int var_4;
  type_9 *pEVar16;
  char *var_7;
  int var_15;
  type_8 uVar19;
  int var_9;
  int var_14;
  
  puVar2 = PTR_DAT_0015b694;
  pEVar16 = pTerm->pExpr->pLeft;
  var_1 = pEVar16->op;
  if (var_1 == 0xa4) {
    var_1 = pEVar16->op2;
  }
  if (var_1 == 0xa5) {
    var_4 = ((pEVar16->x).pList)->nExpr;
  }
  else {
    if (var_1 != '\x7f') {
      return 1;
    }
    var_4 = ((pEVar16->x).pSelect)->pEList->nExpr;
  }
  var_3 = (type_11)pIdx->nColumn - var_2;
  if (var_3 <= var_4) {
    var_4 = var_3;
  }
  if (var_4 < 2) {
    return 1;
  }
  var_9 = 1;
  pEVar12 = pTerm->pExpr->pRight;
  pcVar4 = (type_7 *)(var_5 + 0x5914);
  var_15 = var_2 + 1;
  pSVar13 = (pEVar12->x).pSelect;
  pcVar5 = (type_7 *)(var_5 + 0x5a4c);
  pcVar6 = (type_7 *)(var_6 + 0x7808);
  var_3 = 0x14;
  var_7 = (char *)((pEVar16->x).pSelect)->addrOpenEphm[0];
  if ((pEVar12->flags & 0x800) == 0) goto LAB_00077b60;
  do {
    uVar19 = *(type_8 *)((int)&pSVar13->pEList->a[0].pExpr + var_3);
    var_14 = var_9;
    while( true ) {
      if (*var_7 != -0x62) {
        return var_14;
      }
      if (*(int *)(var_7 + 0x1c) != var_8) {
        return var_14;
      }
      if (*(int *)(var_7 + 0x20) != (int)pIdx->aiColumn[var_15]) {
        return var_14;
      }
      if (pIdx->aSortOrder[var_15] != pIdx->aSortOrder[var_2]) {
        return var_14;
      }
      uVar7 = (*pcVar4)(var_7);
      var_3 = (*pcVar5)(uVar19,uVar7);
      if (*(int *)(var_7 + 0x20) < 0) {
        var_9 = 0x44;
      }
      else {
        var_9 = (int)pIdx->pTable->aCol[*(int *)(var_7 + 0x20)].affinity;
      }
      if (var_3 != var_9) {
        return var_14;
      }
      var_10 = (type_8 *)(*pcVar6)(pParse,var_7,uVar19);
      if (var_10 == (type_8 *)0x0) {
        return var_14;
      }
      var_11 = (type_4 *)*var_10;
      var_12 = (type_11)*var_11;
      var_13 = (type_4 *)pIdx->azColl[var_15];
      if (puVar2[*var_13 - 0x7a28] != puVar2[var_12 - 0x7a28]) {
        return var_14;
      }
      while (var_11 = var_11 + 1, var_12 != 0) {
        pbVar1 = var_13 + 1;
        var_12 = (type_11)*var_11;
        var_13 = var_13 + 1;
        if (puVar2[var_12 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {
          return var_14;
        }
      }
      var_9 = var_14 + 1;
      var_15 = var_15 + 1;
      if (var_4 == var_9) {
        return var_9;
      }
      var_3 = var_14 * 0x14 + 0x14;
      pEVar16 = pTerm->pExpr->pRight;
      pSVar13 = (pEVar16->x).pSelect;
      var_7 = (char *)(pTerm->pExpr->pLeft->x).pList[1].a[var_14 + -1].u.iConstExprReg;
      if ((pEVar16->flags & 0x800) != 0) break;
LAB_00077b60:
      uVar19 = *(type_8 *)((int)pSVar13->addrOpenEphm + var_3 + -0x14);
      var_14 = var_9;
    }
  } while( true );
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)) right: (number_literal))))))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) consequence: (compound_statement (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))))))) consequence: (compound_statement (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))))))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (identifier) (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) right: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (return_statement (identifier)))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal)))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal))) right: (subscript_expression argument: (identifier) index: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) consequence: (compound_statement (return_statement (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (number_literal))))) right: (identifier)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (break_statement)) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)) right: (number_literal))))))))))) condition: (parenthesized_expression (true))))))

int MASKED(undefined4 param_1,int param_2,int param_3,int param_4,int *param_5)

{
  byte *pbVar1;
  undefined *puVar2;
  char cVar9;
  int iVar3;
  code *pcVar4;
  code *pcVar5;
  code *pcVar6;
  undefined4 uVar7;
  undefined4 *puVar8;
  byte *pbVar10;
  byte *pbVar11;
  int iVar12;
  int *piVar13;
  uint uVar14;
  int iVar15;
  char *pcVar16;
  int iVar17;
  undefined4 uVar18;
  int iVar19;
  
  puVar2 = PTR_DAT_0015b694;
  pcVar16 = *(char **)(*param_5 + 0xc);
  cVar9 = *pcVar16;
  if (cVar9 == -0x5c) {
    cVar9 = pcVar16[0x28];
  }
  if (cVar9 == -0x5b) {
    iVar15 = **(int **)(pcVar16 + 0x14);
  }
  else {
    if (cVar9 != '\x7f') {
      return 1;
    }
    iVar15 = *(int *)**(undefined4 **)(pcVar16 + 0x14);
  }
  iVar3 = (uint)*(ushort *)(param_3 + 0x34) - param_4;
  if (iVar3 <= iVar15) {
    iVar15 = iVar3;
  }
  if (iVar15 < 2) {
    return 1;
  }
  iVar19 = 1;
  iVar12 = *(int *)(*param_5 + 0x10);
  pcVar4 = (code *)(PTR_LAB_0015b65c + 0x5914);
  iVar17 = param_4 + 1;
  piVar13 = *(int **)(iVar12 + 0x14);
  pcVar5 = (code *)(PTR_LAB_0015b65c + 0x5a4c);
  pcVar6 = (code *)(PTR_LAB_0015b740 + 0x7808);
  iVar3 = 0x14;
  pcVar16 = *(char **)(*(int *)(pcVar16 + 0x14) + 0x18);
  if ((*(uint *)(iVar12 + 4) & 0x800) == 0) goto LAB_00077b60;
  do {
    uVar18 = *(undefined4 *)(*piVar13 + iVar3 + 4);
    while( true ) {
      if (*pcVar16 != -0x62) {
        return iVar19;
      }
      if (*(int *)(pcVar16 + 0x1c) != param_2) {
        return iVar19;
      }
      if (*(int *)(pcVar16 + 0x20) != (int)*(short *)(*(int *)(param_3 + 4) + iVar17 * 2)) {
        return iVar19;
      }
      if (*(char *)(*(int *)(param_3 + 0x1c) + iVar17) !=
          *(char *)(*(int *)(param_3 + 0x1c) + param_4)) {
        return iVar19;
      }
      uVar7 = (*pcVar4)(pcVar16);
      iVar3 = (*pcVar5)(uVar18,uVar7);
      if (*(int *)(pcVar16 + 0x20) < 0) {
        iVar12 = 0x44;
      }
      else {
        iVar12 = (int)*(char *)(*(int *)(*(int *)(param_3 + 0xc) + 4) +
                                *(int *)(pcVar16 + 0x20) * 0x10 + 0xd);
      }
      if (iVar3 != iVar12) {
        return iVar19;
      }
      puVar8 = (undefined4 *)(*pcVar6)(param_1,pcVar16,uVar18);
      if (puVar8 == (undefined4 *)0x0) {
        return iVar19;
      }
      pbVar10 = (byte *)*puVar8;
      uVar14 = (uint)*pbVar10;
      pbVar11 = *(byte **)(*(int *)(param_3 + 0x20) + iVar17 * 4);
      if (puVar2[*pbVar11 - 0x7a28] != puVar2[uVar14 - 0x7a28]) {
        return iVar19;
      }
      while (pbVar10 = pbVar10 + 1, uVar14 != 0) {
        pbVar1 = pbVar11 + 1;
        uVar14 = (uint)*pbVar10;
        pbVar11 = pbVar11 + 1;
        if (puVar2[uVar14 - 0x7a28] != puVar2[*pbVar1 - 0x7a28]) {
          return iVar19;
        }
      }
      iVar19 = iVar19 + 1;
      iVar17 = iVar17 + 1;
      if (iVar15 == iVar19) {
        return iVar19;
      }
      iVar3 = iVar19 * 0x14;
      iVar12 = *(int *)(*param_5 + 0x10);
      piVar13 = *(int **)(iVar12 + 0x14);
      pcVar16 = *(char **)(*(int *)(*(int *)(*param_5 + 0xc) + 0x14) + iVar3 + 4);
      if ((*(uint *)(iVar12 + 4) & 0x800) != 0) break;
LAB_00077b60:
      uVar18 = *(undefined4 *)((int)piVar13 + iVar3 + 4);
    }
  } while( true );
}

