
int termCanDriveIndex(WhereTerm *pTerm,SrcList_item *pSrc,Bitmask notReady)

{
  char cVar1;
  undefined3 extraout_var;
  char cVar3;
  uint uVar2;
  uint in_a2;
  uint in_a3;
  
  if ((((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)) &&
      ((((pSrc->fg).jointype & 8) == 0 ||
       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))))) &&
     ((*(uint *)&pTerm->prereqRight & in_a2) == 0 && ((uint)pTerm->prereqRight & in_a3) == 0)) {
    if (-1 < (pTerm->u).leftColumn) {
      cVar1 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity;
      cVar3 = comparisonAffinity(pTerm->pExpr);
      if (CONCAT31(extraout_var,cVar3) == 0x41) {
        uVar2 = 1;
      }
      else if (CONCAT31(extraout_var,cVar3) == 0x42) {
        uVar2 = (uint)(cVar1 == 'B');
      }
      else {
        uVar2 = cVar1 < 'C' ^ 1;
      }
      return uVar2;
    }
    return 0;
  }
  return 0;
}



bool FUN_0003b400(int *param_1,int param_2,uint param_3,uint param_4)

{
  char cVar1;
  int iVar2;
  bool bVar3;
  
  if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&
      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||
       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&
     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {
    if (param_1[7] < 0) {
      return false;
    }
    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);
    iVar2 = FUN_0002641c(*param_1);
    if (iVar2 == 0x41) {
      bVar3 = true;
    }
    else {
      bVar3 = 'B' < cVar1;
      if (iVar2 == 0x42) {
        bVar3 = cVar1 == 'B';
      }
    }
    return bVar3;
  }
  return false;
}


