
void png_free(png_const_structrp png_ptr,png_voidp ptr)

{
  if ((png_ptr != (png_const_structrp)0x0) && (ptr != (png_voidp)0x0)) {
    if (png_ptr->free_fn == (png_free_ptr)0x0) {
      png_free_default(png_ptr,ptr);
    }
    else {
      (*png_ptr->free_fn)(png_ptr,ptr);
    }
    return;
  }
  return;
}



void png_free(long param_1,long param_2)

{
  if ((param_1 != 0) && (param_2 != 0)) {
    if (*(code **)(param_1 + 0x420) == (code *)0x0) {
      png_free_default();
    }
    else {
      (**(code **)(param_1 + 0x420))();
    }
    return;
  }
  return;
}


TEST RDI,RDI
JZ 0x0010cccf
TEST RSI,RSI
JZ 0x0010cccf
SUB RSP,0x8
MOV RAX,qword ptr [RDI + 0x420]
TEST RAX,RAX
JZ 0x0010ccc8
CALL RAX
ADD RSP,0x8
RET
CALL 0x00106730
JMP 0x0010ccc3
RET
(translation_unit "void png_free(long param_1,long param_2)\n\n{\n  if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }\n  return;\n}\n\n" (function_definition "void png_free(long param_1,long param_2)\n\n{\n  if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "png_free(long param_1,long param_2)" identifier (parameter_list "(long param_1,long param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }\n  return;\n}" { (if_statement "if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }" if (parenthesized_expression "((param_1 != 0) && (param_2 != 0))" ( (binary_expression "(param_1 != 0) && (param_2 != 0)" (parenthesized_expression "(param_1 != 0)" ( (binary_expression "param_1 != 0" identifier != number_literal) )) && (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) ))) )) (compound_statement "{\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }" { (if_statement "if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }" if (parenthesized_expression "(*(code **)(param_1 + 0x420) == (code *)0x0)" ( (binary_expression "*(code **)(param_1 + 0x420) == (code *)0x0" (pointer_expression "*(code **)(param_1 + 0x420)" * (cast_expression "(code **)(param_1 + 0x420)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x420)" ( (binary_expression "param_1 + 0x420" identifier + number_literal) )))) == (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      png_free_default();\n    }" { (expression_statement "png_free_default();" (call_expression "png_free_default()" identifier (argument_list "()" ( ))) ;) }) (else_clause "else {\n      (**(code **)(param_1 + 0x420))();\n    }" else (compound_statement "{\n      (**(code **)(param_1 + 0x420))();\n    }" { (expression_statement "(**(code **)(param_1 + 0x420))();" (call_expression "(**(code **)(param_1 + 0x420))()" (parenthesized_expression "(**(code **)(param_1 + 0x420))" ( (pointer_expression "**(code **)(param_1 + 0x420)" * (pointer_expression "*(code **)(param_1 + 0x420)" * (cast_expression "(code **)(param_1 + 0x420)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x420)" ( (binary_expression "param_1 + 0x420" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) }))) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "void png_free(png_const_structrp png_ptr,png_voidp ptr)\n\n{\n  if ((png_ptr != (png_const_structrp)0x0) && (ptr != (png_voidp)0x0)) {\n    if (png_ptr->free_fn == (png_free_ptr)0x0) {\n      png_free_default(png_ptr,ptr);\n    }\n    else {\n      (*png_ptr->free_fn)(png_ptr,ptr);\n    }\n    return;\n  }\n  return;\n}\n\n" (function_definition "void png_free(png_const_structrp png_ptr,png_voidp ptr)\n\n{\n  if ((png_ptr != (png_const_structrp)0x0) && (ptr != (png_voidp)0x0)) {\n    if (png_ptr->free_fn == (png_free_ptr)0x0) {\n      png_free_default(png_ptr,ptr);\n    }\n    else {\n      (*png_ptr->free_fn)(png_ptr,ptr);\n    }\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "png_free(png_const_structrp png_ptr,png_voidp ptr)" identifier (parameter_list "(png_const_structrp png_ptr,png_voidp ptr)" ( (parameter_declaration "png_const_structrp png_ptr" type_identifier identifier) , (parameter_declaration "png_voidp ptr" type_identifier identifier) ))) (compound_statement "{\n  if ((png_ptr != (png_const_structrp)0x0) && (ptr != (png_voidp)0x0)) {\n    if (png_ptr->free_fn == (png_free_ptr)0x0) {\n      png_free_default(png_ptr,ptr);\n    }\n    else {\n      (*png_ptr->free_fn)(png_ptr,ptr);\n    }\n    return;\n  }\n  return;\n}" { (if_statement "if ((png_ptr != (png_const_structrp)0x0) && (ptr != (png_voidp)0x0)) {\n    if (png_ptr->free_fn == (png_free_ptr)0x0) {\n      png_free_default(png_ptr,ptr);\n    }\n    else {\n      (*png_ptr->free_fn)(png_ptr,ptr);\n    }\n    return;\n  }" if (parenthesized_expression "((png_ptr != (png_const_structrp)0x0) && (ptr != (png_voidp)0x0))" ( (binary_expression "(png_ptr != (png_const_structrp)0x0) && (ptr != (png_voidp)0x0)" (parenthesized_expression "(png_ptr != (png_const_structrp)0x0)" ( (binary_expression "png_ptr != (png_const_structrp)0x0" identifier != (cast_expression "(png_const_structrp)0x0" ( (type_descriptor "png_const_structrp" type_identifier) ) number_literal)) )) && (parenthesized_expression "(ptr != (png_voidp)0x0)" ( (binary_expression "ptr != (png_voidp)0x0" identifier != (cast_expression "(png_voidp)0x0" ( (type_descriptor "png_voidp" type_identifier) ) number_literal)) ))) )) (compound_statement "{\n    if (png_ptr->free_fn == (png_free_ptr)0x0) {\n      png_free_default(png_ptr,ptr);\n    }\n    else {\n      (*png_ptr->free_fn)(png_ptr,ptr);\n    }\n    return;\n  }" { (if_statement "if (png_ptr->free_fn == (png_free_ptr)0x0) {\n      png_free_default(png_ptr,ptr);\n    }\n    else {\n      (*png_ptr->free_fn)(png_ptr,ptr);\n    }" if (parenthesized_expression "(png_ptr->free_fn == (png_free_ptr)0x0)" ( (binary_expression "png_ptr->free_fn == (png_free_ptr)0x0" (field_expression "png_ptr->free_fn" identifier -> field_identifier) == (cast_expression "(png_free_ptr)0x0" ( (type_descriptor "png_free_ptr" type_identifier) ) number_literal)) )) (compound_statement "{\n      png_free_default(png_ptr,ptr);\n    }" { (expression_statement "png_free_default(png_ptr,ptr);" (call_expression "png_free_default(png_ptr,ptr)" identifier (argument_list "(png_ptr,ptr)" ( identifier , identifier ))) ;) }) (else_clause "else {\n      (*png_ptr->free_fn)(png_ptr,ptr);\n    }" else (compound_statement "{\n      (*png_ptr->free_fn)(png_ptr,ptr);\n    }" { (expression_statement "(*png_ptr->free_fn)(png_ptr,ptr);" (call_expression "(*png_ptr->free_fn)(png_ptr,ptr)" (parenthesized_expression "(*png_ptr->free_fn)" ( (pointer_expression "*png_ptr->free_fn" * (field_expression "png_ptr->free_fn" identifier -> field_identifier)) )) (argument_list "(png_ptr,ptr)" ( identifier , identifier ))) ;) }))) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "void png_free(long param_1,long param_2)\n\n{\n  if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }\n  return;\n}\n\n" (function_definition "void png_free(long param_1,long param_2)\n\n{\n  if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "png_free(long param_1,long param_2)" identifier (parameter_list "(long param_1,long param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }\n  return;\n}" { (if_statement "if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }" if (parenthesized_expression "((param_1 != 0) && (param_2 != 0))" ( (binary_expression "(param_1 != 0) && (param_2 != 0)" (parenthesized_expression "(param_1 != 0)" ( (binary_expression "param_1 != 0" identifier != number_literal) )) && (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) ))) )) (compound_statement "{\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }" { (if_statement "if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }" if (parenthesized_expression "(*(code **)(param_1 + 0x420) == (code *)0x0)" ( (binary_expression "*(code **)(param_1 + 0x420) == (code *)0x0" (pointer_expression "*(code **)(param_1 + 0x420)" * (cast_expression "(code **)(param_1 + 0x420)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x420)" ( (binary_expression "param_1 + 0x420" identifier + number_literal) )))) == (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      png_free_default();\n    }" { (expression_statement "png_free_default();" (call_expression "png_free_default()" identifier (argument_list "()" ( ))) ;) }) (else_clause "else {\n      (**(code **)(param_1 + 0x420))();\n    }" else (compound_statement "{\n      (**(code **)(param_1 + 0x420))();\n    }" { (expression_statement "(**(code **)(param_1 + 0x420))();" (call_expression "(**(code **)(param_1 + 0x420))()" (parenthesized_expression "(**(code **)(param_1 + 0x420))" ( (pointer_expression "**(code **)(param_1 + 0x420)" * (pointer_expression "*(code **)(param_1 + 0x420)" * (cast_expression "(code **)(param_1 + 0x420)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x420)" ( (binary_expression "param_1 + 0x420" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) }))) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( ))) ;) }))) (return_statement return ;) })) (return_statement return ;) })))
(function_definition "void png_free(long param_1,long param_2)\n\n{\n  if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "png_free(long param_1,long param_2)" (identifier "png_free") (parameter_list "(long param_1,long param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }\n  return;\n}" ({ "{") (if_statement "if ((param_1 != 0) && (param_2 != 0)) {\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }" (if "if") (parenthesized_expression "((param_1 != 0) && (param_2 != 0))" (( "(") (binary_expression "(param_1 != 0) && (param_2 != 0)" (parenthesized_expression "(param_1 != 0)" (( "(") (binary_expression "param_1 != 0" (identifier "param_1") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }\n    return;\n  }" ({ "{") (if_statement "if (*(code **)(param_1 + 0x420) == (code *)0x0) {\n      png_free_default();\n    }\n    else {\n      (**(code **)(param_1 + 0x420))();\n    }" (if "if") (parenthesized_expression "(*(code **)(param_1 + 0x420) == (code *)0x0)" (( "(") (binary_expression "*(code **)(param_1 + 0x420) == (code *)0x0" (pointer_expression "*(code **)(param_1 + 0x420)" (* "*") (cast_expression "(code **)(param_1 + 0x420)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x420)" (( "(") (binary_expression "param_1 + 0x420" (identifier "param_1") (+ "+") (number_literal "0x420")) () ")")))) (== "==") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      png_free_default();\n    }" ({ "{") (expression_statement "png_free_default();" (call_expression "png_free_default()" (identifier "png_free_default") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")) (else_clause "else {\n      (**(code **)(param_1 + 0x420))();\n    }" (else "else") (compound_statement "{\n      (**(code **)(param_1 + 0x420))();\n    }" ({ "{") (expression_statement "(**(code **)(param_1 + 0x420))();" (call_expression "(**(code **)(param_1 + 0x420))()" (parenthesized_expression "(**(code **)(param_1 + 0x420))" (( "(") (pointer_expression "**(code **)(param_1 + 0x420)" (* "*") (pointer_expression "*(code **)(param_1 + 0x420)" (* "*") (cast_expression "(code **)(param_1 + 0x420)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x420)" (( "(") (binary_expression "param_1 + 0x420" (identifier "param_1") (+ "+") (number_literal "0x420")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 var_1,type_2 var_2)

{
  if ((var_1 != (type_1)0x0) && (var_2 != (type_2)0x0)) {
    if (var_1->free_fn == (type_3)0x0) {
      var_3(var_1,var_2);
    }
    else {
      (*var_1->free_fn)(var_1,var_2);
    }
    return;
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list)))))) (return_statement))) (return_statement))))

void MASKED(long param_1,long param_2)

{
  if ((param_1 != 0) && (param_2 != 0)) {
    if (*(code **)(param_1 + 0x420) == (code *)0x0) {
      MASKED_default();
    }
    else {
      (**(code **)(param_1 + 0x420))();
    }
    return;
  }
  return;
}

