
int __regparm3 deflateStateCheck(z_streamp strm)

{
  internal_state *piVar1;
  int iVar2;
  uint uVar3;
  
  piVar1 = strm->state;
  if ((piVar1 != (internal_state *)0x0) && (strm == piVar1->strm)) {
    iVar2 = piVar1->status;
    uVar3 = 1;
    if (iVar2 - 0x5bU < 0x17) {
      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;
    }
    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&
           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;
  }
  return 1;
}



uint __regparm3 FUN_00013980(int param_1)

{
  int *piVar1;
  int iVar2;
  uint uVar3;
  
  piVar1 = *(int **)(param_1 + 0x1c);
  if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {
    iVar2 = piVar1[1];
    uVar3 = 1;
    if (iVar2 - 0x5bU < 0x17) {
      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;
    }
    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&
           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;
  }
  return 1;
}


MOV ECX,dword ptr [EAX + 0x1c]
MOV EDX,0x1
TEST ECX,ECX
JZ 0x00013990
CMP EAX,dword ptr [ECX]
JZ 0x00013998
MOV EAX,EDX
RET
PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
MOV EBX,dword ptr [ECX + 0x4]
CMP EBX,0x2a
LEA ECX,[EBX + -0x5b]
SETNZ AL
MOV ESI,EAX
LEA EAX,[EBX + -0x39]
AND EAX,0xffffffef
SETNZ AL
CMP EBX,0x45
MOV EDI,EAX
SETNZ AL
CMP ECX,0x16
MOV EBP,EAX
MOV EAX,0x1
JA 0x000139d5
MOV EDX,0x401001
SHR EDX,CL
NOT EDX
MOV EAX,EDX
AND EAX,0x1
CMP EBX,0x29a
SETNZ CL
AND ESI,EBP
MOV EDX,ESI
AND EDX,ECX
AND EDX,EDI
AND EDX,EAX
MOVZX EDX,DL
POP EBX
MOV EAX,EDX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "uint __regparm3 FUN_00013980(int param_1)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = *(int **)(param_1 + 0x1c);\n  if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}\n\n" (function_definition "uint __regparm3 FUN_00013980(int param_1)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = *(int **)(param_1 + 0x1c);\n  if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00013980(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = *(int **)(param_1 + 0x1c);\n  if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (expression_statement "piVar1 = *(int **)(param_1 + 0x1c);" (assignment_expression "piVar1 = *(int **)(param_1 + 0x1c)" identifier = (pointer_expression "*(int **)(param_1 + 0x1c)" * (cast_expression "(int **)(param_1 + 0x1c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ;) (if_statement "if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }" if (parenthesized_expression "((piVar1 != (int *)0x0) && (param_1 == *piVar1))" ( (binary_expression "(piVar1 != (int *)0x0) && (param_1 == *piVar1)" (parenthesized_expression "(piVar1 != (int *)0x0)" ( (binary_expression "piVar1 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(param_1 == *piVar1)" ( (binary_expression "param_1 == *piVar1" identifier == (pointer_expression "*piVar1" * identifier)) ))) )) (compound_statement "{\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }" { (expression_statement "iVar2 = piVar1[1];" (assignment_expression "iVar2 = piVar1[1]" identifier = (subscript_expression "piVar1[1]" identifier [ number_literal ])) ;) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (if_statement "if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }" if (parenthesized_expression "(iVar2 - 0x5bU < 0x17)" ( (binary_expression "iVar2 - 0x5bU < 0x17" (binary_expression "iVar2 - 0x5bU" identifier - number_literal) < number_literal) )) (compound_statement "{\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }" { (expression_statement "uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;" (assignment_expression "uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1" identifier = (binary_expression "~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1" (unary_expression "~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f))" ~ (parenthesized_expression "(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f))" ( (binary_expression "0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)" number_literal >> (parenthesized_expression "((byte)(iVar2 - 0x5bU) & 0x1f)" ( (binary_expression "(byte)(iVar2 - 0x5bU) & 0x1f" (call_expression "(byte)(iVar2 - 0x5bU)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(iVar2 - 0x5bU)" ( (binary_expression "iVar2 - 0x5bU" identifier - number_literal) ))) & number_literal) ))) ))) & number_literal)) ;) })) (return_statement "return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;" return (binary_expression "(((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3" (parenthesized_expression "(((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0)" ( (binary_expression "((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0" (parenthesized_expression "((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a)" ( (binary_expression "(iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a" (parenthesized_expression "(iVar2 != 0x2a && iVar2 != 0x45)" ( (binary_expression "iVar2 != 0x2a && iVar2 != 0x45" (binary_expression "iVar2 != 0x2a" identifier != number_literal) && (binary_expression "iVar2 != 0x45" identifier != number_literal)) )) && (binary_expression "iVar2 != 0x29a" identifier != number_literal)) )) && (binary_expression "(iVar2 - 0x39U & 0xffffffef) != 0" (parenthesized_expression "(iVar2 - 0x39U & 0xffffffef)" ( (binary_expression "iVar2 - 0x39U & 0xffffffef" (binary_expression "iVar2 - 0x39U" identifier - number_literal) & number_literal) )) != number_literal)) )) & identifier) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "int __regparm3 deflateStateCheck(z_streamp strm)\n\n{\n  internal_state *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = strm->state;\n  if ((piVar1 != (internal_state *)0x0) && (strm == piVar1->strm)) {\n    iVar2 = piVar1->status;\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}\n\n" (function_definition "int __regparm3 deflateStateCheck(z_streamp strm)\n\n{\n  internal_state *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = strm->state;\n  if ((piVar1 != (internal_state *)0x0) && (strm == piVar1->strm)) {\n    iVar2 = piVar1->status;\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "deflateStateCheck(z_streamp strm)" identifier (parameter_list "(z_streamp strm)" ( (parameter_declaration "z_streamp strm" type_identifier identifier) ))) (compound_statement "{\n  internal_state *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = strm->state;\n  if ((piVar1 != (internal_state *)0x0) && (strm == piVar1->strm)) {\n    iVar2 = piVar1->status;\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}" { (declaration "internal_state *piVar1;" type_identifier (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (expression_statement "piVar1 = strm->state;" (assignment_expression "piVar1 = strm->state" identifier = (field_expression "strm->state" identifier -> field_identifier)) ;) (if_statement "if ((piVar1 != (internal_state *)0x0) && (strm == piVar1->strm)) {\n    iVar2 = piVar1->status;\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }" if (parenthesized_expression "((piVar1 != (internal_state *)0x0) && (strm == piVar1->strm))" ( (binary_expression "(piVar1 != (internal_state *)0x0) && (strm == piVar1->strm)" (parenthesized_expression "(piVar1 != (internal_state *)0x0)" ( (binary_expression "piVar1 != (internal_state *)0x0" identifier != (cast_expression "(internal_state *)0x0" ( (type_descriptor "internal_state *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(strm == piVar1->strm)" ( (binary_expression "strm == piVar1->strm" identifier == (field_expression "piVar1->strm" identifier -> field_identifier)) ))) )) (compound_statement "{\n    iVar2 = piVar1->status;\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }" { (expression_statement "iVar2 = piVar1->status;" (assignment_expression "iVar2 = piVar1->status" identifier = (field_expression "piVar1->status" identifier -> field_identifier)) ;) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (if_statement "if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }" if (parenthesized_expression "(iVar2 - 0x5bU < 0x17)" ( (binary_expression "iVar2 - 0x5bU < 0x17" (binary_expression "iVar2 - 0x5bU" identifier - number_literal) < number_literal) )) (compound_statement "{\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }" { (expression_statement "uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;" (assignment_expression "uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1" identifier = (binary_expression "~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1" (unary_expression "~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f))" ~ (parenthesized_expression "(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f))" ( (binary_expression "0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)" number_literal >> (parenthesized_expression "((byte)(iVar2 - 0x5bU) & 0x1f)" ( (binary_expression "(byte)(iVar2 - 0x5bU) & 0x1f" (call_expression "(byte)(iVar2 - 0x5bU)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(iVar2 - 0x5bU)" ( (binary_expression "iVar2 - 0x5bU" identifier - number_literal) ))) & number_literal) ))) ))) & number_literal)) ;) })) (return_statement "return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;" return (binary_expression "(((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3" (parenthesized_expression "(((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0)" ( (binary_expression "((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0" (parenthesized_expression "((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a)" ( (binary_expression "(iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a" (parenthesized_expression "(iVar2 != 0x2a && iVar2 != 0x45)" ( (binary_expression "iVar2 != 0x2a && iVar2 != 0x45" (binary_expression "iVar2 != 0x2a" identifier != number_literal) && (binary_expression "iVar2 != 0x45" identifier != number_literal)) )) && (binary_expression "iVar2 != 0x29a" identifier != number_literal)) )) && (binary_expression "(iVar2 - 0x39U & 0xffffffef) != 0" (parenthesized_expression "(iVar2 - 0x39U & 0xffffffef)" ( (binary_expression "iVar2 - 0x39U & 0xffffffef" (binary_expression "iVar2 - 0x39U" identifier - number_literal) & number_literal) )) != number_literal)) )) & identifier) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "uint __regparm3 FUN_00013980(int param_1)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = *(int **)(param_1 + 0x1c);\n  if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}\n\n" (function_definition "uint __regparm3 FUN_00013980(int param_1)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = *(int **)(param_1 + 0x1c);\n  if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00013980(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = *(int **)(param_1 + 0x1c);\n  if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (expression_statement "piVar1 = *(int **)(param_1 + 0x1c);" (assignment_expression "piVar1 = *(int **)(param_1 + 0x1c)" identifier = (pointer_expression "*(int **)(param_1 + 0x1c)" * (cast_expression "(int **)(param_1 + 0x1c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ;) (if_statement "if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }" if (parenthesized_expression "((piVar1 != (int *)0x0) && (param_1 == *piVar1))" ( (binary_expression "(piVar1 != (int *)0x0) && (param_1 == *piVar1)" (parenthesized_expression "(piVar1 != (int *)0x0)" ( (binary_expression "piVar1 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(param_1 == *piVar1)" ( (binary_expression "param_1 == *piVar1" identifier == (pointer_expression "*piVar1" * identifier)) ))) )) (compound_statement "{\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }" { (expression_statement "iVar2 = piVar1[1];" (assignment_expression "iVar2 = piVar1[1]" identifier = (subscript_expression "piVar1[1]" identifier [ number_literal ])) ;) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (if_statement "if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }" if (parenthesized_expression "(iVar2 - 0x5bU < 0x17)" ( (binary_expression "iVar2 - 0x5bU < 0x17" (binary_expression "iVar2 - 0x5bU" identifier - number_literal) < number_literal) )) (compound_statement "{\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }" { (expression_statement "uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;" (assignment_expression "uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1" identifier = (binary_expression "~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1" (unary_expression "~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f))" ~ (parenthesized_expression "(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f))" ( (binary_expression "0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)" number_literal >> (parenthesized_expression "((byte)(iVar2 - 0x5bU) & 0x1f)" ( (binary_expression "(byte)(iVar2 - 0x5bU) & 0x1f" (call_expression "(byte)(iVar2 - 0x5bU)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(iVar2 - 0x5bU)" ( (binary_expression "iVar2 - 0x5bU" identifier - number_literal) ))) & number_literal) ))) ))) & number_literal)) ;) })) (return_statement "return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;" return (binary_expression "(((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3" (parenthesized_expression "(((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0)" ( (binary_expression "((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0" (parenthesized_expression "((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a)" ( (binary_expression "(iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a" (parenthesized_expression "(iVar2 != 0x2a && iVar2 != 0x45)" ( (binary_expression "iVar2 != 0x2a && iVar2 != 0x45" (binary_expression "iVar2 != 0x2a" identifier != number_literal) && (binary_expression "iVar2 != 0x45" identifier != number_literal)) )) && (binary_expression "iVar2 != 0x29a" identifier != number_literal)) )) && (binary_expression "(iVar2 - 0x39U & 0xffffffef) != 0" (parenthesized_expression "(iVar2 - 0x39U & 0xffffffef)" ( (binary_expression "iVar2 - 0x39U & 0xffffffef" (binary_expression "iVar2 - 0x39U" identifier - number_literal) & number_literal) )) != number_literal)) )) & identifier) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (unary_expression ~ (parenthesized_expression ( (binary_expression LIT >> (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) ))) & LIT) ))) ))) & LIT)) ;) })) (return_statement return (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT != LIT) && (binary_expression IDENT != LIT)) )) && (binary_expression IDENT != LIT)) )) && (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) & LIT) )) != LIT)) )) & IDENT) ;) })) (return_statement return LIT ;) })))
(function_definition "uint __regparm3 FUN_00013980(int param_1)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = *(int **)(param_1 + 0x1c);\n  if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}" (type_identifier "uint") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00013980(int param_1)" (identifier "FUN_00013980") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  \n  piVar1 = *(int **)(param_1 + 0x1c);\n  if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }\n  return 1;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (expression_statement "piVar1 = *(int **)(param_1 + 0x1c);" (assignment_expression "piVar1 = *(int **)(param_1 + 0x1c)" (identifier "piVar1") (= "=") (pointer_expression "*(int **)(param_1 + 0x1c)" (* "*") (cast_expression "(int **)(param_1 + 0x1c)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (if_statement "if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }" (if "if") (parenthesized_expression "((piVar1 != (int *)0x0) && (param_1 == *piVar1))" (( "(") (binary_expression "(piVar1 != (int *)0x0) && (param_1 == *piVar1)" (parenthesized_expression "(piVar1 != (int *)0x0)" (( "(") (binary_expression "piVar1 != (int *)0x0" (identifier "piVar1") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(param_1 == *piVar1)" (( "(") (binary_expression "param_1 == *piVar1" (identifier "param_1") (== "==") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) () ")"))) () ")")) (compound_statement "{\n    iVar2 = piVar1[1];\n    uVar3 = 1;\n    if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }\n    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;\n  }" ({ "{") (expression_statement "iVar2 = piVar1[1];" (assignment_expression "iVar2 = piVar1[1]" (identifier "iVar2") (= "=") (subscript_expression "piVar1[1]" (identifier "piVar1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" (identifier "uVar3") (= "=") (number_literal "1")) (; ";")) (if_statement "if (iVar2 - 0x5bU < 0x17) {\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }" (if "if") (parenthesized_expression "(iVar2 - 0x5bU < 0x17)" (( "(") (binary_expression "iVar2 - 0x5bU < 0x17" (binary_expression "iVar2 - 0x5bU" (identifier "iVar2") (- "-") (number_literal "0x5bU")) (< "<") (number_literal "0x17")) () ")")) (compound_statement "{\n      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;\n    }" ({ "{") (expression_statement "uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;" (assignment_expression "uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1" (identifier "uVar3") (= "=") (binary_expression "~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1" (unary_expression "~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f))" (~ "~") (parenthesized_expression "(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f))" (( "(") (binary_expression "0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)" (number_literal "0x401001U") (>> ">>") (parenthesized_expression "((byte)(iVar2 - 0x5bU) & 0x1f)" (( "(") (binary_expression "(byte)(iVar2 - 0x5bU) & 0x1f" (call_expression "(byte)(iVar2 - 0x5bU)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(iVar2 - 0x5bU)" (( "(") (binary_expression "iVar2 - 0x5bU" (identifier "iVar2") (- "-") (number_literal "0x5bU")) () ")"))) (& "&") (number_literal "0x1f")) () ")"))) () ")"))) (& "&") (number_literal "1"))) (; ";")) (} "}"))) (return_statement "return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;" (return "return") (binary_expression "(((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3" (parenthesized_expression "(((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0)" (( "(") (binary_expression "((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&\n           (iVar2 - 0x39U & 0xffffffef) != 0" (parenthesized_expression "((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a)" (( "(") (binary_expression "(iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a" (parenthesized_expression "(iVar2 != 0x2a && iVar2 != 0x45)" (( "(") (binary_expression "iVar2 != 0x2a && iVar2 != 0x45" (binary_expression "iVar2 != 0x2a" (identifier "iVar2") (!= "!=") (number_literal "0x2a")) (&& "&&") (binary_expression "iVar2 != 0x45" (identifier "iVar2") (!= "!=") (number_literal "0x45"))) () ")")) (&& "&&") (binary_expression "iVar2 != 0x29a" (identifier "iVar2") (!= "!=") (number_literal "0x29a"))) () ")")) (&& "&&") (binary_expression "(iVar2 - 0x39U & 0xffffffef) != 0" (parenthesized_expression "(iVar2 - 0x39U & 0xffffffef)" (( "(") (binary_expression "iVar2 - 0x39U & 0xffffffef" (binary_expression "iVar2 - 0x39U" (identifier "iVar2") (- "-") (number_literal "0x39U")) (& "&") (number_literal "0xffffffef")) () ")")) (!= "!=") (number_literal "0"))) () ")")) (& "&") (identifier "uVar3")) (; ";")) (} "}"))) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}")))

int __regparm3 function_1(type_1 var_2)

{
  type_2 *var_1;
  int var_3;
  type_3 var_4;
  
  var_1 = var_2->state;
  if ((var_1 != (type_2 *)0x0) && (var_2 == var_1->var_2)) {
    var_3 = var_1->status;
    var_4 = 1;
    if (var_3 - 0x5bU < 0x17) {
      var_4 = ~(0x401001U >> ((byte)(var_3 - 0x5bU) & 0x1f)) & 1;
    }
    return (((var_3 != 0x2a && var_3 != 0x45) && var_3 != 0x29a) &&
           (var_3 - 0x39U & 0xffffffef) != 0) & var_4;
  }
  return 1;
}


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

uint __regparm3 MASKED(int param_1)

{
  int *piVar1;
  int iVar2;
  uint uVar3;
  
  piVar1 = *(int **)(param_1 + 0x1c);
  if ((piVar1 != (int *)0x0) && (param_1 == *piVar1)) {
    iVar2 = piVar1[1];
    uVar3 = 1;
    if (iVar2 - 0x5bU < 0x17) {
      uVar3 = ~(0x401001U >> ((byte)(iVar2 - 0x5bU) & 0x1f)) & 1;
    }
    return (((iVar2 != 0x2a && iVar2 != 0x45) && iVar2 != 0x29a) &&
           (iVar2 - 0x39U & 0xffffffef) != 0) & uVar3;
  }
  return 1;
}

