
int sqlite3ExprImpliesExpr(Parse *pParse,Expr *pE1,Expr *pE2,int iTab)

{
  int iVar1;
  u8 uVar3;
  uint uVar2;
  Expr *pA;
  
  iVar1 = sqlite3ExprCompare(pParse,pE1,pE2,iTab);
  if (iVar1 == 0) {
    return 1;
  }
  uVar3 = pE2->op;
  if (uVar3 == '+') {
    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pLeft,iTab);
    if (iVar1 != 0) {
      return 1;
    }
    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pRight,iTab);
    if (iVar1 != 0) {
      return 1;
    }
    uVar3 = pE2->op;
  }
  if (((uVar3 == '3') && (pE1->op != '2')) && (pE1->op != '-')) {
    pA = pE1->pLeft;
    if (pA != (Expr *)0x0) {
      uVar2 = pA->flags;
      while ((uVar2 & 0x1000) != 0) {
        if ((uVar2 & 0x40000) == 0) {
          pA = pA->pLeft;
        }
        else {
          pA = ((pA->x).pList)->a[0].pExpr;
        }
        if (pA == (Expr *)0x0) break;
        uVar2 = pA->flags;
      }
    }
    iVar1 = sqlite3ExprCompare(pParse,pA,pE2->pLeft,iTab);
    uVar2 = (uint)(iVar1 == 0);
  }
  else {
    uVar2 = 0;
  }
  return uVar2;
}



bool FUN_000a2958(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)

{
  int iVar1;
  char cVar3;
  bool bVar4;
  uint uVar2;
  
  iVar1 = FUN_0009e290();
  if (iVar1 == 0) {
    return true;
  }
  cVar3 = *param_3;
  if (cVar3 == '+') {
    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);
    if (iVar1 != 0) {
      return true;
    }
    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);
    if (iVar1 != 0) {
      return true;
    }
    cVar3 = *param_3;
  }
  if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {
    iVar1 = *(int *)(param_2 + 0xc);
    if (iVar1 != 0) {
      uVar2 = *(uint *)(iVar1 + 4);
      while ((uVar2 & 0x1000) != 0) {
        if ((uVar2 & 0x40000) == 0) {
          iVar1 = *(int *)(iVar1 + 0xc);
        }
        else {
          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);
        }
        if (iVar1 == 0) break;
        uVar2 = *(uint *)(iVar1 + 4);
      }
    }
    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);
    bVar4 = iVar1 == 0;
  }
  else {
    bVar4 = false;
  }
  return bVar4;
}


