
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int fts5VocabColumnMethod(sqlite3_vtab_cursor *pCursor,sqlite3_context *pCtx,int iCol)

{
  _func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *p_Var1;
  i64 iVal;
  sqlite3_module *psVar2;
  sqlite3_vtab *psVar3;
  int iVar4;
  
  if (iCol == 0) {
    sqlite3_result_text(pCtx,(char *)pCursor[0xc].pVtab,(int)pCursor[0xd].pVtab,
                        (_func_void_void_ptr *)&DAT_ffffffff);
  }
  else {
    psVar2 = pCursor[2].pVtab[1].pModule;
    iVar4 = pCursor->pVtab[2].nRef;
    p_Var1 = psVar2->xRowid;
    if (iVar4 == 0) {
      if (iCol == 1) {
        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {
          return 0;
        }
        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,
                            (_func_void_void_ptr *)0x0);
        return 0;
      }
      psVar3 = pCursor[7].pVtab;
      if (iCol == 2) {
        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];
        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];
      }
      else {
        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];
        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];
      }
    }
    else {
      if (iVar4 != 1) {
        if (iCol == 1) {
          iVal._0_4_ = (pCursor[4].pVtab)->pModule;
          iVal._4_4_ = (pCursor[4].pVtab)->nRef;
          sqlite3_result_int64(pCtx,iVal);
          return 0;
        }
        if (iCol != 2) {
          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {
            return 0;
          }
          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);
          return 0;
        }
        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {
          psVar3 = pCursor[0x10].pVtab;
        }
        else {
          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {
            return 0;
          }
          psVar3 = pCursor[0xf].pVtab;
        }
        if ((int)psVar3 < 0) {
          return 0;
        }
        if ((int)psVar2->xBestIndex <= (int)psVar3) {
          return 0;
        }
        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,
                            (_func_void_void_ptr *)0x0);
        return 0;
      }
      if (iCol == 1) {
        iVar4 = (pCursor[9].pVtab)->nRef;
        psVar2 = (pCursor[9].pVtab)->pModule;
      }
      else {
        iVar4 = (pCursor[8].pVtab)->nRef;
        psVar2 = (pCursor[8].pVtab)->pModule;
      }
    }
    if (-iVar4 < (int)(uint)(psVar2 != (sqlite3_module *)0x0)) {
      sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2));
      return 0;
    }
  }
  return 0;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

undefined4 FUN_000465c0(int *param_1,undefined4 param_2,int param_3)

{
  int iVar1;
  int iVar2;
  
  if (param_3 == 0) {
    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);
  }
  else {
    iVar2 = *(int *)(param_1[2] + 0xc);
    iVar1 = *(int *)(iVar2 + 0x30);
    if (*(int *)(*param_1 + 0x1c) == 0) {
      if (param_3 == 1) {
        if (iVar1 == 1) {
          return 0;
        }
        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);
        return 0;
      }
      iVar1 = param_1[7];
      if (param_3 == 2) {
        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);
        iVar1 = *(int *)(param_1[9] + iVar1 * 8);
      }
      else {
        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);
        iVar1 = *(int *)(param_1[8] + iVar1 * 8);
      }
    }
    else {
      if (*(int *)(*param_1 + 0x1c) != 1) {
        if (param_3 == 1) {
          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);
          return 0;
        }
        if (param_3 != 2) {
          if (iVar1 != 0) {
            return 0;
          }
          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);
          return 0;
        }
        if (iVar1 == 0) {
          iVar1 = param_1[0x10];
        }
        else {
          if (iVar1 != 2) {
            return 0;
          }
          iVar1 = param_1[0xf];
        }
        if (iVar1 < 0) {
          return 0;
        }
        if (*(int *)(iVar2 + 0xc) <= iVar1) {
          return 0;
        }
        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);
        return 0;
      }
      if (param_3 == 1) {
        iVar2 = ((int *)param_1[9])[1];
        iVar1 = *(int *)param_1[9];
      }
      else {
        iVar2 = ((int *)param_1[8])[1];
        iVar1 = *(int *)param_1[8];
      }
    }
    if (-iVar2 < (int)(uint)(iVar1 != 0)) {
      FUN_00025040(param_2,iVar1,iVar2,0x465cc);
      return 0;
    }
  }
  return 0;
}


