
void __regparm2 fts5MultiIterNextFrom(Fts5Index *p,Fts5Iter *pIter,i64 iMatch)

{
  ushort uVar1;
  Fts5Index *pFVar2;
  int iVar3;
  uint uVar4;
  int in_stack_ffffffdc;
  i64 in_stack_ffffffe0;
  
  while( true ) {
    fts5MultiIterNext((Fts5Index *)iMatch,iMatch._4_4_,in_stack_ffffffdc,in_stack_ffffffe0);
    if (p->rc != 0) {
      return;
    }
    if ((pIter->base).bEof != '\0') break;
    uVar1 = pIter->aFirst[1].iFirst;
    pFVar2 = *(Fts5Index **)&pIter->aSeg[uVar1].iRowid;
    iVar3 = *(int *)((int)&pIter->aSeg[uVar1].iRowid + 4);
    if (pIter->bRev == 0) {
      uVar4 = (uint)(pFVar2 < (Fts5Index *)iMatch);
      if ((SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==
          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0) {
        return;
      }
    }
    else {
      uVar4 = (uint)((Fts5Index *)iMatch < pFVar2);
      if ((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==
          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0) {
        return;
      }
    }
  }
  return;
}



void __regparm2 FUN_000d7da0(int param_1,int param_2,uint param_3,int param_4)

{
  int iVar1;
  uint uVar2;
  
  while( true ) {
    FUN_000d7990(param_3,param_4);
    if (*(int *)(param_1 + 0x20) != 0) {
      return;
    }
    if (*(char *)(param_2 + 0x10) != '\0') break;
    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;
    uVar2 = *(uint *)(iVar1 + 0xc);
    iVar1 = *(int *)(iVar1 + 0x10);
    if (*(int *)(param_2 + 0x30) == 0) {
      uVar2 = (uint)(uVar2 < param_3);
      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==
          (int)((iVar1 - param_4) - uVar2) < 0) {
        return;
      }
    }
    else {
      uVar2 = (uint)(param_3 < uVar2);
      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==
          (int)((param_4 - iVar1) - uVar2) < 0) {
        return;
      }
    }
  }
  return;
}