lui gp,0xf
addiu gp,gp,0x5fc8
addu gp,gp,t9
addiu sp,sp,-0x38
sw s0,0x1c(sp)
lw s0,-0x7d5c(gp)
sw gp,0x10(sp)
sw s4,0x2c(sp)
or s4,a3,zero
addiu s0,s0,-0x1d70
sw s3,0x28(sp)
sw s2,0x24(sp)
or s3,a0,zero
sw s1,0x20(sp)
or t9,s0,zero
sw ra,0x34(sp)
or s2,a1,zero
sw s5,0x30(sp)
bal 0x0009e290
_or s1,a2,zero
beq v0,zero,0x000a2a38
_lw gp,0x10(sp)
lbu v0,0x0(s1)
li v1,0x2b
beq v0,v1,0x000a29f4
_lw s5,-0x7d5c(gp)
li v1,0x33
beq v0,v1,0x000a2a60
_li v1,0x32
or v0,zero,zero
lw ra,0x34(sp)
lw s5,0x30(sp)
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x38
or a3,s4,zero
lw a2,0xc(s1)
or a1,s2,zero
addiu s5,s5,0x2958
or t9,s5,zero
bal 0x000a2958
_or a0,s3,zero
bne v0,zero,0x000a2a3c
_lw ra,0x34(sp)
lw a2,0x10(s1)
or a3,s4,zero
or a1,s2,zero
or t9,s5,zero
bal 0x000a2958
_or a0,s3,zero
beq v0,zero,0x000a2ae8
_nop
lw ra,0x34(sp)
li v0,0x1
lw s5,0x30(sp)
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x38
lbu v0,0x0(s2)
beq v0,v1,0x000a29cc
_li v1,0x2d
beq v0,v1,0x000a29cc
_nop
lw a1,0xc(s2)
beq a1,zero,0x000a2acc
_nop
lw v0,0x4(a1)
andi v1,v0,0x1000
beq v1,zero,0x000a2acc
_lui a0,0x4
b 0x000a2abc
_and v0,v0,a0
lw v0,0x14(a1)
lw a1,0x4(v0)
beq a1,zero,0x000a2acc
_nop
lw v0,0x4(a1)
andi v1,v0,0x1000
beq v1,zero,0x000a2acc
_nop
and v0,v0,a0
bne v0,zero,0x000a2a98
_nop
b 0x000a2aa0
_lw a1,0xc(a1)
lw a2,0xc(s1)
or a3,s4,zero
or t9,s0,zero
bal 0x0009e290
_or a0,s3,zero
b 0x000a29d0
_sltiu v0,v0,0x1
b 0x000a29c0
_lbu v0,0x0(s1)
(translation_unit "bool FUN_000a2958(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)\n\n{\n  int iVar1;\n  char cVar3;\n  bool bVar4;\n  uint uVar2;\n  \n  iVar1 = FUN_0009e290();\n  if (iVar1 == 0) {\n    return true;\n  }\n  cVar3 = *param_3;\n  if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }\n  if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }\n  return bVar4;\n}\n\n" (function_definition "bool FUN_000a2958(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)\n\n{\n  int iVar1;\n  char cVar3;\n  bool bVar4;\n  uint uVar2;\n  \n  iVar1 = FUN_0009e290();\n  if (iVar1 == 0) {\n    return true;\n  }\n  cVar3 = *param_3;\n  if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }\n  if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }\n  return bVar4;\n}" primitive_type (function_declarator "FUN_000a2958(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)" identifier (parameter_list "(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar3;\n  bool bVar4;\n  uint uVar2;\n  \n  iVar1 = FUN_0009e290();\n  if (iVar1 == 0) {\n    return true;\n  }\n  cVar3 = *param_3;\n  if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }\n  if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }\n  return bVar4;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (expression_statement "iVar1 = FUN_0009e290();" (assignment_expression "iVar1 = FUN_0009e290()" identifier = (call_expression "FUN_0009e290()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar1 == 0) {\n    return true;\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return true;\n  }" { (return_statement "return true;" return true ;) })) (expression_statement "cVar3 = *param_3;" (assignment_expression "cVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }" if (parenthesized_expression "(cVar3 == '+')" ( (binary_expression "cVar3 == '+'" identifier == (char_literal "'+'" ' character ')) )) (compound_statement "{\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }" { (expression_statement "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);" (assignment_expression "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4)" identifier = (call_expression "FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4)" identifier (argument_list "(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4)" ( identifier , identifier , (pointer_expression "*(undefined4 *)(param_3 + 0xc)" * (cast_expression "(undefined4 *)(param_3 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xc)" ( (binary_expression "param_3 + 0xc" identifier + number_literal) )))) , identifier )))) ;) (if_statement "if (iVar1 != 0) {\n      return true;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);" (assignment_expression "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4)" identifier = (call_expression "FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4)" identifier (argument_list "(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4)" ( identifier , identifier , (pointer_expression "*(undefined4 *)(param_3 + 0x10)" * (cast_expression "(undefined4 *)(param_3 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x10)" ( (binary_expression "param_3 + 0x10" identifier + number_literal) )))) , identifier )))) ;) (if_statement "if (iVar1 != 0) {\n      return true;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "cVar3 = *param_3;" (assignment_expression "cVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) })) (if_statement "if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }" if (parenthesized_expression "(((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-'))" ( (binary_expression "((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')" (parenthesized_expression "((cVar3 == '3') && (*param_2 != '2'))" ( (binary_expression "(cVar3 == '3') && (*param_2 != '2')" (parenthesized_expression "(cVar3 == '3')" ( (binary_expression "cVar3 == '3'" identifier == (char_literal "'3'" ' character ')) )) && (parenthesized_expression "(*param_2 != '2')" ( (binary_expression "*param_2 != '2'" (pointer_expression "*param_2" * identifier) != (char_literal "'2'" ' character ')) ))) )) && (parenthesized_expression "(*param_2 != '-')" ( (binary_expression "*param_2 != '-'" (pointer_expression "*param_2" * identifier) != (char_literal "'-'" ' character ')) ))) )) (compound_statement "{\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }" { (expression_statement "iVar1 = *(int *)(param_2 + 0xc);" (assignment_expression "iVar1 = *(int *)(param_2 + 0xc)" identifier = (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }" { (expression_statement "uVar2 = *(uint *)(iVar1 + 4);" (assignment_expression "uVar2 = *(uint *)(iVar1 + 4)" identifier = (pointer_expression "*(uint *)(iVar1 + 4)" * (cast_expression "(uint *)(iVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) ))))) ;) (while_statement "while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }" while (parenthesized_expression "((uVar2 & 0x1000) != 0)" ( (binary_expression "(uVar2 & 0x1000) != 0" (parenthesized_expression "(uVar2 & 0x1000)" ( (binary_expression "uVar2 & 0x1000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }" { (if_statement "if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }" if (parenthesized_expression "((uVar2 & 0x40000) == 0)" ( (binary_expression "(uVar2 & 0x40000) == 0" (parenthesized_expression "(uVar2 & 0x40000)" ( (binary_expression "uVar2 & 0x40000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }" { (expression_statement "iVar1 = *(int *)(iVar1 + 0xc);" (assignment_expression "iVar1 = *(int *)(iVar1 + 0xc)" identifier = (pointer_expression "*(int *)(iVar1 + 0xc)" * (cast_expression "(int *)(iVar1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) ))))) ;) }) (else_clause "else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }" else (compound_statement "{\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }" { (expression_statement "iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);" (assignment_expression "iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4)" identifier = (pointer_expression "*(int *)(*(int *)(iVar1 + 0x14) + 4)" * (cast_expression "(int *)(*(int *)(iVar1 + 0x14) + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar1 + 0x14) + 4)" ( (binary_expression "*(int *)(iVar1 + 0x14) + 4" (pointer_expression "*(int *)(iVar1 + 0x14)" * (cast_expression "(int *)(iVar1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x14)" ( (binary_expression "iVar1 + 0x14" identifier + number_literal) )))) + number_literal) ))))) ;) }))) (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = *(uint *)(iVar1 + 4);" (assignment_expression "uVar2 = *(uint *)(iVar1 + 4)" identifier = (pointer_expression "*(uint *)(iVar1 + 4)" * (cast_expression "(uint *)(iVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) ))))) ;) })) })) (expression_statement "iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);" (assignment_expression "iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4)" identifier = (call_expression "FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4)" identifier (argument_list "(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4)" ( identifier , identifier , (pointer_expression "*(undefined4 *)(param_3 + 0xc)" * (cast_expression "(undefined4 *)(param_3 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xc)" ( (binary_expression "param_3 + 0xc" identifier + number_literal) )))) , identifier )))) ;) (expression_statement "bVar4 = iVar1 == 0;" (assignment_expression "bVar4 = iVar1 == 0" identifier = (binary_expression "iVar1 == 0" identifier == number_literal)) ;) }) (else_clause "else {\n    bVar4 = false;\n  }" else (compound_statement "{\n    bVar4 = false;\n  }" { (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) }))) (return_statement "return bVar4;" return identifier ;) })))
(translation_unit "int sqlite3ExprImpliesExpr(Parse *pParse,Expr *pE1,Expr *pE2,int iTab)\n\n{\n  int iVar1;\n  u8 uVar3;\n  uint uVar2;\n  Expr *pA;\n  \n  iVar1 = sqlite3ExprCompare(pParse,pE1,pE2,iTab);\n  if (iVar1 == 0) {\n    return 1;\n  }\n  uVar3 = pE2->op;\n  if (uVar3 == '+') {\n    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pLeft,iTab);\n    if (iVar1 != 0) {\n      return 1;\n    }\n    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pRight,iTab);\n    if (iVar1 != 0) {\n      return 1;\n    }\n    uVar3 = pE2->op;\n  }\n  if (((uVar3 == '3') && (pE1->op != '2')) && (pE1->op != '-')) {\n    pA = pE1->pLeft;\n    if (pA != (Expr *)0x0) {\n      uVar2 = pA->flags;\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          pA = pA->pLeft;\n        }\n        else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }\n        if (pA == (Expr *)0x0) break;\n        uVar2 = pA->flags;\n      }\n    }\n    iVar1 = sqlite3ExprCompare(pParse,pA,pE2->pLeft,iTab);\n    uVar2 = (uint)(iVar1 == 0);\n  }\n  else {\n    uVar2 = 0;\n  }\n  return uVar2;\n}\n\n" (function_definition "int sqlite3ExprImpliesExpr(Parse *pParse,Expr *pE1,Expr *pE2,int iTab)\n\n{\n  int iVar1;\n  u8 uVar3;\n  uint uVar2;\n  Expr *pA;\n  \n  iVar1 = sqlite3ExprCompare(pParse,pE1,pE2,iTab);\n  if (iVar1 == 0) {\n    return 1;\n  }\n  uVar3 = pE2->op;\n  if (uVar3 == '+') {\n    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pLeft,iTab);\n    if (iVar1 != 0) {\n      return 1;\n    }\n    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pRight,iTab);\n    if (iVar1 != 0) {\n      return 1;\n    }\n    uVar3 = pE2->op;\n  }\n  if (((uVar3 == '3') && (pE1->op != '2')) && (pE1->op != '-')) {\n    pA = pE1->pLeft;\n    if (pA != (Expr *)0x0) {\n      uVar2 = pA->flags;\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          pA = pA->pLeft;\n        }\n        else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }\n        if (pA == (Expr *)0x0) break;\n        uVar2 = pA->flags;\n      }\n    }\n    iVar1 = sqlite3ExprCompare(pParse,pA,pE2->pLeft,iTab);\n    uVar2 = (uint)(iVar1 == 0);\n  }\n  else {\n    uVar2 = 0;\n  }\n  return uVar2;\n}" primitive_type (function_declarator "sqlite3ExprImpliesExpr(Parse *pParse,Expr *pE1,Expr *pE2,int iTab)" identifier (parameter_list "(Parse *pParse,Expr *pE1,Expr *pE2,int iTab)" ( (parameter_declaration "Parse *pParse" type_identifier (pointer_declarator "*pParse" * identifier)) , (parameter_declaration "Expr *pE1" type_identifier (pointer_declarator "*pE1" * identifier)) , (parameter_declaration "Expr *pE2" type_identifier (pointer_declarator "*pE2" * identifier)) , (parameter_declaration "int iTab" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  u8 uVar3;\n  uint uVar2;\n  Expr *pA;\n  \n  iVar1 = sqlite3ExprCompare(pParse,pE1,pE2,iTab);\n  if (iVar1 == 0) {\n    return 1;\n  }\n  uVar3 = pE2->op;\n  if (uVar3 == '+') {\n    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pLeft,iTab);\n    if (iVar1 != 0) {\n      return 1;\n    }\n    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pRight,iTab);\n    if (iVar1 != 0) {\n      return 1;\n    }\n    uVar3 = pE2->op;\n  }\n  if (((uVar3 == '3') && (pE1->op != '2')) && (pE1->op != '-')) {\n    pA = pE1->pLeft;\n    if (pA != (Expr *)0x0) {\n      uVar2 = pA->flags;\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          pA = pA->pLeft;\n        }\n        else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }\n        if (pA == (Expr *)0x0) break;\n        uVar2 = pA->flags;\n      }\n    }\n    iVar1 = sqlite3ExprCompare(pParse,pA,pE2->pLeft,iTab);\n    uVar2 = (uint)(iVar1 == 0);\n  }\n  else {\n    uVar2 = 0;\n  }\n  return uVar2;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "u8 uVar3;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "Expr *pA;" type_identifier (pointer_declarator "*pA" * identifier) ;) (expression_statement "iVar1 = sqlite3ExprCompare(pParse,pE1,pE2,iTab);" (assignment_expression "iVar1 = sqlite3ExprCompare(pParse,pE1,pE2,iTab)" identifier = (call_expression "sqlite3ExprCompare(pParse,pE1,pE2,iTab)" identifier (argument_list "(pParse,pE1,pE2,iTab)" ( identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n    return 1;\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar3 = pE2->op;" (assignment_expression "uVar3 = pE2->op" identifier = (field_expression "pE2->op" identifier -> field_identifier)) ;) (if_statement "if (uVar3 == '+') {\n    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pLeft,iTab);\n    if (iVar1 != 0) {\n      return 1;\n    }\n    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pRight,iTab);\n    if (iVar1 != 0) {\n      return 1;\n    }\n    uVar3 = pE2->op;\n  }" if (parenthesized_expression "(uVar3 == '+')" ( (binary_expression "uVar3 == '+'" identifier == (char_literal "'+'" ' character ')) )) (compound_statement "{\n    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pLeft,iTab);\n    if (iVar1 != 0) {\n      return 1;\n    }\n    iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pRight,iTab);\n    if (iVar1 != 0) {\n      return 1;\n    }\n    uVar3 = pE2->op;\n  }" { (expression_statement "iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pLeft,iTab);" (assignment_expression "iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pLeft,iTab)" identifier = (call_expression "sqlite3ExprImpliesExpr(pParse,pE1,pE2->pLeft,iTab)" identifier (argument_list "(pParse,pE1,pE2->pLeft,iTab)" ( identifier , identifier , (field_expression "pE2->pLeft" identifier -> field_identifier) , identifier )))) ;) (if_statement "if (iVar1 != 0) {\n      return 1;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pRight,iTab);" (assignment_expression "iVar1 = sqlite3ExprImpliesExpr(pParse,pE1,pE2->pRight,iTab)" identifier = (call_expression "sqlite3ExprImpliesExpr(pParse,pE1,pE2->pRight,iTab)" identifier (argument_list "(pParse,pE1,pE2->pRight,iTab)" ( identifier , identifier , (field_expression "pE2->pRight" identifier -> field_identifier) , identifier )))) ;) (if_statement "if (iVar1 != 0) {\n      return 1;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar3 = pE2->op;" (assignment_expression "uVar3 = pE2->op" identifier = (field_expression "pE2->op" identifier -> field_identifier)) ;) })) (if_statement "if (((uVar3 == '3') && (pE1->op != '2')) && (pE1->op != '-')) {\n    pA = pE1->pLeft;\n    if (pA != (Expr *)0x0) {\n      uVar2 = pA->flags;\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          pA = pA->pLeft;\n        }\n        else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }\n        if (pA == (Expr *)0x0) break;\n        uVar2 = pA->flags;\n      }\n    }\n    iVar1 = sqlite3ExprCompare(pParse,pA,pE2->pLeft,iTab);\n    uVar2 = (uint)(iVar1 == 0);\n  }\n  else {\n    uVar2 = 0;\n  }" if (parenthesized_expression "(((uVar3 == '3') && (pE1->op != '2')) && (pE1->op != '-'))" ( (binary_expression "((uVar3 == '3') && (pE1->op != '2')) && (pE1->op != '-')" (parenthesized_expression "((uVar3 == '3') && (pE1->op != '2'))" ( (binary_expression "(uVar3 == '3') && (pE1->op != '2')" (parenthesized_expression "(uVar3 == '3')" ( (binary_expression "uVar3 == '3'" identifier == (char_literal "'3'" ' character ')) )) && (parenthesized_expression "(pE1->op != '2')" ( (binary_expression "pE1->op != '2'" (field_expression "pE1->op" identifier -> field_identifier) != (char_literal "'2'" ' character ')) ))) )) && (parenthesized_expression "(pE1->op != '-')" ( (binary_expression "pE1->op != '-'" (field_expression "pE1->op" identifier -> field_identifier) != (char_literal "'-'" ' character ')) ))) )) (compound_statement "{\n    pA = pE1->pLeft;\n    if (pA != (Expr *)0x0) {\n      uVar2 = pA->flags;\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          pA = pA->pLeft;\n        }\n        else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }\n        if (pA == (Expr *)0x0) break;\n        uVar2 = pA->flags;\n      }\n    }\n    iVar1 = sqlite3ExprCompare(pParse,pA,pE2->pLeft,iTab);\n    uVar2 = (uint)(iVar1 == 0);\n  }" { (expression_statement "pA = pE1->pLeft;" (assignment_expression "pA = pE1->pLeft" identifier = (field_expression "pE1->pLeft" identifier -> field_identifier)) ;) (if_statement "if (pA != (Expr *)0x0) {\n      uVar2 = pA->flags;\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          pA = pA->pLeft;\n        }\n        else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }\n        if (pA == (Expr *)0x0) break;\n        uVar2 = pA->flags;\n      }\n    }" if (parenthesized_expression "(pA != (Expr *)0x0)" ( (binary_expression "pA != (Expr *)0x0" identifier != (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar2 = pA->flags;\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          pA = pA->pLeft;\n        }\n        else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }\n        if (pA == (Expr *)0x0) break;\n        uVar2 = pA->flags;\n      }\n    }" { (expression_statement "uVar2 = pA->flags;" (assignment_expression "uVar2 = pA->flags" identifier = (field_expression "pA->flags" identifier -> field_identifier)) ;) (while_statement "while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          pA = pA->pLeft;\n        }\n        else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }\n        if (pA == (Expr *)0x0) break;\n        uVar2 = pA->flags;\n      }" while (parenthesized_expression "((uVar2 & 0x1000) != 0)" ( (binary_expression "(uVar2 & 0x1000) != 0" (parenthesized_expression "(uVar2 & 0x1000)" ( (binary_expression "uVar2 & 0x1000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        if ((uVar2 & 0x40000) == 0) {\n          pA = pA->pLeft;\n        }\n        else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }\n        if (pA == (Expr *)0x0) break;\n        uVar2 = pA->flags;\n      }" { (if_statement "if ((uVar2 & 0x40000) == 0) {\n          pA = pA->pLeft;\n        }\n        else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }" if (parenthesized_expression "((uVar2 & 0x40000) == 0)" ( (binary_expression "(uVar2 & 0x40000) == 0" (parenthesized_expression "(uVar2 & 0x40000)" ( (binary_expression "uVar2 & 0x40000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n          pA = pA->pLeft;\n        }" { (expression_statement "pA = pA->pLeft;" (assignment_expression "pA = pA->pLeft" identifier = (field_expression "pA->pLeft" identifier -> field_identifier)) ;) }) (else_clause "else {\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }" else (compound_statement "{\n          pA = ((pA->x).pList)->a[0].pExpr;\n        }" { (expression_statement "pA = ((pA->x).pList)->a[0].pExpr;" (assignment_expression "pA = ((pA->x).pList)->a[0].pExpr" identifier = (field_expression "((pA->x).pList)->a[0].pExpr" (subscript_expression "((pA->x).pList)->a[0]" (field_expression "((pA->x).pList)->a" (parenthesized_expression "((pA->x).pList)" ( (field_expression "(pA->x).pList" (parenthesized_expression "(pA->x)" ( (field_expression "pA->x" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) [ number_literal ]) . field_identifier)) ;) }))) (if_statement "if (pA == (Expr *)0x0) break;" if (parenthesized_expression "(pA == (Expr *)0x0)" ( (binary_expression "pA == (Expr *)0x0" identifier == (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = pA->flags;" (assignment_expression "uVar2 = pA->flags" identifier = (field_expression "pA->flags" identifier -> field_identifier)) ;) })) })) (expression_statement "iVar1 = sqlite3ExprCompare(pParse,pA,pE2->pLeft,iTab);" (assignment_expression "iVar1 = sqlite3ExprCompare(pParse,pA,pE2->pLeft,iTab)" identifier = (call_expression "sqlite3ExprCompare(pParse,pA,pE2->pLeft,iTab)" identifier (argument_list "(pParse,pA,pE2->pLeft,iTab)" ( identifier , identifier , (field_expression "pE2->pLeft" identifier -> field_identifier) , identifier )))) ;) (expression_statement "uVar2 = (uint)(iVar1 == 0);" (assignment_expression "uVar2 = (uint)(iVar1 == 0)" identifier = (call_expression "(uint)(iVar1 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )))) ;) }) (else_clause "else {\n    uVar2 = 0;\n  }" else (compound_statement "{\n    uVar2 = 0;\n  }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) }))) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "bool FUN_000a2958(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)\n\n{\n  int iVar1;\n  char cVar3;\n  bool bVar4;\n  uint uVar2;\n  \n  iVar1 = FUN_0009e290();\n  if (iVar1 == 0) {\n    return true;\n  }\n  cVar3 = *param_3;\n  if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }\n  if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }\n  return bVar4;\n}\n\n" (function_definition "bool FUN_000a2958(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)\n\n{\n  int iVar1;\n  char cVar3;\n  bool bVar4;\n  uint uVar2;\n  \n  iVar1 = FUN_0009e290();\n  if (iVar1 == 0) {\n    return true;\n  }\n  cVar3 = *param_3;\n  if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }\n  if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }\n  return bVar4;\n}" primitive_type (function_declarator "FUN_000a2958(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)" identifier (parameter_list "(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar3;\n  bool bVar4;\n  uint uVar2;\n  \n  iVar1 = FUN_0009e290();\n  if (iVar1 == 0) {\n    return true;\n  }\n  cVar3 = *param_3;\n  if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }\n  if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }\n  return bVar4;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (expression_statement "iVar1 = FUN_0009e290();" (assignment_expression "iVar1 = FUN_0009e290()" identifier = (call_expression "FUN_0009e290()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar1 == 0) {\n    return true;\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return true;\n  }" { (return_statement "return true;" return true ;) })) (expression_statement "cVar3 = *param_3;" (assignment_expression "cVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }" if (parenthesized_expression "(cVar3 == '+')" ( (binary_expression "cVar3 == '+'" identifier == (char_literal "'+'" ' character ')) )) (compound_statement "{\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }" { (expression_statement "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);" (assignment_expression "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4)" identifier = (call_expression "FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4)" identifier (argument_list "(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4)" ( identifier , identifier , (pointer_expression "*(undefined4 *)(param_3 + 0xc)" * (cast_expression "(undefined4 *)(param_3 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xc)" ( (binary_expression "param_3 + 0xc" identifier + number_literal) )))) , identifier )))) ;) (if_statement "if (iVar1 != 0) {\n      return true;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);" (assignment_expression "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4)" identifier = (call_expression "FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4)" identifier (argument_list "(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4)" ( identifier , identifier , (pointer_expression "*(undefined4 *)(param_3 + 0x10)" * (cast_expression "(undefined4 *)(param_3 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x10)" ( (binary_expression "param_3 + 0x10" identifier + number_literal) )))) , identifier )))) ;) (if_statement "if (iVar1 != 0) {\n      return true;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "cVar3 = *param_3;" (assignment_expression "cVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) })) (if_statement "if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }" if (parenthesized_expression "(((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-'))" ( (binary_expression "((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')" (parenthesized_expression "((cVar3 == '3') && (*param_2 != '2'))" ( (binary_expression "(cVar3 == '3') && (*param_2 != '2')" (parenthesized_expression "(cVar3 == '3')" ( (binary_expression "cVar3 == '3'" identifier == (char_literal "'3'" ' character ')) )) && (parenthesized_expression "(*param_2 != '2')" ( (binary_expression "*param_2 != '2'" (pointer_expression "*param_2" * identifier) != (char_literal "'2'" ' character ')) ))) )) && (parenthesized_expression "(*param_2 != '-')" ( (binary_expression "*param_2 != '-'" (pointer_expression "*param_2" * identifier) != (char_literal "'-'" ' character ')) ))) )) (compound_statement "{\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }" { (expression_statement "iVar1 = *(int *)(param_2 + 0xc);" (assignment_expression "iVar1 = *(int *)(param_2 + 0xc)" identifier = (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }" { (expression_statement "uVar2 = *(uint *)(iVar1 + 4);" (assignment_expression "uVar2 = *(uint *)(iVar1 + 4)" identifier = (pointer_expression "*(uint *)(iVar1 + 4)" * (cast_expression "(uint *)(iVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) ))))) ;) (while_statement "while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }" while (parenthesized_expression "((uVar2 & 0x1000) != 0)" ( (binary_expression "(uVar2 & 0x1000) != 0" (parenthesized_expression "(uVar2 & 0x1000)" ( (binary_expression "uVar2 & 0x1000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }" { (if_statement "if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }" if (parenthesized_expression "((uVar2 & 0x40000) == 0)" ( (binary_expression "(uVar2 & 0x40000) == 0" (parenthesized_expression "(uVar2 & 0x40000)" ( (binary_expression "uVar2 & 0x40000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }" { (expression_statement "iVar1 = *(int *)(iVar1 + 0xc);" (assignment_expression "iVar1 = *(int *)(iVar1 + 0xc)" identifier = (pointer_expression "*(int *)(iVar1 + 0xc)" * (cast_expression "(int *)(iVar1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) ))))) ;) }) (else_clause "else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }" else (compound_statement "{\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }" { (expression_statement "iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);" (assignment_expression "iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4)" identifier = (pointer_expression "*(int *)(*(int *)(iVar1 + 0x14) + 4)" * (cast_expression "(int *)(*(int *)(iVar1 + 0x14) + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar1 + 0x14) + 4)" ( (binary_expression "*(int *)(iVar1 + 0x14) + 4" (pointer_expression "*(int *)(iVar1 + 0x14)" * (cast_expression "(int *)(iVar1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x14)" ( (binary_expression "iVar1 + 0x14" identifier + number_literal) )))) + number_literal) ))))) ;) }))) (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = *(uint *)(iVar1 + 4);" (assignment_expression "uVar2 = *(uint *)(iVar1 + 4)" identifier = (pointer_expression "*(uint *)(iVar1 + 4)" * (cast_expression "(uint *)(iVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) ))))) ;) })) })) (expression_statement "iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);" (assignment_expression "iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4)" identifier = (call_expression "FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4)" identifier (argument_list "(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4)" ( identifier , identifier , (pointer_expression "*(undefined4 *)(param_3 + 0xc)" * (cast_expression "(undefined4 *)(param_3 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xc)" ( (binary_expression "param_3 + 0xc" identifier + number_literal) )))) , identifier )))) ;) (expression_statement "bVar4 = iVar1 == 0;" (assignment_expression "bVar4 = iVar1 == 0" identifier = (binary_expression "iVar1 == 0" identifier == number_literal)) ;) }) (else_clause "else {\n    bVar4 = false;\n  }" else (compound_statement "{\n    bVar4 = false;\n  }" { (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) }))) (return_statement "return bVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' character ')) ))) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' character ')) ))) )) (compound_statement { (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 IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (while_statement while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (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 = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) }))) (return_statement return IDENT ;) })))
(function_definition "bool FUN_000a2958(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)\n\n{\n  int iVar1;\n  char cVar3;\n  bool bVar4;\n  uint uVar2;\n  \n  iVar1 = FUN_0009e290();\n  if (iVar1 == 0) {\n    return true;\n  }\n  cVar3 = *param_3;\n  if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }\n  if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }\n  return bVar4;\n}" (primitive_type "bool") (function_declarator "FUN_000a2958(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)" (identifier "FUN_000a2958") (parameter_list "(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "char *param_3" (primitive_type "char") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) () ")"))) (compound_statement "{\n  int iVar1;\n  char cVar3;\n  bool bVar4;\n  uint uVar2;\n  \n  iVar1 = FUN_0009e290();\n  if (iVar1 == 0) {\n    return true;\n  }\n  cVar3 = *param_3;\n  if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }\n  if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }\n  return bVar4;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "char cVar3;" (primitive_type "char") (identifier "cVar3") (; ";")) (declaration "bool bVar4;" (primitive_type "bool") (identifier "bVar4") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (expression_statement "iVar1 = FUN_0009e290();" (assignment_expression "iVar1 = FUN_0009e290()" (identifier "iVar1") (= "=") (call_expression "FUN_0009e290()" (identifier "FUN_0009e290") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n    return true;\n  }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return true;\n  }" ({ "{") (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}"))) (expression_statement "cVar3 = *param_3;" (assignment_expression "cVar3 = *param_3" (identifier "cVar3") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (if_statement "if (cVar3 == '+') {\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }" (if "if") (parenthesized_expression "(cVar3 == '+')" (( "(") (binary_expression "cVar3 == '+'" (identifier "cVar3") (== "==") (char_literal "'+'" (' "'") (character "+") (' "'"))) () ")")) (compound_statement "{\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);\n    if (iVar1 != 0) {\n      return true;\n    }\n    cVar3 = *param_3;\n  }" ({ "{") (expression_statement "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);" (assignment_expression "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4)" (identifier "iVar1") (= "=") (call_expression "FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4)" (identifier "FUN_000a2958") (argument_list "(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "*(undefined4 *)(param_3 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_3 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0xc)" (( "(") (binary_expression "param_3 + 0xc" (identifier "param_3") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (identifier "param_4") () ")")))) (; ";")) (if_statement "if (iVar1 != 0) {\n      return true;\n    }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return true;\n    }" ({ "{") (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}"))) (expression_statement "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);" (assignment_expression "iVar1 = FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4)" (identifier "iVar1") (= "=") (call_expression "FUN_000a2958(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4)" (identifier "FUN_000a2958") (argument_list "(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (pointer_expression "*(undefined4 *)(param_3 + 0x10)" (* "*") (cast_expression "(undefined4 *)(param_3 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x10)" (( "(") (binary_expression "param_3 + 0x10" (identifier "param_3") (+ "+") (number_literal "0x10")) () ")")))) (, ",") (identifier "param_4") () ")")))) (; ";")) (if_statement "if (iVar1 != 0) {\n      return true;\n    }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return true;\n    }" ({ "{") (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}"))) (expression_statement "cVar3 = *param_3;" (assignment_expression "cVar3 = *param_3" (identifier "cVar3") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (} "}"))) (if_statement "if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }\n  else {\n    bVar4 = false;\n  }" (if "if") (parenthesized_expression "(((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-'))" (( "(") (binary_expression "((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')" (parenthesized_expression "((cVar3 == '3') && (*param_2 != '2'))" (( "(") (binary_expression "(cVar3 == '3') && (*param_2 != '2')" (parenthesized_expression "(cVar3 == '3')" (( "(") (binary_expression "cVar3 == '3'" (identifier "cVar3") (== "==") (char_literal "'3'" (' "'") (character "3") (' "'"))) () ")")) (&& "&&") (parenthesized_expression "(*param_2 != '2')" (( "(") (binary_expression "*param_2 != '2'" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (!= "!=") (char_literal "'2'" (' "'") (character "2") (' "'"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(*param_2 != '-')" (( "(") (binary_expression "*param_2 != '-'" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (!= "!=") (char_literal "'-'" (' "'") (character "-") (' "'"))) () ")"))) () ")")) (compound_statement "{\n    iVar1 = *(int *)(param_2 + 0xc);\n    if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }\n    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);\n    bVar4 = iVar1 == 0;\n  }" ({ "{") (expression_statement "iVar1 = *(int *)(param_2 + 0xc);" (assignment_expression "iVar1 = *(int *)(param_2 + 0xc)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (if_statement "if (iVar1 != 0) {\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar2 = *(uint *)(iVar1 + 4);\n      while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }\n    }" ({ "{") (expression_statement "uVar2 = *(uint *)(iVar1 + 4);" (assignment_expression "uVar2 = *(uint *)(iVar1 + 4)" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(iVar1 + 4)" (* "*") (cast_expression "(uint *)(iVar1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 4)" (( "(") (binary_expression "iVar1 + 4" (identifier "iVar1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (while_statement "while ((uVar2 & 0x1000) != 0) {\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }" (while "while") (parenthesized_expression "((uVar2 & 0x1000) != 0)" (( "(") (binary_expression "(uVar2 & 0x1000) != 0" (parenthesized_expression "(uVar2 & 0x1000)" (( "(") (binary_expression "uVar2 & 0x1000" (identifier "uVar2") (& "&") (number_literal "0x1000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }\n        if (iVar1 == 0) break;\n        uVar2 = *(uint *)(iVar1 + 4);\n      }" ({ "{") (if_statement "if ((uVar2 & 0x40000) == 0) {\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }\n        else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }" (if "if") (parenthesized_expression "((uVar2 & 0x40000) == 0)" (( "(") (binary_expression "(uVar2 & 0x40000) == 0" (parenthesized_expression "(uVar2 & 0x40000)" (( "(") (binary_expression "uVar2 & 0x40000" (identifier "uVar2") (& "&") (number_literal "0x40000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          iVar1 = *(int *)(iVar1 + 0xc);\n        }" ({ "{") (expression_statement "iVar1 = *(int *)(iVar1 + 0xc);" (assignment_expression "iVar1 = *(int *)(iVar1 + 0xc)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(iVar1 + 0xc)" (* "*") (cast_expression "(int *)(iVar1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0xc)" (( "(") (binary_expression "iVar1 + 0xc" (identifier "iVar1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }" (else "else") (compound_statement "{\n          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);\n        }" ({ "{") (expression_statement "iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);" (assignment_expression "iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(*(int *)(iVar1 + 0x14) + 4)" (* "*") (cast_expression "(int *)(*(int *)(iVar1 + 0x14) + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar1 + 0x14) + 4)" (( "(") (binary_expression "*(int *)(iVar1 + 0x14) + 4" (pointer_expression "*(int *)(iVar1 + 0x14)" (* "*") (cast_expression "(int *)(iVar1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x14)" (( "(") (binary_expression "iVar1 + 0x14" (identifier "iVar1") (+ "+") (number_literal "0x14")) () ")")))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (iVar1 == 0) break;" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar2 = *(uint *)(iVar1 + 4);" (assignment_expression "uVar2 = *(uint *)(iVar1 + 4)" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(iVar1 + 4)" (* "*") (cast_expression "(uint *)(iVar1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 4)" (( "(") (binary_expression "iVar1 + 4" (identifier "iVar1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);" (assignment_expression "iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4)" (identifier "iVar1") (= "=") (call_expression "FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4)" (identifier "FUN_0009e290") (argument_list "(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4)" (( "(") (identifier "param_1") (, ",") (identifier "iVar1") (, ",") (pointer_expression "*(undefined4 *)(param_3 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_3 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0xc)" (( "(") (binary_expression "param_3 + 0xc" (identifier "param_3") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (identifier "param_4") () ")")))) (; ";")) (expression_statement "bVar4 = iVar1 == 0;" (assignment_expression "bVar4 = iVar1 == 0" (identifier "bVar4") (= "=") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0"))) (; ";")) (} "}")) (else_clause "else {\n    bVar4 = false;\n  }" (else "else") (compound_statement "{\n    bVar4 = false;\n  }" ({ "{") (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" (identifier "bVar4") (= "=") (false "false")) (; ";")) (} "}")))) (return_statement "return bVar4;" (return "return") (identifier "bVar4") (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (true)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (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))))) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (true)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (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))))) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (true)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (character)))))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (character)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (while_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (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))))) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (false)))))) (return_statement (identifier)))))