PUSH EDI
PUSH ESI
PUSH EBX
MOV EDX,dword ptr [ESP + 0x18]
CALL 0x00014cf0
ADD EBX,0x102908
MOV EAX,dword ptr [ESP + 0x10]
TEST EDX,EDX
JZ 0x00046668
MOV ECX,dword ptr [EAX + 0x8]
MOV ESI,dword ptr [ECX + 0xc]
MOV ECX,dword ptr [EAX]
MOV ECX,dword ptr [ECX + 0x1c]
MOV EDI,dword ptr [ESI + 0x30]
TEST ECX,ECX
JNZ 0x00046630
CMP EDX,0x1
JZ 0x000466f0
MOV ECX,dword ptr [EAX + 0x1c]
CMP EDX,0x2
JZ 0x000466c0
MOV EAX,dword ptr [EAX + 0x20]
MOV EDX,dword ptr [EAX + ECX*0x8 + 0x4]
MOV EAX,dword ptr [EAX + ECX*0x8]
XOR ECX,ECX
CMP ECX,EAX
SBB ECX,EDX
JGE 0x0004667c
SUB ESP,0x4
PUSH EDX
PUSH EAX
PUSH dword ptr [ESP + 0x20]
CALL 0x00025040
ADD ESP,0x10
XOR EAX,EAX
POP EBX
POP ESI
POP EDI
RET
CMP ECX,0x1
JZ 0x00046718
CMP EDX,0x1
JZ 0x000466d0
CMP EDX,0x2
JZ 0x00046688
TEST EDI,EDI
JNZ 0x0004667c
MOV EAX,dword ptr [EAX + 0x3c]
SUB ESP,0x8
AND EAX,0x7fffffff
PUSH EAX
PUSH dword ptr [ESP + 0x20]
CALL 0x00024f80
ADD ESP,0x10
JMP 0x0004667c
PUSH -0x1
PUSH dword ptr [EAX + 0x34]
PUSH dword ptr [EAX + 0x30]
PUSH dword ptr [ESP + 0x20]
CALL 0x00046480
ADD ESP,0x10
POP EBX
XOR EAX,EAX
POP ESI
POP EDI
RET
TEST EDI,EDI
JZ 0x00046730
CMP EDI,0x2
JNZ 0x0004667c
MOV EAX,dword ptr [EAX + 0x3c]
TEST EAX,EAX
JS 0x0004667c
CMP dword ptr [ESI + 0xc],EAX
JLE 0x0004667c
PUSH 0x0
PUSH -0x1
MOV EDX,dword ptr [ESI + 0x10]
PUSH dword ptr [EDX + EAX*0x4]
PUSH dword ptr [ESP + 0x20]
CALL 0x00046480
ADD ESP,0x10
JMP 0x0004667c
MOV EAX,dword ptr [EAX + 0x24]
MOV EDX,dword ptr [EAX + ECX*0x8 + 0x4]
MOV EAX,dword ptr [EAX + ECX*0x8]
JMP 0x0004660f
MOV EAX,dword ptr [EAX + 0x10]
SUB ESP,0x4
PUSH dword ptr [EAX + 0x4]
PUSH dword ptr [EAX]
PUSH dword ptr [ESP + 0x20]
CALL 0x00025040
ADD ESP,0x10
JMP 0x0004667c
CMP EDI,0x1
JZ 0x0004667c
PUSH 0x0
PUSH -0x1
MOV EDX,dword ptr [EAX + 0x1c]
MOV EAX,dword ptr [ESI + 0x10]
PUSH dword ptr [EAX + EDX*0x4]
PUSH dword ptr [ESP + 0x20]
CALL 0x00046480
ADD ESP,0x10
JMP 0x0004667c
CMP EDX,0x1
JZ 0x00046740
MOV EAX,dword ptr [EAX + 0x20]
MOV EDX,dword ptr [EAX + 0x4]
MOV EAX,dword ptr [EAX]
JMP 0x0004660f
MOV EAX,dword ptr [EAX + 0x40]
JMP 0x00046698
MOV EAX,dword ptr [EAX + 0x24]
MOV EDX,dword ptr [EAX + 0x4]
MOV EAX,dword ptr [EAX]
JMP 0x0004660f
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nundefined4 FUN_000465c0(int *param_1,undefined4 param_2,int param_3)\n\n{\n  int iVar1;\n  int iVar2;\n  \n  if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }\n  return 0;\n}\n\n" comment (function_definition "undefined4 FUN_000465c0(int *param_1,undefined4 param_2,int param_3)\n\n{\n  int iVar1;\n  int iVar2;\n  \n  if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_000465c0(int *param_1,undefined4 param_2,int param_3)" identifier (parameter_list "(int *param_1,undefined4 param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  \n  if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (if_statement "if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }" { (expression_statement "FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);" (call_expression "FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff)" identifier (argument_list "(param_2,param_1[0xc],param_1[0xd],0xffffffff)" ( identifier , (subscript_expression "param_1[0xc]" identifier [ number_literal ]) , (subscript_expression "param_1[0xd]" identifier [ number_literal ]) , number_literal ))) ;) }) (else_clause "else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }" else (compound_statement "{\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }" { (expression_statement "iVar2 = *(int *)(param_1[2] + 0xc);" (assignment_expression "iVar2 = *(int *)(param_1[2] + 0xc)" identifier = (pointer_expression "*(int *)(param_1[2] + 0xc)" * (cast_expression "(int *)(param_1[2] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[2] + 0xc)" ( (binary_expression "param_1[2] + 0xc" (subscript_expression "param_1[2]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(iVar2 + 0x30);" (assignment_expression "iVar1 = *(int *)(iVar2 + 0x30)" identifier = (pointer_expression "*(int *)(iVar2 + 0x30)" * (cast_expression "(int *)(iVar2 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x30)" ( (binary_expression "iVar2 + 0x30" identifier + number_literal) ))))) ;) (if_statement "if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }" if (parenthesized_expression "(*(int *)(*param_1 + 0x1c) == 0)" ( (binary_expression "*(int *)(*param_1 + 0x1c) == 0" (pointer_expression "*(int *)(*param_1 + 0x1c)" * (cast_expression "(int *)(*param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x1c)" ( (binary_expression "*param_1 + 0x1c" (pointer_expression "*param_1" * identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }" { (if_statement "if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }" { (if_statement "if (iVar1 == 1) {\n          return 0;\n        }" if (parenthesized_expression "(iVar1 == 1)" ( (binary_expression "iVar1 == 1" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);" (call_expression "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0)" identifier (argument_list "(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0)" ( identifier , (pointer_expression "*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4)" * (cast_expression "(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar2 + 0x10) + param_1[7] * 4)" ( (binary_expression "*(int *)(iVar2 + 0x10) + param_1[7] * 4" (pointer_expression "*(int *)(iVar2 + 0x10)" * (cast_expression "(int *)(iVar2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))) + (binary_expression "param_1[7] * 4" (subscript_expression "param_1[7]" identifier [ number_literal ]) * number_literal)) )))) , number_literal , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = param_1[7];" (assignment_expression "iVar1 = param_1[7]" identifier = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) (if_statement "if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }" if (parenthesized_expression "(param_3 == 2)" ( (binary_expression "param_3 == 2" identifier == number_literal) )) (compound_statement "{\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }" { (expression_statement "iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);" (assignment_expression "iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8)" identifier = (pointer_expression "*(int *)(param_1[9] + 4 + iVar1 * 8)" * (cast_expression "(int *)(param_1[9] + 4 + iVar1 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[9] + 4 + iVar1 * 8)" ( (binary_expression "param_1[9] + 4 + iVar1 * 8" (binary_expression "param_1[9] + 4" (subscript_expression "param_1[9]" identifier [ number_literal ]) + number_literal) + (binary_expression "iVar1 * 8" identifier * number_literal)) ))))) ;) (expression_statement "iVar1 = *(int *)(param_1[9] + iVar1 * 8);" (assignment_expression "iVar1 = *(int *)(param_1[9] + iVar1 * 8)" identifier = (pointer_expression "*(int *)(param_1[9] + iVar1 * 8)" * (cast_expression "(int *)(param_1[9] + iVar1 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[9] + iVar1 * 8)" ( (binary_expression "param_1[9] + iVar1 * 8" (subscript_expression "param_1[9]" identifier [ number_literal ]) + (binary_expression "iVar1 * 8" identifier * number_literal)) ))))) ;) }) (else_clause "else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }" else (compound_statement "{\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }" { (expression_statement "iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);" (assignment_expression "iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8)" identifier = (pointer_expression "*(int *)(param_1[8] + 4 + iVar1 * 8)" * (cast_expression "(int *)(param_1[8] + 4 + iVar1 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[8] + 4 + iVar1 * 8)" ( (binary_expression "param_1[8] + 4 + iVar1 * 8" (binary_expression "param_1[8] + 4" (subscript_expression "param_1[8]" identifier [ number_literal ]) + number_literal) + (binary_expression "iVar1 * 8" identifier * number_literal)) ))))) ;) (expression_statement "iVar1 = *(int *)(param_1[8] + iVar1 * 8);" (assignment_expression "iVar1 = *(int *)(param_1[8] + iVar1 * 8)" identifier = (pointer_expression "*(int *)(param_1[8] + iVar1 * 8)" * (cast_expression "(int *)(param_1[8] + iVar1 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[8] + iVar1 * 8)" ( (binary_expression "param_1[8] + iVar1 * 8" (subscript_expression "param_1[8]" identifier [ number_literal ]) + (binary_expression "iVar1 * 8" identifier * number_literal)) ))))) ;) }))) }) (else_clause "else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }" else (compound_statement "{\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }" { (if_statement "if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }" if (parenthesized_expression "(*(int *)(*param_1 + 0x1c) != 1)" ( (binary_expression "*(int *)(*param_1 + 0x1c) != 1" (pointer_expression "*(int *)(*param_1 + 0x1c)" * (cast_expression "(int *)(*param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x1c)" ( (binary_expression "*param_1 + 0x1c" (pointer_expression "*param_1" * identifier) + number_literal) )))) != number_literal) )) (compound_statement "{\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }" { (if_statement "if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }" { (expression_statement "FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);" (call_expression "FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc)" identifier (argument_list "(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc)" ( identifier , (pointer_expression "*(undefined4 *)param_1[4]" * (cast_expression "(undefined4 *)param_1[4]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) , (subscript_expression "((undefined4 *)param_1[4])[1]" (parenthesized_expression "((undefined4 *)param_1[4])" ( (cast_expression "(undefined4 *)param_1[4]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ])) )) [ number_literal ]) , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }" if (parenthesized_expression "(param_3 != 2)" ( (binary_expression "param_3 != 2" identifier != number_literal) )) (compound_statement "{\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }" { (if_statement "if (iVar1 != 0) {\n            return 0;\n          }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);" (call_expression "FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff)" identifier (argument_list "(param_2,param_1[0xf] & 0x7fffffff)" ( identifier , (binary_expression "param_1[0xf] & 0x7fffffff" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) & number_literal) ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          iVar1 = param_1[0x10];\n        }" { (expression_statement "iVar1 = param_1[0x10];" (assignment_expression "iVar1 = param_1[0x10]" identifier = (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ;) }) (else_clause "else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }" else (compound_statement "{\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }" { (if_statement "if (iVar1 != 2) {\n            return 0;\n          }" if (parenthesized_expression "(iVar1 != 2)" ( (binary_expression "iVar1 != 2" identifier != number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = param_1[0xf];" (assignment_expression "iVar1 = param_1[0xf]" identifier = (subscript_expression "param_1[0xf]" identifier [ number_literal ])) ;) }))) (if_statement "if (iVar1 < 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar1 < 0)" ( (binary_expression "iVar1 < 0" identifier < number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }" if (parenthesized_expression "(*(int *)(iVar2 + 0xc) <= iVar1)" ( (binary_expression "*(int *)(iVar2 + 0xc) <= iVar1" (pointer_expression "*(int *)(iVar2 + 0xc)" * (cast_expression "(int *)(iVar2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0xc)" ( (binary_expression "iVar2 + 0xc" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);" (call_expression "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0)" identifier (argument_list "(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0)" ( identifier , (pointer_expression "*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4)" * (cast_expression "(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar2 + 0x10) + iVar1 * 4)" ( (binary_expression "*(int *)(iVar2 + 0x10) + iVar1 * 4" (pointer_expression "*(int *)(iVar2 + 0x10)" * (cast_expression "(int *)(iVar2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))) + (binary_expression "iVar1 * 4" identifier * number_literal)) )))) , number_literal , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }" { (expression_statement "iVar2 = ((int *)param_1[9])[1];" (assignment_expression "iVar2 = ((int *)param_1[9])[1]" identifier = (subscript_expression "((int *)param_1[9])[1]" (parenthesized_expression "((int *)param_1[9])" ( (cast_expression "(int *)param_1[9]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[9]" identifier [ number_literal ])) )) [ number_literal ])) ;) (expression_statement "iVar1 = *(int *)param_1[9];" (assignment_expression "iVar1 = *(int *)param_1[9]" identifier = (pointer_expression "*(int *)param_1[9]" * (cast_expression "(int *)param_1[9]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[9]" identifier [ number_literal ])))) ;) }) (else_clause "else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }" else (compound_statement "{\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }" { (expression_statement "iVar2 = ((int *)param_1[8])[1];" (assignment_expression "iVar2 = ((int *)param_1[8])[1]" identifier = (subscript_expression "((int *)param_1[8])[1]" (parenthesized_expression "((int *)param_1[8])" ( (cast_expression "(int *)param_1[8]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ])) )) [ number_literal ])) ;) (expression_statement "iVar1 = *(int *)param_1[8];" (assignment_expression "iVar1 = *(int *)param_1[8]" identifier = (pointer_expression "*(int *)param_1[8]" * (cast_expression "(int *)param_1[8]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ])))) ;) }))) }))) (if_statement "if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }" if (parenthesized_expression "(-iVar2 < (int)(uint)(iVar1 != 0))" ( (binary_expression "-iVar2 < (int)(uint)(iVar1 != 0)" (unary_expression "-iVar2" - identifier) < (cast_expression "(int)(uint)(iVar1 != 0)" ( (type_descriptor "int" primitive_type) ) (call_expression "(uint)(iVar1 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) ))))) )) (compound_statement "{\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }" { (expression_statement "FUN_00025040(param_2,iVar1,iVar2,0x465cc);" (call_expression "FUN_00025040(param_2,iVar1,iVar2,0x465cc)" identifier (argument_list "(param_2,iVar1,iVar2,0x465cc)" ( identifier , identifier , identifier , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint fts5VocabColumnMethod(sqlite3_vtab_cursor *pCursor,sqlite3_context *pCtx,int iCol)\n\n{\n  _func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *p_Var1;\n  i64 iVal;\n  sqlite3_module *psVar2;\n  sqlite3_vtab *psVar3;\n  int iVar4;\n  \n  if (iCol == 0) {\n    sqlite3_result_text(pCtx,(char *)pCursor[0xc].pVtab,(int)pCursor[0xd].pVtab,\n                        (_func_void_void_ptr *)&DAT_ffffffff);\n  }\n  else {\n    psVar2 = pCursor[2].pVtab[1].pModule;\n    iVar4 = pCursor->pVtab[2].nRef;\n    p_Var1 = psVar2->xRowid;\n    if (iVar4 == 0) {\n      if (iCol == 1) {\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      psVar3 = pCursor[7].pVtab;\n      if (iCol == 2) {\n        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n      else {\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n    }\n    else {\n      if (iVar4 != 1) {\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      if (iCol == 1) {\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }\n      else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }\n    }\n    if (-iVar4 < (int)(uint)(psVar2 != (sqlite3_module *)0x0)) {\n      sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2));\n      return 0;\n    }\n  }\n  return 0;\n}\n\n" comment (function_definition "int fts5VocabColumnMethod(sqlite3_vtab_cursor *pCursor,sqlite3_context *pCtx,int iCol)\n\n{\n  _func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *p_Var1;\n  i64 iVal;\n  sqlite3_module *psVar2;\n  sqlite3_vtab *psVar3;\n  int iVar4;\n  \n  if (iCol == 0) {\n    sqlite3_result_text(pCtx,(char *)pCursor[0xc].pVtab,(int)pCursor[0xd].pVtab,\n                        (_func_void_void_ptr *)&DAT_ffffffff);\n  }\n  else {\n    psVar2 = pCursor[2].pVtab[1].pModule;\n    iVar4 = pCursor->pVtab[2].nRef;\n    p_Var1 = psVar2->xRowid;\n    if (iVar4 == 0) {\n      if (iCol == 1) {\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      psVar3 = pCursor[7].pVtab;\n      if (iCol == 2) {\n        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n      else {\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n    }\n    else {\n      if (iVar4 != 1) {\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      if (iCol == 1) {\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }\n      else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }\n    }\n    if (-iVar4 < (int)(uint)(psVar2 != (sqlite3_module *)0x0)) {\n      sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2));\n      return 0;\n    }\n  }\n  return 0;\n}" primitive_type (function_declarator "fts5VocabColumnMethod(sqlite3_vtab_cursor *pCursor,sqlite3_context *pCtx,int iCol)" identifier (parameter_list "(sqlite3_vtab_cursor *pCursor,sqlite3_context *pCtx,int iCol)" ( (parameter_declaration "sqlite3_vtab_cursor *pCursor" type_identifier (pointer_declarator "*pCursor" * identifier)) , (parameter_declaration "sqlite3_context *pCtx" type_identifier (pointer_declarator "*pCtx" * identifier)) , (parameter_declaration "int iCol" primitive_type identifier) ))) (compound_statement "{\n  _func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *p_Var1;\n  i64 iVal;\n  sqlite3_module *psVar2;\n  sqlite3_vtab *psVar3;\n  int iVar4;\n  \n  if (iCol == 0) {\n    sqlite3_result_text(pCtx,(char *)pCursor[0xc].pVtab,(int)pCursor[0xd].pVtab,\n                        (_func_void_void_ptr *)&DAT_ffffffff);\n  }\n  else {\n    psVar2 = pCursor[2].pVtab[1].pModule;\n    iVar4 = pCursor->pVtab[2].nRef;\n    p_Var1 = psVar2->xRowid;\n    if (iVar4 == 0) {\n      if (iCol == 1) {\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      psVar3 = pCursor[7].pVtab;\n      if (iCol == 2) {\n        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n      else {\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n    }\n    else {\n      if (iVar4 != 1) {\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      if (iCol == 1) {\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }\n      else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }\n    }\n    if (-iVar4 < (int)(uint)(psVar2 != (sqlite3_module *)0x0)) {\n      sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2));\n      return 0;\n    }\n  }\n  return 0;\n}" { (declaration "_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (declaration "i64 iVal;" type_identifier identifier ;) (declaration "sqlite3_module *psVar2;" type_identifier (pointer_declarator "*psVar2" * identifier) ;) (declaration "sqlite3_vtab *psVar3;" type_identifier (pointer_declarator "*psVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (if_statement "if (iCol == 0) {\n    sqlite3_result_text(pCtx,(char *)pCursor[0xc].pVtab,(int)pCursor[0xd].pVtab,\n                        (_func_void_void_ptr *)&DAT_ffffffff);\n  }\n  else {\n    psVar2 = pCursor[2].pVtab[1].pModule;\n    iVar4 = pCursor->pVtab[2].nRef;\n    p_Var1 = psVar2->xRowid;\n    if (iVar4 == 0) {\n      if (iCol == 1) {\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      psVar3 = pCursor[7].pVtab;\n      if (iCol == 2) {\n        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n      else {\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n    }\n    else {\n      if (iVar4 != 1) {\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      if (iCol == 1) {\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }\n      else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }\n    }\n    if (-iVar4 < (int)(uint)(psVar2 != (sqlite3_module *)0x0)) {\n      sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2));\n      return 0;\n    }\n  }" if (parenthesized_expression "(iCol == 0)" ( (binary_expression "iCol == 0" identifier == number_literal) )) (compound_statement "{\n    sqlite3_result_text(pCtx,(char *)pCursor[0xc].pVtab,(int)pCursor[0xd].pVtab,\n                        (_func_void_void_ptr *)&DAT_ffffffff);\n  }" { (expression_statement "sqlite3_result_text(pCtx,(char *)pCursor[0xc].pVtab,(int)pCursor[0xd].pVtab,\n                        (_func_void_void_ptr *)&DAT_ffffffff);" (call_expression "sqlite3_result_text(pCtx,(char *)pCursor[0xc].pVtab,(int)pCursor[0xd].pVtab,\n                        (_func_void_void_ptr *)&DAT_ffffffff)" identifier (argument_list "(pCtx,(char *)pCursor[0xc].pVtab,(int)pCursor[0xd].pVtab,\n                        (_func_void_void_ptr *)&DAT_ffffffff)" ( identifier , (cast_expression "(char *)pCursor[0xc].pVtab" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "pCursor[0xc].pVtab" (subscript_expression "pCursor[0xc]" identifier [ number_literal ]) . field_identifier)) , (cast_expression "(int)pCursor[0xd].pVtab" ( (type_descriptor "int" primitive_type) ) (field_expression "pCursor[0xd].pVtab" (subscript_expression "pCursor[0xd]" identifier [ number_literal ]) . field_identifier)) , (cast_expression "(_func_void_void_ptr *)&DAT_ffffffff" ( (type_descriptor "_func_void_void_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_ffffffff" & identifier)) ))) ;) }) (else_clause "else {\n    psVar2 = pCursor[2].pVtab[1].pModule;\n    iVar4 = pCursor->pVtab[2].nRef;\n    p_Var1 = psVar2->xRowid;\n    if (iVar4 == 0) {\n      if (iCol == 1) {\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      psVar3 = pCursor[7].pVtab;\n      if (iCol == 2) {\n        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n      else {\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n    }\n    else {\n      if (iVar4 != 1) {\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      if (iCol == 1) {\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }\n      else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }\n    }\n    if (-iVar4 < (int)(uint)(psVar2 != (sqlite3_module *)0x0)) {\n      sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2));\n      return 0;\n    }\n  }" else (compound_statement "{\n    psVar2 = pCursor[2].pVtab[1].pModule;\n    iVar4 = pCursor->pVtab[2].nRef;\n    p_Var1 = psVar2->xRowid;\n    if (iVar4 == 0) {\n      if (iCol == 1) {\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      psVar3 = pCursor[7].pVtab;\n      if (iCol == 2) {\n        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n      else {\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n    }\n    else {\n      if (iVar4 != 1) {\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      if (iCol == 1) {\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }\n      else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }\n    }\n    if (-iVar4 < (int)(uint)(psVar2 != (sqlite3_module *)0x0)) {\n      sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2));\n      return 0;\n    }\n  }" { (expression_statement "psVar2 = pCursor[2].pVtab[1].pModule;" (assignment_expression "psVar2 = pCursor[2].pVtab[1].pModule" identifier = (field_expression "pCursor[2].pVtab[1].pModule" (subscript_expression "pCursor[2].pVtab[1]" (field_expression "pCursor[2].pVtab" (subscript_expression "pCursor[2]" identifier [ number_literal ]) . field_identifier) [ number_literal ]) . field_identifier)) ;) (expression_statement "iVar4 = pCursor->pVtab[2].nRef;" (assignment_expression "iVar4 = pCursor->pVtab[2].nRef" identifier = (field_expression "pCursor->pVtab[2].nRef" (subscript_expression "pCursor->pVtab[2]" (field_expression "pCursor->pVtab" identifier -> field_identifier) [ number_literal ]) . field_identifier)) ;) (expression_statement "p_Var1 = psVar2->xRowid;" (assignment_expression "p_Var1 = psVar2->xRowid" identifier = (field_expression "psVar2->xRowid" identifier -> field_identifier)) ;) (if_statement "if (iVar4 == 0) {\n      if (iCol == 1) {\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      psVar3 = pCursor[7].pVtab;\n      if (iCol == 2) {\n        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n      else {\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n    }\n    else {\n      if (iVar4 != 1) {\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      if (iCol == 1) {\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }\n      else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      if (iCol == 1) {\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      psVar3 = pCursor[7].pVtab;\n      if (iCol == 2) {\n        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n      else {\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n    }" { (if_statement "if (iCol == 1) {\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }" if (parenthesized_expression "(iCol == 1)" ( (binary_expression "iCol == 1" identifier == number_literal) )) (compound_statement "{\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }" { (if_statement "if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1) {\n          return 0;\n        }" if (parenthesized_expression "(p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1)" ( (binary_expression "p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1" identifier == (cast_expression "(_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x1" ( (type_descriptor "_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0);" (call_expression "sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0)" identifier (argument_list "(pCtx,*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4),-1,\n                            (_func_void_void_ptr *)0x0)" ( identifier , (pointer_expression "*(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4)" * (cast_expression "(char **)(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(psVar2->xDisconnect + (int)pCursor[7].pVtab * 4)" ( (binary_expression "psVar2->xDisconnect + (int)pCursor[7].pVtab * 4" (field_expression "psVar2->xDisconnect" identifier -> field_identifier) + (binary_expression "(int)pCursor[7].pVtab * 4" (cast_expression "(int)pCursor[7].pVtab" ( (type_descriptor "int" primitive_type) ) (field_expression "pCursor[7].pVtab" (subscript_expression "pCursor[7]" identifier [ number_literal ]) . field_identifier)) * number_literal)) )))) , number_literal , (cast_expression "(_func_void_void_ptr *)0x0" ( (type_descriptor "_func_void_void_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "psVar3 = pCursor[7].pVtab;" (assignment_expression "psVar3 = pCursor[7].pVtab" identifier = (field_expression "pCursor[7].pVtab" (subscript_expression "pCursor[7]" identifier [ number_literal ]) . field_identifier)) ;) (if_statement "if (iCol == 2) {\n        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];\n      }\n      else {\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }" if (parenthesized_expression "(iCol == 2)" ( (binary_expression "iCol == 2" identifier == number_literal) )) (compound_statement "{\n        iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];\n      }" { (expression_statement "iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];" (assignment_expression "iVar4 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2]" identifier = (subscript_expression "(&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2]" (parenthesized_expression "(&(pCursor[9].pVtab)->nRef)" ( (pointer_expression "&(pCursor[9].pVtab)->nRef" & (field_expression "(pCursor[9].pVtab)->nRef" (parenthesized_expression "(pCursor[9].pVtab)" ( (field_expression "pCursor[9].pVtab" (subscript_expression "pCursor[9]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier)) )) [ (binary_expression "(int)psVar3 * 2" (cast_expression "(int)psVar3" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) ])) ;) (expression_statement "psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];" (assignment_expression "psVar2 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2]" identifier = (subscript_expression "(&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2]" (parenthesized_expression "(&(pCursor[9].pVtab)->pModule)" ( (pointer_expression "&(pCursor[9].pVtab)->pModule" & (field_expression "(pCursor[9].pVtab)->pModule" (parenthesized_expression "(pCursor[9].pVtab)" ( (field_expression "pCursor[9].pVtab" (subscript_expression "pCursor[9]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier)) )) [ (binary_expression "(int)psVar3 * 2" (cast_expression "(int)psVar3" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) ])) ;) }) (else_clause "else {\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }" else (compound_statement "{\n        iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];\n        psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];\n      }" { (expression_statement "iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];" (assignment_expression "iVar4 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2]" identifier = (subscript_expression "(&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2]" (parenthesized_expression "(&(pCursor[8].pVtab)->nRef)" ( (pointer_expression "&(pCursor[8].pVtab)->nRef" & (field_expression "(pCursor[8].pVtab)->nRef" (parenthesized_expression "(pCursor[8].pVtab)" ( (field_expression "pCursor[8].pVtab" (subscript_expression "pCursor[8]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier)) )) [ (binary_expression "(int)psVar3 * 2" (cast_expression "(int)psVar3" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) ])) ;) (expression_statement "psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];" (assignment_expression "psVar2 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2]" identifier = (subscript_expression "(&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2]" (parenthesized_expression "(&(pCursor[8].pVtab)->pModule)" ( (pointer_expression "&(pCursor[8].pVtab)->pModule" & (field_expression "(pCursor[8].pVtab)->pModule" (parenthesized_expression "(pCursor[8].pVtab)" ( (field_expression "pCursor[8].pVtab" (subscript_expression "pCursor[8]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier)) )) [ (binary_expression "(int)psVar3 * 2" (cast_expression "(int)psVar3" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) ])) ;) }))) }) (else_clause "else {\n      if (iVar4 != 1) {\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      if (iCol == 1) {\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }\n      else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }\n    }" else (compound_statement "{\n      if (iVar4 != 1) {\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }\n      if (iCol == 1) {\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }\n      else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }\n    }" { (if_statement "if (iVar4 != 1) {\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }" if (parenthesized_expression "(iVar4 != 1)" ( (binary_expression "iVar4 != 1" identifier != number_literal) )) (compound_statement "{\n        if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }\n        if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }\n        if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }\n        if ((int)psVar3 < 0) {\n          return 0;\n        }\n        if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }\n        sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);\n        return 0;\n      }" { (if_statement "if (iCol == 1) {\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }" if (parenthesized_expression "(iCol == 1)" ( (binary_expression "iCol == 1" identifier == number_literal) )) (compound_statement "{\n          iVal._0_4_ = (pCursor[4].pVtab)->pModule;\n          iVal._4_4_ = (pCursor[4].pVtab)->nRef;\n          sqlite3_result_int64(pCtx,iVal);\n          return 0;\n        }" { (expression_statement "iVal._0_4_ = (pCursor[4].pVtab)->pModule;" (assignment_expression "iVal._0_4_ = (pCursor[4].pVtab)->pModule" (field_expression "iVal._0_4_" identifier . field_identifier) = (field_expression "(pCursor[4].pVtab)->pModule" (parenthesized_expression "(pCursor[4].pVtab)" ( (field_expression "pCursor[4].pVtab" (subscript_expression "pCursor[4]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier)) ;) (expression_statement "iVal._4_4_ = (pCursor[4].pVtab)->nRef;" (assignment_expression "iVal._4_4_ = (pCursor[4].pVtab)->nRef" (field_expression "iVal._4_4_" identifier . field_identifier) = (field_expression "(pCursor[4].pVtab)->nRef" (parenthesized_expression "(pCursor[4].pVtab)" ( (field_expression "pCursor[4].pVtab" (subscript_expression "pCursor[4]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier)) ;) (expression_statement "sqlite3_result_int64(pCtx,iVal);" (call_expression "sqlite3_result_int64(pCtx,iVal)" identifier (argument_list "(pCtx,iVal)" ( identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (iCol != 2) {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }" if (parenthesized_expression "(iCol != 2)" ( (binary_expression "iCol != 2" identifier != number_literal) )) (compound_statement "{\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }\n          sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);\n          return 0;\n        }" { (if_statement "if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n            return 0;\n          }" if (parenthesized_expression "(p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0)" ( (binary_expression "p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0" identifier != (cast_expression "(_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0" ( (type_descriptor "_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff);" (call_expression "sqlite3_result_int(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff)" identifier (argument_list "(pCtx,(uint)pCursor[0xf].pVtab & 0x7fffffff)" ( identifier , (binary_expression "(uint)pCursor[0xf].pVtab & 0x7fffffff" (cast_expression "(uint)pCursor[0xf].pVtab" ( (type_descriptor "uint" type_identifier) ) (field_expression "pCursor[0xf].pVtab" (subscript_expression "pCursor[0xf]" identifier [ number_literal ]) . field_identifier)) & number_literal) ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0) {\n          psVar3 = pCursor[0x10].pVtab;\n        }\n        else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }" if (parenthesized_expression "(p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0)" ( (binary_expression "p_Var1 == (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0" identifier == (cast_expression "(_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x0" ( (type_descriptor "_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          psVar3 = pCursor[0x10].pVtab;\n        }" { (expression_statement "psVar3 = pCursor[0x10].pVtab;" (assignment_expression "psVar3 = pCursor[0x10].pVtab" identifier = (field_expression "pCursor[0x10].pVtab" (subscript_expression "pCursor[0x10]" identifier [ number_literal ]) . field_identifier)) ;) }) (else_clause "else {\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }" else (compound_statement "{\n          if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }\n          psVar3 = pCursor[0xf].pVtab;\n        }" { (if_statement "if (p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2) {\n            return 0;\n          }" if (parenthesized_expression "(p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2)" ( (binary_expression "p_Var1 != (_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2" identifier != (cast_expression "(_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *)0x2" ( (type_descriptor "_func_int_sqlite3_vtab_cursor_ptr_sqlite3_int64_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "psVar3 = pCursor[0xf].pVtab;" (assignment_expression "psVar3 = pCursor[0xf].pVtab" identifier = (field_expression "pCursor[0xf].pVtab" (subscript_expression "pCursor[0xf]" identifier [ number_literal ]) . field_identifier)) ;) }))) (if_statement "if ((int)psVar3 < 0) {\n          return 0;\n        }" if (parenthesized_expression "((int)psVar3 < 0)" ( (binary_expression "(int)psVar3 < 0" (cast_expression "(int)psVar3" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((int)psVar2->xBestIndex <= (int)psVar3) {\n          return 0;\n        }" if (parenthesized_expression "((int)psVar2->xBestIndex <= (int)psVar3)" ( (binary_expression "(int)psVar2->xBestIndex <= (int)psVar3" (cast_expression "(int)psVar2->xBestIndex" ( (type_descriptor "int" primitive_type) ) (field_expression "psVar2->xBestIndex" identifier -> field_identifier)) <= (cast_expression "(int)psVar3" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0);" (call_expression "sqlite3_result_text(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0)" identifier (argument_list "(pCtx,*(char **)(psVar2->xDisconnect + (int)psVar3 * 4),-1,\n                            (_func_void_void_ptr *)0x0)" ( identifier , (pointer_expression "*(char **)(psVar2->xDisconnect + (int)psVar3 * 4)" * (cast_expression "(char **)(psVar2->xDisconnect + (int)psVar3 * 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(psVar2->xDisconnect + (int)psVar3 * 4)" ( (binary_expression "psVar2->xDisconnect + (int)psVar3 * 4" (field_expression "psVar2->xDisconnect" identifier -> field_identifier) + (binary_expression "(int)psVar3 * 4" (cast_expression "(int)psVar3" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) )))) , number_literal , (cast_expression "(_func_void_void_ptr *)0x0" ( (type_descriptor "_func_void_void_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (iCol == 1) {\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }\n      else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }" if (parenthesized_expression "(iCol == 1)" ( (binary_expression "iCol == 1" identifier == number_literal) )) (compound_statement "{\n        iVar4 = (pCursor[9].pVtab)->nRef;\n        psVar2 = (pCursor[9].pVtab)->pModule;\n      }" { (expression_statement "iVar4 = (pCursor[9].pVtab)->nRef;" (assignment_expression "iVar4 = (pCursor[9].pVtab)->nRef" identifier = (field_expression "(pCursor[9].pVtab)->nRef" (parenthesized_expression "(pCursor[9].pVtab)" ( (field_expression "pCursor[9].pVtab" (subscript_expression "pCursor[9]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier)) ;) (expression_statement "psVar2 = (pCursor[9].pVtab)->pModule;" (assignment_expression "psVar2 = (pCursor[9].pVtab)->pModule" identifier = (field_expression "(pCursor[9].pVtab)->pModule" (parenthesized_expression "(pCursor[9].pVtab)" ( (field_expression "pCursor[9].pVtab" (subscript_expression "pCursor[9]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier)) ;) }) (else_clause "else {\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }" else (compound_statement "{\n        iVar4 = (pCursor[8].pVtab)->nRef;\n        psVar2 = (pCursor[8].pVtab)->pModule;\n      }" { (expression_statement "iVar4 = (pCursor[8].pVtab)->nRef;" (assignment_expression "iVar4 = (pCursor[8].pVtab)->nRef" identifier = (field_expression "(pCursor[8].pVtab)->nRef" (parenthesized_expression "(pCursor[8].pVtab)" ( (field_expression "pCursor[8].pVtab" (subscript_expression "pCursor[8]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier)) ;) (expression_statement "psVar2 = (pCursor[8].pVtab)->pModule;" (assignment_expression "psVar2 = (pCursor[8].pVtab)->pModule" identifier = (field_expression "(pCursor[8].pVtab)->pModule" (parenthesized_expression "(pCursor[8].pVtab)" ( (field_expression "pCursor[8].pVtab" (subscript_expression "pCursor[8]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier)) ;) }))) }))) (if_statement "if (-iVar4 < (int)(uint)(psVar2 != (sqlite3_module *)0x0)) {\n      sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2));\n      return 0;\n    }" if (parenthesized_expression "(-iVar4 < (int)(uint)(psVar2 != (sqlite3_module *)0x0))" ( (binary_expression "-iVar4 < (int)(uint)(psVar2 != (sqlite3_module *)0x0)" (unary_expression "-iVar4" - identifier) < (cast_expression "(int)(uint)(psVar2 != (sqlite3_module *)0x0)" ( (type_descriptor "int" primitive_type) ) (call_expression "(uint)(psVar2 != (sqlite3_module *)0x0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(psVar2 != (sqlite3_module *)0x0)" ( (binary_expression "psVar2 != (sqlite3_module *)0x0" identifier != (cast_expression "(sqlite3_module *)0x0" ( (type_descriptor "sqlite3_module *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))))) )) (compound_statement "{\n      sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2));\n      return 0;\n    }" { (expression_statement "sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2));" (call_expression "sqlite3_result_int64(pCtx,CONCAT44(iVar4,psVar2))" identifier (argument_list "(pCtx,CONCAT44(iVar4,psVar2))" ( identifier , (call_expression "CONCAT44(iVar4,psVar2)" identifier (argument_list "(iVar4,psVar2)" ( identifier , identifier ))) ))) ;) (return_statement "return 0;" return number_literal ;) })) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "undefined4 FUN_000465c0(int *param_1,undefined4 param_2,int param_3)\n\n{\n  int iVar1;\n  int iVar2;\n  \n  if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }\n  return 0;\n}\n\n" (function_definition "undefined4 FUN_000465c0(int *param_1,undefined4 param_2,int param_3)\n\n{\n  int iVar1;\n  int iVar2;\n  \n  if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_000465c0(int *param_1,undefined4 param_2,int param_3)" identifier (parameter_list "(int *param_1,undefined4 param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  \n  if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (if_statement "if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }" { (expression_statement "FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);" (call_expression "FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff)" identifier (argument_list "(param_2,param_1[0xc],param_1[0xd],0xffffffff)" ( identifier , (subscript_expression "param_1[0xc]" identifier [ number_literal ]) , (subscript_expression "param_1[0xd]" identifier [ number_literal ]) , number_literal ))) ;) }) (else_clause "else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }" else (compound_statement "{\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }" { (expression_statement "iVar2 = *(int *)(param_1[2] + 0xc);" (assignment_expression "iVar2 = *(int *)(param_1[2] + 0xc)" identifier = (pointer_expression "*(int *)(param_1[2] + 0xc)" * (cast_expression "(int *)(param_1[2] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[2] + 0xc)" ( (binary_expression "param_1[2] + 0xc" (subscript_expression "param_1[2]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(iVar2 + 0x30);" (assignment_expression "iVar1 = *(int *)(iVar2 + 0x30)" identifier = (pointer_expression "*(int *)(iVar2 + 0x30)" * (cast_expression "(int *)(iVar2 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x30)" ( (binary_expression "iVar2 + 0x30" identifier + number_literal) ))))) ;) (if_statement "if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }" if (parenthesized_expression "(*(int *)(*param_1 + 0x1c) == 0)" ( (binary_expression "*(int *)(*param_1 + 0x1c) == 0" (pointer_expression "*(int *)(*param_1 + 0x1c)" * (cast_expression "(int *)(*param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x1c)" ( (binary_expression "*param_1 + 0x1c" (pointer_expression "*param_1" * identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }" { (if_statement "if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }" { (if_statement "if (iVar1 == 1) {\n          return 0;\n        }" if (parenthesized_expression "(iVar1 == 1)" ( (binary_expression "iVar1 == 1" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);" (call_expression "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0)" identifier (argument_list "(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0)" ( identifier , (pointer_expression "*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4)" * (cast_expression "(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar2 + 0x10) + param_1[7] * 4)" ( (binary_expression "*(int *)(iVar2 + 0x10) + param_1[7] * 4" (pointer_expression "*(int *)(iVar2 + 0x10)" * (cast_expression "(int *)(iVar2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))) + (binary_expression "param_1[7] * 4" (subscript_expression "param_1[7]" identifier [ number_literal ]) * number_literal)) )))) , number_literal , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = param_1[7];" (assignment_expression "iVar1 = param_1[7]" identifier = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) (if_statement "if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }" if (parenthesized_expression "(param_3 == 2)" ( (binary_expression "param_3 == 2" identifier == number_literal) )) (compound_statement "{\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }" { (expression_statement "iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);" (assignment_expression "iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8)" identifier = (pointer_expression "*(int *)(param_1[9] + 4 + iVar1 * 8)" * (cast_expression "(int *)(param_1[9] + 4 + iVar1 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[9] + 4 + iVar1 * 8)" ( (binary_expression "param_1[9] + 4 + iVar1 * 8" (binary_expression "param_1[9] + 4" (subscript_expression "param_1[9]" identifier [ number_literal ]) + number_literal) + (binary_expression "iVar1 * 8" identifier * number_literal)) ))))) ;) (expression_statement "iVar1 = *(int *)(param_1[9] + iVar1 * 8);" (assignment_expression "iVar1 = *(int *)(param_1[9] + iVar1 * 8)" identifier = (pointer_expression "*(int *)(param_1[9] + iVar1 * 8)" * (cast_expression "(int *)(param_1[9] + iVar1 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[9] + iVar1 * 8)" ( (binary_expression "param_1[9] + iVar1 * 8" (subscript_expression "param_1[9]" identifier [ number_literal ]) + (binary_expression "iVar1 * 8" identifier * number_literal)) ))))) ;) }) (else_clause "else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }" else (compound_statement "{\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }" { (expression_statement "iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);" (assignment_expression "iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8)" identifier = (pointer_expression "*(int *)(param_1[8] + 4 + iVar1 * 8)" * (cast_expression "(int *)(param_1[8] + 4 + iVar1 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[8] + 4 + iVar1 * 8)" ( (binary_expression "param_1[8] + 4 + iVar1 * 8" (binary_expression "param_1[8] + 4" (subscript_expression "param_1[8]" identifier [ number_literal ]) + number_literal) + (binary_expression "iVar1 * 8" identifier * number_literal)) ))))) ;) (expression_statement "iVar1 = *(int *)(param_1[8] + iVar1 * 8);" (assignment_expression "iVar1 = *(int *)(param_1[8] + iVar1 * 8)" identifier = (pointer_expression "*(int *)(param_1[8] + iVar1 * 8)" * (cast_expression "(int *)(param_1[8] + iVar1 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[8] + iVar1 * 8)" ( (binary_expression "param_1[8] + iVar1 * 8" (subscript_expression "param_1[8]" identifier [ number_literal ]) + (binary_expression "iVar1 * 8" identifier * number_literal)) ))))) ;) }))) }) (else_clause "else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }" else (compound_statement "{\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }" { (if_statement "if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }" if (parenthesized_expression "(*(int *)(*param_1 + 0x1c) != 1)" ( (binary_expression "*(int *)(*param_1 + 0x1c) != 1" (pointer_expression "*(int *)(*param_1 + 0x1c)" * (cast_expression "(int *)(*param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x1c)" ( (binary_expression "*param_1 + 0x1c" (pointer_expression "*param_1" * identifier) + number_literal) )))) != number_literal) )) (compound_statement "{\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }" { (if_statement "if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }" { (expression_statement "FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);" (call_expression "FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc)" identifier (argument_list "(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc)" ( identifier , (pointer_expression "*(undefined4 *)param_1[4]" * (cast_expression "(undefined4 *)param_1[4]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) , (subscript_expression "((undefined4 *)param_1[4])[1]" (parenthesized_expression "((undefined4 *)param_1[4])" ( (cast_expression "(undefined4 *)param_1[4]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ])) )) [ number_literal ]) , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }" if (parenthesized_expression "(param_3 != 2)" ( (binary_expression "param_3 != 2" identifier != number_literal) )) (compound_statement "{\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }" { (if_statement "if (iVar1 != 0) {\n            return 0;\n          }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);" (call_expression "FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff)" identifier (argument_list "(param_2,param_1[0xf] & 0x7fffffff)" ( identifier , (binary_expression "param_1[0xf] & 0x7fffffff" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) & number_literal) ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          iVar1 = param_1[0x10];\n        }" { (expression_statement "iVar1 = param_1[0x10];" (assignment_expression "iVar1 = param_1[0x10]" identifier = (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ;) }) (else_clause "else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }" else (compound_statement "{\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }" { (if_statement "if (iVar1 != 2) {\n            return 0;\n          }" if (parenthesized_expression "(iVar1 != 2)" ( (binary_expression "iVar1 != 2" identifier != number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = param_1[0xf];" (assignment_expression "iVar1 = param_1[0xf]" identifier = (subscript_expression "param_1[0xf]" identifier [ number_literal ])) ;) }))) (if_statement "if (iVar1 < 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar1 < 0)" ( (binary_expression "iVar1 < 0" identifier < number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }" if (parenthesized_expression "(*(int *)(iVar2 + 0xc) <= iVar1)" ( (binary_expression "*(int *)(iVar2 + 0xc) <= iVar1" (pointer_expression "*(int *)(iVar2 + 0xc)" * (cast_expression "(int *)(iVar2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0xc)" ( (binary_expression "iVar2 + 0xc" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);" (call_expression "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0)" identifier (argument_list "(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0)" ( identifier , (pointer_expression "*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4)" * (cast_expression "(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar2 + 0x10) + iVar1 * 4)" ( (binary_expression "*(int *)(iVar2 + 0x10) + iVar1 * 4" (pointer_expression "*(int *)(iVar2 + 0x10)" * (cast_expression "(int *)(iVar2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))) + (binary_expression "iVar1 * 4" identifier * number_literal)) )))) , number_literal , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }" { (expression_statement "iVar2 = ((int *)param_1[9])[1];" (assignment_expression "iVar2 = ((int *)param_1[9])[1]" identifier = (subscript_expression "((int *)param_1[9])[1]" (parenthesized_expression "((int *)param_1[9])" ( (cast_expression "(int *)param_1[9]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[9]" identifier [ number_literal ])) )) [ number_literal ])) ;) (expression_statement "iVar1 = *(int *)param_1[9];" (assignment_expression "iVar1 = *(int *)param_1[9]" identifier = (pointer_expression "*(int *)param_1[9]" * (cast_expression "(int *)param_1[9]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[9]" identifier [ number_literal ])))) ;) }) (else_clause "else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }" else (compound_statement "{\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }" { (expression_statement "iVar2 = ((int *)param_1[8])[1];" (assignment_expression "iVar2 = ((int *)param_1[8])[1]" identifier = (subscript_expression "((int *)param_1[8])[1]" (parenthesized_expression "((int *)param_1[8])" ( (cast_expression "(int *)param_1[8]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ])) )) [ number_literal ])) ;) (expression_statement "iVar1 = *(int *)param_1[8];" (assignment_expression "iVar1 = *(int *)param_1[8]" identifier = (pointer_expression "*(int *)param_1[8]" * (cast_expression "(int *)param_1[8]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ])))) ;) }))) }))) (if_statement "if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }" if (parenthesized_expression "(-iVar2 < (int)(uint)(iVar1 != 0))" ( (binary_expression "-iVar2 < (int)(uint)(iVar1 != 0)" (unary_expression "-iVar2" - identifier) < (cast_expression "(int)(uint)(iVar1 != 0)" ( (type_descriptor "int" primitive_type) ) (call_expression "(uint)(iVar1 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) ))))) )) (compound_statement "{\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }" { (expression_statement "FUN_00025040(param_2,iVar1,iVar2,0x465cc);" (call_expression "FUN_00025040(param_2,iVar1,iVar2,0x465cc)" identifier (argument_list "(param_2,iVar1,iVar2,0x465cc)" ( identifier , identifier , identifier , number_literal ))) ;) (return_statement "return 0;" return number_literal ;) })) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) , LIT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( 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) )))) + (binary_expression (subscript_expression IDENT [ LIT ]) * LIT)) )))) , LIT , LIT ))) ;) (return_statement return LIT ;) })) (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 * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) ))))) ;) }))) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) , (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )) [ LIT ]) , LIT ))) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) ))) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return LIT ;) })) (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 LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( 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) )))) + (binary_expression IDENT * LIT)) )))) , LIT , LIT ))) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )) [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )) [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])))) ;) }))) }))) (if_statement if (parenthesized_expression ( (binary_expression (unary_expression - IDENT) < (cast_expression ( (type_descriptor TYPE) ) (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT ))) ;) (return_statement return LIT ;) })) }))) (return_statement return LIT ;) })))
(function_definition "undefined4 FUN_000465c0(int *param_1,undefined4 param_2,int param_3)\n\n{\n  int iVar1;\n  int iVar2;\n  \n  if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }\n  return 0;\n}" (type_identifier "undefined4") (function_declarator "FUN_000465c0(int *param_1,undefined4 param_2,int param_3)" (identifier "FUN_000465c0") (parameter_list "(int *param_1,undefined4 param_2,int param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  \n  if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }\n  return 0;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (if_statement "if (param_3 == 0) {\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }\n  else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);\n  }" ({ "{") (expression_statement "FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);" (call_expression "FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff)" (identifier "FUN_00046480") (argument_list "(param_2,param_1[0xc],param_1[0xd],0xffffffff)" (( "(") (identifier "param_2") (, ",") (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]")) (, ",") (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (, ",") (number_literal "0xffffffff") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }" (else "else") (compound_statement "{\n    iVar2 = *(int *)(param_1[2] + 0xc);\n    iVar1 = *(int *)(iVar2 + 0x30);\n    if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }\n    if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }\n  }" ({ "{") (expression_statement "iVar2 = *(int *)(param_1[2] + 0xc);" (assignment_expression "iVar2 = *(int *)(param_1[2] + 0xc)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1[2] + 0xc)" (* "*") (cast_expression "(int *)(param_1[2] + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[2] + 0xc)" (( "(") (binary_expression "param_1[2] + 0xc" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "iVar1 = *(int *)(iVar2 + 0x30);" (assignment_expression "iVar1 = *(int *)(iVar2 + 0x30)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(iVar2 + 0x30)" (* "*") (cast_expression "(int *)(iVar2 + 0x30)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x30)" (( "(") (binary_expression "iVar2 + 0x30" (identifier "iVar2") (+ "+") (number_literal "0x30")) () ")"))))) (; ";")) (if_statement "if (*(int *)(*param_1 + 0x1c) == 0) {\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }\n    else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }" (if "if") (parenthesized_expression "(*(int *)(*param_1 + 0x1c) == 0)" (( "(") (binary_expression "*(int *)(*param_1 + 0x1c) == 0" (pointer_expression "*(int *)(*param_1 + 0x1c)" (* "*") (cast_expression "(int *)(*param_1 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x1c)" (( "(") (binary_expression "*param_1 + 0x1c" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x1c")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }\n      iVar1 = param_1[7];\n      if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }\n    }" ({ "{") (if_statement "if (param_3 == 1) {\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }" (if "if") (parenthesized_expression "(param_3 == 1)" (( "(") (binary_expression "param_3 == 1" (identifier "param_3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n        if (iVar1 == 1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);\n        return 0;\n      }" ({ "{") (if_statement "if (iVar1 == 1) {\n          return 0;\n        }" (if "if") (parenthesized_expression "(iVar1 == 1)" (( "(") (binary_expression "iVar1 == 1" (identifier "iVar1") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);" (call_expression "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0)" (identifier "FUN_00046480") (argument_list "(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0)" (( "(") (identifier "param_2") (, ",") (pointer_expression "*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4)" (* "*") (cast_expression "(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar2 + 0x10) + param_1[7] * 4)" (( "(") (binary_expression "*(int *)(iVar2 + 0x10) + param_1[7] * 4" (pointer_expression "*(int *)(iVar2 + 0x10)" (* "*") (cast_expression "(int *)(iVar2 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x10)" (( "(") (binary_expression "iVar2 + 0x10" (identifier "iVar2") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (binary_expression "param_1[7] * 4" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (* "*") (number_literal "4"))) () ")")))) (, ",") (number_literal "0xffffffff") (, ",") (number_literal "0") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar1 = param_1[7];" (assignment_expression "iVar1 = param_1[7]" (identifier "iVar1") (= "=") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]"))) (; ";")) (if_statement "if (param_3 == 2) {\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }\n      else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }" (if "if") (parenthesized_expression "(param_3 == 2)" (( "(") (binary_expression "param_3 == 2" (identifier "param_3") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[9] + iVar1 * 8);\n      }" ({ "{") (expression_statement "iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);" (assignment_expression "iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1[9] + 4 + iVar1 * 8)" (* "*") (cast_expression "(int *)(param_1[9] + 4 + iVar1 * 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[9] + 4 + iVar1 * 8)" (( "(") (binary_expression "param_1[9] + 4 + iVar1 * 8" (binary_expression "param_1[9] + 4" (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")) (+ "+") (number_literal "4")) (+ "+") (binary_expression "iVar1 * 8" (identifier "iVar1") (* "*") (number_literal "8"))) () ")"))))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1[9] + iVar1 * 8);" (assignment_expression "iVar1 = *(int *)(param_1[9] + iVar1 * 8)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1[9] + iVar1 * 8)" (* "*") (cast_expression "(int *)(param_1[9] + iVar1 * 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[9] + iVar1 * 8)" (( "(") (binary_expression "param_1[9] + iVar1 * 8" (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")) (+ "+") (binary_expression "iVar1 * 8" (identifier "iVar1") (* "*") (number_literal "8"))) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }" (else "else") (compound_statement "{\n        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);\n        iVar1 = *(int *)(param_1[8] + iVar1 * 8);\n      }" ({ "{") (expression_statement "iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);" (assignment_expression "iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1[8] + 4 + iVar1 * 8)" (* "*") (cast_expression "(int *)(param_1[8] + 4 + iVar1 * 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[8] + 4 + iVar1 * 8)" (( "(") (binary_expression "param_1[8] + 4 + iVar1 * 8" (binary_expression "param_1[8] + 4" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (+ "+") (number_literal "4")) (+ "+") (binary_expression "iVar1 * 8" (identifier "iVar1") (* "*") (number_literal "8"))) () ")"))))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1[8] + iVar1 * 8);" (assignment_expression "iVar1 = *(int *)(param_1[8] + iVar1 * 8)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1[8] + iVar1 * 8)" (* "*") (cast_expression "(int *)(param_1[8] + iVar1 * 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[8] + iVar1 * 8)" (( "(") (binary_expression "param_1[8] + iVar1 * 8" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (+ "+") (binary_expression "iVar1 * 8" (identifier "iVar1") (* "*") (number_literal "8"))) () ")"))))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }" (else "else") (compound_statement "{\n      if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }\n      if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }\n    }" ({ "{") (if_statement "if (*(int *)(*param_1 + 0x1c) != 1) {\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }" (if "if") (parenthesized_expression "(*(int *)(*param_1 + 0x1c) != 1)" (( "(") (binary_expression "*(int *)(*param_1 + 0x1c) != 1" (pointer_expression "*(int *)(*param_1 + 0x1c)" (* "*") (cast_expression "(int *)(*param_1 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x1c)" (( "(") (binary_expression "*param_1 + 0x1c" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x1c")) () ")")))) (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n        if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }\n        if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }\n        if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }\n        if (iVar1 < 0) {\n          return 0;\n        }\n        if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }\n        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);\n        return 0;\n      }" ({ "{") (if_statement "if (param_3 == 1) {\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }" (if "if") (parenthesized_expression "(param_3 == 1)" (( "(") (binary_expression "param_3 == 1" (identifier "param_3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);\n          return 0;\n        }" ({ "{") (expression_statement "FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);" (call_expression "FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc)" (identifier "FUN_00025040") (argument_list "(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc)" (( "(") (identifier "param_2") (, ",") (pointer_expression "*(undefined4 *)param_1[4]" (* "*") (cast_expression "(undefined4 *)param_1[4]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")))) (, ",") (subscript_expression "((undefined4 *)param_1[4])[1]" (parenthesized_expression "((undefined4 *)param_1[4])" (( "(") (cast_expression "(undefined4 *)param_1[4]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) () ")")) ([ "[") (number_literal "1") (] "]")) (, ",") (number_literal "0x465cc") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (param_3 != 2) {\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }" (if "if") (parenthesized_expression "(param_3 != 2)" (( "(") (binary_expression "param_3 != 2" (identifier "param_3") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n          if (iVar1 != 0) {\n            return 0;\n          }\n          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);\n          return 0;\n        }" ({ "{") (if_statement "if (iVar1 != 0) {\n            return 0;\n          }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            return 0;\n          }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);" (call_expression "FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff)" (identifier "FUN_00024f80") (argument_list "(param_2,param_1[0xf] & 0x7fffffff)" (( "(") (identifier "param_2") (, ",") (binary_expression "param_1[0xf] & 0x7fffffff" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (& "&") (number_literal "0x7fffffff")) () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (iVar1 == 0) {\n          iVar1 = param_1[0x10];\n        }\n        else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          iVar1 = param_1[0x10];\n        }" ({ "{") (expression_statement "iVar1 = param_1[0x10];" (assignment_expression "iVar1 = param_1[0x10]" (identifier "iVar1") (= "=") (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }" (else "else") (compound_statement "{\n          if (iVar1 != 2) {\n            return 0;\n          }\n          iVar1 = param_1[0xf];\n        }" ({ "{") (if_statement "if (iVar1 != 2) {\n            return 0;\n          }" (if "if") (parenthesized_expression "(iVar1 != 2)" (( "(") (binary_expression "iVar1 != 2" (identifier "iVar1") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n            return 0;\n          }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar1 = param_1[0xf];" (assignment_expression "iVar1 = param_1[0xf]" (identifier "iVar1") (= "=") (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]"))) (; ";")) (} "}")))) (if_statement "if (iVar1 < 0) {\n          return 0;\n        }" (if "if") (parenthesized_expression "(iVar1 < 0)" (( "(") (binary_expression "iVar1 < 0" (identifier "iVar1") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (*(int *)(iVar2 + 0xc) <= iVar1) {\n          return 0;\n        }" (if "if") (parenthesized_expression "(*(int *)(iVar2 + 0xc) <= iVar1)" (( "(") (binary_expression "*(int *)(iVar2 + 0xc) <= iVar1" (pointer_expression "*(int *)(iVar2 + 0xc)" (* "*") (cast_expression "(int *)(iVar2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0xc)" (( "(") (binary_expression "iVar2 + 0xc" (identifier "iVar2") (+ "+") (number_literal "0xc")) () ")")))) (<= "<=") (identifier "iVar1")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);" (call_expression "FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0)" (identifier "FUN_00046480") (argument_list "(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0)" (( "(") (identifier "param_2") (, ",") (pointer_expression "*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4)" (* "*") (cast_expression "(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar2 + 0x10) + iVar1 * 4)" (( "(") (binary_expression "*(int *)(iVar2 + 0x10) + iVar1 * 4" (pointer_expression "*(int *)(iVar2 + 0x10)" (* "*") (cast_expression "(int *)(iVar2 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x10)" (( "(") (binary_expression "iVar2 + 0x10" (identifier "iVar2") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (binary_expression "iVar1 * 4" (identifier "iVar1") (* "*") (number_literal "4"))) () ")")))) (, ",") (number_literal "0xffffffff") (, ",") (number_literal "0") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (param_3 == 1) {\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }\n      else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }" (if "if") (parenthesized_expression "(param_3 == 1)" (( "(") (binary_expression "param_3 == 1" (identifier "param_3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n        iVar2 = ((int *)param_1[9])[1];\n        iVar1 = *(int *)param_1[9];\n      }" ({ "{") (expression_statement "iVar2 = ((int *)param_1[9])[1];" (assignment_expression "iVar2 = ((int *)param_1[9])[1]" (identifier "iVar2") (= "=") (subscript_expression "((int *)param_1[9])[1]" (parenthesized_expression "((int *)param_1[9])" (( "(") (cast_expression "(int *)param_1[9]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]"))) () ")")) ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "iVar1 = *(int *)param_1[9];" (assignment_expression "iVar1 = *(int *)param_1[9]" (identifier "iVar1") (= "=") (pointer_expression "*(int *)param_1[9]" (* "*") (cast_expression "(int *)param_1[9]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]"))))) (; ";")) (} "}")) (else_clause "else {\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }" (else "else") (compound_statement "{\n        iVar2 = ((int *)param_1[8])[1];\n        iVar1 = *(int *)param_1[8];\n      }" ({ "{") (expression_statement "iVar2 = ((int *)param_1[8])[1];" (assignment_expression "iVar2 = ((int *)param_1[8])[1]" (identifier "iVar2") (= "=") (subscript_expression "((int *)param_1[8])[1]" (parenthesized_expression "((int *)param_1[8])" (( "(") (cast_expression "(int *)param_1[8]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]"))) () ")")) ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "iVar1 = *(int *)param_1[8];" (assignment_expression "iVar1 = *(int *)param_1[8]" (identifier "iVar1") (= "=") (pointer_expression "*(int *)param_1[8]" (* "*") (cast_expression "(int *)param_1[8]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]"))))) (; ";")) (} "}")))) (} "}")))) (if_statement "if (-iVar2 < (int)(uint)(iVar1 != 0)) {\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }" (if "if") (parenthesized_expression "(-iVar2 < (int)(uint)(iVar1 != 0))" (( "(") (binary_expression "-iVar2 < (int)(uint)(iVar1 != 0)" (unary_expression "-iVar2" (- "-") (identifier "iVar2")) (< "<") (cast_expression "(int)(uint)(iVar1 != 0)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (call_expression "(uint)(iVar1 != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")"))))) () ")")) (compound_statement "{\n      FUN_00025040(param_2,iVar1,iVar2,0x465cc);\n      return 0;\n    }" ({ "{") (expression_statement "FUN_00025040(param_2,iVar1,iVar2,0x465cc);" (call_expression "FUN_00025040(param_2,iVar1,iVar2,0x465cc)" (identifier "FUN_00025040") (argument_list "(param_2,iVar1,iVar2,0x465cc)" (( "(") (identifier "param_2") (, ",") (identifier "iVar1") (, ",") (identifier "iVar2") (, ",") (number_literal "0x465cc") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int function_1(type_1 *pCursor,type_2 *pCtx,int var_1)

{
  type_3 *var_4;
  type_4 iVal;
  type_5 *var_7;
  type_6 *psVar3;
  int var_3;
  
  if (var_1 == 0) {
    var_2(pCtx,(char *)pCursor[0xc].pVtab,(int)pCursor[0xd].pVtab,
                        (type_7 *)&DAT_ffffffff);
  }
  else {
    var_7 = pCursor[2].pVtab[1].pModule;
    var_3 = pCursor->pVtab[2].nRef;
    var_4 = var_7->xRowid;
    if (var_3 == 0) {
      if (var_1 == 1) {
        if (var_4 == (type_3 *)0x1) {
          return 0;
        }
        var_2(pCtx,*(char **)(var_7->xDisconnect + (int)pCursor[7].pVtab * 4),-1,
                            (type_7 *)0x0);
        return 0;
      }
      psVar3 = pCursor[7].pVtab;
      if (var_1 == 2) {
        var_3 = (&(pCursor[9].pVtab)->nRef)[(int)psVar3 * 2];
        var_7 = (&(pCursor[9].pVtab)->pModule)[(int)psVar3 * 2];
      }
      else {
        var_3 = (&(pCursor[8].pVtab)->nRef)[(int)psVar3 * 2];
        var_7 = (&(pCursor[8].pVtab)->pModule)[(int)psVar3 * 2];
      }
    }
    else {
      if (var_3 != 1) {
        if (var_1 == 1) {
          iVal._0_4_ = (pCursor[4].pVtab)->pModule;
          iVal._4_4_ = (pCursor[4].pVtab)->nRef;
          var_5(pCtx,iVal);
          return 0;
        }
        if (var_1 != 2) {
          if (var_4 != (type_3 *)0x0) {
            return 0;
          }
          var_6(pCtx,(type_8)pCursor[0xf].pVtab & 0x7fffffff);
          return 0;
        }
        if (var_4 == (type_3 *)0x0) {
          psVar3 = pCursor[0x10].pVtab;
        }
        else {
          if (var_4 != (type_3 *)0x2) {
            return 0;
          }
          psVar3 = pCursor[0xf].pVtab;
        }
        if ((int)psVar3 < 0) {
          return 0;
        }
        if ((int)var_7->xBestIndex <= (int)psVar3) {
          return 0;
        }
        var_2(pCtx,*(char **)(var_7->xDisconnect + (int)psVar3 * 4),-1,
                            (type_7 *)0x0);
        return 0;
      }
      if (var_1 == 1) {
        var_3 = (pCursor[9].pVtab)->nRef;
        var_7 = (pCursor[9].pVtab)->pModule;
      }
      else {
        var_3 = (pCursor[8].pVtab)->nRef;
        var_7 = (pCursor[8].pVtab)->pModule;
      }
    }
    if (-var_3 < (int)(type_8)(var_7 != (type_5 *)0x0)) {
      var_5(pCtx,var_8(var_3,var_7));
      return 0;
    }
  }
  return 0;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

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

{
  int iVar1;
  int iVar2;
  
  if (param_3 == 0) {
    FUN_00046480(param_2,param_1[0xc],param_1[0xd],0xffffffff);
  }
  else {
    iVar2 = *(int *)(param_1[2] + 0xc);
    iVar1 = *(int *)(iVar2 + 0x30);
    if (*(int *)(*param_1 + 0x1c) == 0) {
      if (param_3 == 1) {
        if (iVar1 == 1) {
          return 0;
        }
        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + param_1[7] * 4),0xffffffff,0);
        return 0;
      }
      iVar1 = param_1[7];
      if (param_3 == 2) {
        iVar2 = *(int *)(param_1[9] + 4 + iVar1 * 8);
        iVar1 = *(int *)(param_1[9] + iVar1 * 8);
      }
      else {
        iVar2 = *(int *)(param_1[8] + 4 + iVar1 * 8);
        iVar1 = *(int *)(param_1[8] + iVar1 * 8);
      }
    }
    else {
      if (*(int *)(*param_1 + 0x1c) != 1) {
        if (param_3 == 1) {
          FUN_00025040(param_2,*(undefined4 *)param_1[4],((undefined4 *)param_1[4])[1],0x465cc);
          return 0;
        }
        if (param_3 != 2) {
          if (iVar1 != 0) {
            return 0;
          }
          FUN_00024f80(param_2,param_1[0xf] & 0x7fffffff);
          return 0;
        }
        if (iVar1 == 0) {
          iVar1 = param_1[0x10];
        }
        else {
          if (iVar1 != 2) {
            return 0;
          }
          iVar1 = param_1[0xf];
        }
        if (iVar1 < 0) {
          return 0;
        }
        if (*(int *)(iVar2 + 0xc) <= iVar1) {
          return 0;
        }
        FUN_00046480(param_2,*(undefined4 *)(*(int *)(iVar2 + 0x10) + iVar1 * 4),0xffffffff,0);
        return 0;
      }
      if (param_3 == 1) {
        iVar2 = ((int *)param_1[9])[1];
        iVar1 = *(int *)param_1[9];
      }
      else {
        iVar2 = ((int *)param_1[8])[1];
        iVar1 = *(int *)param_1[8];
      }
    }
    if (-iVar2 < (int)(uint)(iVar1 != 0)) {
      FUN_00025040(param_2,iVar1,iVar2,0x465cc);
      return 0;
    }
  }
  return 0;
}