PUSH EBP
MOV EBP,EAX
PUSH EDI
PUSH ESI
PUSH EBX
MOV EBX,EDX
SUB ESP,0xc
MOV ESI,dword ptr [ESP + 0x20]
MOV EDI,dword ptr [ESP + 0x24]
SUB ESP,0x8
MOV EAX,EBP
MOV ECX,0x1
MOV EDX,EBX
PUSH EDI
PUSH ESI
CALL 0x000d7990
MOV EAX,dword ptr [EBP + 0x20]
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x000d7dd6
CMP byte ptr [EBX + 0x10],0x0
JZ 0x000d7de0
ADD ESP,0xc
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [EBX + 0x40]
MOV ECX,dword ptr [EBX + 0x30]
MOVZX EAX,word ptr [EAX + 0x4]
IMUL EAX,EAX,0x58
LEA EAX,[EBX + EAX*0x1 + 0x80]
MOV EDX,dword ptr [EAX + 0xc]
MOV EAX,dword ptr [EAX + 0x10]
TEST ECX,ECX
JNZ 0x000d7e10
CMP EDX,ESI
SBB EAX,EDI
JL 0x000d7db3
JMP 0x000d7dd6
CMP ESI,EDX
MOV ECX,EDI
SBB ECX,EAX
JL 0x000d7db3
JMP 0x000d7dd6
(translation_unit "void __regparm2 FUN_000d7da0(int param_1,int param_2,uint param_3,int param_4)\n\n{\n  int iVar1;\n  uint uVar2;\n  \n  while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void __regparm2 FUN_000d7da0(int param_1,int param_2,uint param_3,int param_4)\n\n{\n  int iVar1;\n  uint uVar2;\n  \n  while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}" primitive_type (ERROR "__regparm2" identifier) (function_declarator "FUN_000d7da0(int param_1,int param_2,uint param_3,int param_4)" identifier (parameter_list "(int param_1,int param_2,uint param_3,int param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  \n  while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (while_statement "while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }" { (expression_statement "FUN_000d7990(param_3,param_4);" (call_expression "FUN_000d7990(param_3,param_4)" identifier (argument_list "(param_3,param_4)" ( identifier , identifier ))) ;) (if_statement "if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x20) != 0)" ( (binary_expression "*(int *)(param_1 + 0x20) != 0" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (if_statement "if (*(char *)(param_2 + 0x10) != '\0') break;" if (parenthesized_expression "(*(char *)(param_2 + 0x10) != '\0')" ( (binary_expression "*(char *)(param_2 + 0x10) != '\0'" (pointer_expression "*(char *)(param_2 + 0x10)" * (cast_expression "(char *)(param_2 + 0x10)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;" (assignment_expression "iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58" identifier = (binary_expression "param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58" (binary_expression "param_2 + 0x80" identifier + number_literal) + (binary_expression "(uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58" (binary_expression "(uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(*(int *)(param_2 + 0x40) + 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x40) + 4)" ( (binary_expression "*(int *)(param_2 + 0x40) + 4" (pointer_expression "*(int *)(param_2 + 0x40)" * (cast_expression "(int *)(param_2 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) + number_literal) )))) * number_literal))) ;) (expression_statement "uVar2 = *(uint *)(iVar1 + 0xc);" (assignment_expression "uVar2 = *(uint *)(iVar1 + 0xc)" identifier = (pointer_expression "*(uint *)(iVar1 + 0xc)" * (cast_expression "(uint *)(iVar1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(iVar1 + 0x10);" (assignment_expression "iVar1 = *(int *)(iVar1 + 0x10)" identifier = (pointer_expression "*(int *)(iVar1 + 0x10)" * (cast_expression "(int *)(iVar1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x10)" ( (binary_expression "iVar1 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0x30) == 0)" ( (binary_expression "*(int *)(param_2 + 0x30) == 0" (pointer_expression "*(int *)(param_2 + 0x30)" * (cast_expression "(int *)(param_2 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }" { (expression_statement "uVar2 = (uint)(uVar2 < param_3);" (assignment_expression "uVar2 = (uint)(uVar2 < param_3)" identifier = (call_expression "(uint)(uVar2 < param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < param_3)" ( (binary_expression "uVar2 < param_3" identifier < identifier) )))) ;) (if_statement "if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }" if (parenthesized_expression "((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0)" ( (binary_expression "(SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0" (parenthesized_expression "(SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2))" ( (binary_expression "SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)" (call_expression "SBORROW4(iVar1,param_4)" identifier (argument_list "(iVar1,param_4)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar1 - param_4,uVar2)" identifier (argument_list "(iVar1 - param_4,uVar2)" ( (binary_expression "iVar1 - param_4" identifier - identifier) , identifier )))) )) == (binary_expression "(int)((iVar1 - param_4) - uVar2) < 0" (cast_expression "(int)((iVar1 - param_4) - uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar1 - param_4) - uVar2)" ( (binary_expression "(iVar1 - param_4) - uVar2" (parenthesized_expression "(iVar1 - param_4)" ( (binary_expression "iVar1 - param_4" identifier - identifier) )) - identifier) ))) < number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) }) (else_clause "else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }" else (compound_statement "{\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }" { (expression_statement "uVar2 = (uint)(param_3 < uVar2);" (assignment_expression "uVar2 = (uint)(param_3 < uVar2)" identifier = (call_expression "(uint)(param_3 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_3 < uVar2)" ( (binary_expression "param_3 < uVar2" identifier < identifier) )))) ;) (if_statement "if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }" if (parenthesized_expression "((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0)" ( (binary_expression "(SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0" (parenthesized_expression "(SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2))" ( (binary_expression "SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)" (call_expression "SBORROW4(param_4,iVar1)" identifier (argument_list "(param_4,iVar1)" ( identifier , identifier ))) != (call_expression "SBORROW4(param_4 - iVar1,uVar2)" identifier (argument_list "(param_4 - iVar1,uVar2)" ( (binary_expression "param_4 - iVar1" identifier - identifier) , identifier )))) )) == (binary_expression "(int)((param_4 - iVar1) - uVar2) < 0" (cast_expression "(int)((param_4 - iVar1) - uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((param_4 - iVar1) - uVar2)" ( (binary_expression "(param_4 - iVar1) - uVar2" (parenthesized_expression "(param_4 - iVar1)" ( (binary_expression "param_4 - iVar1" identifier - identifier) )) - identifier) ))) < number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) }))) })) (return_statement "return;" return ;) })))
(translation_unit "void __regparm2 fts5MultiIterNextFrom(Fts5Index *p,Fts5Iter *pIter,i64 iMatch)\n\n{\n  ushort uVar1;\n  Fts5Index *pFVar2;\n  int iVar3;\n  uint uVar4;\n  int in_stack_ffffffdc;\n  i64 in_stack_ffffffe0;\n  \n  while( true ) {\n    fts5MultiIterNext((Fts5Index *)iMatch,iMatch._4_4_,in_stack_ffffffdc,in_stack_ffffffe0);\n    if (p->rc != 0) {\n      return;\n    }\n    if ((pIter->base).bEof != '\0') break;\n    uVar1 = pIter->aFirst[1].iFirst;\n    pFVar2 = *(Fts5Index **)&pIter->aSeg[uVar1].iRowid;\n    iVar3 = *(int *)((int)&pIter->aSeg[uVar1].iRowid + 4);\n    if (pIter->bRev == 0) {\n      uVar4 = (uint)(pFVar2 < (Fts5Index *)iMatch);\n      if ((SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==\n          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar4 = (uint)((Fts5Index *)iMatch < pFVar2);\n      if ((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void __regparm2 fts5MultiIterNextFrom(Fts5Index *p,Fts5Iter *pIter,i64 iMatch)\n\n{\n  ushort uVar1;\n  Fts5Index *pFVar2;\n  int iVar3;\n  uint uVar4;\n  int in_stack_ffffffdc;\n  i64 in_stack_ffffffe0;\n  \n  while( true ) {\n    fts5MultiIterNext((Fts5Index *)iMatch,iMatch._4_4_,in_stack_ffffffdc,in_stack_ffffffe0);\n    if (p->rc != 0) {\n      return;\n    }\n    if ((pIter->base).bEof != '\0') break;\n    uVar1 = pIter->aFirst[1].iFirst;\n    pFVar2 = *(Fts5Index **)&pIter->aSeg[uVar1].iRowid;\n    iVar3 = *(int *)((int)&pIter->aSeg[uVar1].iRowid + 4);\n    if (pIter->bRev == 0) {\n      uVar4 = (uint)(pFVar2 < (Fts5Index *)iMatch);\n      if ((SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==\n          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar4 = (uint)((Fts5Index *)iMatch < pFVar2);\n      if ((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}" primitive_type (ERROR "__regparm2" identifier) (function_declarator "fts5MultiIterNextFrom(Fts5Index *p,Fts5Iter *pIter,i64 iMatch)" identifier (parameter_list "(Fts5Index *p,Fts5Iter *pIter,i64 iMatch)" ( (parameter_declaration "Fts5Index *p" type_identifier (pointer_declarator "*p" * identifier)) , (parameter_declaration "Fts5Iter *pIter" type_identifier (pointer_declarator "*pIter" * identifier)) , (parameter_declaration "i64 iMatch" type_identifier identifier) ))) (compound_statement "{\n  ushort uVar1;\n  Fts5Index *pFVar2;\n  int iVar3;\n  uint uVar4;\n  int in_stack_ffffffdc;\n  i64 in_stack_ffffffe0;\n  \n  while( true ) {\n    fts5MultiIterNext((Fts5Index *)iMatch,iMatch._4_4_,in_stack_ffffffdc,in_stack_ffffffe0);\n    if (p->rc != 0) {\n      return;\n    }\n    if ((pIter->base).bEof != '\0') break;\n    uVar1 = pIter->aFirst[1].iFirst;\n    pFVar2 = *(Fts5Index **)&pIter->aSeg[uVar1].iRowid;\n    iVar3 = *(int *)((int)&pIter->aSeg[uVar1].iRowid + 4);\n    if (pIter->bRev == 0) {\n      uVar4 = (uint)(pFVar2 < (Fts5Index *)iMatch);\n      if ((SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==\n          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar4 = (uint)((Fts5Index *)iMatch < pFVar2);\n      if ((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "Fts5Index *pFVar2;" type_identifier (pointer_declarator "*pFVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int in_stack_ffffffdc;" primitive_type identifier ;) (declaration "i64 in_stack_ffffffe0;" type_identifier identifier ;) (while_statement "while( true ) {\n    fts5MultiIterNext((Fts5Index *)iMatch,iMatch._4_4_,in_stack_ffffffdc,in_stack_ffffffe0);\n    if (p->rc != 0) {\n      return;\n    }\n    if ((pIter->base).bEof != '\0') break;\n    uVar1 = pIter->aFirst[1].iFirst;\n    pFVar2 = *(Fts5Index **)&pIter->aSeg[uVar1].iRowid;\n    iVar3 = *(int *)((int)&pIter->aSeg[uVar1].iRowid + 4);\n    if (pIter->bRev == 0) {\n      uVar4 = (uint)(pFVar2 < (Fts5Index *)iMatch);\n      if ((SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==\n          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar4 = (uint)((Fts5Index *)iMatch < pFVar2);\n      if ((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0) {\n        return;\n      }\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    fts5MultiIterNext((Fts5Index *)iMatch,iMatch._4_4_,in_stack_ffffffdc,in_stack_ffffffe0);\n    if (p->rc != 0) {\n      return;\n    }\n    if ((pIter->base).bEof != '\0') break;\n    uVar1 = pIter->aFirst[1].iFirst;\n    pFVar2 = *(Fts5Index **)&pIter->aSeg[uVar1].iRowid;\n    iVar3 = *(int *)((int)&pIter->aSeg[uVar1].iRowid + 4);\n    if (pIter->bRev == 0) {\n      uVar4 = (uint)(pFVar2 < (Fts5Index *)iMatch);\n      if ((SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==\n          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar4 = (uint)((Fts5Index *)iMatch < pFVar2);\n      if ((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0) {\n        return;\n      }\n    }\n  }" { (expression_statement "fts5MultiIterNext((Fts5Index *)iMatch,iMatch._4_4_,in_stack_ffffffdc,in_stack_ffffffe0);" (call_expression "fts5MultiIterNext((Fts5Index *)iMatch,iMatch._4_4_,in_stack_ffffffdc,in_stack_ffffffe0)" identifier (argument_list "((Fts5Index *)iMatch,iMatch._4_4_,in_stack_ffffffdc,in_stack_ffffffe0)" ( (cast_expression "(Fts5Index *)iMatch" ( (type_descriptor "Fts5Index *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (field_expression "iMatch._4_4_" identifier . field_identifier) , identifier , identifier ))) ;) (if_statement "if (p->rc != 0) {\n      return;\n    }" if (parenthesized_expression "(p->rc != 0)" ( (binary_expression "p->rc != 0" (field_expression "p->rc" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (if_statement "if ((pIter->base).bEof != '\0') break;" if (parenthesized_expression "((pIter->base).bEof != '\0')" ( (binary_expression "(pIter->base).bEof != '\0'" (field_expression "(pIter->base).bEof" (parenthesized_expression "(pIter->base)" ( (field_expression "pIter->base" identifier -> field_identifier) )) . field_identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "uVar1 = pIter->aFirst[1].iFirst;" (assignment_expression "uVar1 = pIter->aFirst[1].iFirst" identifier = (field_expression "pIter->aFirst[1].iFirst" (subscript_expression "pIter->aFirst[1]" (field_expression "pIter->aFirst" identifier -> field_identifier) [ number_literal ]) . field_identifier)) ;) (expression_statement "pFVar2 = *(Fts5Index **)&pIter->aSeg[uVar1].iRowid;" (assignment_expression "pFVar2 = *(Fts5Index **)&pIter->aSeg[uVar1].iRowid" identifier = (pointer_expression "*(Fts5Index **)&pIter->aSeg[uVar1].iRowid" * (cast_expression "(Fts5Index **)&pIter->aSeg[uVar1].iRowid" ( (type_descriptor "Fts5Index **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&pIter->aSeg[uVar1].iRowid" & (field_expression "pIter->aSeg[uVar1].iRowid" (subscript_expression "pIter->aSeg[uVar1]" (field_expression "pIter->aSeg" identifier -> field_identifier) [ identifier ]) . field_identifier))))) ;) (expression_statement "iVar3 = *(int *)((int)&pIter->aSeg[uVar1].iRowid + 4);" (assignment_expression "iVar3 = *(int *)((int)&pIter->aSeg[uVar1].iRowid + 4)" identifier = (pointer_expression "*(int *)((int)&pIter->aSeg[uVar1].iRowid + 4)" * (cast_expression "(int *)((int)&pIter->aSeg[uVar1].iRowid + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&pIter->aSeg[uVar1].iRowid + 4)" ( (binary_expression "(int)&pIter->aSeg[uVar1].iRowid + 4" (cast_expression "(int)&pIter->aSeg[uVar1].iRowid" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&pIter->aSeg[uVar1].iRowid" & (field_expression "pIter->aSeg[uVar1].iRowid" (subscript_expression "pIter->aSeg[uVar1]" (field_expression "pIter->aSeg" identifier -> field_identifier) [ identifier ]) . field_identifier))) + number_literal) ))))) ;) (if_statement "if (pIter->bRev == 0) {\n      uVar4 = (uint)(pFVar2 < (Fts5Index *)iMatch);\n      if ((SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==\n          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar4 = (uint)((Fts5Index *)iMatch < pFVar2);\n      if ((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0) {\n        return;\n      }\n    }" if (parenthesized_expression "(pIter->bRev == 0)" ( (binary_expression "pIter->bRev == 0" (field_expression "pIter->bRev" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n      uVar4 = (uint)(pFVar2 < (Fts5Index *)iMatch);\n      if ((SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==\n          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0) {\n        return;\n      }\n    }" { (expression_statement "uVar4 = (uint)(pFVar2 < (Fts5Index *)iMatch);" (assignment_expression "uVar4 = (uint)(pFVar2 < (Fts5Index *)iMatch)" identifier = (call_expression "(uint)(pFVar2 < (Fts5Index *)iMatch)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pFVar2 < (Fts5Index *)iMatch)" ( (binary_expression "pFVar2 < (Fts5Index *)iMatch" identifier < (cast_expression "(Fts5Index *)iMatch" ( (type_descriptor "Fts5Index *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (if_statement "if ((SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==\n          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0) {\n        return;\n      }" if (parenthesized_expression "((SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==\n          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0)" ( (binary_expression "(SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)) ==\n          (int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0" (parenthesized_expression "(SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4))" ( (binary_expression "SBORROW4(iVar3,(int)iMatch._4_4_) != SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)" (call_expression "SBORROW4(iVar3,(int)iMatch._4_4_)" identifier (argument_list "(iVar3,(int)iMatch._4_4_)" ( identifier , (cast_expression "(int)iMatch._4_4_" ( (type_descriptor "int" primitive_type) ) (field_expression "iMatch._4_4_" identifier . field_identifier)) ))) != (call_expression "SBORROW4(iVar3 - (int)iMatch._4_4_,uVar4)" identifier (argument_list "(iVar3 - (int)iMatch._4_4_,uVar4)" ( (binary_expression "iVar3 - (int)iMatch._4_4_" identifier - (cast_expression "(int)iMatch._4_4_" ( (type_descriptor "int" primitive_type) ) (field_expression "iMatch._4_4_" identifier . field_identifier))) , identifier )))) )) == (binary_expression "(int)((iVar3 - (int)iMatch._4_4_) - uVar4) < 0" (cast_expression "(int)((iVar3 - (int)iMatch._4_4_) - uVar4)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar3 - (int)iMatch._4_4_) - uVar4)" ( (binary_expression "(iVar3 - (int)iMatch._4_4_) - uVar4" (parenthesized_expression "(iVar3 - (int)iMatch._4_4_)" ( (binary_expression "iVar3 - (int)iMatch._4_4_" identifier - (cast_expression "(int)iMatch._4_4_" ( (type_descriptor "int" primitive_type) ) (field_expression "iMatch._4_4_" identifier . field_identifier))) )) - identifier) ))) < number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) }) (else_clause "else {\n      uVar4 = (uint)((Fts5Index *)iMatch < pFVar2);\n      if ((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0) {\n        return;\n      }\n    }" else (compound_statement "{\n      uVar4 = (uint)((Fts5Index *)iMatch < pFVar2);\n      if ((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0) {\n        return;\n      }\n    }" { (expression_statement "uVar4 = (uint)((Fts5Index *)iMatch < pFVar2);" (assignment_expression "uVar4 = (uint)((Fts5Index *)iMatch < pFVar2)" identifier = (call_expression "(uint)((Fts5Index *)iMatch < pFVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((Fts5Index *)iMatch < pFVar2)" ( (binary_expression "(Fts5Index *)iMatch < pFVar2" (cast_expression "(Fts5Index *)iMatch" ( (type_descriptor "Fts5Index *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) < identifier) )))) ;) (if_statement "if ((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0) {\n        return;\n      }" if (parenthesized_expression "((SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0)" ( (binary_expression "(SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)) ==\n          (int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0" (parenthesized_expression "(SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4))" ( (binary_expression "SBORROW4((int)iMatch._4_4_,iVar3) != SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)" (call_expression "SBORROW4((int)iMatch._4_4_,iVar3)" identifier (argument_list "((int)iMatch._4_4_,iVar3)" ( (cast_expression "(int)iMatch._4_4_" ( (type_descriptor "int" primitive_type) ) (field_expression "iMatch._4_4_" identifier . field_identifier)) , identifier ))) != (call_expression "SBORROW4((int)iMatch._4_4_ - iVar3,uVar4)" identifier (argument_list "((int)iMatch._4_4_ - iVar3,uVar4)" ( (binary_expression "(int)iMatch._4_4_ - iVar3" (cast_expression "(int)iMatch._4_4_" ( (type_descriptor "int" primitive_type) ) (field_expression "iMatch._4_4_" identifier . field_identifier)) - identifier) , identifier )))) )) == (binary_expression "(int)(((int)iMatch._4_4_ - iVar3) - uVar4) < 0" (cast_expression "(int)(((int)iMatch._4_4_ - iVar3) - uVar4)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(((int)iMatch._4_4_ - iVar3) - uVar4)" ( (binary_expression "((int)iMatch._4_4_ - iVar3) - uVar4" (parenthesized_expression "((int)iMatch._4_4_ - iVar3)" ( (binary_expression "(int)iMatch._4_4_ - iVar3" (cast_expression "(int)iMatch._4_4_" ( (type_descriptor "int" primitive_type) ) (field_expression "iMatch._4_4_" identifier . field_identifier)) - identifier) )) - identifier) ))) < number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) }))) })) (return_statement "return;" return ;) })))
(translation_unit "void __regparm2 FUN_000d7da0(int param_1,int param_2,uint param_3,int param_4)\n\n{\n  int iVar1;\n  uint uVar2;\n  \n  while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void __regparm2 FUN_000d7da0(int param_1,int param_2,uint param_3,int param_4)\n\n{\n  int iVar1;\n  uint uVar2;\n  \n  while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}" primitive_type (ERROR "__regparm2" identifier) (function_declarator "FUN_000d7da0(int param_1,int param_2,uint param_3,int param_4)" identifier (parameter_list "(int param_1,int param_2,uint param_3,int param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  \n  while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (while_statement "while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }" { (expression_statement "FUN_000d7990(param_3,param_4);" (call_expression "FUN_000d7990(param_3,param_4)" identifier (argument_list "(param_3,param_4)" ( identifier , identifier ))) ;) (if_statement "if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x20) != 0)" ( (binary_expression "*(int *)(param_1 + 0x20) != 0" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (if_statement "if (*(char *)(param_2 + 0x10) != '\0') break;" if (parenthesized_expression "(*(char *)(param_2 + 0x10) != '\0')" ( (binary_expression "*(char *)(param_2 + 0x10) != '\0'" (pointer_expression "*(char *)(param_2 + 0x10)" * (cast_expression "(char *)(param_2 + 0x10)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;" (assignment_expression "iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58" identifier = (binary_expression "param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58" (binary_expression "param_2 + 0x80" identifier + number_literal) + (binary_expression "(uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58" (binary_expression "(uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(*(int *)(param_2 + 0x40) + 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x40) + 4)" ( (binary_expression "*(int *)(param_2 + 0x40) + 4" (pointer_expression "*(int *)(param_2 + 0x40)" * (cast_expression "(int *)(param_2 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) + number_literal) )))) * number_literal))) ;) (expression_statement "uVar2 = *(uint *)(iVar1 + 0xc);" (assignment_expression "uVar2 = *(uint *)(iVar1 + 0xc)" identifier = (pointer_expression "*(uint *)(iVar1 + 0xc)" * (cast_expression "(uint *)(iVar1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(iVar1 + 0x10);" (assignment_expression "iVar1 = *(int *)(iVar1 + 0x10)" identifier = (pointer_expression "*(int *)(iVar1 + 0x10)" * (cast_expression "(int *)(iVar1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x10)" ( (binary_expression "iVar1 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0x30) == 0)" ( (binary_expression "*(int *)(param_2 + 0x30) == 0" (pointer_expression "*(int *)(param_2 + 0x30)" * (cast_expression "(int *)(param_2 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }" { (expression_statement "uVar2 = (uint)(uVar2 < param_3);" (assignment_expression "uVar2 = (uint)(uVar2 < param_3)" identifier = (call_expression "(uint)(uVar2 < param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < param_3)" ( (binary_expression "uVar2 < param_3" identifier < identifier) )))) ;) (if_statement "if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }" if (parenthesized_expression "((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0)" ( (binary_expression "(SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0" (parenthesized_expression "(SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2))" ( (binary_expression "SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)" (call_expression "SBORROW4(iVar1,param_4)" identifier (argument_list "(iVar1,param_4)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar1 - param_4,uVar2)" identifier (argument_list "(iVar1 - param_4,uVar2)" ( (binary_expression "iVar1 - param_4" identifier - identifier) , identifier )))) )) == (binary_expression "(int)((iVar1 - param_4) - uVar2) < 0" (cast_expression "(int)((iVar1 - param_4) - uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar1 - param_4) - uVar2)" ( (binary_expression "(iVar1 - param_4) - uVar2" (parenthesized_expression "(iVar1 - param_4)" ( (binary_expression "iVar1 - param_4" identifier - identifier) )) - identifier) ))) < number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) }) (else_clause "else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }" else (compound_statement "{\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }" { (expression_statement "uVar2 = (uint)(param_3 < uVar2);" (assignment_expression "uVar2 = (uint)(param_3 < uVar2)" identifier = (call_expression "(uint)(param_3 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_3 < uVar2)" ( (binary_expression "param_3 < uVar2" identifier < identifier) )))) ;) (if_statement "if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }" if (parenthesized_expression "((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0)" ( (binary_expression "(SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0" (parenthesized_expression "(SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2))" ( (binary_expression "SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)" (call_expression "SBORROW4(param_4,iVar1)" identifier (argument_list "(param_4,iVar1)" ( identifier , identifier ))) != (call_expression "SBORROW4(param_4 - iVar1,uVar2)" identifier (argument_list "(param_4 - iVar1,uVar2)" ( (binary_expression "param_4 - iVar1" identifier - identifier) , identifier )))) )) == (binary_expression "(int)((param_4 - iVar1) - uVar2) < 0" (cast_expression "(int)((param_4 - iVar1) - uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((param_4 - iVar1) - uVar2)" ( (binary_expression "(param_4 - iVar1) - uVar2" (parenthesized_expression "(param_4 - iVar1)" ( (binary_expression "param_4 - iVar1" identifier - identifier) )) - identifier) ))) < number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) }))) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' escape_sequence ')) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) + (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) * LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + 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 IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) != (call_expression IDENT (argument_list ( (binary_expression IDENT - IDENT) , IDENT )))) )) == (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - IDENT) ))) < LIT)) )) (compound_statement { (return_statement return ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) != (call_expression IDENT (argument_list ( (binary_expression IDENT - IDENT) , IDENT )))) )) == (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - IDENT) ))) < LIT)) )) (compound_statement { (return_statement return ;) })) }))) })) (return_statement return ;) })))
(function_definition "void __regparm2 FUN_000d7da0(int param_1,int param_2,uint param_3,int param_4)\n\n{\n  int iVar1;\n  uint uVar2;\n  \n  while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}" (primitive_type "void") (ERROR "__regparm2" (identifier "__regparm2")) (function_declarator "FUN_000d7da0(int param_1,int param_2,uint param_3,int param_4)" (identifier "FUN_000d7da0") (parameter_list "(int param_1,int param_2,uint param_3,int param_4)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")"))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  \n  while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (while_statement "while( true ) {\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    FUN_000d7990(param_3,param_4);\n    if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }\n    if (*(char *)(param_2 + 0x10) != '\0') break;\n    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;\n    uVar2 = *(uint *)(iVar1 + 0xc);\n    iVar1 = *(int *)(iVar1 + 0x10);\n    if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }\n  }" ({ "{") (expression_statement "FUN_000d7990(param_3,param_4);" (call_expression "FUN_000d7990(param_3,param_4)" (identifier "FUN_000d7990") (argument_list "(param_3,param_4)" (( "(") (identifier "param_3") (, ",") (identifier "param_4") () ")"))) (; ";")) (if_statement "if (*(int *)(param_1 + 0x20) != 0) {\n      return;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x20) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x20) != 0" (pointer_expression "*(int *)(param_1 + 0x20)" (* "*") (cast_expression "(int *)(param_1 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if (*(char *)(param_2 + 0x10) != '\0') break;" (if "if") (parenthesized_expression "(*(char *)(param_2 + 0x10) != '\0')" (( "(") (binary_expression "*(char *)(param_2 + 0x10) != '\0'" (pointer_expression "*(char *)(param_2 + 0x10)" (* "*") (cast_expression "(char *)(param_2 + 0x10)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;" (assignment_expression "iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58" (identifier "iVar1") (= "=") (binary_expression "param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58" (binary_expression "param_2 + 0x80" (identifier "param_2") (+ "+") (number_literal "0x80")) (+ "+") (binary_expression "(uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58" (binary_expression "(uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(*(int *)(param_2 + 0x40) + 4)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0x40) + 4)" (( "(") (binary_expression "*(int *)(param_2 + 0x40) + 4" (pointer_expression "*(int *)(param_2 + 0x40)" (* "*") (cast_expression "(int *)(param_2 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x40)" (( "(") (binary_expression "param_2 + 0x40" (identifier "param_2") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (number_literal "4")) () ")")))) (* "*") (number_literal "0x58")))) (; ";")) (expression_statement "uVar2 = *(uint *)(iVar1 + 0xc);" (assignment_expression "uVar2 = *(uint *)(iVar1 + 0xc)" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(iVar1 + 0xc)" (* "*") (cast_expression "(uint *)(iVar1 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0xc)" (( "(") (binary_expression "iVar1 + 0xc" (identifier "iVar1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "iVar1 = *(int *)(iVar1 + 0x10);" (assignment_expression "iVar1 = *(int *)(iVar1 + 0x10)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(iVar1 + 0x10)" (* "*") (cast_expression "(int *)(iVar1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x10)" (( "(") (binary_expression "iVar1 + 0x10" (identifier "iVar1") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (if_statement "if (*(int *)(param_2 + 0x30) == 0) {\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }\n    else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0x30) == 0)" (( "(") (binary_expression "*(int *)(param_2 + 0x30) == 0" (pointer_expression "*(int *)(param_2 + 0x30)" (* "*") (cast_expression "(int *)(param_2 + 0x30)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar2 = (uint)(uVar2 < param_3);\n      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }\n    }" ({ "{") (expression_statement "uVar2 = (uint)(uVar2 < param_3);" (assignment_expression "uVar2 = (uint)(uVar2 < param_3)" (identifier "uVar2") (= "=") (call_expression "(uint)(uVar2 < param_3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar2 < param_3)" (( "(") (binary_expression "uVar2 < param_3" (identifier "uVar2") (< "<") (identifier "param_3")) () ")")))) (; ";")) (if_statement "if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0) {\n        return;\n      }" (if "if") (parenthesized_expression "((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0)" (( "(") (binary_expression "(SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==\n          (int)((iVar1 - param_4) - uVar2) < 0" (parenthesized_expression "(SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2))" (( "(") (binary_expression "SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)" (call_expression "SBORROW4(iVar1,param_4)" (identifier "SBORROW4") (argument_list "(iVar1,param_4)" (( "(") (identifier "iVar1") (, ",") (identifier "param_4") () ")"))) (!= "!=") (call_expression "SBORROW4(iVar1 - param_4,uVar2)" (identifier "SBORROW4") (argument_list "(iVar1 - param_4,uVar2)" (( "(") (binary_expression "iVar1 - param_4" (identifier "iVar1") (- "-") (identifier "param_4")) (, ",") (identifier "uVar2") () ")")))) () ")")) (== "==") (binary_expression "(int)((iVar1 - param_4) - uVar2) < 0" (cast_expression "(int)((iVar1 - param_4) - uVar2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((iVar1 - param_4) - uVar2)" (( "(") (binary_expression "(iVar1 - param_4) - uVar2" (parenthesized_expression "(iVar1 - param_4)" (( "(") (binary_expression "iVar1 - param_4" (identifier "iVar1") (- "-") (identifier "param_4")) () ")")) (- "-") (identifier "uVar2")) () ")"))) (< "<") (number_literal "0"))) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }" (else "else") (compound_statement "{\n      uVar2 = (uint)(param_3 < uVar2);\n      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }\n    }" ({ "{") (expression_statement "uVar2 = (uint)(param_3 < uVar2);" (assignment_expression "uVar2 = (uint)(param_3 < uVar2)" (identifier "uVar2") (= "=") (call_expression "(uint)(param_3 < uVar2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_3 < uVar2)" (( "(") (binary_expression "param_3 < uVar2" (identifier "param_3") (< "<") (identifier "uVar2")) () ")")))) (; ";")) (if_statement "if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0) {\n        return;\n      }" (if "if") (parenthesized_expression "((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0)" (( "(") (binary_expression "(SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==\n          (int)((param_4 - iVar1) - uVar2) < 0" (parenthesized_expression "(SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2))" (( "(") (binary_expression "SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)" (call_expression "SBORROW4(param_4,iVar1)" (identifier "SBORROW4") (argument_list "(param_4,iVar1)" (( "(") (identifier "param_4") (, ",") (identifier "iVar1") () ")"))) (!= "!=") (call_expression "SBORROW4(param_4 - iVar1,uVar2)" (identifier "SBORROW4") (argument_list "(param_4 - iVar1,uVar2)" (( "(") (binary_expression "param_4 - iVar1" (identifier "param_4") (- "-") (identifier "iVar1")) (, ",") (identifier "uVar2") () ")")))) () ")")) (== "==") (binary_expression "(int)((param_4 - iVar1) - uVar2) < 0" (cast_expression "(int)((param_4 - iVar1) - uVar2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((param_4 - iVar1) - uVar2)" (( "(") (binary_expression "(param_4 - iVar1) - uVar2" (parenthesized_expression "(param_4 - iVar1)" (( "(") (binary_expression "param_4 - iVar1" (identifier "param_4") (- "-") (identifier "iVar1")) () ")")) (- "-") (identifier "uVar2")) () ")"))) (< "<") (number_literal "0"))) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void __regparm2 function_1(type_1 *p,type_2 *pIter,type_3 iMatch)

{
  type_4 uVar1;
  type_1 *var_2;
  int var_4;
  type_5 var_5;
  int in_stack_ffffffdc;
  type_3 in_stack_ffffffe0;
  
  while( true ) {
    var_1((type_1 *)iMatch,iMatch._4_4_,in_stack_ffffffdc,in_stack_ffffffe0);
    if (p->rc != 0) {
      return;
    }
    if ((pIter->base).bEof != '\0') break;
    uVar1 = pIter->aFirst[1].iFirst;
    var_2 = *(type_1 **)&pIter->aSeg[uVar1].iRowid;
    var_4 = *(int *)((int)&pIter->aSeg[uVar1].iRowid + 4);
    if (pIter->bRev == 0) {
      var_5 = (type_5)(var_2 < (type_1 *)iMatch);
      if ((var_3(var_4,(int)iMatch._4_4_) != var_3(var_4 - (int)iMatch._4_4_,var_5)) ==
          (int)((var_4 - (int)iMatch._4_4_) - var_5) < 0) {
        return;
      }
    }
    else {
      var_5 = (type_5)((type_1 *)iMatch < var_2);
      if ((var_3((int)iMatch._4_4_,var_4) != var_3((int)iMatch._4_4_ - var_4,var_5)) ==
          (int)(((int)iMatch._4_4_ - var_4) - var_5) < 0) {
        return;
      }
    }
  }
  return;
}


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

void __regparm2 MASKED(int param_1,int param_2,uint param_3,int param_4)

{
  int iVar1;
  uint uVar2;
  
  while( true ) {
    FUN_000d7990(param_3,param_4);
    if (*(int *)(param_1 + 0x20) != 0) {
      return;
    }
    if (*(char *)(param_2 + 0x10) != '\0') break;
    iVar1 = param_2 + 0x80 + (uint)*(ushort *)(*(int *)(param_2 + 0x40) + 4) * 0x58;
    uVar2 = *(uint *)(iVar1 + 0xc);
    iVar1 = *(int *)(iVar1 + 0x10);
    if (*(int *)(param_2 + 0x30) == 0) {
      uVar2 = (uint)(uVar2 < param_3);
      if ((SBORROW4(iVar1,param_4) != SBORROW4(iVar1 - param_4,uVar2)) ==
          (int)((iVar1 - param_4) - uVar2) < 0) {
        return;
      }
    }
    else {
      uVar2 = (uint)(param_3 < uVar2);
      if ((SBORROW4(param_4,iVar1) != SBORROW4(param_4 - iVar1,uVar2)) ==
          (int)((param_4 - iVar1) - uVar2) < 0) {
        return;
      }
    }
  }
  return;
}