bool MASKED(undefined4 param_1,char *param_2,char *param_3,undefined4 param_4)

{
  int iVar1;
  char cVar3;
  bool bVar4;
  uint uVar2;
  
  iVar1 = FUN_0009e290();
  if (iVar1 == 0) {
    return true;
  }
  cVar3 = *param_3;
  if (cVar3 == '+') {
    iVar1 = MASKED(param_1,param_2,*(undefined4 *)(param_3 + 0xc),param_4);
    if (iVar1 != 0) {
      return true;
    }
    iVar1 = MASKED(param_1,param_2,*(undefined4 *)(param_3 + 0x10),param_4);
    if (iVar1 != 0) {
      return true;
    }
    cVar3 = *param_3;
  }
  if (((cVar3 == '3') && (*param_2 != '2')) && (*param_2 != '-')) {
    iVar1 = *(int *)(param_2 + 0xc);
    if (iVar1 != 0) {
      uVar2 = *(uint *)(iVar1 + 4);
      while ((uVar2 & 0x1000) != 0) {
        if ((uVar2 & 0x40000) == 0) {
          iVar1 = *(int *)(iVar1 + 0xc);
        }
        else {
          iVar1 = *(int *)(*(int *)(iVar1 + 0x14) + 4);
        }
        if (iVar1 == 0) break;
        uVar2 = *(uint *)(iVar1 + 4);
      }
    }
    iVar1 = FUN_0009e290(param_1,iVar1,*(undefined4 *)(param_3 + 0xc),param_4);
    bVar4 = iVar1 == 0;
  }
  else {
    bVar4 = false;
  }
  return bVar4;
}

