
POSITION next_unfiltered(POSITION pos)

{
  uint uVar1;
  hilite_node *phVar2;
  
  uVar1 = ch_getflags();
  if ((((uVar1 & 8) == 0) && (phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0)
      ) && ((phVar2->r).hl_startpos <= pos)) {
    do {
      pos = (phVar2->r).hl_endpos;
      phVar2 = phVar2->next;
      if (phVar2 == (hilite_node *)0x0) {
        return pos;
      }
    } while ((phVar2->r).hl_startpos <= pos);
  }
  return pos;
}



long FUN_00117bbc(long param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_00107017();
  if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&
     (*(long *)(lVar2 + 0x30) <= param_1)) {
    do {
      param_1 = *(long *)(lVar2 + 0x38);
      lVar2 = *(long *)(lVar2 + 0x20);
      if (lVar2 == 0) {
        return param_1;
      }
    } while (*(long *)(lVar2 + 0x30) <= param_1);
  }
  return param_1;
}


PUSH RBX
MOV RBX,RDI
MOV EAX,0x0
CALL 0x00107017
TEST AL,0x8
JZ 0x00117bd3
MOV RAX,RBX
POP RBX
RET
MOV RSI,RBX
LEA RDI,[0x12d8c0]
MOV EAX,0x0
CALL 0x0011766a
TEST RAX,RAX
JZ 0x00117bce
CMP RBX,qword ptr [RAX + 0x30]
JL 0x00117bce
MOV RBX,qword ptr [RAX + 0x38]
MOV RAX,qword ptr [RAX + 0x20]
TEST RAX,RAX
JZ 0x00117bce
CMP qword ptr [RAX + 0x30],RBX
JLE 0x00117bf2
JMP 0x00117bce
(translation_unit "long FUN_00117bbc(long param_1)\n\n{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_00107017();\n  if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }\n  return param_1;\n}\n\n" (function_definition "long FUN_00117bbc(long param_1)\n\n{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_00107017();\n  if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }\n  return param_1;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00117bbc(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_00107017();\n  if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }\n  return param_1;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (expression_statement "uVar1 = FUN_00107017();" (assignment_expression "uVar1 = FUN_00107017()" identifier = (call_expression "FUN_00107017()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }" if (parenthesized_expression "((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1))" ( (binary_expression "(((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)" (parenthesized_expression "(((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0))" ( (binary_expression "((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)" (parenthesized_expression "((uVar1 & 8) == 0)" ( (binary_expression "(uVar1 & 8) == 0" (parenthesized_expression "(uVar1 & 8)" ( (binary_expression "uVar1 & 8" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)" ( (comma_expression "lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0" (assignment_expression "lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1)" identifier = (call_expression "FUN_0011766a(&DAT_0012d8c0,param_1)" identifier (argument_list "(&DAT_0012d8c0,param_1)" ( (pointer_expression "&DAT_0012d8c0" & identifier) , identifier )))) , (binary_expression "lVar2 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "(*(long *)(lVar2 + 0x30) <= param_1)" ( (binary_expression "*(long *)(lVar2 + 0x30) <= param_1" (pointer_expression "*(long *)(lVar2 + 0x30)" * (cast_expression "(long *)(lVar2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x30)" ( (binary_expression "lVar2 + 0x30" identifier + number_literal) )))) <= identifier) ))) )) (compound_statement "{\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }" { (do_statement "do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);" do (compound_statement "{\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    }" { (expression_statement "param_1 = *(long *)(lVar2 + 0x38);" (assignment_expression "param_1 = *(long *)(lVar2 + 0x38)" identifier = (pointer_expression "*(long *)(lVar2 + 0x38)" * (cast_expression "(long *)(lVar2 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x38)" ( (binary_expression "lVar2 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "lVar2 = *(long *)(lVar2 + 0x20);" (assignment_expression "lVar2 = *(long *)(lVar2 + 0x20)" identifier = (pointer_expression "*(long *)(lVar2 + 0x20)" * (cast_expression "(long *)(lVar2 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if (lVar2 == 0) {\n        return param_1;\n      }" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return param_1;\n      }" { (return_statement "return param_1;" return identifier ;) })) }) while (parenthesized_expression "(*(long *)(lVar2 + 0x30) <= param_1)" ( (binary_expression "*(long *)(lVar2 + 0x30) <= param_1" (pointer_expression "*(long *)(lVar2 + 0x30)" * (cast_expression "(long *)(lVar2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x30)" ( (binary_expression "lVar2 + 0x30" identifier + number_literal) )))) <= identifier) )) ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "POSITION next_unfiltered(POSITION pos)\n\n{\n  uint uVar1;\n  hilite_node *phVar2;\n  \n  uVar1 = ch_getflags();\n  if ((((uVar1 & 8) == 0) && (phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0)\n      ) && ((phVar2->r).hl_startpos <= pos)) {\n    do {\n      pos = (phVar2->r).hl_endpos;\n      phVar2 = phVar2->next;\n      if (phVar2 == (hilite_node *)0x0) {\n        return pos;\n      }\n    } while ((phVar2->r).hl_startpos <= pos);\n  }\n  return pos;\n}\n\n" (function_definition "POSITION next_unfiltered(POSITION pos)\n\n{\n  uint uVar1;\n  hilite_node *phVar2;\n  \n  uVar1 = ch_getflags();\n  if ((((uVar1 & 8) == 0) && (phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0)\n      ) && ((phVar2->r).hl_startpos <= pos)) {\n    do {\n      pos = (phVar2->r).hl_endpos;\n      phVar2 = phVar2->next;\n      if (phVar2 == (hilite_node *)0x0) {\n        return pos;\n      }\n    } while ((phVar2->r).hl_startpos <= pos);\n  }\n  return pos;\n}" type_identifier (function_declarator "next_unfiltered(POSITION pos)" identifier (parameter_list "(POSITION pos)" ( (parameter_declaration "POSITION pos" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  hilite_node *phVar2;\n  \n  uVar1 = ch_getflags();\n  if ((((uVar1 & 8) == 0) && (phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0)\n      ) && ((phVar2->r).hl_startpos <= pos)) {\n    do {\n      pos = (phVar2->r).hl_endpos;\n      phVar2 = phVar2->next;\n      if (phVar2 == (hilite_node *)0x0) {\n        return pos;\n      }\n    } while ((phVar2->r).hl_startpos <= pos);\n  }\n  return pos;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "hilite_node *phVar2;" type_identifier (pointer_declarator "*phVar2" * identifier) ;) (expression_statement "uVar1 = ch_getflags();" (assignment_expression "uVar1 = ch_getflags()" identifier = (call_expression "ch_getflags()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((((uVar1 & 8) == 0) && (phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0)\n      ) && ((phVar2->r).hl_startpos <= pos)) {\n    do {\n      pos = (phVar2->r).hl_endpos;\n      phVar2 = phVar2->next;\n      if (phVar2 == (hilite_node *)0x0) {\n        return pos;\n      }\n    } while ((phVar2->r).hl_startpos <= pos);\n  }" if (parenthesized_expression "((((uVar1 & 8) == 0) && (phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0)\n      ) && ((phVar2->r).hl_startpos <= pos))" ( (binary_expression "(((uVar1 & 8) == 0) && (phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0)\n      ) && ((phVar2->r).hl_startpos <= pos)" (parenthesized_expression "(((uVar1 & 8) == 0) && (phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0)\n      )" ( (binary_expression "((uVar1 & 8) == 0) && (phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0)" (parenthesized_expression "((uVar1 & 8) == 0)" ( (binary_expression "(uVar1 & 8) == 0" (parenthesized_expression "(uVar1 & 8)" ( (binary_expression "uVar1 & 8" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0)" ( (comma_expression "phVar2 = hlist_find(&filter_anchor,pos), phVar2 != (hilite_node *)0x0" (assignment_expression "phVar2 = hlist_find(&filter_anchor,pos)" identifier = (call_expression "hlist_find(&filter_anchor,pos)" identifier (argument_list "(&filter_anchor,pos)" ( (pointer_expression "&filter_anchor" & identifier) , identifier )))) , (binary_expression "phVar2 != (hilite_node *)0x0" identifier != (cast_expression "(hilite_node *)0x0" ( (type_descriptor "hilite_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) && (parenthesized_expression "((phVar2->r).hl_startpos <= pos)" ( (binary_expression "(phVar2->r).hl_startpos <= pos" (field_expression "(phVar2->r).hl_startpos" (parenthesized_expression "(phVar2->r)" ( (field_expression "phVar2->r" identifier -> field_identifier) )) . field_identifier) <= identifier) ))) )) (compound_statement "{\n    do {\n      pos = (phVar2->r).hl_endpos;\n      phVar2 = phVar2->next;\n      if (phVar2 == (hilite_node *)0x0) {\n        return pos;\n      }\n    } while ((phVar2->r).hl_startpos <= pos);\n  }" { (do_statement "do {\n      pos = (phVar2->r).hl_endpos;\n      phVar2 = phVar2->next;\n      if (phVar2 == (hilite_node *)0x0) {\n        return pos;\n      }\n    } while ((phVar2->r).hl_startpos <= pos);" do (compound_statement "{\n      pos = (phVar2->r).hl_endpos;\n      phVar2 = phVar2->next;\n      if (phVar2 == (hilite_node *)0x0) {\n        return pos;\n      }\n    }" { (expression_statement "pos = (phVar2->r).hl_endpos;" (assignment_expression "pos = (phVar2->r).hl_endpos" identifier = (field_expression "(phVar2->r).hl_endpos" (parenthesized_expression "(phVar2->r)" ( (field_expression "phVar2->r" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "phVar2 = phVar2->next;" (assignment_expression "phVar2 = phVar2->next" identifier = (field_expression "phVar2->next" identifier -> field_identifier)) ;) (if_statement "if (phVar2 == (hilite_node *)0x0) {\n        return pos;\n      }" if (parenthesized_expression "(phVar2 == (hilite_node *)0x0)" ( (binary_expression "phVar2 == (hilite_node *)0x0" identifier == (cast_expression "(hilite_node *)0x0" ( (type_descriptor "hilite_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return pos;\n      }" { (return_statement "return pos;" return identifier ;) })) }) while (parenthesized_expression "((phVar2->r).hl_startpos <= pos)" ( (binary_expression "(phVar2->r).hl_startpos <= pos" (field_expression "(phVar2->r).hl_startpos" (parenthesized_expression "(phVar2->r)" ( (field_expression "phVar2->r" identifier -> field_identifier) )) . field_identifier) <= identifier) )) ;) })) (return_statement "return pos;" return identifier ;) })))
(translation_unit "long FUN_00117bbc(long param_1)\n\n{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_00107017();\n  if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }\n  return param_1;\n}\n\n" (function_definition "long FUN_00117bbc(long param_1)\n\n{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_00107017();\n  if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }\n  return param_1;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00117bbc(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_00107017();\n  if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }\n  return param_1;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (expression_statement "uVar1 = FUN_00107017();" (assignment_expression "uVar1 = FUN_00107017()" identifier = (call_expression "FUN_00107017()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }" if (parenthesized_expression "((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1))" ( (binary_expression "(((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)" (parenthesized_expression "(((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0))" ( (binary_expression "((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)" (parenthesized_expression "((uVar1 & 8) == 0)" ( (binary_expression "(uVar1 & 8) == 0" (parenthesized_expression "(uVar1 & 8)" ( (binary_expression "uVar1 & 8" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)" ( (comma_expression "lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0" (assignment_expression "lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1)" identifier = (call_expression "FUN_0011766a(&DAT_0012d8c0,param_1)" identifier (argument_list "(&DAT_0012d8c0,param_1)" ( (pointer_expression "&DAT_0012d8c0" & identifier) , identifier )))) , (binary_expression "lVar2 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "(*(long *)(lVar2 + 0x30) <= param_1)" ( (binary_expression "*(long *)(lVar2 + 0x30) <= param_1" (pointer_expression "*(long *)(lVar2 + 0x30)" * (cast_expression "(long *)(lVar2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x30)" ( (binary_expression "lVar2 + 0x30" identifier + number_literal) )))) <= identifier) ))) )) (compound_statement "{\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }" { (do_statement "do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);" do (compound_statement "{\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    }" { (expression_statement "param_1 = *(long *)(lVar2 + 0x38);" (assignment_expression "param_1 = *(long *)(lVar2 + 0x38)" identifier = (pointer_expression "*(long *)(lVar2 + 0x38)" * (cast_expression "(long *)(lVar2 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x38)" ( (binary_expression "lVar2 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "lVar2 = *(long *)(lVar2 + 0x20);" (assignment_expression "lVar2 = *(long *)(lVar2 + 0x20)" identifier = (pointer_expression "*(long *)(lVar2 + 0x20)" * (cast_expression "(long *)(lVar2 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if (lVar2 == 0) {\n        return param_1;\n      }" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return param_1;\n      }" { (return_statement "return param_1;" return identifier ;) })) }) while (parenthesized_expression "(*(long *)(lVar2 + 0x30) <= param_1)" ( (binary_expression "*(long *)(lVar2 + 0x30) <= param_1" (pointer_expression "*(long *)(lVar2 + 0x30)" * (cast_expression "(long *)(lVar2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x30)" ( (binary_expression "lVar2 + 0x30" identifier + number_literal) )))) <= identifier) )) ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT )))) , (binary_expression IDENT != LIT)) ))) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) ))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) ;) })) (return_statement return IDENT ;) })))
(function_definition "long FUN_00117bbc(long param_1)\n\n{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_00107017();\n  if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }\n  return param_1;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_00117bbc(long param_1)" (identifier "FUN_00117bbc") (parameter_list "(long param_1)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) () ")"))) (compound_statement "{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_00107017();\n  if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }\n  return param_1;\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (expression_statement "uVar1 = FUN_00107017();" (assignment_expression "uVar1 = FUN_00107017()" (identifier "uVar1") (= "=") (call_expression "FUN_00107017()" (identifier "FUN_00107017") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)) {\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }" (if "if") (parenthesized_expression "((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1))" (( "(") (binary_expression "(((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&\n     (*(long *)(lVar2 + 0x30) <= param_1)" (parenthesized_expression "(((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0))" (( "(") (binary_expression "((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)" (parenthesized_expression "((uVar1 & 8) == 0)" (( "(") (binary_expression "(uVar1 & 8) == 0" (parenthesized_expression "(uVar1 & 8)" (( "(") (binary_expression "uVar1 & 8" (identifier "uVar1") (& "&") (number_literal "8")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)" (( "(") (comma_expression "lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0" (assignment_expression "lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1)" (identifier "lVar2") (= "=") (call_expression "FUN_0011766a(&DAT_0012d8c0,param_1)" (identifier "FUN_0011766a") (argument_list "(&DAT_0012d8c0,param_1)" (( "(") (pointer_expression "&DAT_0012d8c0" (& "&") (identifier "DAT_0012d8c0")) (, ",") (identifier "param_1") () ")")))) (, ",") (binary_expression "lVar2 != 0" (identifier "lVar2") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(*(long *)(lVar2 + 0x30) <= param_1)" (( "(") (binary_expression "*(long *)(lVar2 + 0x30) <= param_1" (pointer_expression "*(long *)(lVar2 + 0x30)" (* "*") (cast_expression "(long *)(lVar2 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x30)" (( "(") (binary_expression "lVar2 + 0x30" (identifier "lVar2") (+ "+") (number_literal "0x30")) () ")")))) (<= "<=") (identifier "param_1")) () ")"))) () ")")) (compound_statement "{\n    do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);\n  }" ({ "{") (do_statement "do {\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    } while (*(long *)(lVar2 + 0x30) <= param_1);" (do "do") (compound_statement "{\n      param_1 = *(long *)(lVar2 + 0x38);\n      lVar2 = *(long *)(lVar2 + 0x20);\n      if (lVar2 == 0) {\n        return param_1;\n      }\n    }" ({ "{") (expression_statement "param_1 = *(long *)(lVar2 + 0x38);" (assignment_expression "param_1 = *(long *)(lVar2 + 0x38)" (identifier "param_1") (= "=") (pointer_expression "*(long *)(lVar2 + 0x38)" (* "*") (cast_expression "(long *)(lVar2 + 0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x38)" (( "(") (binary_expression "lVar2 + 0x38" (identifier "lVar2") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (expression_statement "lVar2 = *(long *)(lVar2 + 0x20);" (assignment_expression "lVar2 = *(long *)(lVar2 + 0x20)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(lVar2 + 0x20)" (* "*") (cast_expression "(long *)(lVar2 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x20)" (( "(") (binary_expression "lVar2 + 0x20" (identifier "lVar2") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (if_statement "if (lVar2 == 0) {\n        return param_1;\n      }" (if "if") (parenthesized_expression "(lVar2 == 0)" (( "(") (binary_expression "lVar2 == 0" (identifier "lVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return param_1;\n      }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(*(long *)(lVar2 + 0x30) <= param_1)" (( "(") (binary_expression "*(long *)(lVar2 + 0x30) <= param_1" (pointer_expression "*(long *)(lVar2 + 0x30)" (* "*") (cast_expression "(long *)(lVar2 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x30)" (( "(") (binary_expression "lVar2 + 0x30" (identifier "lVar2") (+ "+") (number_literal "0x30")) () ")")))) (<= "<=") (identifier "param_1")) () ")")) (; ";")) (} "}"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

type_1 function_1(type_1 var_5)

{
  type_2 var_2;
  type_3 *var_4;
  
  var_2 = var_1();
  if ((((var_2 & 8) == 0) && (var_4 = var_3(&filter_anchor,var_5), var_4 != (type_3 *)0x0)
      ) && ((var_4->r).hl_startpos <= var_5)) {
    do {
      var_5 = (var_4->r).hl_endpos;
      var_4 = var_4->next;
      if (var_4 == (type_3 *)0x0) {
        return var_5;
      }
    } while ((var_4->r).hl_startpos <= var_5);
  }
  return var_5;
}


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

long MASKED(long param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_00107017();
  if ((((uVar1 & 8) == 0) && (lVar2 = FUN_0011766a(&DAT_0012d8c0,param_1), lVar2 != 0)) &&
     (*(long *)(lVar2 + 0x30) <= param_1)) {
    do {
      param_1 = *(long *)(lVar2 + 0x38);
      lVar2 = *(long *)(lVar2 + 0x20);
      if (lVar2 == 0) {
        return param_1;
      }
    } while (*(long *)(lVar2 + 0x30) <= param_1);
  }
  return param_1;
}