lui gp,0x13
addiu gp,gp,-0x6e50
addu gp,gp,t9
lw v1,0x14(a0)
lw v0,0x28(a1)
bne v1,v0,0x0003b4e0
_nop
lhu v0,0xc(a0)
andi v1,v0,0x82
beq v1,zero,0x0003b4e0
_nop
lbu v1,0x24(a1)
andi v1,v1,0x8
beq v1,zero,0x0003b458
_nop
lw v1,0x0(a0)
lw v1,0x4(v1)
andi v1,v1,0x1
bne v1,zero,0x0003b458
_andi v0,v0,0x80
bne v0,zero,0x0003b4e0
_nop
lw v0,0x20(a0)
lw v1,0x24(a0)
and v0,v0,a2
and a3,v1,a3
or v0,v0,a3
bne v0,zero,0x0003b4e0
_nop
lw v0,0x1c(a0)
bltz v0,0x0003b4e8
_nop
addiu sp,sp,-0x20
lw v1,0x10(a1)
lw t9,-0x7f44(gp)
sll v0,v0,0x4
sw gp,0x10(sp)
sw ra,0x1c(sp)
addiu t9,t9,0x641c
sw s0,0x18(sp)
lw v1,0x4(v1)
lw a0,0x0(a0)
addu v0,v1,v0
bal 0x0002641c
_lb s0,0xd(v0)
li v1,0x41
beq v0,v1,0x0003b4f0
_li v1,0x42
bne v0,v1,0x0003b4f8
_slti v0,s0,0x43
xori v0,s0,0x42
sltiu v0,v0,0x1
lw ra,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x20
jr ra
_or v0,zero,zero
jr ra
_or v0,zero,zero
b 0x0003b4d0
_li v0,0x1
b 0x0003b4d0
_xori v0,v0,0x1
(translation_unit "bool FUN_0003b400(int *param_1,int param_2,uint param_3,uint param_4)\n\n{\n  char cVar1;\n  int iVar2;\n  bool bVar3;\n  \n  if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }\n  return false;\n}\n\n" (function_definition "bool FUN_0003b400(int *param_1,int param_2,uint param_3,uint param_4)\n\n{\n  char cVar1;\n  int iVar2;\n  bool bVar3;\n  \n  if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }\n  return false;\n}" primitive_type (function_declarator "FUN_0003b400(int *param_1,int param_2,uint param_3,uint param_4)" identifier (parameter_list "(int *param_1,int param_2,uint param_3,uint param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  bool bVar3;\n  \n  if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }\n  return false;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (if_statement "if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }" if (parenthesized_expression "((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0))" ( (binary_expression "(((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)" (parenthesized_expression "(((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0))))))" ( (binary_expression "((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))" (parenthesized_expression "((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0))" ( (binary_expression "(param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)" (parenthesized_expression "(param_1[5] == *(int *)(param_2 + 0x28))" ( (binary_expression "param_1[5] == *(int *)(param_2 + 0x28)" (subscript_expression "param_1[5]" identifier [ number_literal ]) == (pointer_expression "*(int *)(param_2 + 0x28)" * (cast_expression "(int *)(param_2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) )) && (parenthesized_expression "((*(ushort *)(param_1 + 3) & 0x82) != 0)" ( (binary_expression "(*(ushort *)(param_1 + 3) & 0x82) != 0" (parenthesized_expression "(*(ushort *)(param_1 + 3) & 0x82)" ( (binary_expression "*(ushort *)(param_1 + 3) & 0x82" (pointer_expression "*(ushort *)(param_1 + 3)" * (cast_expression "(ushort *)(param_1 + 3)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 3)" ( (binary_expression "param_1 + 3" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))" ( (parenthesized_expression "((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0))))" ( (binary_expression "(*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))" (binary_expression "(*(byte *)(param_2 + 0x24) & 8) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x24) & 8)" ( (binary_expression "*(byte *)(param_2 + 0x24) & 8" (pointer_expression "*(byte *)(param_2 + 0x24)" * (cast_expression "(byte *)(param_2 + 0x24)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) & number_literal) )) == number_literal) || (parenthesized_expression "(((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))" ( (parenthesized_expression "((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0))" ( (binary_expression "(*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)" (binary_expression "(*(uint *)(*param_1 + 4) & 1) != 0" (parenthesized_expression "(*(uint *)(*param_1 + 4) & 1)" ( (binary_expression "*(uint *)(*param_1 + 4) & 1" (pointer_expression "*(uint *)(*param_1 + 4)" * (cast_expression "(uint *)(*param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 4)" ( (binary_expression "*param_1 + 4" (pointer_expression "*param_1" * identifier) + number_literal) )))) & number_literal) )) != number_literal) || (parenthesized_expression "((*(ushort *)(param_1 + 3) & 0x80) == 0)" ( (binary_expression "(*(ushort *)(param_1 + 3) & 0x80) == 0" (parenthesized_expression "(*(ushort *)(param_1 + 3) & 0x80)" ( (binary_expression "*(ushort *)(param_1 + 3) & 0x80" (pointer_expression "*(ushort *)(param_1 + 3)" * (cast_expression "(ushort *)(param_1 + 3)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 3)" ( (binary_expression "param_1 + 3" identifier + number_literal) )))) & number_literal) )) == number_literal) ))) )) ))) )) ))) )) && (parenthesized_expression "((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)" ( (binary_expression "(param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0" (binary_expression "(param_1[8] & param_3) == 0" (parenthesized_expression "(param_1[8] & param_3)" ( (binary_expression "param_1[8] & param_3" (subscript_expression "param_1[8]" identifier [ number_literal ]) & identifier) )) == number_literal) && (binary_expression "(param_1[9] & param_4) == 0" (parenthesized_expression "(param_1[9] & param_4)" ( (binary_expression "param_1[9] & param_4" (subscript_expression "param_1[9]" identifier [ number_literal ]) & identifier) )) == number_literal)) ))) )) (compound_statement "{\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }" { (if_statement "if (param_1[7] < 0) {\n      return false;\n    }" if (parenthesized_expression "(param_1[7] < 0)" ( (binary_expression "param_1[7] < 0" (subscript_expression "param_1[7]" identifier [ number_literal ]) < number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (expression_statement "cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);" (assignment_expression "cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" identifier = (pointer_expression "*(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" * (cast_expression "(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" ( (binary_expression "*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd" (binary_expression "*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10" (pointer_expression "*(int *)(*(int *)(param_2 + 0x10) + 4)" * (cast_expression "(int *)(*(int *)(param_2 + 0x10) + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x10) + 4)" ( (binary_expression "*(int *)(param_2 + 0x10) + 4" (pointer_expression "*(int *)(param_2 + 0x10)" * (cast_expression "(int *)(param_2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "param_1[7] * 0x10" (subscript_expression "param_1[7]" identifier [ number_literal ]) * number_literal)) + number_literal) ))))) ;) (expression_statement "iVar2 = FUN_0002641c(*param_1);" (assignment_expression "iVar2 = FUN_0002641c(*param_1)" identifier = (call_expression "FUN_0002641c(*param_1)" identifier (argument_list "(*param_1)" ( (pointer_expression "*param_1" * identifier) )))) ;) (if_statement "if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }" if (parenthesized_expression "(iVar2 == 0x41)" ( (binary_expression "iVar2 == 0x41" identifier == number_literal) )) (compound_statement "{\n      bVar3 = true;\n    }" { (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;) }) (else_clause "else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }" else (compound_statement "{\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }" { (expression_statement "bVar3 = 'B' < cVar1;" (assignment_expression "bVar3 = 'B' < cVar1" identifier = (binary_expression "'B' < cVar1" (char_literal "'B'" ' character ') < identifier)) ;) (if_statement "if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }" if (parenthesized_expression "(iVar2 == 0x42)" ( (binary_expression "iVar2 == 0x42" identifier == number_literal) )) (compound_statement "{\n        bVar3 = cVar1 == 'B';\n      }" { (expression_statement "bVar3 = cVar1 == 'B';" (assignment_expression "bVar3 = cVar1 == 'B'" identifier = (binary_expression "cVar1 == 'B'" identifier == (char_literal "'B'" ' character '))) ;) })) }))) (return_statement "return bVar3;" return identifier ;) })) (return_statement "return false;" return false ;) })))
(translation_unit "int termCanDriveIndex(WhereTerm *pTerm,SrcList_item *pSrc,Bitmask notReady)\n\n{\n  char cVar1;\n  undefined3 extraout_var;\n  char cVar3;\n  uint uVar2;\n  uint in_a2;\n  uint in_a3;\n  \n  if ((((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)) &&\n      ((((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))))) &&\n     ((*(uint *)&pTerm->prereqRight & in_a2) == 0 && ((uint)pTerm->prereqRight & in_a3) == 0)) {\n    if (-1 < (pTerm->u).leftColumn) {\n      cVar1 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity;\n      cVar3 = comparisonAffinity(pTerm->pExpr);\n      if (CONCAT31(extraout_var,cVar3) == 0x41) {\n        uVar2 = 1;\n      }\n      else if (CONCAT31(extraout_var,cVar3) == 0x42) {\n        uVar2 = (uint)(cVar1 == 'B');\n      }\n      else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }\n      return uVar2;\n    }\n    return 0;\n  }\n  return 0;\n}\n\n" (function_definition "int termCanDriveIndex(WhereTerm *pTerm,SrcList_item *pSrc,Bitmask notReady)\n\n{\n  char cVar1;\n  undefined3 extraout_var;\n  char cVar3;\n  uint uVar2;\n  uint in_a2;\n  uint in_a3;\n  \n  if ((((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)) &&\n      ((((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))))) &&\n     ((*(uint *)&pTerm->prereqRight & in_a2) == 0 && ((uint)pTerm->prereqRight & in_a3) == 0)) {\n    if (-1 < (pTerm->u).leftColumn) {\n      cVar1 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity;\n      cVar3 = comparisonAffinity(pTerm->pExpr);\n      if (CONCAT31(extraout_var,cVar3) == 0x41) {\n        uVar2 = 1;\n      }\n      else if (CONCAT31(extraout_var,cVar3) == 0x42) {\n        uVar2 = (uint)(cVar1 == 'B');\n      }\n      else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }\n      return uVar2;\n    }\n    return 0;\n  }\n  return 0;\n}" primitive_type (function_declarator "termCanDriveIndex(WhereTerm *pTerm,SrcList_item *pSrc,Bitmask notReady)" identifier (parameter_list "(WhereTerm *pTerm,SrcList_item *pSrc,Bitmask notReady)" ( (parameter_declaration "WhereTerm *pTerm" type_identifier (pointer_declarator "*pTerm" * identifier)) , (parameter_declaration "SrcList_item *pSrc" type_identifier (pointer_declarator "*pSrc" * identifier)) , (parameter_declaration "Bitmask notReady" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  undefined3 extraout_var;\n  char cVar3;\n  uint uVar2;\n  uint in_a2;\n  uint in_a3;\n  \n  if ((((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)) &&\n      ((((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))))) &&\n     ((*(uint *)&pTerm->prereqRight & in_a2) == 0 && ((uint)pTerm->prereqRight & in_a3) == 0)) {\n    if (-1 < (pTerm->u).leftColumn) {\n      cVar1 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity;\n      cVar3 = comparisonAffinity(pTerm->pExpr);\n      if (CONCAT31(extraout_var,cVar3) == 0x41) {\n        uVar2 = 1;\n      }\n      else if (CONCAT31(extraout_var,cVar3) == 0x42) {\n        uVar2 = (uint)(cVar1 == 'B');\n      }\n      else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }\n      return uVar2;\n    }\n    return 0;\n  }\n  return 0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined3 extraout_var;" type_identifier identifier ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint in_a2;" type_identifier identifier ;) (declaration "uint in_a3;" type_identifier identifier ;) (if_statement "if ((((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)) &&\n      ((((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))))) &&\n     ((*(uint *)&pTerm->prereqRight & in_a2) == 0 && ((uint)pTerm->prereqRight & in_a3) == 0)) {\n    if (-1 < (pTerm->u).leftColumn) {\n      cVar1 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity;\n      cVar3 = comparisonAffinity(pTerm->pExpr);\n      if (CONCAT31(extraout_var,cVar3) == 0x41) {\n        uVar2 = 1;\n      }\n      else if (CONCAT31(extraout_var,cVar3) == 0x42) {\n        uVar2 = (uint)(cVar1 == 'B');\n      }\n      else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }\n      return uVar2;\n    }\n    return 0;\n  }" if (parenthesized_expression "((((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)) &&\n      ((((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))))) &&\n     ((*(uint *)&pTerm->prereqRight & in_a2) == 0 && ((uint)pTerm->prereqRight & in_a3) == 0))" ( (binary_expression "(((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)) &&\n      ((((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))))) &&\n     ((*(uint *)&pTerm->prereqRight & in_a2) == 0 && ((uint)pTerm->prereqRight & in_a3) == 0)" (parenthesized_expression "(((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)) &&\n      ((((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0))))))" ( (binary_expression "((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)) &&\n      ((((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))))" (parenthesized_expression "((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0))" ( (binary_expression "(pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)" (parenthesized_expression "(pTerm->leftCursor == pSrc->iCursor)" ( (binary_expression "pTerm->leftCursor == pSrc->iCursor" (field_expression "pTerm->leftCursor" identifier -> field_identifier) == (field_expression "pSrc->iCursor" identifier -> field_identifier)) )) && (parenthesized_expression "((pTerm->eOperator & 0x82) != 0)" ( (binary_expression "(pTerm->eOperator & 0x82) != 0" (parenthesized_expression "(pTerm->eOperator & 0x82)" ( (binary_expression "pTerm->eOperator & 0x82" (field_expression "pTerm->eOperator" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "((((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))))" ( (parenthesized_expression "(((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0))))" ( (binary_expression "((pSrc->fg).jointype & 8) == 0 ||\n       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))" (binary_expression "((pSrc->fg).jointype & 8) == 0" (parenthesized_expression "((pSrc->fg).jointype & 8)" ( (binary_expression "(pSrc->fg).jointype & 8" (field_expression "(pSrc->fg).jointype" (parenthesized_expression "(pSrc->fg)" ( (field_expression "pSrc->fg" identifier -> field_identifier) )) . field_identifier) & number_literal) )) == number_literal) || (parenthesized_expression "(((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))" ( (parenthesized_expression "((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0))" ( (binary_expression "(pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)" (binary_expression "(pTerm->pExpr->flags & 1) != 0" (parenthesized_expression "(pTerm->pExpr->flags & 1)" ( (binary_expression "pTerm->pExpr->flags & 1" (field_expression "pTerm->pExpr->flags" (field_expression "pTerm->pExpr" identifier -> field_identifier) -> field_identifier) & number_literal) )) != number_literal) || (parenthesized_expression "((pTerm->eOperator & 0x80) == 0)" ( (binary_expression "(pTerm->eOperator & 0x80) == 0" (parenthesized_expression "(pTerm->eOperator & 0x80)" ( (binary_expression "pTerm->eOperator & 0x80" (field_expression "pTerm->eOperator" identifier -> field_identifier) & number_literal) )) == number_literal) ))) )) ))) )) ))) )) && (parenthesized_expression "((*(uint *)&pTerm->prereqRight & in_a2) == 0 && ((uint)pTerm->prereqRight & in_a3) == 0)" ( (binary_expression "(*(uint *)&pTerm->prereqRight & in_a2) == 0 && ((uint)pTerm->prereqRight & in_a3) == 0" (binary_expression "(*(uint *)&pTerm->prereqRight & in_a2) == 0" (parenthesized_expression "(*(uint *)&pTerm->prereqRight & in_a2)" ( (binary_expression "*(uint *)&pTerm->prereqRight & in_a2" (pointer_expression "*(uint *)&pTerm->prereqRight" * (cast_expression "(uint *)&pTerm->prereqRight" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pTerm->prereqRight" & (field_expression "pTerm->prereqRight" identifier -> field_identifier)))) & identifier) )) == number_literal) && (binary_expression "((uint)pTerm->prereqRight & in_a3) == 0" (parenthesized_expression "((uint)pTerm->prereqRight & in_a3)" ( (binary_expression "(uint)pTerm->prereqRight & in_a3" (cast_expression "(uint)pTerm->prereqRight" ( (type_descriptor "uint" type_identifier) ) (field_expression "pTerm->prereqRight" identifier -> field_identifier)) & identifier) )) == number_literal)) ))) )) (compound_statement "{\n    if (-1 < (pTerm->u).leftColumn) {\n      cVar1 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity;\n      cVar3 = comparisonAffinity(pTerm->pExpr);\n      if (CONCAT31(extraout_var,cVar3) == 0x41) {\n        uVar2 = 1;\n      }\n      else if (CONCAT31(extraout_var,cVar3) == 0x42) {\n        uVar2 = (uint)(cVar1 == 'B');\n      }\n      else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }\n      return uVar2;\n    }\n    return 0;\n  }" { (if_statement "if (-1 < (pTerm->u).leftColumn) {\n      cVar1 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity;\n      cVar3 = comparisonAffinity(pTerm->pExpr);\n      if (CONCAT31(extraout_var,cVar3) == 0x41) {\n        uVar2 = 1;\n      }\n      else if (CONCAT31(extraout_var,cVar3) == 0x42) {\n        uVar2 = (uint)(cVar1 == 'B');\n      }\n      else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }\n      return uVar2;\n    }" if (parenthesized_expression "(-1 < (pTerm->u).leftColumn)" ( (binary_expression "-1 < (pTerm->u).leftColumn" number_literal < (field_expression "(pTerm->u).leftColumn" (parenthesized_expression "(pTerm->u)" ( (field_expression "pTerm->u" identifier -> field_identifier) )) . field_identifier)) )) (compound_statement "{\n      cVar1 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity;\n      cVar3 = comparisonAffinity(pTerm->pExpr);\n      if (CONCAT31(extraout_var,cVar3) == 0x41) {\n        uVar2 = 1;\n      }\n      else if (CONCAT31(extraout_var,cVar3) == 0x42) {\n        uVar2 = (uint)(cVar1 == 'B');\n      }\n      else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }\n      return uVar2;\n    }" { (expression_statement "cVar1 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity;" (assignment_expression "cVar1 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity" identifier = (field_expression "pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity" (subscript_expression "pSrc->pTab->aCol[(pTerm->u).leftColumn]" (field_expression "pSrc->pTab->aCol" (field_expression "pSrc->pTab" identifier -> field_identifier) -> field_identifier) [ (field_expression "(pTerm->u).leftColumn" (parenthesized_expression "(pTerm->u)" ( (field_expression "pTerm->u" identifier -> field_identifier) )) . field_identifier) ]) . field_identifier)) ;) (expression_statement "cVar3 = comparisonAffinity(pTerm->pExpr);" (assignment_expression "cVar3 = comparisonAffinity(pTerm->pExpr)" identifier = (call_expression "comparisonAffinity(pTerm->pExpr)" identifier (argument_list "(pTerm->pExpr)" ( (field_expression "pTerm->pExpr" identifier -> field_identifier) )))) ;) (if_statement "if (CONCAT31(extraout_var,cVar3) == 0x41) {\n        uVar2 = 1;\n      }\n      else if (CONCAT31(extraout_var,cVar3) == 0x42) {\n        uVar2 = (uint)(cVar1 == 'B');\n      }\n      else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }" if (parenthesized_expression "(CONCAT31(extraout_var,cVar3) == 0x41)" ( (binary_expression "CONCAT31(extraout_var,cVar3) == 0x41" (call_expression "CONCAT31(extraout_var,cVar3)" identifier (argument_list "(extraout_var,cVar3)" ( identifier , identifier ))) == number_literal) )) (compound_statement "{\n        uVar2 = 1;\n      }" { (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" identifier = number_literal) ;) }) (else_clause "else if (CONCAT31(extraout_var,cVar3) == 0x42) {\n        uVar2 = (uint)(cVar1 == 'B');\n      }\n      else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }" else (if_statement "if (CONCAT31(extraout_var,cVar3) == 0x42) {\n        uVar2 = (uint)(cVar1 == 'B');\n      }\n      else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }" if (parenthesized_expression "(CONCAT31(extraout_var,cVar3) == 0x42)" ( (binary_expression "CONCAT31(extraout_var,cVar3) == 0x42" (call_expression "CONCAT31(extraout_var,cVar3)" identifier (argument_list "(extraout_var,cVar3)" ( identifier , identifier ))) == number_literal) )) (compound_statement "{\n        uVar2 = (uint)(cVar1 == 'B');\n      }" { (expression_statement "uVar2 = (uint)(cVar1 == 'B');" (assignment_expression "uVar2 = (uint)(cVar1 == 'B')" identifier = (call_expression "(uint)(cVar1 == 'B')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(cVar1 == 'B')" ( (binary_expression "cVar1 == 'B'" identifier == (char_literal "'B'" ' character ')) )))) ;) }) (else_clause "else {\n        uVar2 = cVar1 < 'C' ^ 1;\n      }" else (compound_statement "{\n        uVar2 = cVar1 < 'C' ^ 1;\n      }" { (expression_statement "uVar2 = cVar1 < 'C' ^ 1;" (assignment_expression "uVar2 = cVar1 < 'C' ^ 1" identifier = (binary_expression "cVar1 < 'C' ^ 1" (binary_expression "cVar1 < 'C'" identifier < (char_literal "'C'" ' character ')) ^ number_literal)) ;) }))))) (return_statement "return uVar2;" return identifier ;) })) (return_statement "return 0;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "bool FUN_0003b400(int *param_1,int param_2,uint param_3,uint param_4)\n\n{\n  char cVar1;\n  int iVar2;\n  bool bVar3;\n  \n  if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }\n  return false;\n}\n\n" (function_definition "bool FUN_0003b400(int *param_1,int param_2,uint param_3,uint param_4)\n\n{\n  char cVar1;\n  int iVar2;\n  bool bVar3;\n  \n  if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }\n  return false;\n}" primitive_type (function_declarator "FUN_0003b400(int *param_1,int param_2,uint param_3,uint param_4)" identifier (parameter_list "(int *param_1,int param_2,uint param_3,uint param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  bool bVar3;\n  \n  if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }\n  return false;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (if_statement "if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }" if (parenthesized_expression "((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0))" ( (binary_expression "(((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)" (parenthesized_expression "(((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0))))))" ( (binary_expression "((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))" (parenthesized_expression "((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0))" ( (binary_expression "(param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)" (parenthesized_expression "(param_1[5] == *(int *)(param_2 + 0x28))" ( (binary_expression "param_1[5] == *(int *)(param_2 + 0x28)" (subscript_expression "param_1[5]" identifier [ number_literal ]) == (pointer_expression "*(int *)(param_2 + 0x28)" * (cast_expression "(int *)(param_2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) )) && (parenthesized_expression "((*(ushort *)(param_1 + 3) & 0x82) != 0)" ( (binary_expression "(*(ushort *)(param_1 + 3) & 0x82) != 0" (parenthesized_expression "(*(ushort *)(param_1 + 3) & 0x82)" ( (binary_expression "*(ushort *)(param_1 + 3) & 0x82" (pointer_expression "*(ushort *)(param_1 + 3)" * (cast_expression "(ushort *)(param_1 + 3)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 3)" ( (binary_expression "param_1 + 3" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))" ( (parenthesized_expression "((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0))))" ( (binary_expression "(*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))" (binary_expression "(*(byte *)(param_2 + 0x24) & 8) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x24) & 8)" ( (binary_expression "*(byte *)(param_2 + 0x24) & 8" (pointer_expression "*(byte *)(param_2 + 0x24)" * (cast_expression "(byte *)(param_2 + 0x24)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) & number_literal) )) == number_literal) || (parenthesized_expression "(((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))" ( (parenthesized_expression "((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0))" ( (binary_expression "(*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)" (binary_expression "(*(uint *)(*param_1 + 4) & 1) != 0" (parenthesized_expression "(*(uint *)(*param_1 + 4) & 1)" ( (binary_expression "*(uint *)(*param_1 + 4) & 1" (pointer_expression "*(uint *)(*param_1 + 4)" * (cast_expression "(uint *)(*param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 4)" ( (binary_expression "*param_1 + 4" (pointer_expression "*param_1" * identifier) + number_literal) )))) & number_literal) )) != number_literal) || (parenthesized_expression "((*(ushort *)(param_1 + 3) & 0x80) == 0)" ( (binary_expression "(*(ushort *)(param_1 + 3) & 0x80) == 0" (parenthesized_expression "(*(ushort *)(param_1 + 3) & 0x80)" ( (binary_expression "*(ushort *)(param_1 + 3) & 0x80" (pointer_expression "*(ushort *)(param_1 + 3)" * (cast_expression "(ushort *)(param_1 + 3)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 3)" ( (binary_expression "param_1 + 3" identifier + number_literal) )))) & number_literal) )) == number_literal) ))) )) ))) )) ))) )) && (parenthesized_expression "((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)" ( (binary_expression "(param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0" (binary_expression "(param_1[8] & param_3) == 0" (parenthesized_expression "(param_1[8] & param_3)" ( (binary_expression "param_1[8] & param_3" (subscript_expression "param_1[8]" identifier [ number_literal ]) & identifier) )) == number_literal) && (binary_expression "(param_1[9] & param_4) == 0" (parenthesized_expression "(param_1[9] & param_4)" ( (binary_expression "param_1[9] & param_4" (subscript_expression "param_1[9]" identifier [ number_literal ]) & identifier) )) == number_literal)) ))) )) (compound_statement "{\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }" { (if_statement "if (param_1[7] < 0) {\n      return false;\n    }" if (parenthesized_expression "(param_1[7] < 0)" ( (binary_expression "param_1[7] < 0" (subscript_expression "param_1[7]" identifier [ number_literal ]) < number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (expression_statement "cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);" (assignment_expression "cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" identifier = (pointer_expression "*(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" * (cast_expression "(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" ( (binary_expression "*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd" (binary_expression "*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10" (pointer_expression "*(int *)(*(int *)(param_2 + 0x10) + 4)" * (cast_expression "(int *)(*(int *)(param_2 + 0x10) + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x10) + 4)" ( (binary_expression "*(int *)(param_2 + 0x10) + 4" (pointer_expression "*(int *)(param_2 + 0x10)" * (cast_expression "(int *)(param_2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "param_1[7] * 0x10" (subscript_expression "param_1[7]" identifier [ number_literal ]) * number_literal)) + number_literal) ))))) ;) (expression_statement "iVar2 = FUN_0002641c(*param_1);" (assignment_expression "iVar2 = FUN_0002641c(*param_1)" identifier = (call_expression "FUN_0002641c(*param_1)" identifier (argument_list "(*param_1)" ( (pointer_expression "*param_1" * identifier) )))) ;) (if_statement "if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }" if (parenthesized_expression "(iVar2 == 0x41)" ( (binary_expression "iVar2 == 0x41" identifier == number_literal) )) (compound_statement "{\n      bVar3 = true;\n    }" { (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;) }) (else_clause "else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }" else (compound_statement "{\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }" { (expression_statement "bVar3 = 'B' < cVar1;" (assignment_expression "bVar3 = 'B' < cVar1" identifier = (binary_expression "'B' < cVar1" (char_literal "'B'" ' character ') < identifier)) ;) (if_statement "if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }" if (parenthesized_expression "(iVar2 == 0x42)" ( (binary_expression "iVar2 == 0x42" identifier == number_literal) )) (compound_statement "{\n        bVar3 = cVar1 == 'B';\n      }" { (expression_statement "bVar3 = cVar1 == 'B';" (assignment_expression "bVar3 = cVar1 == 'B'" identifier = (binary_expression "cVar1 == 'B'" identifier == (char_literal "'B'" ' character '))) ;) })) }))) (return_statement "return bVar3;" return identifier ;) })) (return_statement "return false;" return false ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) && (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) ))) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_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) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) & LIT) )) != LIT) || (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) ))) )) ))) )) ))) )) && (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & IDENT) )) == LIT) && (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & IDENT) )) == LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) < LIT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (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) )))) + (binary_expression (subscript_expression IDENT [ LIT ]) * LIT)) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (char_literal ' character ') < IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT == (char_literal ' character '))) ;) })) }))) (return_statement return IDENT ;) })) (return_statement return BOOL ;) })))
(function_definition "bool FUN_0003b400(int *param_1,int param_2,uint param_3,uint param_4)\n\n{\n  char cVar1;\n  int iVar2;\n  bool bVar3;\n  \n  if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }\n  return false;\n}" (primitive_type "bool") (function_declarator "FUN_0003b400(int *param_1,int param_2,uint param_3,uint param_4)" (identifier "FUN_0003b400") (parameter_list "(int *param_1,int param_2,uint param_3,uint param_4)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) () ")"))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  bool bVar3;\n  \n  if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }\n  return false;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "bool bVar3;" (primitive_type "bool") (identifier "bVar3") (; ";")) (if_statement "if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }" (if "if") (parenthesized_expression "((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0))" (( "(") (binary_expression "(((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&\n     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)" (parenthesized_expression "(((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0))))))" (( "(") (binary_expression "((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&\n      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))" (parenthesized_expression "((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0))" (( "(") (binary_expression "(param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)" (parenthesized_expression "(param_1[5] == *(int *)(param_2 + 0x28))" (( "(") (binary_expression "param_1[5] == *(int *)(param_2 + 0x28)" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (== "==") (pointer_expression "*(int *)(param_2 + 0x28)" (* "*") (cast_expression "(int *)(param_2 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (&& "&&") (parenthesized_expression "((*(ushort *)(param_1 + 3) & 0x82) != 0)" (( "(") (binary_expression "(*(ushort *)(param_1 + 3) & 0x82) != 0" (parenthesized_expression "(*(ushort *)(param_1 + 3) & 0x82)" (( "(") (binary_expression "*(ushort *)(param_1 + 3) & 0x82" (pointer_expression "*(ushort *)(param_1 + 3)" (* "*") (cast_expression "(ushort *)(param_1 + 3)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 3)" (( "(") (binary_expression "param_1 + 3" (identifier "param_1") (+ "+") (number_literal "3")) () ")")))) (& "&") (number_literal "0x82")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))" (( "(") (parenthesized_expression "((*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0))))" (( "(") (binary_expression "(*(byte *)(param_2 + 0x24) & 8) == 0 ||\n       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))" (binary_expression "(*(byte *)(param_2 + 0x24) & 8) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x24) & 8)" (( "(") (binary_expression "*(byte *)(param_2 + 0x24) & 8" (pointer_expression "*(byte *)(param_2 + 0x24)" (* "*") (cast_expression "(byte *)(param_2 + 0x24)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x24)" (( "(") (binary_expression "param_2 + 0x24" (identifier "param_2") (+ "+") (number_literal "0x24")) () ")")))) (& "&") (number_literal "8")) () ")")) (== "==") (number_literal "0")) (|| "||") (parenthesized_expression "(((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))" (( "(") (parenthesized_expression "((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0))" (( "(") (binary_expression "(*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)" (binary_expression "(*(uint *)(*param_1 + 4) & 1) != 0" (parenthesized_expression "(*(uint *)(*param_1 + 4) & 1)" (( "(") (binary_expression "*(uint *)(*param_1 + 4) & 1" (pointer_expression "*(uint *)(*param_1 + 4)" (* "*") (cast_expression "(uint *)(*param_1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 4)" (( "(") (binary_expression "*param_1 + 4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) (|| "||") (parenthesized_expression "((*(ushort *)(param_1 + 3) & 0x80) == 0)" (( "(") (binary_expression "(*(ushort *)(param_1 + 3) & 0x80) == 0" (parenthesized_expression "(*(ushort *)(param_1 + 3) & 0x80)" (( "(") (binary_expression "*(ushort *)(param_1 + 3) & 0x80" (pointer_expression "*(ushort *)(param_1 + 3)" (* "*") (cast_expression "(ushort *)(param_1 + 3)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 3)" (( "(") (binary_expression "param_1 + 3" (identifier "param_1") (+ "+") (number_literal "3")) () ")")))) (& "&") (number_literal "0x80")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) () ")"))) () ")")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)" (( "(") (binary_expression "(param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0" (binary_expression "(param_1[8] & param_3) == 0" (parenthesized_expression "(param_1[8] & param_3)" (( "(") (binary_expression "param_1[8] & param_3" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (& "&") (identifier "param_3")) () ")")) (== "==") (number_literal "0")) (&& "&&") (binary_expression "(param_1[9] & param_4) == 0" (parenthesized_expression "(param_1[9] & param_4)" (( "(") (binary_expression "param_1[9] & param_4" (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")) (& "&") (identifier "param_4")) () ")")) (== "==") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    if (param_1[7] < 0) {\n      return false;\n    }\n    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);\n    iVar2 = FUN_0002641c(*param_1);\n    if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }\n    return bVar3;\n  }" ({ "{") (if_statement "if (param_1[7] < 0) {\n      return false;\n    }" (if "if") (parenthesized_expression "(param_1[7] < 0)" (( "(") (binary_expression "param_1[7] < 0" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      return false;\n    }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (expression_statement "cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);" (assignment_expression "cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" (* "*") (cast_expression "(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd)" (( "(") (binary_expression "*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd" (binary_expression "*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10" (pointer_expression "*(int *)(*(int *)(param_2 + 0x10) + 4)" (* "*") (cast_expression "(int *)(*(int *)(param_2 + 0x10) + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0x10) + 4)" (( "(") (binary_expression "*(int *)(param_2 + 0x10) + 4" (pointer_expression "*(int *)(param_2 + 0x10)" (* "*") (cast_expression "(int *)(param_2 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "4")) () ")")))) (+ "+") (binary_expression "param_1[7] * 0x10" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (* "*") (number_literal "0x10"))) (+ "+") (number_literal "0xd")) () ")"))))) (; ";")) (expression_statement "iVar2 = FUN_0002641c(*param_1);" (assignment_expression "iVar2 = FUN_0002641c(*param_1)" (identifier "iVar2") (= "=") (call_expression "FUN_0002641c(*param_1)" (identifier "FUN_0002641c") (argument_list "(*param_1)" (( "(") (pointer_expression "*param_1" (* "*") (identifier "param_1")) () ")")))) (; ";")) (if_statement "if (iVar2 == 0x41) {\n      bVar3 = true;\n    }\n    else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }" (if "if") (parenthesized_expression "(iVar2 == 0x41)" (( "(") (binary_expression "iVar2 == 0x41" (identifier "iVar2") (== "==") (number_literal "0x41")) () ")")) (compound_statement "{\n      bVar3 = true;\n    }" ({ "{") (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" (identifier "bVar3") (= "=") (true "true")) (; ";")) (} "}")) (else_clause "else {\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }" (else "else") (compound_statement "{\n      bVar3 = 'B' < cVar1;\n      if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }\n    }" ({ "{") (expression_statement "bVar3 = 'B' < cVar1;" (assignment_expression "bVar3 = 'B' < cVar1" (identifier "bVar3") (= "=") (binary_expression "'B' < cVar1" (char_literal "'B'" (' "'") (character "B") (' "'")) (< "<") (identifier "cVar1"))) (; ";")) (if_statement "if (iVar2 == 0x42) {\n        bVar3 = cVar1 == 'B';\n      }" (if "if") (parenthesized_expression "(iVar2 == 0x42)" (( "(") (binary_expression "iVar2 == 0x42" (identifier "iVar2") (== "==") (number_literal "0x42")) () ")")) (compound_statement "{\n        bVar3 = cVar1 == 'B';\n      }" ({ "{") (expression_statement "bVar3 = cVar1 == 'B';" (assignment_expression "bVar3 = cVar1 == 'B'" (identifier "bVar3") (= "=") (binary_expression "cVar1 == 'B'" (identifier "cVar1") (== "==") (char_literal "'B'" (' "'") (character "B") (' "'")))) (; ";")) (} "}"))) (} "}")))) (return_statement "return bVar3;" (return "return") (identifier "bVar3") (; ";")) (} "}"))) (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}")))

int function_1(type_1 *pTerm,type_2 *pSrc,type_3 notReady)

{
  char var_5;
  type_4 extraout_var;
  char cVar3;
  type_5 uVar2;
  type_5 var_1;
  type_5 var_2;
  
  if ((((pTerm->leftCursor == pSrc->iCursor) && ((pTerm->eOperator & 0x82) != 0)) &&
      ((((pSrc->fg).jointype & 8) == 0 ||
       (((pTerm->pExpr->flags & 1) != 0 || ((pTerm->eOperator & 0x80) == 0)))))) &&
     ((*(type_5 *)&pTerm->prereqRight & var_1) == 0 && ((type_5)pTerm->prereqRight & var_2) == 0)) {
    if (-1 < (pTerm->u).leftColumn) {
      var_5 = pSrc->pTab->aCol[(pTerm->u).leftColumn].affinity;
      cVar3 = var_3(pTerm->pExpr);
      if (var_4(extraout_var,cVar3) == 0x41) {
        uVar2 = 1;
      }
      else if (var_4(extraout_var,cVar3) == 0x42) {
        uVar2 = (type_5)(var_5 == 'B');
      }
      else {
        uVar2 = var_5 < 'C' ^ 1;
      }
      return uVar2;
    }
    return 0;
  }
  return 0;
}


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

bool MASKED(int *param_1,int param_2,uint param_3,uint param_4)

{
  char cVar1;
  int iVar2;
  bool bVar3;
  
  if ((((param_1[5] == *(int *)(param_2 + 0x28)) && ((*(ushort *)(param_1 + 3) & 0x82) != 0)) &&
      (((*(byte *)(param_2 + 0x24) & 8) == 0 ||
       (((*(uint *)(*param_1 + 4) & 1) != 0 || ((*(ushort *)(param_1 + 3) & 0x80) == 0)))))) &&
     ((param_1[8] & param_3) == 0 && (param_1[9] & param_4) == 0)) {
    if (param_1[7] < 0) {
      return false;
    }
    cVar1 = *(char *)(*(int *)(*(int *)(param_2 + 0x10) + 4) + param_1[7] * 0x10 + 0xd);
    iVar2 = FUN_0002641c(*param_1);
    if (iVar2 == 0x41) {
      bVar3 = true;
    }
    else {
      bVar3 = 'B' < cVar1;
      if (iVar2 == 0x42) {
        bVar3 = cVar1 == 'B';
      }
    }
    return bVar3;
  }
  return false;
}

