
void sqlite3ExprDeleteNN(sqlite3 *db,Expr *p)

{
  if ((p->flags & 0x804000) == 0) {
    if ((p->pLeft != (Expr *)0x0) && (p->op != 0xaf)) {
      sqlite3ExprDeleteNN(db,p->pLeft);
    }
    if (p->pRight == (Expr *)0x0) {
      if ((p->flags & 0x800) == 0) {
        sqlite3ExprListDelete(db,(p->x).pList);
        if ((p->flags & 0x1000000) != 0) {
          sqlite3WindowDelete(db,(p->y).pWin);
        }
      }
      else {
        sqlite3SelectDelete(db,(p->x).pSelect);
      }
    }
    else {
      sqlite3ExprDeleteNN(db,p->pRight);
    }
  }
  if ((p->flags & 0x10000) != 0) {
    sqlite3DbFree(db,(p->u).zToken);
  }
  if ((p->flags & 0x8000000) == 0) {
    sqlite3DbFreeNN(db,p);
  }
  return;
}



void FUN_0011c412(undefined8 param_1,char *param_2)

{
  if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {
    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {
      FUN_0011c412();
    }
    if (*(long *)(param_2 + 0x18) == 0) {
      if ((param_2[5] & 8U) == 0) {
        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));
        if ((param_2[7] & 1U) != 0) {
          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));
        }
      }
      else {
        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));
      }
    }
    else {
      FUN_0011c412(param_1);
    }
  }
  if ((param_2[6] & 1U) != 0) {
    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));
  }
  if ((param_2[7] & 8U) == 0) {
    FUN_001197bd(param_1,param_2);
  }
  return;
}


