
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > > const&
   std::use_facet<std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >
   >(std::locale const&) */

money_put *
std::use_facet<std::money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>>
          (locale *param_1)

{
  long lVar1;
  ulong uVar2;
  money_put *pmVar3;
  
  uVar2 = locale::id::_M_id((id *)&money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>
                                   ::id);
  if ((uVar2 < *(ulong *)(*(long *)param_1 + 0x10)) &&
     (lVar1 = *(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8), lVar1 != 0)) {
    pmVar3 = (money_put *)
             __dynamic_cast(lVar1,&locale::facet::typeinfo,
                            &money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::
                             typeinfo,0);
    if (pmVar3 != (money_put *)0x0) {
      return pmVar3;
    }
                    /* WARNING: Subroutine does not return */
    __cxa_bad_cast();
  }
                    /* WARNING: Subroutine does not return */
  __throw_bad_cast();
}



void FUN_0034fb90(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_002dd3a0(&DAT_0044bd98);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    FUN_002da650();
  }
                    /* WARNING: Subroutine does not return */
  FUN_00319450();
}


PUSH RBX
MOV RBX,RDI
LEA RDI,[0x44bd98]
CALL 0x002dd3a0
MOV RDX,qword ptr [RBX]
MOV RCX,qword ptr [RDX + 0x8]
CMP qword ptr [RDX + 0x10],RAX
JBE 0x0034fbd2
MOV RDI,qword ptr [RCX + RAX*0x8]
TEST RDI,RDI
JZ 0x0034fbd2
LEA RDX,[0x43cd78]
LEA RSI,[0x438640]
XOR ECX,ECX
CALL 0x0031b7b0
TEST RAX,RAX
JZ 0x0034fbd7
POP RBX
RET
CALL 0x00319450
CALL 0x002da650
(translation_unit "void FUN_0034fb90(long *param_1)\n\n{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_002dd3a0(&DAT_0044bd98);\n  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_002da650();\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00319450();\n}\n\n" (function_definition "void FUN_0034fb90(long *param_1)\n\n{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_002dd3a0(&DAT_0044bd98);\n  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_002da650();\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00319450();\n}" primitive_type (function_declarator "FUN_0034fb90(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_002dd3a0(&DAT_0044bd98);\n  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_002da650();\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00319450();\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (expression_statement "uVar1 = FUN_002dd3a0(&DAT_0044bd98);" (assignment_expression "uVar1 = FUN_002dd3a0(&DAT_0044bd98)" identifier = (call_expression "FUN_002dd3a0(&DAT_0044bd98)" identifier (argument_list "(&DAT_0044bd98)" ( (pointer_expression "&DAT_0044bd98" & identifier) )))) ;) (if_statement "if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_002da650();\n  }" if (parenthesized_expression "((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0))" ( (binary_expression "(uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)" (parenthesized_expression "(uVar1 < *(ulong *)(*param_1 + 0x10))" ( (binary_expression "uVar1 < *(ulong *)(*param_1 + 0x10)" identifier < (pointer_expression "*(ulong *)(*param_1 + 0x10)" * (cast_expression "(ulong *)(*param_1 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) && (parenthesized_expression "(lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)" ( (comma_expression "lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0" (assignment_expression "lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8)" identifier = (pointer_expression "*(long *)(*(long *)(*param_1 + 8) + uVar1 * 8)" * (cast_expression "(long *)(*(long *)(*param_1 + 8) + uVar1 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*param_1 + 8) + uVar1 * 8)" ( (binary_expression "*(long *)(*param_1 + 8) + uVar1 * 8" (pointer_expression "*(long *)(*param_1 + 8)" * (cast_expression "(long *)(*param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 8)" ( (binary_expression "*param_1 + 8" (pointer_expression "*param_1" * identifier) + number_literal) )))) + (binary_expression "uVar1 * 8" identifier * number_literal)) ))))) , (binary_expression "lVar2 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_002da650();\n  }" { (expression_statement "lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);" (assignment_expression "lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0)" identifier = (call_expression "FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0)" identifier (argument_list "(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0)" ( identifier , (pointer_expression "&PTR_PTR_FUN_00438640" & identifier) , (pointer_expression "&PTR_PTR_FUN_0043cd78" & identifier) , number_literal )))) ;) (if_statement "if (lVar2 != 0) {\n      return;\n    }" if (parenthesized_expression "(lVar2 != 0)" ( (binary_expression "lVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) comment (expression_statement "FUN_002da650();" (call_expression "FUN_002da650()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "FUN_00319450();" (call_expression "FUN_00319450()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > > const&\n   std::use_facet<std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >\n   >(std::locale const&) */\n\nmoney_put *\nstd::use_facet<std::money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>>\n          (locale *param_1)\n\n{\n  long lVar1;\n  ulong uVar2;\n  money_put *pmVar3;\n  \n  uVar2 = locale::id::_M_id((id *)&money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>\n                                   ::id);\n  if ((uVar2 < *(ulong *)(*(long *)param_1 + 0x10)) &&\n     (lVar1 = *(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8), lVar1 != 0)) {\n    pmVar3 = (money_put *)\n             __dynamic_cast(lVar1,&locale::facet::typeinfo,\n                            &money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::\n                             typeinfo,0);\n    if (pmVar3 != (money_put *)0x0) {\n      return pmVar3;\n    }\n                    /* WARNING: Subroutine does not return */\n    __cxa_bad_cast();\n  }\n                    /* WARNING: Subroutine does not return */\n  __throw_bad_cast();\n}\n\n" comment comment (ERROR "money_put *\nstd::use_facet<std::money_put<char," (binary_expression "money_put *\nstd::use_facet<std::money_put<char" (binary_expression "money_put *\nstd::use_facet<std" (binary_expression "money_put *\nstd" identifier * identifier) (ERROR "::use_facet" : : identifier) < identifier) (ERROR "::money_put" : : identifier) < identifier) ,) (labeled_statement "std::ostreambuf_iterator<char,std::char_traits<char>>>>\n          (locale *param_1)" statement_identifier (ERROR "::ostreambuf_iterator<char,std:" : : (comma_expression "ostreambuf_iterator<char,std" (binary_expression "ostreambuf_iterator<char" identifier < identifier) , identifier) :) : (expression_statement "char_traits<char>>>>\n          (locale *param_1)" (binary_expression "char_traits<char>>>>\n          (locale *param_1)" identifier < (binary_expression "char>>>>\n          (locale *param_1)" identifier >> (ERROR ">>" >>) (parenthesized_expression "(locale *param_1)" ( (binary_expression "locale *param_1" identifier * identifier) )))) ;)) (compound_statement "{\n  long lVar1;\n  ulong uVar2;\n  money_put *pmVar3;\n  \n  uVar2 = locale::id::_M_id((id *)&money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>\n                                   ::id);\n  if ((uVar2 < *(ulong *)(*(long *)param_1 + 0x10)) &&\n     (lVar1 = *(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8), lVar1 != 0)) {\n    pmVar3 = (money_put *)\n             __dynamic_cast(lVar1,&locale::facet::typeinfo,\n                            &money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::\n                             typeinfo,0);\n    if (pmVar3 != (money_put *)0x0) {\n      return pmVar3;\n    }\n                    /* WARNING: Subroutine does not return */\n    __cxa_bad_cast();\n  }\n                    /* WARNING: Subroutine does not return */\n  __throw_bad_cast();\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "money_put *pmVar3;" type_identifier (pointer_declarator "*pmVar3" * identifier) ;) (ERROR "uVar2 = locale::" (assignment_expression "uVar2 = locale" identifier = identifier) : :) (labeled_statement "id::_M_id((id *)&money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>\n                                   ::id);" statement_identifier (ERROR "::_M_id((id *)&money_put<char,std::ostreambuf_iterator<char,std:" : : identifier ( (binary_expression "(id *)&money_put<char" (cast_expression "(id *)&money_put" ( (type_descriptor "id *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&money_put" & identifier)) < identifier) , identifier : : (comma_expression "ostreambuf_iterator<char,std" (binary_expression "ostreambuf_iterator<char" identifier < identifier) , identifier) :) : (expression_statement "char_traits<char>>>\n                                   ::id);" (binary_expression "char_traits<char>>>\n                                   ::id" identifier < (binary_expression "char>>>\n                                   ::id" identifier >> (ERROR ">\n                                   ::" > : :) identifier)) (ERROR ")" )) ;)) (if_statement "if ((uVar2 < *(ulong *)(*(long *)param_1 + 0x10)) &&\n     (lVar1 = *(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8), lVar1 != 0)) {\n    pmVar3 = (money_put *)\n             __dynamic_cast(lVar1,&locale::facet::typeinfo,\n                            &money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::\n                             typeinfo,0);\n    if (pmVar3 != (money_put *)0x0) {\n      return pmVar3;\n    }\n                    /* WARNING: Subroutine does not return */\n    __cxa_bad_cast();\n  }" if (parenthesized_expression "((uVar2 < *(ulong *)(*(long *)param_1 + 0x10)) &&\n     (lVar1 = *(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8), lVar1 != 0))" ( (binary_expression "(uVar2 < *(ulong *)(*(long *)param_1 + 0x10)) &&\n     (lVar1 = *(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8), lVar1 != 0)" (parenthesized_expression "(uVar2 < *(ulong *)(*(long *)param_1 + 0x10))" ( (binary_expression "uVar2 < *(ulong *)(*(long *)param_1 + 0x10)" identifier < (pointer_expression "*(ulong *)(*(long *)param_1 + 0x10)" * (cast_expression "(ulong *)(*(long *)param_1 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)param_1 + 0x10)" ( (binary_expression "*(long *)param_1 + 0x10" (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) && (parenthesized_expression "(lVar1 = *(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8), lVar1 != 0)" ( (comma_expression "lVar1 = *(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8), lVar1 != 0" (assignment_expression "lVar1 = *(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8)" identifier = (pointer_expression "*(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8)" * (cast_expression "(long *)(*(long *)(*(long *)param_1 + 8) + uVar2 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)param_1 + 8) + uVar2 * 8)" ( (binary_expression "*(long *)(*(long *)param_1 + 8) + uVar2 * 8" (pointer_expression "*(long *)(*(long *)param_1 + 8)" * (cast_expression "(long *)(*(long *)param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)param_1 + 8)" ( (binary_expression "*(long *)param_1 + 8" (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) + (binary_expression "uVar2 * 8" identifier * number_literal)) ))))) , (binary_expression "lVar1 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    pmVar3 = (money_put *)\n             __dynamic_cast(lVar1,&locale::facet::typeinfo,\n                            &money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::\n                             typeinfo,0);\n    if (pmVar3 != (money_put *)0x0) {\n      return pmVar3;\n    }\n                    /* WARNING: Subroutine does not return */\n    __cxa_bad_cast();\n  }" { (expression_statement "pmVar3 = (money_put *)\n             __dynamic_cast(lVar1,&locale::facet::typeinfo,\n                            &money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::\n                             typeinfo,0);" (assignment_expression "pmVar3 = (money_put *)\n             __dynamic_cast(lVar1,&locale::facet::typeinfo,\n                            &money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::\n                             typeinfo,0)" identifier = (cast_expression "(money_put *)\n             __dynamic_cast(lVar1,&locale::facet::typeinfo,\n                            &money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::\n                             typeinfo,0)" ( (type_descriptor "money_put *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__dynamic_cast(lVar1,&locale::facet::typeinfo,\n                            &money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::\n                             typeinfo,0)" identifier (argument_list "(lVar1,&locale::facet::typeinfo,\n                            &money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::\n                             typeinfo,0)" ( identifier , (ERROR "&locale::facet::" (pointer_expression "&locale" & identifier) : : identifier : :) identifier , (binary_expression "&money_put<char" (pointer_expression "&money_put" & identifier) < identifier) , (ERROR "std::" identifier : :) (binary_expression "ostreambuf_iterator<char" identifier < identifier) , (ERROR "std::" identifier : :) (binary_expression "char_traits<char>>>::\n                             typeinfo" identifier < (binary_expression "char>>>::\n                             typeinfo" identifier >> (ERROR ">::" > : :) identifier)) , number_literal ))))) ;) (if_statement "if (pmVar3 != (money_put *)0x0) {\n      return pmVar3;\n    }" if (parenthesized_expression "(pmVar3 != (money_put *)0x0)" ( (binary_expression "pmVar3 != (money_put *)0x0" identifier != (cast_expression "(money_put *)0x0" ( (type_descriptor "money_put *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return pmVar3;\n    }" { (return_statement "return pmVar3;" return identifier ;) })) comment (expression_statement "__cxa_bad_cast();" (call_expression "__cxa_bad_cast()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "__throw_bad_cast();" (call_expression "__throw_bad_cast()" identifier (argument_list "()" ( ))) ;) }))
(translation_unit "void FUN_0034fb90(long *param_1)\n\n{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_002dd3a0(&DAT_0044bd98);\n  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    \n    FUN_002da650();\n  }\n                    \n  FUN_00319450();\n}\n\n" (function_definition "void FUN_0034fb90(long *param_1)\n\n{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_002dd3a0(&DAT_0044bd98);\n  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    \n    FUN_002da650();\n  }\n                    \n  FUN_00319450();\n}" primitive_type (function_declarator "FUN_0034fb90(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_002dd3a0(&DAT_0044bd98);\n  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    \n    FUN_002da650();\n  }\n                    \n  FUN_00319450();\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (expression_statement "uVar1 = FUN_002dd3a0(&DAT_0044bd98);" (assignment_expression "uVar1 = FUN_002dd3a0(&DAT_0044bd98)" identifier = (call_expression "FUN_002dd3a0(&DAT_0044bd98)" identifier (argument_list "(&DAT_0044bd98)" ( (pointer_expression "&DAT_0044bd98" & identifier) )))) ;) (if_statement "if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    \n    FUN_002da650();\n  }" if (parenthesized_expression "((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0))" ( (binary_expression "(uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)" (parenthesized_expression "(uVar1 < *(ulong *)(*param_1 + 0x10))" ( (binary_expression "uVar1 < *(ulong *)(*param_1 + 0x10)" identifier < (pointer_expression "*(ulong *)(*param_1 + 0x10)" * (cast_expression "(ulong *)(*param_1 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) && (parenthesized_expression "(lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)" ( (comma_expression "lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0" (assignment_expression "lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8)" identifier = (pointer_expression "*(long *)(*(long *)(*param_1 + 8) + uVar1 * 8)" * (cast_expression "(long *)(*(long *)(*param_1 + 8) + uVar1 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*param_1 + 8) + uVar1 * 8)" ( (binary_expression "*(long *)(*param_1 + 8) + uVar1 * 8" (pointer_expression "*(long *)(*param_1 + 8)" * (cast_expression "(long *)(*param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 8)" ( (binary_expression "*param_1 + 8" (pointer_expression "*param_1" * identifier) + number_literal) )))) + (binary_expression "uVar1 * 8" identifier * number_literal)) ))))) , (binary_expression "lVar2 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    \n    FUN_002da650();\n  }" { (expression_statement "lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);" (assignment_expression "lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0)" identifier = (call_expression "FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0)" identifier (argument_list "(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0)" ( identifier , (pointer_expression "&PTR_PTR_FUN_00438640" & identifier) , (pointer_expression "&PTR_PTR_FUN_0043cd78" & identifier) , number_literal )))) ;) (if_statement "if (lVar2 != 0) {\n      return;\n    }" if (parenthesized_expression "(lVar2 != 0)" ( (binary_expression "lVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "FUN_002da650();" (call_expression "FUN_002da650()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_00319450();" (call_expression "FUN_00319450()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) + (binary_expression IDENT * LIT)) ))))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , (pointer_expression & IDENT) , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "void FUN_0034fb90(long *param_1)\n\n{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_002dd3a0(&DAT_0044bd98);\n  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    \n    FUN_002da650();\n  }\n                    \n  FUN_00319450();\n}" (primitive_type "void") (function_declarator "FUN_0034fb90(long *param_1)" (identifier "FUN_0034fb90") (parameter_list "(long *param_1)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  ulong uVar1;\n  long lVar2;\n  \n  uVar1 = FUN_002dd3a0(&DAT_0044bd98);\n  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    \n    FUN_002da650();\n  }\n                    \n  FUN_00319450();\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (expression_statement "uVar1 = FUN_002dd3a0(&DAT_0044bd98);" (assignment_expression "uVar1 = FUN_002dd3a0(&DAT_0044bd98)" (identifier "uVar1") (= "=") (call_expression "FUN_002dd3a0(&DAT_0044bd98)" (identifier "FUN_002dd3a0") (argument_list "(&DAT_0044bd98)" (( "(") (pointer_expression "&DAT_0044bd98" (& "&") (identifier "DAT_0044bd98")) () ")")))) (; ";")) (if_statement "if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    \n    FUN_002da650();\n  }" (if "if") (parenthesized_expression "((uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0))" (( "(") (binary_expression "(uVar1 < *(ulong *)(*param_1 + 0x10)) &&\n     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)" (parenthesized_expression "(uVar1 < *(ulong *)(*param_1 + 0x10))" (( "(") (binary_expression "uVar1 < *(ulong *)(*param_1 + 0x10)" (identifier "uVar1") (< "<") (pointer_expression "*(ulong *)(*param_1 + 0x10)" (* "*") (cast_expression "(ulong *)(*param_1 + 0x10)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (&& "&&") (parenthesized_expression "(lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)" (( "(") (comma_expression "lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0" (assignment_expression "lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(*(long *)(*param_1 + 8) + uVar1 * 8)" (* "*") (cast_expression "(long *)(*(long *)(*param_1 + 8) + uVar1 * 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(*param_1 + 8) + uVar1 * 8)" (( "(") (binary_expression "*(long *)(*param_1 + 8) + uVar1 * 8" (pointer_expression "*(long *)(*param_1 + 8)" (* "*") (cast_expression "(long *)(*param_1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 8)" (( "(") (binary_expression "*param_1 + 8" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "8")) () ")")))) (+ "+") (binary_expression "uVar1 * 8" (identifier "uVar1") (* "*") (number_literal "8"))) () ")"))))) (, ",") (binary_expression "lVar2 != 0" (identifier "lVar2") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);\n    if (lVar2 != 0) {\n      return;\n    }\n                    \n    FUN_002da650();\n  }" ({ "{") (expression_statement "lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);" (assignment_expression "lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0)" (identifier "lVar2") (= "=") (call_expression "FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0)" (identifier "FUN_0031b7b0") (argument_list "(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0)" (( "(") (identifier "lVar2") (, ",") (pointer_expression "&PTR_PTR_FUN_00438640" (& "&") (identifier "PTR_PTR_FUN_00438640")) (, ",") (pointer_expression "&PTR_PTR_FUN_0043cd78" (& "&") (identifier "PTR_PTR_FUN_0043cd78")) (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (lVar2 != 0) {\n      return;\n    }" (if "if") (parenthesized_expression "(lVar2 != 0)" (( "(") (binary_expression "lVar2 != 0" (identifier "lVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_002da650();" (call_expression "FUN_002da650()" (identifier "FUN_002da650") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00319450();" (call_expression "FUN_00319450()" (identifier "FUN_00319450") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > > const&
   std::use_facet<std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >
   >(std::locale const&) */

type_2 *
std::use_facet<std::type_2<var_2,std::var_9<var_2,std::var_1<var_2>>>>
          (var_3 *var_4)

{
  long var_7;
  type_1 var_6;
  type_2 *var_11;
  
  var_6 = var_3::id::_M_id((var_5 *)&type_2<var_2,std::var_9<var_2,std::var_1<var_2>>>
                                   ::var_5);
  if ((var_6 < *(type_1 *)(*(long *)var_4 + 0x10)) &&
     (var_7 = *(long *)(*(long *)(*(long *)var_4 + 8) + var_6 * 8), var_7 != 0)) {
    var_11 = (type_2 *)
             var_8(var_7,&var_3::facet::var_10,
                            &type_2<var_2,std::var_9<var_2,std::var_1<var_2>>>::
                             var_10,0);
    if (var_11 != (type_2 *)0x0) {
      return var_11;
    }
                    /* WARNING: Subroutine does not return */
    var_12();
  }
                    /* WARNING: Subroutine does not return */
  var_13();
}


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

void MASKED(long *param_1)

{
  ulong uVar1;
  long lVar2;
  
  uVar1 = FUN_002dd3a0(&DAT_0044bd98);
  if ((uVar1 < *(ulong *)(*param_1 + 0x10)) &&
     (lVar2 = *(long *)(*(long *)(*param_1 + 8) + uVar1 * 8), lVar2 != 0)) {
    lVar2 = FUN_0031b7b0(lVar2,&PTR_PTR_FUN_00438640,&PTR_PTR_FUN_0043cd78,0);
    if (lVar2 != 0) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    FUN_002da650();
  }
                    /* WARNING: Subroutine does not return */
  FUN_00319450();
}