PUSH RBP
PUSH RBX
SUB RSP,0x8
MOV RBP,RDI
MOV RBX,RSI
TEST dword ptr [RSI + 0x4],0x804000
JNZ 0x0011c450
MOV RSI,qword ptr [RSI + 0x10]
TEST RSI,RSI
JZ 0x0011c435
CMP byte ptr [RBX],0xaf
JNZ 0x0011c463
MOV RSI,qword ptr [RBX + 0x18]
TEST RSI,RSI
JNZ 0x0011c46a
TEST byte ptr [RBX + 0x5],0x8
JZ 0x0011c474
MOV RSI,qword ptr [RBX + 0x20]
MOV RDI,RBP
CALL 0x0011c3f8
TEST byte ptr [RBX + 0x6],0x1
JNZ 0x0011c494
TEST byte ptr [RBX + 0x7],0x8
JZ 0x0011c4a2
ADD RSP,0x8
POP RBX
POP RBP
RET
CALL 0x0011c412
JMP 0x0011c435
MOV RDI,RBP
CALL 0x0011c412
JMP 0x0011c450
MOV RSI,qword ptr [RBX + 0x20]
MOV RDI,RBP
CALL 0x0011c512
TEST byte ptr [RBX + 0x7],0x1
JZ 0x0011c450
MOV RSI,qword ptr [RBX + 0x40]
MOV RDI,RBP
CALL 0x0011c5c9
JMP 0x0011c450
MOV RSI,qword ptr [RBX + 0x8]
MOV RDI,RBP
CALL 0x00119825
JMP 0x0011c456
MOV RSI,RBX
MOV RDI,RBP
CALL 0x001197bd
JMP 0x0011c45c
(translation_unit "void FUN_0011c412(undefined8 param_1,char *param_2)\n\n{\n  if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }\n  if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }\n  if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }\n  return;\n}\n\n" (function_definition "void FUN_0011c412(undefined8 param_1,char *param_2)\n\n{\n  if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }\n  if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }\n  if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0011c412(undefined8 param_1,char *param_2)" identifier (parameter_list "(undefined8 param_1,char *param_2)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }\n  if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }\n  if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }\n  return;\n}" { (if_statement "if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }" if (parenthesized_expression "((*(uint *)(param_2 + 4) & 0x804000) == 0)" ( (binary_expression "(*(uint *)(param_2 + 4) & 0x804000) == 0" (parenthesized_expression "(*(uint *)(param_2 + 4) & 0x804000)" ( (binary_expression "*(uint *)(param_2 + 4) & 0x804000" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }" { (if_statement "if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }" if (parenthesized_expression "((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51))" ( (binary_expression "(*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)" (parenthesized_expression "(*(long *)(param_2 + 0x10) != 0)" ( (binary_expression "*(long *)(param_2 + 0x10) != 0" (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "(*param_2 != -0x51)" ( (binary_expression "*param_2 != -0x51" (pointer_expression "*param_2" * identifier) != number_literal) ))) )) (compound_statement "{\n      FUN_0011c412();\n    }" { (expression_statement "FUN_0011c412();" (call_expression "FUN_0011c412()" identifier (argument_list "()" ( ))) ;) })) (if_statement "if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }" if (parenthesized_expression "(*(long *)(param_2 + 0x18) == 0)" ( (binary_expression "*(long *)(param_2 + 0x18) == 0" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }" { (if_statement "if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }" if (parenthesized_expression "((param_2[5] & 8U) == 0)" ( (binary_expression "(param_2[5] & 8U) == 0" (parenthesized_expression "(param_2[5] & 8U)" ( (binary_expression "param_2[5] & 8U" (subscript_expression "param_2[5]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }" { (expression_statement "FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));" (call_expression "FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20))" identifier (argument_list "(param_1,*(undefined8 *)(param_2 + 0x20))" ( identifier , (pointer_expression "*(undefined8 *)(param_2 + 0x20)" * (cast_expression "(undefined8 *)(param_2 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) )))) ))) ;) (if_statement "if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }" if (parenthesized_expression "((param_2[7] & 1U) != 0)" ( (binary_expression "(param_2[7] & 1U) != 0" (parenthesized_expression "(param_2[7] & 1U)" ( (binary_expression "param_2[7] & 1U" (subscript_expression "param_2[7]" identifier [ number_literal ]) & number_literal) )) != number_literal) )) (compound_statement "{\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }" { (expression_statement "FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));" (call_expression "FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40))" identifier (argument_list "(param_1,*(undefined8 *)(param_2 + 0x40))" ( identifier , (pointer_expression "*(undefined8 *)(param_2 + 0x40)" * (cast_expression "(undefined8 *)(param_2 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) ))) ;) })) }) (else_clause "else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }" else (compound_statement "{\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }" { (expression_statement "FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));" (call_expression "FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20))" identifier (argument_list "(param_1,*(undefined8 *)(param_2 + 0x20))" ( identifier , (pointer_expression "*(undefined8 *)(param_2 + 0x20)" * (cast_expression "(undefined8 *)(param_2 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) )))) ))) ;) }))) }) (else_clause "else {\n      FUN_0011c412(param_1);\n    }" else (compound_statement "{\n      FUN_0011c412(param_1);\n    }" { (expression_statement "FUN_0011c412(param_1);" (call_expression "FUN_0011c412(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) }))) })) (if_statement "if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }" if (parenthesized_expression "((param_2[6] & 1U) != 0)" ( (binary_expression "(param_2[6] & 1U) != 0" (parenthesized_expression "(param_2[6] & 1U)" ( (binary_expression "param_2[6] & 1U" (subscript_expression "param_2[6]" identifier [ number_literal ]) & number_literal) )) != number_literal) )) (compound_statement "{\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }" { (expression_statement "FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));" (call_expression "FUN_00119825(param_1,*(undefined8 *)(param_2 + 8))" identifier (argument_list "(param_1,*(undefined8 *)(param_2 + 8))" ( identifier , (pointer_expression "*(undefined8 *)(param_2 + 8)" * (cast_expression "(undefined8 *)(param_2 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) ))) ;) })) (if_statement "if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }" if (parenthesized_expression "((param_2[7] & 8U) == 0)" ( (binary_expression "(param_2[7] & 8U) == 0" (parenthesized_expression "(param_2[7] & 8U)" ( (binary_expression "param_2[7] & 8U" (subscript_expression "param_2[7]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n    FUN_001197bd(param_1,param_2);\n  }" { (expression_statement "FUN_001197bd(param_1,param_2);" (call_expression "FUN_001197bd(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void sqlite3ExprDeleteNN(sqlite3 *db,Expr *p)\n\n{\n  if ((p->flags & 0x804000) == 0) {\n    if ((p->pLeft != (Expr *)0x0) && (p->op != 0xaf)) {\n      sqlite3ExprDeleteNN(db,p->pLeft);\n    }\n    if (p->pRight == (Expr *)0x0) {\n      if ((p->flags & 0x800) == 0) {\n        sqlite3ExprListDelete(db,(p->x).pList);\n        if ((p->flags & 0x1000000) != 0) {\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }\n      }\n      else {\n        sqlite3SelectDelete(db,(p->x).pSelect);\n      }\n    }\n    else {\n      sqlite3ExprDeleteNN(db,p->pRight);\n    }\n  }\n  if ((p->flags & 0x10000) != 0) {\n    sqlite3DbFree(db,(p->u).zToken);\n  }\n  if ((p->flags & 0x8000000) == 0) {\n    sqlite3DbFreeNN(db,p);\n  }\n  return;\n}\n\n" (function_definition "void sqlite3ExprDeleteNN(sqlite3 *db,Expr *p)\n\n{\n  if ((p->flags & 0x804000) == 0) {\n    if ((p->pLeft != (Expr *)0x0) && (p->op != 0xaf)) {\n      sqlite3ExprDeleteNN(db,p->pLeft);\n    }\n    if (p->pRight == (Expr *)0x0) {\n      if ((p->flags & 0x800) == 0) {\n        sqlite3ExprListDelete(db,(p->x).pList);\n        if ((p->flags & 0x1000000) != 0) {\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }\n      }\n      else {\n        sqlite3SelectDelete(db,(p->x).pSelect);\n      }\n    }\n    else {\n      sqlite3ExprDeleteNN(db,p->pRight);\n    }\n  }\n  if ((p->flags & 0x10000) != 0) {\n    sqlite3DbFree(db,(p->u).zToken);\n  }\n  if ((p->flags & 0x8000000) == 0) {\n    sqlite3DbFreeNN(db,p);\n  }\n  return;\n}" primitive_type (function_declarator "sqlite3ExprDeleteNN(sqlite3 *db,Expr *p)" identifier (parameter_list "(sqlite3 *db,Expr *p)" ( (parameter_declaration "sqlite3 *db" type_identifier (pointer_declarator "*db" * identifier)) , (parameter_declaration "Expr *p" type_identifier (pointer_declarator "*p" * identifier)) ))) (compound_statement "{\n  if ((p->flags & 0x804000) == 0) {\n    if ((p->pLeft != (Expr *)0x0) && (p->op != 0xaf)) {\n      sqlite3ExprDeleteNN(db,p->pLeft);\n    }\n    if (p->pRight == (Expr *)0x0) {\n      if ((p->flags & 0x800) == 0) {\n        sqlite3ExprListDelete(db,(p->x).pList);\n        if ((p->flags & 0x1000000) != 0) {\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }\n      }\n      else {\n        sqlite3SelectDelete(db,(p->x).pSelect);\n      }\n    }\n    else {\n      sqlite3ExprDeleteNN(db,p->pRight);\n    }\n  }\n  if ((p->flags & 0x10000) != 0) {\n    sqlite3DbFree(db,(p->u).zToken);\n  }\n  if ((p->flags & 0x8000000) == 0) {\n    sqlite3DbFreeNN(db,p);\n  }\n  return;\n}" { (if_statement "if ((p->flags & 0x804000) == 0) {\n    if ((p->pLeft != (Expr *)0x0) && (p->op != 0xaf)) {\n      sqlite3ExprDeleteNN(db,p->pLeft);\n    }\n    if (p->pRight == (Expr *)0x0) {\n      if ((p->flags & 0x800) == 0) {\n        sqlite3ExprListDelete(db,(p->x).pList);\n        if ((p->flags & 0x1000000) != 0) {\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }\n      }\n      else {\n        sqlite3SelectDelete(db,(p->x).pSelect);\n      }\n    }\n    else {\n      sqlite3ExprDeleteNN(db,p->pRight);\n    }\n  }" if (parenthesized_expression "((p->flags & 0x804000) == 0)" ( (binary_expression "(p->flags & 0x804000) == 0" (parenthesized_expression "(p->flags & 0x804000)" ( (binary_expression "p->flags & 0x804000" (field_expression "p->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((p->pLeft != (Expr *)0x0) && (p->op != 0xaf)) {\n      sqlite3ExprDeleteNN(db,p->pLeft);\n    }\n    if (p->pRight == (Expr *)0x0) {\n      if ((p->flags & 0x800) == 0) {\n        sqlite3ExprListDelete(db,(p->x).pList);\n        if ((p->flags & 0x1000000) != 0) {\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }\n      }\n      else {\n        sqlite3SelectDelete(db,(p->x).pSelect);\n      }\n    }\n    else {\n      sqlite3ExprDeleteNN(db,p->pRight);\n    }\n  }" { (if_statement "if ((p->pLeft != (Expr *)0x0) && (p->op != 0xaf)) {\n      sqlite3ExprDeleteNN(db,p->pLeft);\n    }" if (parenthesized_expression "((p->pLeft != (Expr *)0x0) && (p->op != 0xaf))" ( (binary_expression "(p->pLeft != (Expr *)0x0) && (p->op != 0xaf)" (parenthesized_expression "(p->pLeft != (Expr *)0x0)" ( (binary_expression "p->pLeft != (Expr *)0x0" (field_expression "p->pLeft" identifier -> field_identifier) != (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(p->op != 0xaf)" ( (binary_expression "p->op != 0xaf" (field_expression "p->op" identifier -> field_identifier) != number_literal) ))) )) (compound_statement "{\n      sqlite3ExprDeleteNN(db,p->pLeft);\n    }" { (expression_statement "sqlite3ExprDeleteNN(db,p->pLeft);" (call_expression "sqlite3ExprDeleteNN(db,p->pLeft)" identifier (argument_list "(db,p->pLeft)" ( identifier , (field_expression "p->pLeft" identifier -> field_identifier) ))) ;) })) (if_statement "if (p->pRight == (Expr *)0x0) {\n      if ((p->flags & 0x800) == 0) {\n        sqlite3ExprListDelete(db,(p->x).pList);\n        if ((p->flags & 0x1000000) != 0) {\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }\n      }\n      else {\n        sqlite3SelectDelete(db,(p->x).pSelect);\n      }\n    }\n    else {\n      sqlite3ExprDeleteNN(db,p->pRight);\n    }" if (parenthesized_expression "(p->pRight == (Expr *)0x0)" ( (binary_expression "p->pRight == (Expr *)0x0" (field_expression "p->pRight" identifier -> field_identifier) == (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      if ((p->flags & 0x800) == 0) {\n        sqlite3ExprListDelete(db,(p->x).pList);\n        if ((p->flags & 0x1000000) != 0) {\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }\n      }\n      else {\n        sqlite3SelectDelete(db,(p->x).pSelect);\n      }\n    }" { (if_statement "if ((p->flags & 0x800) == 0) {\n        sqlite3ExprListDelete(db,(p->x).pList);\n        if ((p->flags & 0x1000000) != 0) {\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }\n      }\n      else {\n        sqlite3SelectDelete(db,(p->x).pSelect);\n      }" if (parenthesized_expression "((p->flags & 0x800) == 0)" ( (binary_expression "(p->flags & 0x800) == 0" (parenthesized_expression "(p->flags & 0x800)" ( (binary_expression "p->flags & 0x800" (field_expression "p->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        sqlite3ExprListDelete(db,(p->x).pList);\n        if ((p->flags & 0x1000000) != 0) {\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }\n      }" { (expression_statement "sqlite3ExprListDelete(db,(p->x).pList);" (call_expression "sqlite3ExprListDelete(db,(p->x).pList)" identifier (argument_list "(db,(p->x).pList)" ( identifier , (field_expression "(p->x).pList" (parenthesized_expression "(p->x)" ( (field_expression "p->x" identifier -> field_identifier) )) . field_identifier) ))) ;) (if_statement "if ((p->flags & 0x1000000) != 0) {\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }" if (parenthesized_expression "((p->flags & 0x1000000) != 0)" ( (binary_expression "(p->flags & 0x1000000) != 0" (parenthesized_expression "(p->flags & 0x1000000)" ( (binary_expression "p->flags & 0x1000000" (field_expression "p->flags" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          sqlite3WindowDelete(db,(p->y).pWin);\n        }" { (expression_statement "sqlite3WindowDelete(db,(p->y).pWin);" (call_expression "sqlite3WindowDelete(db,(p->y).pWin)" identifier (argument_list "(db,(p->y).pWin)" ( identifier , (field_expression "(p->y).pWin" (parenthesized_expression "(p->y)" ( (field_expression "p->y" identifier -> field_identifier) )) . field_identifier) ))) ;) })) }) (else_clause "else {\n        sqlite3SelectDelete(db,(p->x).pSelect);\n      }" else (compound_statement "{\n        sqlite3SelectDelete(db,(p->x).pSelect);\n      }" { (expression_statement "sqlite3SelectDelete(db,(p->x).pSelect);" (call_expression "sqlite3SelectDelete(db,(p->x).pSelect)" identifier (argument_list "(db,(p->x).pSelect)" ( identifier , (field_expression "(p->x).pSelect" (parenthesized_expression "(p->x)" ( (field_expression "p->x" identifier -> field_identifier) )) . field_identifier) ))) ;) }))) }) (else_clause "else {\n      sqlite3ExprDeleteNN(db,p->pRight);\n    }" else (compound_statement "{\n      sqlite3ExprDeleteNN(db,p->pRight);\n    }" { (expression_statement "sqlite3ExprDeleteNN(db,p->pRight);" (call_expression "sqlite3ExprDeleteNN(db,p->pRight)" identifier (argument_list "(db,p->pRight)" ( identifier , (field_expression "p->pRight" identifier -> field_identifier) ))) ;) }))) })) (if_statement "if ((p->flags & 0x10000) != 0) {\n    sqlite3DbFree(db,(p->u).zToken);\n  }" if (parenthesized_expression "((p->flags & 0x10000) != 0)" ( (binary_expression "(p->flags & 0x10000) != 0" (parenthesized_expression "(p->flags & 0x10000)" ( (binary_expression "p->flags & 0x10000" (field_expression "p->flags" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    sqlite3DbFree(db,(p->u).zToken);\n  }" { (expression_statement "sqlite3DbFree(db,(p->u).zToken);" (call_expression "sqlite3DbFree(db,(p->u).zToken)" identifier (argument_list "(db,(p->u).zToken)" ( identifier , (field_expression "(p->u).zToken" (parenthesized_expression "(p->u)" ( (field_expression "p->u" identifier -> field_identifier) )) . field_identifier) ))) ;) })) (if_statement "if ((p->flags & 0x8000000) == 0) {\n    sqlite3DbFreeNN(db,p);\n  }" if (parenthesized_expression "((p->flags & 0x8000000) == 0)" ( (binary_expression "(p->flags & 0x8000000) == 0" (parenthesized_expression "(p->flags & 0x8000000)" ( (binary_expression "p->flags & 0x8000000" (field_expression "p->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    sqlite3DbFreeNN(db,p);\n  }" { (expression_statement "sqlite3DbFreeNN(db,p);" (call_expression "sqlite3DbFreeNN(db,p)" identifier (argument_list "(db,p)" ( identifier , identifier ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0011c412(undefined8 param_1,char *param_2)\n\n{\n  if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }\n  if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }\n  if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }\n  return;\n}\n\n" (function_definition "void FUN_0011c412(undefined8 param_1,char *param_2)\n\n{\n  if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }\n  if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }\n  if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0011c412(undefined8 param_1,char *param_2)" identifier (parameter_list "(undefined8 param_1,char *param_2)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }\n  if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }\n  if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }\n  return;\n}" { (if_statement "if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }" if (parenthesized_expression "((*(uint *)(param_2 + 4) & 0x804000) == 0)" ( (binary_expression "(*(uint *)(param_2 + 4) & 0x804000) == 0" (parenthesized_expression "(*(uint *)(param_2 + 4) & 0x804000)" ( (binary_expression "*(uint *)(param_2 + 4) & 0x804000" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }" { (if_statement "if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }" if (parenthesized_expression "((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51))" ( (binary_expression "(*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)" (parenthesized_expression "(*(long *)(param_2 + 0x10) != 0)" ( (binary_expression "*(long *)(param_2 + 0x10) != 0" (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "(*param_2 != -0x51)" ( (binary_expression "*param_2 != -0x51" (pointer_expression "*param_2" * identifier) != number_literal) ))) )) (compound_statement "{\n      FUN_0011c412();\n    }" { (expression_statement "FUN_0011c412();" (call_expression "FUN_0011c412()" identifier (argument_list "()" ( ))) ;) })) (if_statement "if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }" if (parenthesized_expression "(*(long *)(param_2 + 0x18) == 0)" ( (binary_expression "*(long *)(param_2 + 0x18) == 0" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }" { (if_statement "if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }" if (parenthesized_expression "((param_2[5] & 8U) == 0)" ( (binary_expression "(param_2[5] & 8U) == 0" (parenthesized_expression "(param_2[5] & 8U)" ( (binary_expression "param_2[5] & 8U" (subscript_expression "param_2[5]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }" { (expression_statement "FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));" (call_expression "FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20))" identifier (argument_list "(param_1,*(undefined8 *)(param_2 + 0x20))" ( identifier , (pointer_expression "*(undefined8 *)(param_2 + 0x20)" * (cast_expression "(undefined8 *)(param_2 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) )))) ))) ;) (if_statement "if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }" if (parenthesized_expression "((param_2[7] & 1U) != 0)" ( (binary_expression "(param_2[7] & 1U) != 0" (parenthesized_expression "(param_2[7] & 1U)" ( (binary_expression "param_2[7] & 1U" (subscript_expression "param_2[7]" identifier [ number_literal ]) & number_literal) )) != number_literal) )) (compound_statement "{\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }" { (expression_statement "FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));" (call_expression "FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40))" identifier (argument_list "(param_1,*(undefined8 *)(param_2 + 0x40))" ( identifier , (pointer_expression "*(undefined8 *)(param_2 + 0x40)" * (cast_expression "(undefined8 *)(param_2 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) ))) ;) })) }) (else_clause "else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }" else (compound_statement "{\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }" { (expression_statement "FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));" (call_expression "FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20))" identifier (argument_list "(param_1,*(undefined8 *)(param_2 + 0x20))" ( identifier , (pointer_expression "*(undefined8 *)(param_2 + 0x20)" * (cast_expression "(undefined8 *)(param_2 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) )))) ))) ;) }))) }) (else_clause "else {\n      FUN_0011c412(param_1);\n    }" else (compound_statement "{\n      FUN_0011c412(param_1);\n    }" { (expression_statement "FUN_0011c412(param_1);" (call_expression "FUN_0011c412(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) }))) })) (if_statement "if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }" if (parenthesized_expression "((param_2[6] & 1U) != 0)" ( (binary_expression "(param_2[6] & 1U) != 0" (parenthesized_expression "(param_2[6] & 1U)" ( (binary_expression "param_2[6] & 1U" (subscript_expression "param_2[6]" identifier [ number_literal ]) & number_literal) )) != number_literal) )) (compound_statement "{\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }" { (expression_statement "FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));" (call_expression "FUN_00119825(param_1,*(undefined8 *)(param_2 + 8))" identifier (argument_list "(param_1,*(undefined8 *)(param_2 + 8))" ( identifier , (pointer_expression "*(undefined8 *)(param_2 + 8)" * (cast_expression "(undefined8 *)(param_2 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) ))) ;) })) (if_statement "if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }" if (parenthesized_expression "((param_2[7] & 8U) == 0)" ( (binary_expression "(param_2[7] & 8U) == 0" (parenthesized_expression "(param_2[7] & 8U)" ( (binary_expression "param_2[7] & 8U" (subscript_expression "param_2[7]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n    FUN_001197bd(param_1,param_2);\n  }" { (expression_statement "FUN_001197bd(param_1,param_2);" (call_expression "FUN_001197bd(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) }))) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (return_statement return ;) })))
(function_definition "void FUN_0011c412(undefined8 param_1,char *param_2)\n\n{\n  if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }\n  if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }\n  if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0011c412(undefined8 param_1,char *param_2)" (identifier "FUN_0011c412") (parameter_list "(undefined8 param_1,char *param_2)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }\n  if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }\n  if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }\n  return;\n}" ({ "{") (if_statement "if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }" (if "if") (parenthesized_expression "((*(uint *)(param_2 + 4) & 0x804000) == 0)" (( "(") (binary_expression "(*(uint *)(param_2 + 4) & 0x804000) == 0" (parenthesized_expression "(*(uint *)(param_2 + 4) & 0x804000)" (( "(") (binary_expression "*(uint *)(param_2 + 4) & 0x804000" (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "0x804000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }\n    if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }\n  }" ({ "{") (if_statement "if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {\n      FUN_0011c412();\n    }" (if "if") (parenthesized_expression "((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51))" (( "(") (binary_expression "(*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)" (parenthesized_expression "(*(long *)(param_2 + 0x10) != 0)" (( "(") (binary_expression "*(long *)(param_2 + 0x10) != 0" (pointer_expression "*(long *)(param_2 + 0x10)" (* "*") (cast_expression "(long *)(param_2 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*param_2 != -0x51)" (( "(") (binary_expression "*param_2 != -0x51" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (!= "!=") (number_literal "-0x51")) () ")"))) () ")")) (compound_statement "{\n      FUN_0011c412();\n    }" ({ "{") (expression_statement "FUN_0011c412();" (call_expression "FUN_0011c412()" (identifier "FUN_0011c412") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (if_statement "if (*(long *)(param_2 + 0x18) == 0) {\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }\n    else {\n      FUN_0011c412(param_1);\n    }" (if "if") (parenthesized_expression "(*(long *)(param_2 + 0x18) == 0)" (( "(") (binary_expression "*(long *)(param_2 + 0x18) == 0" (pointer_expression "*(long *)(param_2 + 0x18)" (* "*") (cast_expression "(long *)(param_2 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }\n    }" ({ "{") (if_statement "if ((param_2[5] & 8U) == 0) {\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }\n      else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }" (if "if") (parenthesized_expression "((param_2[5] & 8U) == 0)" (( "(") (binary_expression "(param_2[5] & 8U) == 0" (parenthesized_expression "(param_2[5] & 8U)" (( "(") (binary_expression "param_2[5] & 8U" (subscript_expression "param_2[5]" (identifier "param_2") ([ "[") (number_literal "5") (] "]")) (& "&") (number_literal "8U")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));\n        if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }\n      }" ({ "{") (expression_statement "FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));" (call_expression "FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20))" (identifier "FUN_0011c512") (argument_list "(param_1,*(undefined8 *)(param_2 + 0x20))" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined8 *)(param_2 + 0x20)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x20)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")")))) () ")"))) (; ";")) (if_statement "if ((param_2[7] & 1U) != 0) {\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }" (if "if") (parenthesized_expression "((param_2[7] & 1U) != 0)" (( "(") (binary_expression "(param_2[7] & 1U) != 0" (parenthesized_expression "(param_2[7] & 1U)" (( "(") (binary_expression "param_2[7] & 1U" (subscript_expression "param_2[7]" (identifier "param_2") ([ "[") (number_literal "7") (] "]")) (& "&") (number_literal "1U")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));\n        }" ({ "{") (expression_statement "FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));" (call_expression "FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40))" (identifier "FUN_0011c5c9") (argument_list "(param_1,*(undefined8 *)(param_2 + 0x40))" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined8 *)(param_2 + 0x40)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x40)" (( "(") (binary_expression "param_2 + 0x40" (identifier "param_2") (+ "+") (number_literal "0x40")) () ")")))) () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }" (else "else") (compound_statement "{\n        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));\n      }" ({ "{") (expression_statement "FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));" (call_expression "FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20))" (identifier "FUN_0011c3f8") (argument_list "(param_1,*(undefined8 *)(param_2 + 0x20))" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined8 *)(param_2 + 0x20)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x20)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")")))) () ")"))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n      FUN_0011c412(param_1);\n    }" (else "else") (compound_statement "{\n      FUN_0011c412(param_1);\n    }" ({ "{") (expression_statement "FUN_0011c412(param_1);" (call_expression "FUN_0011c412(param_1)" (identifier "FUN_0011c412") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (} "}")))) (} "}"))) (if_statement "if ((param_2[6] & 1U) != 0) {\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }" (if "if") (parenthesized_expression "((param_2[6] & 1U) != 0)" (( "(") (binary_expression "(param_2[6] & 1U) != 0" (parenthesized_expression "(param_2[6] & 1U)" (( "(") (binary_expression "param_2[6] & 1U" (subscript_expression "param_2[6]" (identifier "param_2") ([ "[") (number_literal "6") (] "]")) (& "&") (number_literal "1U")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));\n  }" ({ "{") (expression_statement "FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));" (call_expression "FUN_00119825(param_1,*(undefined8 *)(param_2 + 8))" (identifier "FUN_00119825") (argument_list "(param_1,*(undefined8 *)(param_2 + 8))" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined8 *)(param_2 + 8)" (* "*") (cast_expression "(undefined8 *)(param_2 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) () ")"))) (; ";")) (} "}"))) (if_statement "if ((param_2[7] & 8U) == 0) {\n    FUN_001197bd(param_1,param_2);\n  }" (if "if") (parenthesized_expression "((param_2[7] & 8U) == 0)" (( "(") (binary_expression "(param_2[7] & 8U) == 0" (parenthesized_expression "(param_2[7] & 8U)" (( "(") (binary_expression "param_2[7] & 8U" (subscript_expression "param_2[7]" (identifier "param_2") ([ "[") (number_literal "7") (] "]")) (& "&") (number_literal "8U")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_001197bd(param_1,param_2);\n  }" ({ "{") (expression_statement "FUN_001197bd(param_1,param_2);" (call_expression "FUN_001197bd(param_1,param_2)" (identifier "FUN_001197bd") (argument_list "(param_1,param_2)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") () ")"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 *db,type_2 *p)

{
  if ((p->flags & 0x804000) == 0) {
    if ((p->pLeft != (type_2 *)0x0) && (p->op != 0xaf)) {
      function_1(db,p->pLeft);
    }
    if (p->pRight == (type_2 *)0x0) {
      if ((p->flags & 0x800) == 0) {
        var_1(db,(p->x).pList);
        if ((p->flags & 0x1000000) != 0) {
          var_2(db,(p->y).pWin);
        }
      }
      else {
        var_3(db,(p->x).pSelect);
      }
    }
    else {
      function_1(db,p->pRight);
    }
  }
  if ((p->flags & 0x10000) != 0) {
    var_4(db,(p->u).zToken);
  }
  if ((p->flags & 0x8000000) == 0) {
    var_5(db,p);
  }
  return;
}


(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))))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (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: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (if_statement 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: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (return_statement))))

void MASKED(undefined8 param_1,char *param_2)

{
  if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {
    if ((*(long *)(param_2 + 0x10) != 0) && (*param_2 != -0x51)) {
      MASKED();
    }
    if (*(long *)(param_2 + 0x18) == 0) {
      if ((param_2[5] & 8U) == 0) {
        FUN_0011c512(param_1,*(undefined8 *)(param_2 + 0x20));
        if ((param_2[7] & 1U) != 0) {
          FUN_0011c5c9(param_1,*(undefined8 *)(param_2 + 0x40));
        }
      }
      else {
        FUN_0011c3f8(param_1,*(undefined8 *)(param_2 + 0x20));
      }
    }
    else {
      MASKED(param_1);
    }
  }
  if ((param_2[6] & 1U) != 0) {
    FUN_00119825(param_1,*(undefined8 *)(param_2 + 8));
  }
  if ((param_2[7] & 8U) == 0) {
    FUN_001197bd(param_1,param_2);
  }
  return;
}

