// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: c_compiler -c %s -I "common" -o %t3.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o %t3.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"
#ifdef __cplusplus

struct  S21925C3_nt  {
  long s21925c3f0[4];
};
//SIG(-1 S21925C3_nt) C1{ Fl[4]}



//skip512 S21925C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C2_nt  {
  ::S21925C3_nt s21925c2f0;
  void  mf21925c2(); // _ZN11S21925C2_nt9mf21925c2Ev
};
//SIG(-1 S21925C2_nt) C1{ m FC2{ Fl[4]}}


void  S21925C2_nt ::mf21925c2(){}

//skip512 S21925C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C5_nt  {
  int s21925c5f0[4];
};
//SIG(-1 S21925C5_nt) C1{ Fi[4]}



//skip512 S21925C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C4_nt  {
  void *s21925c4f0;
  ::S21925C5_nt s21925c4f1;
  void  mf21925c4(); // _ZN11S21925C4_nt9mf21925c4Ev
};
//SIG(-1 S21925C4_nt) C1{ m Fp FC2{ Fi[4]}}


void  S21925C4_nt ::mf21925c4(){}

//skip512 S21925C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C6  {
  void *s21925c6f0[2];
  int s21925c6f1;
  void  mf21925c6(); // _ZN8S21925C69mf21925c6Ev
  virtual  ~S21925C6(); // _ZN8S21925C6D1Ev
  S21925C6(); // tgen
};
//SIG(-1 S21925C6) C1{ vd m Fp[2] Fi}


void  S21925C6 ::mf21925c6(){}
 S21925C6 ::~S21925C6(){ note_dtor("S21925C6", this);}
S21925C6 ::S21925C6(){ note_ctor("S21925C6", this);} // tgen

static void Test_S21925C6()
{
  extern Class_Descriptor cd_S21925C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21925C6, buf);
    S21925C6 *dp, &lv = *(dp=new (buf) S21925C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21925C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C6)");
    check_field_offset(lv, s21925c6f0, ABISELECT(8,4), "S21925C6.s21925c6f0");
    check_field_offset(lv, s21925c6f1, ABISELECT(24,12), "S21925C6.s21925c6f1");
    test_class_info(&lv, &cd_S21925C6);
    dp->~S21925C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C6(Test_S21925C6, "S21925C6", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21925C6C1Ev();
extern void _ZN8S21925C6D1Ev();
Name_Map name_map_S21925C6[] = {
  NSPAIR(_ZN8S21925C6C1Ev),
  NSPAIR(_ZN8S21925C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21925C6[];
extern void _ZN8S21925C6D1Ev();
extern void _ZN8S21925C6D0Ev();
static  VTBL_ENTRY vtc_S21925C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21925C6[0]),
  (VTBL_ENTRY)&_ZN8S21925C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21925C6D0Ev,
};
extern VTBL_ENTRY _ZTI8S21925C6[];
extern  VTBL_ENTRY _ZTV8S21925C6[];
Class_Descriptor cd_S21925C6 = {  "S21925C6", // class name
  0,0,//no base classes
  &(vtc_S21925C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21925C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21925C6),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C8  {
  virtual void  v33(); // _ZN8S21925C83v33Ev
  virtual void  v34(); // _ZN8S21925C83v34Ev
  virtual void  v35(); // _ZN8S21925C83v35Ev
  virtual void  v36(); // _ZN8S21925C83v36Ev
  virtual void  v37(); // _ZN8S21925C83v37Ev
  virtual void  v38(); // _ZN8S21925C83v38Ev
  virtual void  v39(); // _ZN8S21925C83v39Ev
  ~S21925C8(); // tgen
  S21925C8(); // tgen
};
//SIG(-1 S21925C8) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S21925C8 ::v33(){vfunc_called(this, "_ZN8S21925C83v33Ev");}
void  S21925C8 ::v34(){vfunc_called(this, "_ZN8S21925C83v34Ev");}
void  S21925C8 ::v35(){vfunc_called(this, "_ZN8S21925C83v35Ev");}
void  S21925C8 ::v36(){vfunc_called(this, "_ZN8S21925C83v36Ev");}
void  S21925C8 ::v37(){vfunc_called(this, "_ZN8S21925C83v37Ev");}
void  S21925C8 ::v38(){vfunc_called(this, "_ZN8S21925C83v38Ev");}
void  S21925C8 ::v39(){vfunc_called(this, "_ZN8S21925C83v39Ev");}
S21925C8 ::~S21925C8(){ note_dtor("S21925C8", this);} // tgen
S21925C8 ::S21925C8(){ note_ctor("S21925C8", this);} // tgen

static void Test_S21925C8()
{
  extern Class_Descriptor cd_S21925C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21925C8, buf);
    S21925C8 *dp, &lv = *(dp=new (buf) S21925C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21925C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C8)");
    test_class_info(&lv, &cd_S21925C8);
    dp->~S21925C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C8(Test_S21925C8, "S21925C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S21925C8C1Ev();
extern void _ZN8S21925C8D1Ev();
Name_Map name_map_S21925C8[] = {
  NSPAIR(_ZN8S21925C8C1Ev),
  NSPAIR(_ZN8S21925C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21925C8[];
extern void _ZN8S21925C83v33Ev();
extern void _ZN8S21925C83v34Ev();
extern void _ZN8S21925C83v35Ev();
extern void _ZN8S21925C83v36Ev();
extern void _ZN8S21925C83v37Ev();
extern void _ZN8S21925C83v38Ev();
extern void _ZN8S21925C83v39Ev();
static  VTBL_ENTRY vtc_S21925C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21925C8[0]),
  (VTBL_ENTRY)&_ZN8S21925C83v33Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v34Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v35Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v36Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v37Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v38Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v39Ev,
};
extern VTBL_ENTRY _ZTI8S21925C8[];
extern  VTBL_ENTRY _ZTV8S21925C8[];
Class_Descriptor cd_S21925C8 = {  "S21925C8", // class name
  0,0,//no base classes
  &(vtc_S21925C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S21925C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21925C8),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C9  {
  void *s21925c9f0[3];
  void  mf21925c9(); // _ZN8S21925C99mf21925c9Ev
};
//SIG(-1 S21925C9) C1{ m Fp[3]}


void  S21925C9 ::mf21925c9(){}

static void Test_S21925C9()
{
  {
    init_simple_test("S21925C9");
    S21925C9 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21925C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C9)");
    check_field_offset(lv, s21925c9f0, 0, "S21925C9.s21925c9f0");
  }
}
static Arrange_To_Call_Me vS21925C9(Test_S21925C9, "S21925C9", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C12  {
  void *s21925c12f0;
  int s21925c12f1;
  virtual  ~S21925C12(); // _ZN9S21925C12D1Ev
  virtual void  v51(); // _ZN9S21925C123v51Ev
  virtual void  v52(); // _ZN9S21925C123v52Ev
  virtual void  v53(); // _ZN9S21925C123v53Ev
  virtual void  v54(); // _ZN9S21925C123v54Ev
  virtual void  v55(); // _ZN9S21925C123v55Ev
  virtual void  v56(); // _ZN9S21925C123v56Ev
  virtual void  v57(); // _ZN9S21925C123v57Ev
  virtual void  v58(); // _ZN9S21925C123v58Ev
  virtual void  v59(); // _ZN9S21925C123v59Ev
  virtual void  v60(); // _ZN9S21925C123v60Ev
  virtual void  v61(); // _ZN9S21925C123v61Ev
  virtual void  v62(); // _ZN9S21925C123v62Ev
  virtual void  v63(); // _ZN9S21925C123v63Ev
  virtual void  v64(); // _ZN9S21925C123v64Ev
  virtual void  v65(); // _ZN9S21925C123v65Ev
  virtual void  v66(); // _ZN9S21925C123v66Ev
  virtual void  v67(); // _ZN9S21925C123v67Ev
  virtual void  v68(); // _ZN9S21925C123v68Ev
  virtual void  v69(); // _ZN9S21925C123v69Ev
  virtual void  v70(); // _ZN9S21925C123v70Ev
  virtual void  v71(); // _ZN9S21925C123v71Ev
  virtual void  v72(); // _ZN9S21925C123v72Ev
  virtual void  v73(); // _ZN9S21925C123v73Ev
  virtual void  v74(); // _ZN9S21925C123v74Ev
  virtual void  v75(); // _ZN9S21925C123v75Ev
  virtual void  v76(); // _ZN9S21925C123v76Ev
  virtual void  v77(); // _ZN9S21925C123v77Ev
  S21925C12(); // tgen
};
//SIG(-1 S21925C12) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fp Fi}


 S21925C12 ::~S21925C12(){ note_dtor("S21925C12", this);}
void  S21925C12 ::v51(){vfunc_called(this, "_ZN9S21925C123v51Ev");}
void  S21925C12 ::v52(){vfunc_called(this, "_ZN9S21925C123v52Ev");}
void  S21925C12 ::v53(){vfunc_called(this, "_ZN9S21925C123v53Ev");}
void  S21925C12 ::v54(){vfunc_called(this, "_ZN9S21925C123v54Ev");}
void  S21925C12 ::v55(){vfunc_called(this, "_ZN9S21925C123v55Ev");}
void  S21925C12 ::v56(){vfunc_called(this, "_ZN9S21925C123v56Ev");}
void  S21925C12 ::v57(){vfunc_called(this, "_ZN9S21925C123v57Ev");}
void  S21925C12 ::v58(){vfunc_called(this, "_ZN9S21925C123v58Ev");}
void  S21925C12 ::v59(){vfunc_called(this, "_ZN9S21925C123v59Ev");}
void  S21925C12 ::v60(){vfunc_called(this, "_ZN9S21925C123v60Ev");}
void  S21925C12 ::v61(){vfunc_called(this, "_ZN9S21925C123v61Ev");}
void  S21925C12 ::v62(){vfunc_called(this, "_ZN9S21925C123v62Ev");}
void  S21925C12 ::v63(){vfunc_called(this, "_ZN9S21925C123v63Ev");}
void  S21925C12 ::v64(){vfunc_called(this, "_ZN9S21925C123v64Ev");}
void  S21925C12 ::v65(){vfunc_called(this, "_ZN9S21925C123v65Ev");}
void  S21925C12 ::v66(){vfunc_called(this, "_ZN9S21925C123v66Ev");}
void  S21925C12 ::v67(){vfunc_called(this, "_ZN9S21925C123v67Ev");}
void  S21925C12 ::v68(){vfunc_called(this, "_ZN9S21925C123v68Ev");}
void  S21925C12 ::v69(){vfunc_called(this, "_ZN9S21925C123v69Ev");}
void  S21925C12 ::v70(){vfunc_called(this, "_ZN9S21925C123v70Ev");}
void  S21925C12 ::v71(){vfunc_called(this, "_ZN9S21925C123v71Ev");}
void  S21925C12 ::v72(){vfunc_called(this, "_ZN9S21925C123v72Ev");}
void  S21925C12 ::v73(){vfunc_called(this, "_ZN9S21925C123v73Ev");}
void  S21925C12 ::v74(){vfunc_called(this, "_ZN9S21925C123v74Ev");}
void  S21925C12 ::v75(){vfunc_called(this, "_ZN9S21925C123v75Ev");}
void  S21925C12 ::v76(){vfunc_called(this, "_ZN9S21925C123v76Ev");}
void  S21925C12 ::v77(){vfunc_called(this, "_ZN9S21925C123v77Ev");}
S21925C12 ::S21925C12(){ note_ctor("S21925C12", this);} // tgen

static void Test_S21925C12()
{
  extern Class_Descriptor cd_S21925C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21925C12, buf);
    S21925C12 *dp, &lv = *(dp=new (buf) S21925C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21925C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C12)");
    check_field_offset(lv, s21925c12f0, ABISELECT(8,4), "S21925C12.s21925c12f0");
    check_field_offset(lv, s21925c12f1, ABISELECT(16,8), "S21925C12.s21925c12f1");
    test_class_info(&lv, &cd_S21925C12);
    dp->~S21925C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C12(Test_S21925C12, "S21925C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S21925C12C1Ev();
extern void _ZN9S21925C12D1Ev();
Name_Map name_map_S21925C12[] = {
  NSPAIR(_ZN9S21925C12C1Ev),
  NSPAIR(_ZN9S21925C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21925C12[];
extern void _ZN9S21925C12D1Ev();
extern void _ZN9S21925C12D0Ev();
extern void _ZN9S21925C123v51Ev();
extern void _ZN9S21925C123v52Ev();
extern void _ZN9S21925C123v53Ev();
extern void _ZN9S21925C123v54Ev();
extern void _ZN9S21925C123v55Ev();
extern void _ZN9S21925C123v56Ev();
extern void _ZN9S21925C123v57Ev();
extern void _ZN9S21925C123v58Ev();
extern void _ZN9S21925C123v59Ev();
extern void _ZN9S21925C123v60Ev();
extern void _ZN9S21925C123v61Ev();
extern void _ZN9S21925C123v62Ev();
extern void _ZN9S21925C123v63Ev();
extern void _ZN9S21925C123v64Ev();
extern void _ZN9S21925C123v65Ev();
extern void _ZN9S21925C123v66Ev();
extern void _ZN9S21925C123v67Ev();
extern void _ZN9S21925C123v68Ev();
extern void _ZN9S21925C123v69Ev();
extern void _ZN9S21925C123v70Ev();
extern void _ZN9S21925C123v71Ev();
extern void _ZN9S21925C123v72Ev();
extern void _ZN9S21925C123v73Ev();
extern void _ZN9S21925C123v74Ev();
extern void _ZN9S21925C123v75Ev();
extern void _ZN9S21925C123v76Ev();
extern void _ZN9S21925C123v77Ev();
static  VTBL_ENTRY vtc_S21925C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C12[0]),
  (VTBL_ENTRY)&_ZN9S21925C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C12D0Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v51Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v52Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v53Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v54Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v55Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v56Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v57Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v58Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v59Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v60Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v61Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v62Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v63Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v64Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v65Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v66Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v67Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v68Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v69Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v70Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v71Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v72Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v73Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v74Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v75Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v76Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v77Ev,
};
extern VTBL_ENTRY _ZTI9S21925C12[];
extern  VTBL_ENTRY _ZTV9S21925C12[];
Class_Descriptor cd_S21925C12 = {  "S21925C12", // class name
  0,0,//no base classes
  &(vtc_S21925C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S21925C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21925C12),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C11  : S21925C12 {
  virtual  ~S21925C11(); // _ZN9S21925C11D1Ev
  virtual void  v47(); // _ZN9S21925C113v47Ev
  virtual void  v48(); // _ZN9S21925C113v48Ev
  virtual void  v49(); // _ZN9S21925C113v49Ev
  virtual void  v50(); // _ZN9S21925C113v50Ev
  S21925C11(); // tgen
};
//SIG(-1 S21925C11) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 Fp Fi} vd v1 v2 v3 v4}


 S21925C11 ::~S21925C11(){ note_dtor("S21925C11", this);}
void  S21925C11 ::v47(){vfunc_called(this, "_ZN9S21925C113v47Ev");}
void  S21925C11 ::v48(){vfunc_called(this, "_ZN9S21925C113v48Ev");}
void  S21925C11 ::v49(){vfunc_called(this, "_ZN9S21925C113v49Ev");}
void  S21925C11 ::v50(){vfunc_called(this, "_ZN9S21925C113v50Ev");}
S21925C11 ::S21925C11(){ note_ctor("S21925C11", this);} // tgen

static void Test_S21925C11()
{
  extern Class_Descriptor cd_S21925C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21925C11, buf);
    S21925C11 *dp, &lv = *(dp=new (buf) S21925C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21925C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C11)");
    check_base_class_offset(lv, (S21925C12*), 0, "S21925C11");
    test_class_info(&lv, &cd_S21925C11);
    dp->~S21925C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C11(Test_S21925C11, "S21925C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S21925C11C1Ev();
extern void _ZN9S21925C11D1Ev();
Name_Map name_map_S21925C11[] = {
  NSPAIR(_ZN9S21925C11C1Ev),
  NSPAIR(_ZN9S21925C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21925C12;
extern VTBL_ENTRY _ZTI9S21925C12[];
extern  VTBL_ENTRY _ZTV9S21925C12[];
static Base_Class bases_S21925C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21925C11[];
extern void _ZN9S21925C11D1Ev();
extern void _ZN9S21925C11D0Ev();
extern void _ZN9S21925C123v51Ev();
extern void _ZN9S21925C123v52Ev();
extern void _ZN9S21925C123v53Ev();
extern void _ZN9S21925C123v54Ev();
extern void _ZN9S21925C123v55Ev();
extern void _ZN9S21925C123v56Ev();
extern void _ZN9S21925C123v57Ev();
extern void _ZN9S21925C123v58Ev();
extern void _ZN9S21925C123v59Ev();
extern void _ZN9S21925C123v60Ev();
extern void _ZN9S21925C123v61Ev();
extern void _ZN9S21925C123v62Ev();
extern void _ZN9S21925C123v63Ev();
extern void _ZN9S21925C123v64Ev();
extern void _ZN9S21925C123v65Ev();
extern void _ZN9S21925C123v66Ev();
extern void _ZN9S21925C123v67Ev();
extern void _ZN9S21925C123v68Ev();
extern void _ZN9S21925C123v69Ev();
extern void _ZN9S21925C123v70Ev();
extern void _ZN9S21925C123v71Ev();
extern void _ZN9S21925C123v72Ev();
extern void _ZN9S21925C123v73Ev();
extern void _ZN9S21925C123v74Ev();
extern void _ZN9S21925C123v75Ev();
extern void _ZN9S21925C123v76Ev();
extern void _ZN9S21925C123v77Ev();
extern void _ZN9S21925C113v47Ev();
extern void _ZN9S21925C113v48Ev();
extern void _ZN9S21925C113v49Ev();
extern void _ZN9S21925C113v50Ev();
static  VTBL_ENTRY vtc_S21925C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C11[0]),
  (VTBL_ENTRY)&_ZN9S21925C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C11D0Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v51Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v52Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v53Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v54Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v55Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v56Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v57Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v58Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v59Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v60Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v61Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v62Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v63Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v64Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v65Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v66Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v67Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v68Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v69Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v70Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v71Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v72Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v73Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v74Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v75Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v76Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v77Ev,
  (VTBL_ENTRY)&_ZN9S21925C113v47Ev,
  (VTBL_ENTRY)&_ZN9S21925C113v48Ev,
  (VTBL_ENTRY)&_ZN9S21925C113v49Ev,
  (VTBL_ENTRY)&_ZN9S21925C113v50Ev,
};
extern VTBL_ENTRY _ZTI9S21925C11[];
extern  VTBL_ENTRY _ZTV9S21925C11[];
Class_Descriptor cd_S21925C11 = {  "S21925C11", // class name
  bases_S21925C11, 1,
  &(vtc_S21925C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S21925C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21925C11),35, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C13  : S21925C12 {
  virtual  ~S21925C13(); // _ZN9S21925C13D1Ev
  virtual void  v78(); // _ZN9S21925C133v78Ev
  virtual void  v79(); // _ZN9S21925C133v79Ev
  virtual void  v80(); // _ZN9S21925C133v80Ev
  virtual void  v81(); // _ZN9S21925C133v81Ev
  virtual void  v82(); // _ZN9S21925C133v82Ev
  virtual void  v83(); // _ZN9S21925C133v83Ev
  virtual void  v84(); // _ZN9S21925C133v84Ev
  virtual void  v85(); // _ZN9S21925C133v85Ev
  virtual void  v86(); // _ZN9S21925C133v86Ev
  virtual void  v87(); // _ZN9S21925C133v87Ev
  virtual void  v88(); // _ZN9S21925C133v88Ev
  virtual void  v89(); // _ZN9S21925C133v89Ev
  virtual void  v90(); // _ZN9S21925C133v90Ev
  virtual void  v91(); // _ZN9S21925C133v91Ev
  virtual void  v92(); // _ZN9S21925C133v92Ev
  virtual void  v93(); // _ZN9S21925C133v93Ev
  virtual void  v94(); // _ZN9S21925C133v94Ev
  S21925C13(); // tgen
};
//SIG(-1 S21925C13) C1{ BC2{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17}


 S21925C13 ::~S21925C13(){ note_dtor("S21925C13", this);}
void  S21925C13 ::v78(){vfunc_called(this, "_ZN9S21925C133v78Ev");}
void  S21925C13 ::v79(){vfunc_called(this, "_ZN9S21925C133v79Ev");}
void  S21925C13 ::v80(){vfunc_called(this, "_ZN9S21925C133v80Ev");}
void  S21925C13 ::v81(){vfunc_called(this, "_ZN9S21925C133v81Ev");}
void  S21925C13 ::v82(){vfunc_called(this, "_ZN9S21925C133v82Ev");}
void  S21925C13 ::v83(){vfunc_called(this, "_ZN9S21925C133v83Ev");}
void  S21925C13 ::v84(){vfunc_called(this, "_ZN9S21925C133v84Ev");}
void  S21925C13 ::v85(){vfunc_called(this, "_ZN9S21925C133v85Ev");}
void  S21925C13 ::v86(){vfunc_called(this, "_ZN9S21925C133v86Ev");}
void  S21925C13 ::v87(){vfunc_called(this, "_ZN9S21925C133v87Ev");}
void  S21925C13 ::v88(){vfunc_called(this, "_ZN9S21925C133v88Ev");}
void  S21925C13 ::v89(){vfunc_called(this, "_ZN9S21925C133v89Ev");}
void  S21925C13 ::v90(){vfunc_called(this, "_ZN9S21925C133v90Ev");}
void  S21925C13 ::v91(){vfunc_called(this, "_ZN9S21925C133v91Ev");}
void  S21925C13 ::v92(){vfunc_called(this, "_ZN9S21925C133v92Ev");}
void  S21925C13 ::v93(){vfunc_called(this, "_ZN9S21925C133v93Ev");}
void  S21925C13 ::v94(){vfunc_called(this, "_ZN9S21925C133v94Ev");}
S21925C13 ::S21925C13(){ note_ctor("S21925C13", this);} // tgen

static void Test_S21925C13()
{
  extern Class_Descriptor cd_S21925C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21925C13, buf);
    S21925C13 *dp, &lv = *(dp=new (buf) S21925C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21925C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C13)");
    check_base_class_offset(lv, (S21925C12*), 0, "S21925C13");
    test_class_info(&lv, &cd_S21925C13);
    dp->~S21925C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C13(Test_S21925C13, "S21925C13", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S21925C13C1Ev();
extern void _ZN9S21925C13D1Ev();
Name_Map name_map_S21925C13[] = {
  NSPAIR(_ZN9S21925C13C1Ev),
  NSPAIR(_ZN9S21925C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21925C12;
extern VTBL_ENTRY _ZTI9S21925C12[];
extern  VTBL_ENTRY _ZTV9S21925C12[];
static Base_Class bases_S21925C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21925C13[];
extern void _ZN9S21925C13D1Ev();
extern void _ZN9S21925C13D0Ev();
extern void _ZN9S21925C123v51Ev();
extern void _ZN9S21925C123v52Ev();
extern void _ZN9S21925C123v53Ev();
extern void _ZN9S21925C123v54Ev();
extern void _ZN9S21925C123v55Ev();
extern void _ZN9S21925C123v56Ev();
extern void _ZN9S21925C123v57Ev();
extern void _ZN9S21925C123v58Ev();
extern void _ZN9S21925C123v59Ev();
extern void _ZN9S21925C123v60Ev();
extern void _ZN9S21925C123v61Ev();
extern void _ZN9S21925C123v62Ev();
extern void _ZN9S21925C123v63Ev();
extern void _ZN9S21925C123v64Ev();
extern void _ZN9S21925C123v65Ev();
extern void _ZN9S21925C123v66Ev();
extern void _ZN9S21925C123v67Ev();
extern void _ZN9S21925C123v68Ev();
extern void _ZN9S21925C123v69Ev();
extern void _ZN9S21925C123v70Ev();
extern void _ZN9S21925C123v71Ev();
extern void _ZN9S21925C123v72Ev();
extern void _ZN9S21925C123v73Ev();
extern void _ZN9S21925C123v74Ev();
extern void _ZN9S21925C123v75Ev();
extern void _ZN9S21925C123v76Ev();
extern void _ZN9S21925C123v77Ev();
extern void _ZN9S21925C133v78Ev();
extern void _ZN9S21925C133v79Ev();
extern void _ZN9S21925C133v80Ev();
extern void _ZN9S21925C133v81Ev();
extern void _ZN9S21925C133v82Ev();
extern void _ZN9S21925C133v83Ev();
extern void _ZN9S21925C133v84Ev();
extern void _ZN9S21925C133v85Ev();
extern void _ZN9S21925C133v86Ev();
extern void _ZN9S21925C133v87Ev();
extern void _ZN9S21925C133v88Ev();
extern void _ZN9S21925C133v89Ev();
extern void _ZN9S21925C133v90Ev();
extern void _ZN9S21925C133v91Ev();
extern void _ZN9S21925C133v92Ev();
extern void _ZN9S21925C133v93Ev();
extern void _ZN9S21925C133v94Ev();
static  VTBL_ENTRY vtc_S21925C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C13[0]),
  (VTBL_ENTRY)&_ZN9S21925C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C13D0Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v51Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v52Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v53Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v54Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v55Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v56Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v57Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v58Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v59Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v60Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v61Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v62Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v63Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v64Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v65Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v66Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v67Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v68Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v69Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v70Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v71Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v72Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v73Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v74Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v75Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v76Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v77Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v78Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v79Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v80Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v81Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v82Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v83Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v84Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v85Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v86Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v87Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v88Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v89Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v90Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v91Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v92Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v93Ev,
  (VTBL_ENTRY)&_ZN9S21925C133v94Ev,
};
extern VTBL_ENTRY _ZTI9S21925C13[];
extern  VTBL_ENTRY _ZTV9S21925C13[];
Class_Descriptor cd_S21925C13 = {  "S21925C13", // class name
  bases_S21925C13, 1,
  &(vtc_S21925C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S21925C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21925C13),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C14  : S21925C12 {
  virtual  ~S21925C14(); // _ZN9S21925C14D1Ev
  virtual void  v95(); // _ZN9S21925C143v95Ev
  virtual void  v96(); // _ZN9S21925C143v96Ev
  virtual void  v97(); // _ZN9S21925C143v97Ev
  virtual void  v98(); // _ZN9S21925C143v98Ev
  virtual void  v99(); // _ZN9S21925C143v99Ev
  virtual void  v100(); // _ZN9S21925C144v100Ev
  virtual void  v101(); // _ZN9S21925C144v101Ev
  virtual void  v102(); // _ZN9S21925C144v102Ev
  virtual void  v103(); // _ZN9S21925C144v103Ev
  virtual void  v104(); // _ZN9S21925C144v104Ev
  virtual void  v105(); // _ZN9S21925C144v105Ev
  virtual void  v106(); // _ZN9S21925C144v106Ev
  virtual void  v107(); // _ZN9S21925C144v107Ev
  virtual void  v108(); // _ZN9S21925C144v108Ev
  virtual void  v109(); // _ZN9S21925C144v109Ev
  virtual void  v110(); // _ZN9S21925C144v110Ev
  virtual void  v111(); // _ZN9S21925C144v111Ev
  virtual void  v112(); // _ZN9S21925C144v112Ev
  S21925C14(); // tgen
};
//SIG(-1 S21925C14) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


 S21925C14 ::~S21925C14(){ note_dtor("S21925C14", this);}
void  S21925C14 ::v95(){vfunc_called(this, "_ZN9S21925C143v95Ev");}
void  S21925C14 ::v96(){vfunc_called(this, "_ZN9S21925C143v96Ev");}
void  S21925C14 ::v97(){vfunc_called(this, "_ZN9S21925C143v97Ev");}
void  S21925C14 ::v98(){vfunc_called(this, "_ZN9S21925C143v98Ev");}
void  S21925C14 ::v99(){vfunc_called(this, "_ZN9S21925C143v99Ev");}
void  S21925C14 ::v100(){vfunc_called(this, "_ZN9S21925C144v100Ev");}
void  S21925C14 ::v101(){vfunc_called(this, "_ZN9S21925C144v101Ev");}
void  S21925C14 ::v102(){vfunc_called(this, "_ZN9S21925C144v102Ev");}
void  S21925C14 ::v103(){vfunc_called(this, "_ZN9S21925C144v103Ev");}
void  S21925C14 ::v104(){vfunc_called(this, "_ZN9S21925C144v104Ev");}
void  S21925C14 ::v105(){vfunc_called(this, "_ZN9S21925C144v105Ev");}
void  S21925C14 ::v106(){vfunc_called(this, "_ZN9S21925C144v106Ev");}
void  S21925C14 ::v107(){vfunc_called(this, "_ZN9S21925C144v107Ev");}
void  S21925C14 ::v108(){vfunc_called(this, "_ZN9S21925C144v108Ev");}
void  S21925C14 ::v109(){vfunc_called(this, "_ZN9S21925C144v109Ev");}
void  S21925C14 ::v110(){vfunc_called(this, "_ZN9S21925C144v110Ev");}
void  S21925C14 ::v111(){vfunc_called(this, "_ZN9S21925C144v111Ev");}
void  S21925C14 ::v112(){vfunc_called(this, "_ZN9S21925C144v112Ev");}
S21925C14 ::S21925C14(){ note_ctor("S21925C14", this);} // tgen

static void Test_S21925C14()
{
  extern Class_Descriptor cd_S21925C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21925C14, buf);
    S21925C14 *dp, &lv = *(dp=new (buf) S21925C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21925C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C14)");
    check_base_class_offset(lv, (S21925C12*), 0, "S21925C14");
    test_class_info(&lv, &cd_S21925C14);
    dp->~S21925C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C14(Test_S21925C14, "S21925C14", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S21925C14C1Ev();
extern void _ZN9S21925C14D1Ev();
Name_Map name_map_S21925C14[] = {
  NSPAIR(_ZN9S21925C14C1Ev),
  NSPAIR(_ZN9S21925C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21925C12;
extern VTBL_ENTRY _ZTI9S21925C12[];
extern  VTBL_ENTRY _ZTV9S21925C12[];
static Base_Class bases_S21925C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21925C14[];
extern void _ZN9S21925C14D1Ev();
extern void _ZN9S21925C14D0Ev();
extern void _ZN9S21925C123v51Ev();
extern void _ZN9S21925C123v52Ev();
extern void _ZN9S21925C123v53Ev();
extern void _ZN9S21925C123v54Ev();
extern void _ZN9S21925C123v55Ev();
extern void _ZN9S21925C123v56Ev();
extern void _ZN9S21925C123v57Ev();
extern void _ZN9S21925C123v58Ev();
extern void _ZN9S21925C123v59Ev();
extern void _ZN9S21925C123v60Ev();
extern void _ZN9S21925C123v61Ev();
extern void _ZN9S21925C123v62Ev();
extern void _ZN9S21925C123v63Ev();
extern void _ZN9S21925C123v64Ev();
extern void _ZN9S21925C123v65Ev();
extern void _ZN9S21925C123v66Ev();
extern void _ZN9S21925C123v67Ev();
extern void _ZN9S21925C123v68Ev();
extern void _ZN9S21925C123v69Ev();
extern void _ZN9S21925C123v70Ev();
extern void _ZN9S21925C123v71Ev();
extern void _ZN9S21925C123v72Ev();
extern void _ZN9S21925C123v73Ev();
extern void _ZN9S21925C123v74Ev();
extern void _ZN9S21925C123v75Ev();
extern void _ZN9S21925C123v76Ev();
extern void _ZN9S21925C123v77Ev();
extern void _ZN9S21925C143v95Ev();
extern void _ZN9S21925C143v96Ev();
extern void _ZN9S21925C143v97Ev();
extern void _ZN9S21925C143v98Ev();
extern void _ZN9S21925C143v99Ev();
extern void _ZN9S21925C144v100Ev();
extern void _ZN9S21925C144v101Ev();
extern void _ZN9S21925C144v102Ev();
extern void _ZN9S21925C144v103Ev();
extern void _ZN9S21925C144v104Ev();
extern void _ZN9S21925C144v105Ev();
extern void _ZN9S21925C144v106Ev();
extern void _ZN9S21925C144v107Ev();
extern void _ZN9S21925C144v108Ev();
extern void _ZN9S21925C144v109Ev();
extern void _ZN9S21925C144v110Ev();
extern void _ZN9S21925C144v111Ev();
extern void _ZN9S21925C144v112Ev();
static  VTBL_ENTRY vtc_S21925C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C14[0]),
  (VTBL_ENTRY)&_ZN9S21925C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C14D0Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v51Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v52Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v53Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v54Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v55Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v56Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v57Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v58Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v59Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v60Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v61Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v62Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v63Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v64Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v65Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v66Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v67Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v68Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v69Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v70Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v71Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v72Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v73Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v74Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v75Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v76Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v77Ev,
  (VTBL_ENTRY)&_ZN9S21925C143v95Ev,
  (VTBL_ENTRY)&_ZN9S21925C143v96Ev,
  (VTBL_ENTRY)&_ZN9S21925C143v97Ev,
  (VTBL_ENTRY)&_ZN9S21925C143v98Ev,
  (VTBL_ENTRY)&_ZN9S21925C143v99Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v100Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v101Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v102Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v103Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v104Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v105Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v106Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v107Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v108Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v109Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v110Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v111Ev,
  (VTBL_ENTRY)&_ZN9S21925C144v112Ev,
};
extern VTBL_ENTRY _ZTI9S21925C14[];
extern  VTBL_ENTRY _ZTV9S21925C14[];
Class_Descriptor cd_S21925C14 = {  "S21925C14", // class name
  bases_S21925C14, 1,
  &(vtc_S21925C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S21925C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21925C14),49, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C15  : S21925C12 {
  virtual  ~S21925C15(); // _ZN9S21925C15D1Ev
  virtual void  v113(); // _ZN9S21925C154v113Ev
  virtual void  v114(); // _ZN9S21925C154v114Ev
  virtual void  v115(); // _ZN9S21925C154v115Ev
  virtual void  v116(); // _ZN9S21925C154v116Ev
  virtual void  v117(); // _ZN9S21925C154v117Ev
  virtual void  v118(); // _ZN9S21925C154v118Ev
  virtual void  v119(); // _ZN9S21925C154v119Ev
  virtual void  v120(); // _ZN9S21925C154v120Ev
  virtual void  v121(); // _ZN9S21925C154v121Ev
  virtual void  v122(); // _ZN9S21925C154v122Ev
  virtual void  v123(); // _ZN9S21925C154v123Ev
  virtual void  v124(); // _ZN9S21925C154v124Ev
  virtual void  v125(); // _ZN9S21925C154v125Ev
  virtual void  v126(); // _ZN9S21925C154v126Ev
  virtual void  v127(); // _ZN9S21925C154v127Ev
  virtual void  v128(); // _ZN9S21925C154v128Ev
  virtual void  v129(); // _ZN9S21925C154v129Ev
  virtual void  v130(); // _ZN9S21925C154v130Ev
  virtual void  v131(); // _ZN9S21925C154v131Ev
  virtual void  v132(); // _ZN9S21925C154v132Ev
  virtual void  v133(); // _ZN9S21925C154v133Ev
  S21925C15(); // tgen
};
//SIG(-1 S21925C15) C1{ BC2{ vd v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21}


 S21925C15 ::~S21925C15(){ note_dtor("S21925C15", this);}
void  S21925C15 ::v113(){vfunc_called(this, "_ZN9S21925C154v113Ev");}
void  S21925C15 ::v114(){vfunc_called(this, "_ZN9S21925C154v114Ev");}
void  S21925C15 ::v115(){vfunc_called(this, "_ZN9S21925C154v115Ev");}
void  S21925C15 ::v116(){vfunc_called(this, "_ZN9S21925C154v116Ev");}
void  S21925C15 ::v117(){vfunc_called(this, "_ZN9S21925C154v117Ev");}
void  S21925C15 ::v118(){vfunc_called(this, "_ZN9S21925C154v118Ev");}
void  S21925C15 ::v119(){vfunc_called(this, "_ZN9S21925C154v119Ev");}
void  S21925C15 ::v120(){vfunc_called(this, "_ZN9S21925C154v120Ev");}
void  S21925C15 ::v121(){vfunc_called(this, "_ZN9S21925C154v121Ev");}
void  S21925C15 ::v122(){vfunc_called(this, "_ZN9S21925C154v122Ev");}
void  S21925C15 ::v123(){vfunc_called(this, "_ZN9S21925C154v123Ev");}
void  S21925C15 ::v124(){vfunc_called(this, "_ZN9S21925C154v124Ev");}
void  S21925C15 ::v125(){vfunc_called(this, "_ZN9S21925C154v125Ev");}
void  S21925C15 ::v126(){vfunc_called(this, "_ZN9S21925C154v126Ev");}
void  S21925C15 ::v127(){vfunc_called(this, "_ZN9S21925C154v127Ev");}
void  S21925C15 ::v128(){vfunc_called(this, "_ZN9S21925C154v128Ev");}
void  S21925C15 ::v129(){vfunc_called(this, "_ZN9S21925C154v129Ev");}
void  S21925C15 ::v130(){vfunc_called(this, "_ZN9S21925C154v130Ev");}
void  S21925C15 ::v131(){vfunc_called(this, "_ZN9S21925C154v131Ev");}
void  S21925C15 ::v132(){vfunc_called(this, "_ZN9S21925C154v132Ev");}
void  S21925C15 ::v133(){vfunc_called(this, "_ZN9S21925C154v133Ev");}
S21925C15 ::S21925C15(){ note_ctor("S21925C15", this);} // tgen

static void Test_S21925C15()
{
  extern Class_Descriptor cd_S21925C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21925C15, buf);
    S21925C15 *dp, &lv = *(dp=new (buf) S21925C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21925C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C15)");
    check_base_class_offset(lv, (S21925C12*), 0, "S21925C15");
    test_class_info(&lv, &cd_S21925C15);
    dp->~S21925C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C15(Test_S21925C15, "S21925C15", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S21925C15C1Ev();
extern void _ZN9S21925C15D1Ev();
Name_Map name_map_S21925C15[] = {
  NSPAIR(_ZN9S21925C15C1Ev),
  NSPAIR(_ZN9S21925C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21925C12;
extern VTBL_ENTRY _ZTI9S21925C12[];
extern  VTBL_ENTRY _ZTV9S21925C12[];
static Base_Class bases_S21925C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21925C15[];
extern void _ZN9S21925C15D1Ev();
extern void _ZN9S21925C15D0Ev();
extern void _ZN9S21925C123v51Ev();
extern void _ZN9S21925C123v52Ev();
extern void _ZN9S21925C123v53Ev();
extern void _ZN9S21925C123v54Ev();
extern void _ZN9S21925C123v55Ev();
extern void _ZN9S21925C123v56Ev();
extern void _ZN9S21925C123v57Ev();
extern void _ZN9S21925C123v58Ev();
extern void _ZN9S21925C123v59Ev();
extern void _ZN9S21925C123v60Ev();
extern void _ZN9S21925C123v61Ev();
extern void _ZN9S21925C123v62Ev();
extern void _ZN9S21925C123v63Ev();
extern void _ZN9S21925C123v64Ev();
extern void _ZN9S21925C123v65Ev();
extern void _ZN9S21925C123v66Ev();
extern void _ZN9S21925C123v67Ev();
extern void _ZN9S21925C123v68Ev();
extern void _ZN9S21925C123v69Ev();
extern void _ZN9S21925C123v70Ev();
extern void _ZN9S21925C123v71Ev();
extern void _ZN9S21925C123v72Ev();
extern void _ZN9S21925C123v73Ev();
extern void _ZN9S21925C123v74Ev();
extern void _ZN9S21925C123v75Ev();
extern void _ZN9S21925C123v76Ev();
extern void _ZN9S21925C123v77Ev();
extern void _ZN9S21925C154v113Ev();
extern void _ZN9S21925C154v114Ev();
extern void _ZN9S21925C154v115Ev();
extern void _ZN9S21925C154v116Ev();
extern void _ZN9S21925C154v117Ev();
extern void _ZN9S21925C154v118Ev();
extern void _ZN9S21925C154v119Ev();
extern void _ZN9S21925C154v120Ev();
extern void _ZN9S21925C154v121Ev();
extern void _ZN9S21925C154v122Ev();
extern void _ZN9S21925C154v123Ev();
extern void _ZN9S21925C154v124Ev();
extern void _ZN9S21925C154v125Ev();
extern void _ZN9S21925C154v126Ev();
extern void _ZN9S21925C154v127Ev();
extern void _ZN9S21925C154v128Ev();
extern void _ZN9S21925C154v129Ev();
extern void _ZN9S21925C154v130Ev();
extern void _ZN9S21925C154v131Ev();
extern void _ZN9S21925C154v132Ev();
extern void _ZN9S21925C154v133Ev();
static  VTBL_ENTRY vtc_S21925C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C15[0]),
  (VTBL_ENTRY)&_ZN9S21925C15D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C15D0Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v51Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v52Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v53Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v54Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v55Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v56Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v57Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v58Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v59Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v60Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v61Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v62Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v63Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v64Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v65Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v66Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v67Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v68Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v69Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v70Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v71Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v72Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v73Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v74Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v75Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v76Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v77Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v113Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v114Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v115Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v116Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v117Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v118Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v119Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v120Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v121Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v122Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v123Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v124Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v125Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v126Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v127Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v128Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v129Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v130Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v131Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v132Ev,
  (VTBL_ENTRY)&_ZN9S21925C154v133Ev,
};
extern VTBL_ENTRY _ZTI9S21925C15[];
extern  VTBL_ENTRY _ZTV9S21925C15[];
Class_Descriptor cd_S21925C15 = {  "S21925C15", // class name
  bases_S21925C15, 1,
  &(vtc_S21925C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S21925C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21925C15),52, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C16  : S21925C12 {
  virtual  ~S21925C16(); // _ZN9S21925C16D1Ev
  virtual void  v134(); // _ZN9S21925C164v134Ev
  virtual void  v135(); // _ZN9S21925C164v135Ev
  virtual void  v136(); // _ZN9S21925C164v136Ev
  virtual void  v137(); // _ZN9S21925C164v137Ev
  virtual void  v138(); // _ZN9S21925C164v138Ev
  virtual void  v139(); // _ZN9S21925C164v139Ev
  virtual void  v140(); // _ZN9S21925C164v140Ev
  virtual void  v141(); // _ZN9S21925C164v141Ev
  virtual void  v142(); // _ZN9S21925C164v142Ev
  virtual void  v143(); // _ZN9S21925C164v143Ev
  virtual void  v144(); // _ZN9S21925C164v144Ev
  virtual void  v145(); // _ZN9S21925C164v145Ev
  virtual void  v146(); // _ZN9S21925C164v146Ev
  virtual void  v147(); // _ZN9S21925C164v147Ev
  virtual void  v148(); // _ZN9S21925C164v148Ev
  virtual void  v149(); // _ZN9S21925C164v149Ev
  virtual void  v150(); // _ZN9S21925C164v150Ev
  virtual void  v151(); // _ZN9S21925C164v151Ev
  virtual void  v152(); // _ZN9S21925C164v152Ev
  virtual void  v153(); // _ZN9S21925C164v153Ev
  virtual void  v154(); // _ZN9S21925C164v154Ev
  virtual void  v155(); // _ZN9S21925C164v155Ev
  S21925C16(); // tgen
};
//SIG(-1 S21925C16) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S21925C16 ::~S21925C16(){ note_dtor("S21925C16", this);}
void  S21925C16 ::v134(){vfunc_called(this, "_ZN9S21925C164v134Ev");}
void  S21925C16 ::v135(){vfunc_called(this, "_ZN9S21925C164v135Ev");}
void  S21925C16 ::v136(){vfunc_called(this, "_ZN9S21925C164v136Ev");}
void  S21925C16 ::v137(){vfunc_called(this, "_ZN9S21925C164v137Ev");}
void  S21925C16 ::v138(){vfunc_called(this, "_ZN9S21925C164v138Ev");}
void  S21925C16 ::v139(){vfunc_called(this, "_ZN9S21925C164v139Ev");}
void  S21925C16 ::v140(){vfunc_called(this, "_ZN9S21925C164v140Ev");}
void  S21925C16 ::v141(){vfunc_called(this, "_ZN9S21925C164v141Ev");}
void  S21925C16 ::v142(){vfunc_called(this, "_ZN9S21925C164v142Ev");}
void  S21925C16 ::v143(){vfunc_called(this, "_ZN9S21925C164v143Ev");}
void  S21925C16 ::v144(){vfunc_called(this, "_ZN9S21925C164v144Ev");}
void  S21925C16 ::v145(){vfunc_called(this, "_ZN9S21925C164v145Ev");}
void  S21925C16 ::v146(){vfunc_called(this, "_ZN9S21925C164v146Ev");}
void  S21925C16 ::v147(){vfunc_called(this, "_ZN9S21925C164v147Ev");}
void  S21925C16 ::v148(){vfunc_called(this, "_ZN9S21925C164v148Ev");}
void  S21925C16 ::v149(){vfunc_called(this, "_ZN9S21925C164v149Ev");}
void  S21925C16 ::v150(){vfunc_called(this, "_ZN9S21925C164v150Ev");}
void  S21925C16 ::v151(){vfunc_called(this, "_ZN9S21925C164v151Ev");}
void  S21925C16 ::v152(){vfunc_called(this, "_ZN9S21925C164v152Ev");}
void  S21925C16 ::v153(){vfunc_called(this, "_ZN9S21925C164v153Ev");}
void  S21925C16 ::v154(){vfunc_called(this, "_ZN9S21925C164v154Ev");}
void  S21925C16 ::v155(){vfunc_called(this, "_ZN9S21925C164v155Ev");}
S21925C16 ::S21925C16(){ note_ctor("S21925C16", this);} // tgen

static void Test_S21925C16()
{
  extern Class_Descriptor cd_S21925C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21925C16, buf);
    S21925C16 *dp, &lv = *(dp=new (buf) S21925C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21925C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C16)");
    check_base_class_offset(lv, (S21925C12*), 0, "S21925C16");
    test_class_info(&lv, &cd_S21925C16);
    dp->~S21925C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C16(Test_S21925C16, "S21925C16", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S21925C16C1Ev();
extern void _ZN9S21925C16D1Ev();
Name_Map name_map_S21925C16[] = {
  NSPAIR(_ZN9S21925C16C1Ev),
  NSPAIR(_ZN9S21925C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21925C12;
extern VTBL_ENTRY _ZTI9S21925C12[];
extern  VTBL_ENTRY _ZTV9S21925C12[];
static Base_Class bases_S21925C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21925C16[];
extern void _ZN9S21925C16D1Ev();
extern void _ZN9S21925C16D0Ev();
extern void _ZN9S21925C123v51Ev();
extern void _ZN9S21925C123v52Ev();
extern void _ZN9S21925C123v53Ev();
extern void _ZN9S21925C123v54Ev();
extern void _ZN9S21925C123v55Ev();
extern void _ZN9S21925C123v56Ev();
extern void _ZN9S21925C123v57Ev();
extern void _ZN9S21925C123v58Ev();
extern void _ZN9S21925C123v59Ev();
extern void _ZN9S21925C123v60Ev();
extern void _ZN9S21925C123v61Ev();
extern void _ZN9S21925C123v62Ev();
extern void _ZN9S21925C123v63Ev();
extern void _ZN9S21925C123v64Ev();
extern void _ZN9S21925C123v65Ev();
extern void _ZN9S21925C123v66Ev();
extern void _ZN9S21925C123v67Ev();
extern void _ZN9S21925C123v68Ev();
extern void _ZN9S21925C123v69Ev();
extern void _ZN9S21925C123v70Ev();
extern void _ZN9S21925C123v71Ev();
extern void _ZN9S21925C123v72Ev();
extern void _ZN9S21925C123v73Ev();
extern void _ZN9S21925C123v74Ev();
extern void _ZN9S21925C123v75Ev();
extern void _ZN9S21925C123v76Ev();
extern void _ZN9S21925C123v77Ev();
extern void _ZN9S21925C164v134Ev();
extern void _ZN9S21925C164v135Ev();
extern void _ZN9S21925C164v136Ev();
extern void _ZN9S21925C164v137Ev();
extern void _ZN9S21925C164v138Ev();
extern void _ZN9S21925C164v139Ev();
extern void _ZN9S21925C164v140Ev();
extern void _ZN9S21925C164v141Ev();
extern void _ZN9S21925C164v142Ev();
extern void _ZN9S21925C164v143Ev();
extern void _ZN9S21925C164v144Ev();
extern void _ZN9S21925C164v145Ev();
extern void _ZN9S21925C164v146Ev();
extern void _ZN9S21925C164v147Ev();
extern void _ZN9S21925C164v148Ev();
extern void _ZN9S21925C164v149Ev();
extern void _ZN9S21925C164v150Ev();
extern void _ZN9S21925C164v151Ev();
extern void _ZN9S21925C164v152Ev();
extern void _ZN9S21925C164v153Ev();
extern void _ZN9S21925C164v154Ev();
extern void _ZN9S21925C164v155Ev();
static  VTBL_ENTRY vtc_S21925C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C16[0]),
  (VTBL_ENTRY)&_ZN9S21925C16D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C16D0Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v51Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v52Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v53Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v54Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v55Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v56Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v57Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v58Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v59Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v60Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v61Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v62Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v63Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v64Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v65Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v66Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v67Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v68Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v69Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v70Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v71Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v72Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v73Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v74Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v75Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v76Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v77Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v134Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v135Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v136Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v137Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v138Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v139Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v140Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v141Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v142Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v143Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v144Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v145Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v146Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v147Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v148Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v149Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v150Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v151Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v152Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v153Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v154Ev,
  (VTBL_ENTRY)&_ZN9S21925C164v155Ev,
};
extern VTBL_ENTRY _ZTI9S21925C16[];
extern  VTBL_ENTRY _ZTV9S21925C16[];
Class_Descriptor cd_S21925C16 = {  "S21925C16", // class name
  bases_S21925C16, 1,
  &(vtc_S21925C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S21925C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21925C16),53, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C19  : S21925C12 {
  virtual  ~S21925C19(); // _ZN9S21925C19D1Ev
  virtual void  v195(); // _ZN9S21925C194v195Ev
  virtual void  v196(); // _ZN9S21925C194v196Ev
  virtual void  v197(); // _ZN9S21925C194v197Ev
  virtual void  v198(); // _ZN9S21925C194v198Ev
  virtual void  v199(); // _ZN9S21925C194v199Ev
  virtual void  v200(); // _ZN9S21925C194v200Ev
  S21925C19(); // tgen
};
//SIG(-1 S21925C19) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi} vd v1 v2 v3 v4 v5 v6}


 S21925C19 ::~S21925C19(){ note_dtor("S21925C19", this);}
void  S21925C19 ::v195(){vfunc_called(this, "_ZN9S21925C194v195Ev");}
void  S21925C19 ::v196(){vfunc_called(this, "_ZN9S21925C194v196Ev");}
void  S21925C19 ::v197(){vfunc_called(this, "_ZN9S21925C194v197Ev");}
void  S21925C19 ::v198(){vfunc_called(this, "_ZN9S21925C194v198Ev");}
void  S21925C19 ::v199(){vfunc_called(this, "_ZN9S21925C194v199Ev");}
void  S21925C19 ::v200(){vfunc_called(this, "_ZN9S21925C194v200Ev");}
S21925C19 ::S21925C19(){ note_ctor("S21925C19", this);} // tgen

static void Test_S21925C19()
{
  extern Class_Descriptor cd_S21925C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21925C19, buf);
    S21925C19 *dp, &lv = *(dp=new (buf) S21925C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21925C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C19)");
    check_base_class_offset(lv, (S21925C12*), 0, "S21925C19");
    test_class_info(&lv, &cd_S21925C19);
    dp->~S21925C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C19(Test_S21925C19, "S21925C19", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S21925C19C1Ev();
extern void _ZN9S21925C19D1Ev();
Name_Map name_map_S21925C19[] = {
  NSPAIR(_ZN9S21925C19C1Ev),
  NSPAIR(_ZN9S21925C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21925C12;
extern VTBL_ENTRY _ZTI9S21925C12[];
extern  VTBL_ENTRY _ZTV9S21925C12[];
static Base_Class bases_S21925C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21925C19[];
extern void _ZN9S21925C19D1Ev();
extern void _ZN9S21925C19D0Ev();
extern void _ZN9S21925C123v51Ev();
extern void _ZN9S21925C123v52Ev();
extern void _ZN9S21925C123v53Ev();
extern void _ZN9S21925C123v54Ev();
extern void _ZN9S21925C123v55Ev();
extern void _ZN9S21925C123v56Ev();
extern void _ZN9S21925C123v57Ev();
extern void _ZN9S21925C123v58Ev();
extern void _ZN9S21925C123v59Ev();
extern void _ZN9S21925C123v60Ev();
extern void _ZN9S21925C123v61Ev();
extern void _ZN9S21925C123v62Ev();
extern void _ZN9S21925C123v63Ev();
extern void _ZN9S21925C123v64Ev();
extern void _ZN9S21925C123v65Ev();
extern void _ZN9S21925C123v66Ev();
extern void _ZN9S21925C123v67Ev();
extern void _ZN9S21925C123v68Ev();
extern void _ZN9S21925C123v69Ev();
extern void _ZN9S21925C123v70Ev();
extern void _ZN9S21925C123v71Ev();
extern void _ZN9S21925C123v72Ev();
extern void _ZN9S21925C123v73Ev();
extern void _ZN9S21925C123v74Ev();
extern void _ZN9S21925C123v75Ev();
extern void _ZN9S21925C123v76Ev();
extern void _ZN9S21925C123v77Ev();
extern void _ZN9S21925C194v195Ev();
extern void _ZN9S21925C194v196Ev();
extern void _ZN9S21925C194v197Ev();
extern void _ZN9S21925C194v198Ev();
extern void _ZN9S21925C194v199Ev();
extern void _ZN9S21925C194v200Ev();
static  VTBL_ENTRY vtc_S21925C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C19[0]),
  (VTBL_ENTRY)&_ZN9S21925C19D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C19D0Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v51Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v52Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v53Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v54Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v55Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v56Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v57Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v58Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v59Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v60Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v61Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v62Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v63Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v64Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v65Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v66Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v67Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v68Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v69Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v70Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v71Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v72Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v73Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v74Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v75Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v76Ev,
  (VTBL_ENTRY)&_ZN9S21925C123v77Ev,
  (VTBL_ENTRY)&_ZN9S21925C194v195Ev,
  (VTBL_ENTRY)&_ZN9S21925C194v196Ev,
  (VTBL_ENTRY)&_ZN9S21925C194v197Ev,
  (VTBL_ENTRY)&_ZN9S21925C194v198Ev,
  (VTBL_ENTRY)&_ZN9S21925C194v199Ev,
  (VTBL_ENTRY)&_ZN9S21925C194v200Ev,
};
extern VTBL_ENTRY _ZTI9S21925C19[];
extern  VTBL_ENTRY _ZTV9S21925C19[];
Class_Descriptor cd_S21925C19 = {  "S21925C19", // class name
  bases_S21925C19, 1,
  &(vtc_S21925C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S21925C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21925C19),37, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C21  {
  int s21925c21f0[2];
  __tsi64 s21925c21f1[3];
  char s21925c21f2[2048];
  int s21925c21f3[6];
  __tsi64 s21925c21f4;
  int s21925c21f5[4];
  void *s21925c21f6[2];
  char s21925c21f7;
  void  mf21925c21(); // _ZN9S21925C2110mf21925c21Ev
  virtual  ~S21925C21(); // _ZN9S21925C21D1Ev
  S21925C21(); // tgen
};
//SIG(-1 S21925C21) C1{ vd m Fi[2] FL[3] Fc[2048] Fi[6] FL Fi[4] Fp[2] Fc}


void  S21925C21 ::mf21925c21(){}
 S21925C21 ::~S21925C21(){ note_dtor("S21925C21", this);}
S21925C21 ::S21925C21(){ note_ctor("S21925C21", this);} // tgen

static void Test_S21925C21()
{
  extern Class_Descriptor cd_S21925C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(271,537)];
    init_test(&cd_S21925C21, buf);
    S21925C21 *dp, &lv = *(dp=new (buf) S21925C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2160,2144), "sizeof(S21925C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C21)");
    check_field_offset(lv, s21925c21f0, ABISELECT(8,4), "S21925C21.s21925c21f0");
    check_field_offset(lv, s21925c21f1, ABISELECT(16,12), "S21925C21.s21925c21f1");
    check_field_offset(lv, s21925c21f2, ABISELECT(40,36), "S21925C21.s21925c21f2");
    check_field_offset(lv, s21925c21f3, ABISELECT(2088,2084), "S21925C21.s21925c21f3");
    check_field_offset(lv, s21925c21f4, ABISELECT(2112,2108), "S21925C21.s21925c21f4");
    check_field_offset(lv, s21925c21f5, ABISELECT(2120,2116), "S21925C21.s21925c21f5");
    check_field_offset(lv, s21925c21f6, ABISELECT(2136,2132), "S21925C21.s21925c21f6");
    check_field_offset(lv, s21925c21f7, ABISELECT(2152,2140), "S21925C21.s21925c21f7");
    test_class_info(&lv, &cd_S21925C21);
    dp->~S21925C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C21(Test_S21925C21, "S21925C21", ABISELECT(2160,2144));

#else // __cplusplus

extern void _ZN9S21925C21C1Ev();
extern void _ZN9S21925C21D1Ev();
Name_Map name_map_S21925C21[] = {
  NSPAIR(_ZN9S21925C21C1Ev),
  NSPAIR(_ZN9S21925C21D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21925C21[];
extern void _ZN9S21925C21D1Ev();
extern void _ZN9S21925C21D0Ev();
static  VTBL_ENTRY vtc_S21925C21[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C21[0]),
  (VTBL_ENTRY)&_ZN9S21925C21D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C21D0Ev,
};
extern VTBL_ENTRY _ZTI9S21925C21[];
extern  VTBL_ENTRY _ZTV9S21925C21[];
Class_Descriptor cd_S21925C21 = {  "S21925C21", // class name
  0,0,//no base classes
  &(vtc_S21925C21[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2160,2144), // object size
  NSPAIRA(_ZTI9S21925C21),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21925C21),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C20  {
  char s21925c20f0[6];
  void *s21925c20f1;
  int s21925c20f2[2];
  ::S21925C21 s21925c20f3;
  int s21925c20f4[2];
  void  mf21925c20(); // _ZN9S21925C2010mf21925c20Ev
};
//SIG(-1 S21925C20) C1{ m Fc[6] Fp Fi[2] FC2{ vd m Fi[2] FL[3] Fc[2048] Fi[6] FL Fi[4] Fp[2] Fc} Fi[2]}


void  S21925C20 ::mf21925c20(){}

static void Test_S21925C20()
{
  {
    init_simple_test("S21925C20");
    S21925C20 lv;
    check2(sizeof(lv), ABISELECT(2192,2172), "sizeof(S21925C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C20)");
    check_field_offset(lv, s21925c20f0, 0, "S21925C20.s21925c20f0");
    check_field_offset(lv, s21925c20f1, 8, "S21925C20.s21925c20f1");
    check_field_offset(lv, s21925c20f2, ABISELECT(16,12), "S21925C20.s21925c20f2");
    check_field_offset(lv, s21925c20f3, ABISELECT(24,20), "S21925C20.s21925c20f3");
    check_field_offset(lv, s21925c20f4, ABISELECT(2184,2164), "S21925C20.s21925c20f4");
  }
}
static Arrange_To_Call_Me vS21925C20(Test_S21925C20, "S21925C20", ABISELECT(2192,2172));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C22_nt  {
  int s21925c22f0[3];
  void  mf21925c22(); // _ZN12S21925C22_nt10mf21925c22Ev
};
//SIG(-1 S21925C22_nt) C1{ m Fi[3]}


void  S21925C22_nt ::mf21925c22(){}

//skip512 S21925C22_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C23_nt  {
  char s21925c23f0;
  void  mf21925c23(); // _ZN12S21925C23_nt10mf21925c23Ev
};
//SIG(-1 S21925C23_nt) C1{ m Fc}


void  S21925C23_nt ::mf21925c23(){}

//skip512 S21925C23_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C25  {
  int s21925c25f0[2];
  __tsi64 s21925c25f1;
  int s21925c25f2[4];
  void  mf21925c25(); // _ZN9S21925C2510mf21925c25Ev
  virtual  ~S21925C25(); // _ZN9S21925C25D1Ev
  S21925C25(); // tgen
};
//SIG(-1 S21925C25) C1{ vd m Fi[2] FL Fi[4]}


void  S21925C25 ::mf21925c25(){}
 S21925C25 ::~S21925C25(){ note_dtor("S21925C25", this);}
S21925C25 ::S21925C25(){ note_ctor("S21925C25", this);} // tgen

static void Test_S21925C25()
{
  extern Class_Descriptor cd_S21925C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S21925C25, buf);
    S21925C25 *dp, &lv = *(dp=new (buf) S21925C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S21925C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C25)");
    check_field_offset(lv, s21925c25f0, ABISELECT(8,4), "S21925C25.s21925c25f0");
    check_field_offset(lv, s21925c25f1, ABISELECT(16,12), "S21925C25.s21925c25f1");
    check_field_offset(lv, s21925c25f2, ABISELECT(24,20), "S21925C25.s21925c25f2");
    test_class_info(&lv, &cd_S21925C25);
    dp->~S21925C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C25(Test_S21925C25, "S21925C25", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN9S21925C25C1Ev();
extern void _ZN9S21925C25D1Ev();
Name_Map name_map_S21925C25[] = {
  NSPAIR(_ZN9S21925C25C1Ev),
  NSPAIR(_ZN9S21925C25D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21925C25[];
extern void _ZN9S21925C25D1Ev();
extern void _ZN9S21925C25D0Ev();
static  VTBL_ENTRY vtc_S21925C25[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C25[0]),
  (VTBL_ENTRY)&_ZN9S21925C25D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C25D0Ev,
};
extern VTBL_ENTRY _ZTI9S21925C25[];
extern  VTBL_ENTRY _ZTV9S21925C25[];
Class_Descriptor cd_S21925C25 = {  "S21925C25", // class name
  0,0,//no base classes
  &(vtc_S21925C25[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI9S21925C25),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21925C25),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C24  {
  void *s21925c24f0;
  int s21925c24f1[3];
  ::S21925C21 s21925c24f2;
  ::S21925C25 s21925c24f3;
  int s21925c24f4[6];
  ::S21925C5_nt s21925c24f5;
  int s21925c24f6[4];
  void  mf21925c24(); // _ZN9S21925C2410mf21925c24Ev
};
//SIG(-1 S21925C24) C1{ m Fp Fi[3] FC2{ vd m Fi[2] FL[3] Fc[2048] Fi[6] FL Fi[4] Fp[2] Fc} FC3{ vd m Fi[2] FL Fi[4]} Fi[6] FC4{ Fi[4]} Fi[4]}


void  S21925C24 ::mf21925c24(){}

static void Test_S21925C24()
{
  {
    init_simple_test("S21925C24");
    S21925C24 lv;
    check2(sizeof(lv), ABISELECT(2280,2252), "sizeof(S21925C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C24)");
    check_field_offset(lv, s21925c24f0, 0, "S21925C24.s21925c24f0");
    check_field_offset(lv, s21925c24f1, ABISELECT(8,4), "S21925C24.s21925c24f1");
    check_field_offset(lv, s21925c24f2, ABISELECT(24,16), "S21925C24.s21925c24f2");
    check_field_offset(lv, s21925c24f3, ABISELECT(2184,2160), "S21925C24.s21925c24f3");
    check_field_offset(lv, s21925c24f4, ABISELECT(2224,2196), "S21925C24.s21925c24f4");
    check_field_offset(lv, s21925c24f5, ABISELECT(2248,2220), "S21925C24.s21925c24f5");
    check_field_offset(lv, s21925c24f6, ABISELECT(2264,2236), "S21925C24.s21925c24f6");
  }
}
static Arrange_To_Call_Me vS21925C24(Test_S21925C24, "S21925C24", ABISELECT(2280,2252));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C10  : S21925C8 {
  void *s21925c10f0;
  ::S21925C11 s21925c10f1;
  ::S21925C13 s21925c10f2;
  ::S21925C14 s21925c10f3;
  ::S21925C15 s21925c10f4;
  ::S21925C16 s21925c10f5;
  ::S21925C15 s21925c10f6;
  ::S21925C14 s21925c10f7;
  ::S21925C19 s21925c10f8;
  void *s21925c10f9[4];
  ::S21925C20 s21925c10f10;
  ::S21925C22_nt s21925c10f11;
  ::S21925C23_nt s21925c10f12;
  ::S21925C24 s21925c10f13;
  void *s21925c10f14;
  int s21925c10f15[3];
  virtual  ~S21925C10(); // _ZN9S21925C10D1Ev
  virtual void  v40(); // _ZN9S21925C103v40Ev
  virtual void  v41(); // _ZN9S21925C103v41Ev
  virtual void  v42(); // _ZN9S21925C103v42Ev
  virtual void  v43(); // _ZN9S21925C103v43Ev
  virtual void  v44(); // _ZN9S21925C103v44Ev
  virtual void  v45(); // _ZN9S21925C103v45Ev
  virtual void  v46(); // _ZN9S21925C103v46Ev
  S21925C10(); // tgen
};
//SIG(-1 S21925C10) C1{ BC2{ v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fp FC3{ BC4{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 Fp Fi} vd v15 v16 v17 v18} FC5{ BC4 vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62} FC6{ BC4 vd v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80} FC7{ BC4 vd v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101} FC8{ BC4 vd v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123} FC7 FC6 FC9{ BC4 vd v124 v125 v126 v127 v128 v129} Fp[4] FC10{ m Fc[6] Fp Fi[2] FC11{ vd m Fi[2] FL[3] Fc[2048] Fi[6] FL Fi[4] Fp[2] Fc} Fi[2]} FC12{ m Fi[3]} FC13{ m Fc} FC14{ m Fp Fi[3] FC11 FC15{ vd m Fi[2] FL Fi[4]} Fi[6] FC16{ Fi[4]} Fi[4]} Fp Fi[3]}


 S21925C10 ::~S21925C10(){ note_dtor("S21925C10", this);}
void  S21925C10 ::v40(){vfunc_called(this, "_ZN9S21925C103v40Ev");}
void  S21925C10 ::v41(){vfunc_called(this, "_ZN9S21925C103v41Ev");}
void  S21925C10 ::v42(){vfunc_called(this, "_ZN9S21925C103v42Ev");}
void  S21925C10 ::v43(){vfunc_called(this, "_ZN9S21925C103v43Ev");}
void  S21925C10 ::v44(){vfunc_called(this, "_ZN9S21925C103v44Ev");}
void  S21925C10 ::v45(){vfunc_called(this, "_ZN9S21925C103v45Ev");}
void  S21925C10 ::v46(){vfunc_called(this, "_ZN9S21925C103v46Ev");}
S21925C10 ::S21925C10(){ note_ctor("S21925C10", this);} // tgen

static void Test_S21925C10()
{
  extern Class_Descriptor cd_S21925C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(595,1145)];
    init_test(&cd_S21925C10, buf);
    S21925C10 *dp, &lv = *(dp=new (buf) S21925C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4752,4576), "sizeof(S21925C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C10)");
    check_base_class_offset(lv, (S21925C8*), 0, "S21925C10");
    check_field_offset(lv, s21925c10f0, ABISELECT(8,4), "S21925C10.s21925c10f0");
    check_field_offset(lv, s21925c10f1, ABISELECT(16,8), "S21925C10.s21925c10f1");
    check_field_offset(lv, s21925c10f2, ABISELECT(40,20), "S21925C10.s21925c10f2");
    check_field_offset(lv, s21925c10f3, ABISELECT(64,32), "S21925C10.s21925c10f3");
    check_field_offset(lv, s21925c10f4, ABISELECT(88,44), "S21925C10.s21925c10f4");
    check_field_offset(lv, s21925c10f5, ABISELECT(112,56), "S21925C10.s21925c10f5");
    check_field_offset(lv, s21925c10f6, ABISELECT(136,68), "S21925C10.s21925c10f6");
    check_field_offset(lv, s21925c10f7, ABISELECT(160,80), "S21925C10.s21925c10f7");
    check_field_offset(lv, s21925c10f8, ABISELECT(184,92), "S21925C10.s21925c10f8");
    check_field_offset(lv, s21925c10f9, ABISELECT(208,104), "S21925C10.s21925c10f9");
    check_field_offset(lv, s21925c10f10, ABISELECT(240,120), "S21925C10.s21925c10f10");
    check_field_offset(lv, s21925c10f11, ABISELECT(2432,2292), "S21925C10.s21925c10f11");
    check_field_offset(lv, s21925c10f12, ABISELECT(2444,2304), "S21925C10.s21925c10f12");
    check_field_offset(lv, s21925c10f13, ABISELECT(2448,2308), "S21925C10.s21925c10f13");
    check_field_offset(lv, s21925c10f14, ABISELECT(4728,4560), "S21925C10.s21925c10f14");
    check_field_offset(lv, s21925c10f15, ABISELECT(4736,4564), "S21925C10.s21925c10f15");
    test_class_info(&lv, &cd_S21925C10);
    dp->~S21925C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C10(Test_S21925C10, "S21925C10", ABISELECT(4752,4576));

#else // __cplusplus

extern void _ZN9S21925C10C1Ev();
extern void _ZN9S21925C10D1Ev();
Name_Map name_map_S21925C10[] = {
  NSPAIR(_ZN9S21925C10C1Ev),
  NSPAIR(_ZN9S21925C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21925C8;
extern VTBL_ENTRY _ZTI8S21925C8[];
extern  VTBL_ENTRY _ZTV8S21925C8[];
static Base_Class bases_S21925C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21925C10[];
extern void _ZN8S21925C83v33Ev();
extern void _ZN8S21925C83v34Ev();
extern void _ZN8S21925C83v35Ev();
extern void _ZN8S21925C83v36Ev();
extern void _ZN8S21925C83v37Ev();
extern void _ZN8S21925C83v38Ev();
extern void _ZN8S21925C83v39Ev();
extern void _ZN9S21925C10D1Ev();
extern void _ZN9S21925C10D0Ev();
extern void _ZN9S21925C103v40Ev();
extern void _ZN9S21925C103v41Ev();
extern void _ZN9S21925C103v42Ev();
extern void _ZN9S21925C103v43Ev();
extern void _ZN9S21925C103v44Ev();
extern void _ZN9S21925C103v45Ev();
extern void _ZN9S21925C103v46Ev();
static  VTBL_ENTRY vtc_S21925C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C10[0]),
  (VTBL_ENTRY)&_ZN8S21925C83v33Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v34Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v35Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v36Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v37Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v38Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v39Ev,
  (VTBL_ENTRY)&_ZN9S21925C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C10D0Ev,
  (VTBL_ENTRY)&_ZN9S21925C103v40Ev,
  (VTBL_ENTRY)&_ZN9S21925C103v41Ev,
  (VTBL_ENTRY)&_ZN9S21925C103v42Ev,
  (VTBL_ENTRY)&_ZN9S21925C103v43Ev,
  (VTBL_ENTRY)&_ZN9S21925C103v44Ev,
  (VTBL_ENTRY)&_ZN9S21925C103v45Ev,
  (VTBL_ENTRY)&_ZN9S21925C103v46Ev,
};
extern VTBL_ENTRY _ZTI9S21925C10[];
extern  VTBL_ENTRY _ZTV9S21925C10[];
Class_Descriptor cd_S21925C10 = {  "S21925C10", // class name
  bases_S21925C10, 1,
  &(vtc_S21925C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(4752,4576), // object size
  NSPAIRA(_ZTI9S21925C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21925C10),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C27  {
  void *s21925c27f0;
  int s21925c27f1;
  void *s21925c27f2[9];
  int s21925c27f3;
  void  mf21925c27(); // _ZN9S21925C2710mf21925c27Ev
  virtual  ~S21925C27(); // _ZN9S21925C27D1Ev
  S21925C27(); // tgen
};
//SIG(-1 S21925C27) C1{ vd m Fp Fi Fp[9] Fi}


void  S21925C27 ::mf21925c27(){}
 S21925C27 ::~S21925C27(){ note_dtor("S21925C27", this);}
S21925C27 ::S21925C27(){ note_ctor("S21925C27", this);} // tgen

static void Test_S21925C27()
{
  extern Class_Descriptor cd_S21925C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S21925C27, buf);
    S21925C27 *dp, &lv = *(dp=new (buf) S21925C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S21925C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C27)");
    check_field_offset(lv, s21925c27f0, ABISELECT(8,4), "S21925C27.s21925c27f0");
    check_field_offset(lv, s21925c27f1, ABISELECT(16,8), "S21925C27.s21925c27f1");
    check_field_offset(lv, s21925c27f2, ABISELECT(24,12), "S21925C27.s21925c27f2");
    check_field_offset(lv, s21925c27f3, ABISELECT(96,48), "S21925C27.s21925c27f3");
    test_class_info(&lv, &cd_S21925C27);
    dp->~S21925C27();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C27(Test_S21925C27, "S21925C27", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN9S21925C27C1Ev();
extern void _ZN9S21925C27D1Ev();
Name_Map name_map_S21925C27[] = {
  NSPAIR(_ZN9S21925C27C1Ev),
  NSPAIR(_ZN9S21925C27D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21925C27[];
extern void _ZN9S21925C27D1Ev();
extern void _ZN9S21925C27D0Ev();
static  VTBL_ENTRY vtc_S21925C27[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C27[0]),
  (VTBL_ENTRY)&_ZN9S21925C27D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C27D0Ev,
};
extern VTBL_ENTRY _ZTI9S21925C27[];
extern  VTBL_ENTRY _ZTV9S21925C27[];
Class_Descriptor cd_S21925C27 = {  "S21925C27", // class name
  0,0,//no base classes
  &(vtc_S21925C27[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI9S21925C27),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21925C27),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C28  {
  __tsi64 s21925c28f0[2];
  int s21925c28f1[6];
};
//SIG(-1 S21925C28) C1{ FL[2] Fi[6]}



static void Test_S21925C28()
{
  {
    init_simple_test("S21925C28");
    S21925C28 lv;
    check2(sizeof(lv), 40, "sizeof(S21925C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C28)");
    check_field_offset(lv, s21925c28f0, 0, "S21925C28.s21925c28f0");
    check_field_offset(lv, s21925c28f1, 16, "S21925C28.s21925c28f1");
  }
}
static Arrange_To_Call_Me vS21925C28(Test_S21925C28, "S21925C28", 40);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C7  : S21925C8 {
  int s21925c7f0[2];
  void *s21925c7f1;
  ::S21925C9 s21925c7f2;
  ::S21925C10 s21925c7f3;
  ::S21925C27 s21925c7f4;
  ::S21925C28 s21925c7f5;
  virtual  ~S21925C7(); // _ZN8S21925C7D1Ev
  virtual void  v2(); // _ZN8S21925C72v2Ev
  virtual void  v3(); // _ZN8S21925C72v3Ev
  virtual void  v4(); // _ZN8S21925C72v4Ev
  virtual void  v5(); // _ZN8S21925C72v5Ev
  virtual void  v6(); // _ZN8S21925C72v6Ev
  virtual void  v7(); // _ZN8S21925C72v7Ev
  virtual void  v8(); // _ZN8S21925C72v8Ev
  virtual void  v9(); // _ZN8S21925C72v9Ev
  virtual void  v10(); // _ZN8S21925C73v10Ev
  virtual void  v11(); // _ZN8S21925C73v11Ev
  virtual void  v12(); // _ZN8S21925C73v12Ev
  virtual void  v13(); // _ZN8S21925C73v13Ev
  virtual void  v14(); // _ZN8S21925C73v14Ev
  virtual void  v15(); // _ZN8S21925C73v15Ev
  virtual void  v16(); // _ZN8S21925C73v16Ev
  virtual void  v17(); // _ZN8S21925C73v17Ev
  virtual void  v18(); // _ZN8S21925C73v18Ev
  virtual void  v19(); // _ZN8S21925C73v19Ev
  virtual void  v20(); // _ZN8S21925C73v20Ev
  virtual void  v21(); // _ZN8S21925C73v21Ev
  virtual void  v22(); // _ZN8S21925C73v22Ev
  virtual void  v23(); // _ZN8S21925C73v23Ev
  virtual void  v24(); // _ZN8S21925C73v24Ev
  virtual void  v25(); // _ZN8S21925C73v25Ev
  virtual void  v26(); // _ZN8S21925C73v26Ev
  virtual void  v27(); // _ZN8S21925C73v27Ev
  virtual void  v28(); // _ZN8S21925C73v28Ev
  virtual void  v29(); // _ZN8S21925C73v29Ev
  virtual void  v30(); // _ZN8S21925C73v30Ev
  virtual void  v31(); // _ZN8S21925C73v31Ev
  virtual void  v32(); // _ZN8S21925C73v32Ev
  S21925C7(); // tgen
};
//SIG(-1 S21925C7) C1{ BC2{ v32 v33 v34 v35 v36 v37 v38} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 Fi[2] Fp FC3{ m Fp[3]} FC4{ BC2 vd v39 v40 v41 v42 v43 v44 v45 Fp FC5{ BC6{ vd v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 Fp Fi} vd v46 v47 v48 v49} FC7{ BC6 vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93} FC8{ BC6 vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111} FC9{ BC6 vd v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132} FC10{ BC6 vd v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154} FC9 FC8 FC11{ BC6 vd v155 v156 v157 v158 v159 v160} Fp[4] FC12{ m Fc[6] Fp Fi[2] FC13{ vd m Fi[2] FL[3] Fc[2048] Fi[6] FL Fi[4] Fp[2] Fc} Fi[2]} FC14{ m Fi[3]} FC15{ m Fc} FC16{ m Fp Fi[3] FC13 FC17{ vd m Fi[2] FL Fi[4]} Fi[6] FC18{ Fi[4]} Fi[4]} Fp Fi[3]} FC19{ vd m Fp Fi Fp[9] Fi} FC20{ FL[2] Fi[6]}}


 S21925C7 ::~S21925C7(){ note_dtor("S21925C7", this);}
void  S21925C7 ::v2(){vfunc_called(this, "_ZN8S21925C72v2Ev");}
void  S21925C7 ::v3(){vfunc_called(this, "_ZN8S21925C72v3Ev");}
void  S21925C7 ::v4(){vfunc_called(this, "_ZN8S21925C72v4Ev");}
void  S21925C7 ::v5(){vfunc_called(this, "_ZN8S21925C72v5Ev");}
void  S21925C7 ::v6(){vfunc_called(this, "_ZN8S21925C72v6Ev");}
void  S21925C7 ::v7(){vfunc_called(this, "_ZN8S21925C72v7Ev");}
void  S21925C7 ::v8(){vfunc_called(this, "_ZN8S21925C72v8Ev");}
void  S21925C7 ::v9(){vfunc_called(this, "_ZN8S21925C72v9Ev");}
void  S21925C7 ::v10(){vfunc_called(this, "_ZN8S21925C73v10Ev");}
void  S21925C7 ::v11(){vfunc_called(this, "_ZN8S21925C73v11Ev");}
void  S21925C7 ::v12(){vfunc_called(this, "_ZN8S21925C73v12Ev");}
void  S21925C7 ::v13(){vfunc_called(this, "_ZN8S21925C73v13Ev");}
void  S21925C7 ::v14(){vfunc_called(this, "_ZN8S21925C73v14Ev");}
void  S21925C7 ::v15(){vfunc_called(this, "_ZN8S21925C73v15Ev");}
void  S21925C7 ::v16(){vfunc_called(this, "_ZN8S21925C73v16Ev");}
void  S21925C7 ::v17(){vfunc_called(this, "_ZN8S21925C73v17Ev");}
void  S21925C7 ::v18(){vfunc_called(this, "_ZN8S21925C73v18Ev");}
void  S21925C7 ::v19(){vfunc_called(this, "_ZN8S21925C73v19Ev");}
void  S21925C7 ::v20(){vfunc_called(this, "_ZN8S21925C73v20Ev");}
void  S21925C7 ::v21(){vfunc_called(this, "_ZN8S21925C73v21Ev");}
void  S21925C7 ::v22(){vfunc_called(this, "_ZN8S21925C73v22Ev");}
void  S21925C7 ::v23(){vfunc_called(this, "_ZN8S21925C73v23Ev");}
void  S21925C7 ::v24(){vfunc_called(this, "_ZN8S21925C73v24Ev");}
void  S21925C7 ::v25(){vfunc_called(this, "_ZN8S21925C73v25Ev");}
void  S21925C7 ::v26(){vfunc_called(this, "_ZN8S21925C73v26Ev");}
void  S21925C7 ::v27(){vfunc_called(this, "_ZN8S21925C73v27Ev");}
void  S21925C7 ::v28(){vfunc_called(this, "_ZN8S21925C73v28Ev");}
void  S21925C7 ::v29(){vfunc_called(this, "_ZN8S21925C73v29Ev");}
void  S21925C7 ::v30(){vfunc_called(this, "_ZN8S21925C73v30Ev");}
void  S21925C7 ::v31(){vfunc_called(this, "_ZN8S21925C73v31Ev");}
void  S21925C7 ::v32(){vfunc_called(this, "_ZN8S21925C73v32Ev");}
S21925C7 ::S21925C7(){ note_ctor("S21925C7", this);} // tgen

static void Test_S21925C7()
{
  extern Class_Descriptor cd_S21925C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(619,1175)];
    init_test(&cd_S21925C7, buf);
    S21925C7 *dp, &lv = *(dp=new (buf) S21925C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4944,4696), "sizeof(S21925C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C7)");
    check_base_class_offset(lv, (S21925C8*), 0, "S21925C7");
    check_field_offset(lv, s21925c7f0, ABISELECT(8,4), "S21925C7.s21925c7f0");
    check_field_offset(lv, s21925c7f1, ABISELECT(16,12), "S21925C7.s21925c7f1");
    check_field_offset(lv, s21925c7f2, ABISELECT(24,16), "S21925C7.s21925c7f2");
    check_field_offset(lv, s21925c7f3, ABISELECT(48,28), "S21925C7.s21925c7f3");
    check_field_offset(lv, s21925c7f4, ABISELECT(4800,4604), "S21925C7.s21925c7f4");
    check_field_offset(lv, s21925c7f5, ABISELECT(4904,4656), "S21925C7.s21925c7f5");
    test_class_info(&lv, &cd_S21925C7);
    dp->~S21925C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C7(Test_S21925C7, "S21925C7", ABISELECT(4944,4696));

#else // __cplusplus

extern void _ZN8S21925C7C1Ev();
extern void _ZN8S21925C7D1Ev();
Name_Map name_map_S21925C7[] = {
  NSPAIR(_ZN8S21925C7C1Ev),
  NSPAIR(_ZN8S21925C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21925C8;
extern VTBL_ENTRY _ZTI8S21925C8[];
extern  VTBL_ENTRY _ZTV8S21925C8[];
static Base_Class bases_S21925C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21925C7[];
extern void _ZN8S21925C83v33Ev();
extern void _ZN8S21925C83v34Ev();
extern void _ZN8S21925C83v35Ev();
extern void _ZN8S21925C83v36Ev();
extern void _ZN8S21925C83v37Ev();
extern void _ZN8S21925C83v38Ev();
extern void _ZN8S21925C83v39Ev();
extern void _ZN8S21925C7D1Ev();
extern void _ZN8S21925C7D0Ev();
extern void _ZN8S21925C72v2Ev();
extern void _ZN8S21925C72v3Ev();
extern void _ZN8S21925C72v4Ev();
extern void _ZN8S21925C72v5Ev();
extern void _ZN8S21925C72v6Ev();
extern void _ZN8S21925C72v7Ev();
extern void _ZN8S21925C72v8Ev();
extern void _ZN8S21925C72v9Ev();
extern void _ZN8S21925C73v10Ev();
extern void _ZN8S21925C73v11Ev();
extern void _ZN8S21925C73v12Ev();
extern void _ZN8S21925C73v13Ev();
extern void _ZN8S21925C73v14Ev();
extern void _ZN8S21925C73v15Ev();
extern void _ZN8S21925C73v16Ev();
extern void _ZN8S21925C73v17Ev();
extern void _ZN8S21925C73v18Ev();
extern void _ZN8S21925C73v19Ev();
extern void _ZN8S21925C73v20Ev();
extern void _ZN8S21925C73v21Ev();
extern void _ZN8S21925C73v22Ev();
extern void _ZN8S21925C73v23Ev();
extern void _ZN8S21925C73v24Ev();
extern void _ZN8S21925C73v25Ev();
extern void _ZN8S21925C73v26Ev();
extern void _ZN8S21925C73v27Ev();
extern void _ZN8S21925C73v28Ev();
extern void _ZN8S21925C73v29Ev();
extern void _ZN8S21925C73v30Ev();
extern void _ZN8S21925C73v31Ev();
extern void _ZN8S21925C73v32Ev();
static  VTBL_ENTRY vtc_S21925C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21925C7[0]),
  (VTBL_ENTRY)&_ZN8S21925C83v33Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v34Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v35Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v36Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v37Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v38Ev,
  (VTBL_ENTRY)&_ZN8S21925C83v39Ev,
  (VTBL_ENTRY)&_ZN8S21925C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21925C7D0Ev,
  (VTBL_ENTRY)&_ZN8S21925C72v2Ev,
  (VTBL_ENTRY)&_ZN8S21925C72v3Ev,
  (VTBL_ENTRY)&_ZN8S21925C72v4Ev,
  (VTBL_ENTRY)&_ZN8S21925C72v5Ev,
  (VTBL_ENTRY)&_ZN8S21925C72v6Ev,
  (VTBL_ENTRY)&_ZN8S21925C72v7Ev,
  (VTBL_ENTRY)&_ZN8S21925C72v8Ev,
  (VTBL_ENTRY)&_ZN8S21925C72v9Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v10Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v11Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v12Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v13Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v14Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v15Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v16Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v17Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v18Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v19Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v20Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v21Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v22Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v23Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v24Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v25Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v26Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v27Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v28Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v29Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v30Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v31Ev,
  (VTBL_ENTRY)&_ZN8S21925C73v32Ev,
};
extern VTBL_ENTRY _ZTI8S21925C7[];
extern  VTBL_ENTRY _ZTV8S21925C7[];
Class_Descriptor cd_S21925C7 = {  "S21925C7", // class name
  bases_S21925C7, 1,
  &(vtc_S21925C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(4944,4696), // object size
  NSPAIRA(_ZTI8S21925C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S21925C7),42, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C30_nt  {
  void *s21925c30f0[3];
};
//SIG(-1 S21925C30_nt) C1{ Fp[3]}



//skip512 S21925C30_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C35_nt  {
  void  mf21925c35(); // _ZN12S21925C35_nt10mf21925c35Ev
};
//SIG(-1 S21925C35_nt) C1{ m}


void  S21925C35_nt ::mf21925c35(){}

//skip512 S21925C35_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C34_nt  {
  void *s21925c34f0;
  int s21925c34f1;
  ::S21925C35_nt s21925c34f2;
  ::S21925C35_nt s21925c34f3;
  void  mf21925c34(); // _ZN12S21925C34_nt10mf21925c34Ev
};
//SIG(-1 S21925C34_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S21925C34_nt ::mf21925c34(){}

//skip512 S21925C34_nt

#else // __cplusplus

Class_Descriptor cd_S21925C34_nt = {  "S21925C34_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C33_nt  : S21925C34_nt {
};
//SIG(-1 S21925C33_nt) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



//skip512 S21925C33_nt

#else // __cplusplus

extern Class_Descriptor cd_S21925C34_nt;
static Base_Class bases_S21925C33_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C34_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C42  {
  void  mf21925c42(); // _ZN9S21925C4210mf21925c42Ev
};
//SIG(-1 S21925C42) C1{ m}


void  S21925C42 ::mf21925c42(){}

static void Test_S21925C42()
{
  {
    init_simple_test("S21925C42");
    S21925C42 lv;
    check2(sizeof(lv), 1, "sizeof(S21925C42)");
    check2(__alignof__(lv), 1, "__alignof__(S21925C42)");
  }
}
static Arrange_To_Call_Me vS21925C42(Test_S21925C42, "S21925C42", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C41  {
  void *s21925c41f0;
  int s21925c41f1;
  ::S21925C42 s21925c41f2;
  ::S21925C42 s21925c41f3;
  void  mf21925c41(); // _ZN9S21925C4110mf21925c41Ev
};
//SIG(-1 S21925C41) C1{ m Fp Fi FC2{ m} FC2}


void  S21925C41 ::mf21925c41(){}

static void Test_S21925C41()
{
  {
    init_simple_test("S21925C41");
    S21925C41 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S21925C41)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C41)");
    check_field_offset(lv, s21925c41f0, 0, "S21925C41.s21925c41f0");
    check_field_offset(lv, s21925c41f1, ABISELECT(8,4), "S21925C41.s21925c41f1");
    check_field_offset(lv, s21925c41f2, ABISELECT(12,8), "S21925C41.s21925c41f2");
    check_field_offset(lv, s21925c41f3, ABISELECT(13,9), "S21925C41.s21925c41f3");
  }
}
static Arrange_To_Call_Me vS21925C41(Test_S21925C41, "S21925C41", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S21925C41 = {  "S21925C41", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C44_nt  {
  void *s21925c44f0[2];
  void  mf21925c44(); // _ZN12S21925C44_nt10mf21925c44Ev
};
//SIG(-1 S21925C44_nt) C1{ m Fp[2]}


void  S21925C44_nt ::mf21925c44(){}

//skip512 S21925C44_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C32  {
  char s21925c32f0;
  void *s21925c32f1;
  int s21925c32f2[4];
  char s21925c32f3[2];
  ::S21925C33_nt s21925c32f4;
  ::S21925C33_nt s21925c32f5;
  ::S21925C41 s21925c32f6;
  void *s21925c32f7;
  char s21925c32f8[2];
  int s21925c32f9[2];
  ::S21925C44_nt s21925c32f10;
  ::S21925C2_nt s21925c32f11;
  ::S21925C4_nt s21925c32f12;
  ::S21925C2_nt s21925c32f13;
  void  mf21925c32(); // _ZN9S21925C3210mf21925c32Ev
  virtual  ~S21925C32(); // _ZN9S21925C32D1Ev
  S21925C32(); // tgen
};
//SIG(-1 S21925C32) C1{ vd m Fc Fp Fi[4] Fc[2] FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC2 FC5{ m Fp Fi FC6{ m} FC6} Fp Fc[2] Fi[2] FC7{ m Fp[2]} FC8{ m FC9{ Fl[4]}} FC10{ m Fp FC11{ Fi[4]}} FC8}


void  S21925C32 ::mf21925c32(){}
 S21925C32 ::~S21925C32(){ note_dtor("S21925C32", this);}
S21925C32 ::S21925C32(){ note_ctor("S21925C32", this);} // tgen

static void Test_S21925C32()
{
  extern Class_Descriptor cd_S21925C32;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,37)];
    init_test(&cd_S21925C32, buf);
    S21925C32 *dp, &lv = *(dp=new (buf) S21925C32());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,144), "sizeof(S21925C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C32)");
    check_field_offset(lv, s21925c32f0, ABISELECT(8,4), "S21925C32.s21925c32f0");
    check_field_offset(lv, s21925c32f1, ABISELECT(16,8), "S21925C32.s21925c32f1");
    check_field_offset(lv, s21925c32f2, ABISELECT(24,12), "S21925C32.s21925c32f2");
    check_field_offset(lv, s21925c32f3, ABISELECT(40,28), "S21925C32.s21925c32f3");
    check_field_offset(lv, s21925c32f4, ABISELECT(48,32), "S21925C32.s21925c32f4");
    check_field_offset(lv, s21925c32f5, ABISELECT(64,44), "S21925C32.s21925c32f5");
    check_field_offset(lv, s21925c32f6, ABISELECT(80,56), "S21925C32.s21925c32f6");
    check_field_offset(lv, s21925c32f7, ABISELECT(96,68), "S21925C32.s21925c32f7");
    check_field_offset(lv, s21925c32f8, ABISELECT(104,72), "S21925C32.s21925c32f8");
    check_field_offset(lv, s21925c32f9, ABISELECT(108,76), "S21925C32.s21925c32f9");
    check_field_offset(lv, s21925c32f10, ABISELECT(120,84), "S21925C32.s21925c32f10");
    check_field_offset(lv, s21925c32f11, ABISELECT(136,92), "S21925C32.s21925c32f11");
    check_field_offset(lv, s21925c32f12, ABISELECT(168,108), "S21925C32.s21925c32f12");
    check_field_offset(lv, s21925c32f13, ABISELECT(192,128), "S21925C32.s21925c32f13");
    test_class_info(&lv, &cd_S21925C32);
    dp->~S21925C32();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C32(Test_S21925C32, "S21925C32", ABISELECT(224,144));

#else // __cplusplus

extern void _ZN9S21925C32C1Ev();
extern void _ZN9S21925C32D1Ev();
Name_Map name_map_S21925C32[] = {
  NSPAIR(_ZN9S21925C32C1Ev),
  NSPAIR(_ZN9S21925C32D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21925C32[];
extern void _ZN9S21925C32D1Ev();
extern void _ZN9S21925C32D0Ev();
static  VTBL_ENTRY vtc_S21925C32[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C32[0]),
  (VTBL_ENTRY)&_ZN9S21925C32D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C32D0Ev,
};
extern VTBL_ENTRY _ZTI9S21925C32[];
extern  VTBL_ENTRY _ZTV9S21925C32[];
Class_Descriptor cd_S21925C32 = {  "S21925C32", // class name
  0,0,//no base classes
  &(vtc_S21925C32[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,144), // object size
  NSPAIRA(_ZTI9S21925C32),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21925C32),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C31  {
  ::S21925C32 s21925c31f0;
  ::S21925C2_nt s21925c31f1;
  char s21925c31f2;
  virtual  ~S21925C31(); // _ZN9S21925C31D1Ev
  virtual void  v201(); // _ZN9S21925C314v201Ev
  virtual void  v202(); // _ZN9S21925C314v202Ev
  virtual void  v203(); // _ZN9S21925C314v203Ev
  virtual void  v204(); // _ZN9S21925C314v204Ev
  S21925C31(); // tgen
};
//SIG(-1 S21925C31) C1{ vd v1 v2 v3 v4 FC2{ vd m Fc Fp Fi[4] Fc[2] FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC3 FC6{ m Fp Fi FC7{ m} FC7} Fp Fc[2] Fi[2] FC8{ m Fp[2]} FC9{ m FC10{ Fl[4]}} FC11{ m Fp FC12{ Fi[4]}} FC9} FC9 Fc}


 S21925C31 ::~S21925C31(){ note_dtor("S21925C31", this);}
void  S21925C31 ::v201(){vfunc_called(this, "_ZN9S21925C314v201Ev");}
void  S21925C31 ::v202(){vfunc_called(this, "_ZN9S21925C314v202Ev");}
void  S21925C31 ::v203(){vfunc_called(this, "_ZN9S21925C314v203Ev");}
void  S21925C31 ::v204(){vfunc_called(this, "_ZN9S21925C314v204Ev");}
S21925C31 ::S21925C31(){ note_ctor("S21925C31", this);} // tgen

static void Test_S21925C31()
{
  extern Class_Descriptor cd_S21925C31;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,43)];
    init_test(&cd_S21925C31, buf);
    S21925C31 *dp, &lv = *(dp=new (buf) S21925C31());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,168), "sizeof(S21925C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C31)");
    check_field_offset(lv, s21925c31f0, ABISELECT(8,4), "S21925C31.s21925c31f0");
    check_field_offset(lv, s21925c31f1, ABISELECT(232,148), "S21925C31.s21925c31f1");
    check_field_offset(lv, s21925c31f2, ABISELECT(264,164), "S21925C31.s21925c31f2");
    test_class_info(&lv, &cd_S21925C31);
    dp->~S21925C31();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C31(Test_S21925C31, "S21925C31", ABISELECT(272,168));

#else // __cplusplus

extern void _ZN9S21925C31C1Ev();
extern void _ZN9S21925C31D1Ev();
Name_Map name_map_S21925C31[] = {
  NSPAIR(_ZN9S21925C31C1Ev),
  NSPAIR(_ZN9S21925C31D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21925C31[];
extern void _ZN9S21925C31D1Ev();
extern void _ZN9S21925C31D0Ev();
extern void _ZN9S21925C314v201Ev();
extern void _ZN9S21925C314v202Ev();
extern void _ZN9S21925C314v203Ev();
extern void _ZN9S21925C314v204Ev();
static  VTBL_ENTRY vtc_S21925C31[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C31[0]),
  (VTBL_ENTRY)&_ZN9S21925C31D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C31D0Ev,
  (VTBL_ENTRY)&_ZN9S21925C314v201Ev,
  (VTBL_ENTRY)&_ZN9S21925C314v202Ev,
  (VTBL_ENTRY)&_ZN9S21925C314v203Ev,
  (VTBL_ENTRY)&_ZN9S21925C314v204Ev,
};
extern VTBL_ENTRY _ZTI9S21925C31[];
extern  VTBL_ENTRY _ZTV9S21925C31[];
Class_Descriptor cd_S21925C31 = {  "S21925C31", // class name
  0,0,//no base classes
  &(vtc_S21925C31[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,168), // object size
  NSPAIRA(_ZTI9S21925C31),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21925C31),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C47  {
  int s21925c47f0;
  char s21925c47f1;
  __tsi64 s21925c47f2;
  int s21925c47f3;
  void  mf21925c47(); // _ZN9S21925C4710mf21925c47Ev
};
//SIG(1 S21925C47) C1{ m Fi Fc FL Fi}


void  S21925C47 ::mf21925c47(){}

static void Test_S21925C47()
{
  {
    init_simple_test("S21925C47");
    S21925C47 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S21925C47)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C47)");
    check_field_offset(lv, s21925c47f0, 0, "S21925C47.s21925c47f0");
    check_field_offset(lv, s21925c47f1, 4, "S21925C47.s21925c47f1");
    check_field_offset(lv, s21925c47f2, 8, "S21925C47.s21925c47f2");
    check_field_offset(lv, s21925c47f3, 16, "S21925C47.s21925c47f3");
  }
}
static Arrange_To_Call_Me vS21925C47(Test_S21925C47, "S21925C47", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C46  {
  ::S21925C47 s21925c46f0[5];
  virtual  ~S21925C46(); // _ZN9S21925C46D1Ev
  virtual void  v205(); // _ZN9S21925C464v205Ev
  virtual void  v206(); // _ZN9S21925C464v206Ev
  virtual void  v207(); // _ZN9S21925C464v207Ev
  virtual void  v208(); // _ZN9S21925C464v208Ev
  virtual void  v209(); // _ZN9S21925C464v209Ev
  S21925C46(); // tgen
};
//SIG(-1 S21925C46) C1{ vd v1 v2 v3 v4 v5 FC2{ m Fi Fc FL Fi}[5]}


 S21925C46 ::~S21925C46(){ note_dtor("S21925C46", this);}
void  S21925C46 ::v205(){vfunc_called(this, "_ZN9S21925C464v205Ev");}
void  S21925C46 ::v206(){vfunc_called(this, "_ZN9S21925C464v206Ev");}
void  S21925C46 ::v207(){vfunc_called(this, "_ZN9S21925C464v207Ev");}
void  S21925C46 ::v208(){vfunc_called(this, "_ZN9S21925C464v208Ev");}
void  S21925C46 ::v209(){vfunc_called(this, "_ZN9S21925C464v209Ev");}
S21925C46 ::S21925C46(){ note_ctor("S21925C46", this);} // tgen

static void Test_S21925C46()
{
  extern Class_Descriptor cd_S21925C46;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,27)];
    init_test(&cd_S21925C46, buf);
    S21925C46 *dp, &lv = *(dp=new (buf) S21925C46());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,104), "sizeof(S21925C46)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C46)");
    check_field_offset(lv, s21925c46f0, ABISELECT(8,4), "S21925C46.s21925c46f0");
    test_class_info(&lv, &cd_S21925C46);
    dp->~S21925C46();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C46(Test_S21925C46, "S21925C46", ABISELECT(128,104));

#else // __cplusplus

extern void _ZN9S21925C46C1Ev();
extern void _ZN9S21925C46D1Ev();
Name_Map name_map_S21925C46[] = {
  NSPAIR(_ZN9S21925C46C1Ev),
  NSPAIR(_ZN9S21925C46D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21925C46[];
extern void _ZN9S21925C46D1Ev();
extern void _ZN9S21925C46D0Ev();
extern void _ZN9S21925C464v205Ev();
extern void _ZN9S21925C464v206Ev();
extern void _ZN9S21925C464v207Ev();
extern void _ZN9S21925C464v208Ev();
extern void _ZN9S21925C464v209Ev();
static  VTBL_ENTRY vtc_S21925C46[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C46[0]),
  (VTBL_ENTRY)&_ZN9S21925C46D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C46D0Ev,
  (VTBL_ENTRY)&_ZN9S21925C464v205Ev,
  (VTBL_ENTRY)&_ZN9S21925C464v206Ev,
  (VTBL_ENTRY)&_ZN9S21925C464v207Ev,
  (VTBL_ENTRY)&_ZN9S21925C464v208Ev,
  (VTBL_ENTRY)&_ZN9S21925C464v209Ev,
};
extern VTBL_ENTRY _ZTI9S21925C46[];
extern  VTBL_ENTRY _ZTV9S21925C46[];
Class_Descriptor cd_S21925C46 = {  "S21925C46", // class name
  0,0,//no base classes
  &(vtc_S21925C46[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,104), // object size
  NSPAIRA(_ZTI9S21925C46),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21925C46),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C29  {
  int s21925c29f0[3];
  void *s21925c29f1;
  ::S21925C30_nt s21925c29f2;
  void *s21925c29f3;
  int s21925c29f4[2];
  void *s21925c29f5;
  ::S21925C31 s21925c29f6;
  ::S21925C46 s21925c29f7;
  void  mf21925c29(); // _ZN9S21925C2910mf21925c29Ev
  virtual  ~S21925C29(); // _ZN9S21925C29D1Ev
  S21925C29(); // tgen
};
//SIG(-1 S21925C29) C1{ vd m Fi[3] Fp FC2{ Fp[3]} Fp Fi[2] Fp FC3{ vd v1 v2 v3 v4 FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC5 FC8{ m Fp Fi FC9{ m} FC9} Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FC12{ Fl[4]}} FC13{ m Fp FC14{ Fi[4]}} FC11} FC11 Fc} FC15{ vd v5 v6 v7 v8 v9 FC16{ m Fi Fc FL Fi}[5]}}


void  S21925C29 ::mf21925c29(){}
 S21925C29 ::~S21925C29(){ note_dtor("S21925C29", this);}
S21925C29 ::S21925C29(){ note_ctor("S21925C29", this);} // tgen

static void Test_S21925C29()
{
  extern Class_Descriptor cd_S21925C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(61,81)];
    init_test(&cd_S21925C29, buf);
    S21925C29 *dp, &lv = *(dp=new (buf) S21925C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,320), "sizeof(S21925C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C29)");
    check_field_offset(lv, s21925c29f0, ABISELECT(8,4), "S21925C29.s21925c29f0");
    check_field_offset(lv, s21925c29f1, ABISELECT(24,16), "S21925C29.s21925c29f1");
    check_field_offset(lv, s21925c29f2, ABISELECT(32,20), "S21925C29.s21925c29f2");
    check_field_offset(lv, s21925c29f3, ABISELECT(56,32), "S21925C29.s21925c29f3");
    check_field_offset(lv, s21925c29f4, ABISELECT(64,36), "S21925C29.s21925c29f4");
    check_field_offset(lv, s21925c29f5, ABISELECT(72,44), "S21925C29.s21925c29f5");
    check_field_offset(lv, s21925c29f6, ABISELECT(80,48), "S21925C29.s21925c29f6");
    check_field_offset(lv, s21925c29f7, ABISELECT(352,216), "S21925C29.s21925c29f7");
    test_class_info(&lv, &cd_S21925C29);
    dp->~S21925C29();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C29(Test_S21925C29, "S21925C29", ABISELECT(480,320));

#else // __cplusplus

extern void _ZN9S21925C29C1Ev();
extern void _ZN9S21925C29D1Ev();
Name_Map name_map_S21925C29[] = {
  NSPAIR(_ZN9S21925C29C1Ev),
  NSPAIR(_ZN9S21925C29D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21925C29[];
extern void _ZN9S21925C29D1Ev();
extern void _ZN9S21925C29D0Ev();
static  VTBL_ENTRY vtc_S21925C29[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21925C29[0]),
  (VTBL_ENTRY)&_ZN9S21925C29D1Ev,
  (VTBL_ENTRY)&_ZN9S21925C29D0Ev,
};
extern VTBL_ENTRY _ZTI9S21925C29[];
extern  VTBL_ENTRY _ZTV9S21925C29[];
Class_Descriptor cd_S21925C29 = {  "S21925C29", // class name
  0,0,//no base classes
  &(vtc_S21925C29[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(480,320), // object size
  NSPAIRA(_ZTI9S21925C29),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21925C29),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C49_nt  {
  void *s21925c49f0[4];
  void  mf21925c49(); // _ZN12S21925C49_nt10mf21925c49Ev
};
//SIG(-1 S21925C49_nt) C1{ m Fp[4]}


void  S21925C49_nt ::mf21925c49(){}

//skip512 S21925C49_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C52_nt  {
  int s21925c52f0[4];
  void  mf21925c52(); // _ZN12S21925C52_nt10mf21925c52Ev
};
//SIG(-1 S21925C52_nt) C1{ m Fi[4]}


void  S21925C52_nt ::mf21925c52(){}

//skip512 S21925C52_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C50  {
  char s21925c50f0;
  int s21925c50f1;
  ::S21925C22_nt s21925c50f2;
  int s21925c50f3[2];
  ::S21925C52_nt s21925c50f4;
  int s21925c50f5;
  void  mf21925c50(); // _ZN9S21925C5010mf21925c50Ev
};
//SIG(-1 S21925C50) C1{ m Fc Fi FC2{ m Fi[3]} Fi[2] FC3{ m Fi[4]} Fi}


void  S21925C50 ::mf21925c50(){}

static void Test_S21925C50()
{
  {
    init_simple_test("S21925C50");
    S21925C50 lv;
    check2(sizeof(lv), 48, "sizeof(S21925C50)");
    check2(__alignof__(lv), 4, "__alignof__(S21925C50)");
    check_field_offset(lv, s21925c50f0, 0, "S21925C50.s21925c50f0");
    check_field_offset(lv, s21925c50f1, 4, "S21925C50.s21925c50f1");
    check_field_offset(lv, s21925c50f2, 8, "S21925C50.s21925c50f2");
    check_field_offset(lv, s21925c50f3, 20, "S21925C50.s21925c50f3");
    check_field_offset(lv, s21925c50f4, 28, "S21925C50.s21925c50f4");
    check_field_offset(lv, s21925c50f5, 44, "S21925C50.s21925c50f5");
  }
}
static Arrange_To_Call_Me vS21925C50(Test_S21925C50, "S21925C50", 48);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C53  {
  int s21925c53f0[5];
  void *s21925c53f1;
  void  mf21925c53(); // _ZN9S21925C5310mf21925c53Ev
};
//SIG(-1 S21925C53) C1{ m Fi[5] Fp}


void  S21925C53 ::mf21925c53(){}

static void Test_S21925C53()
{
  {
    init_simple_test("S21925C53");
    S21925C53 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S21925C53)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C53)");
    check_field_offset(lv, s21925c53f0, 0, "S21925C53.s21925c53f0");
    check_field_offset(lv, s21925c53f1, ABISELECT(24,20), "S21925C53.s21925c53f1");
  }
}
static Arrange_To_Call_Me vS21925C53(Test_S21925C53, "S21925C53", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C48  {
  ::S21925C49_nt s21925c48f0;
  int s21925c48f1;
  char s21925c48f2;
  int s21925c48f3[3];
  char s21925c48f4[2];
  int s21925c48f5;
  ::S21925C50 s21925c48f6;
  int s21925c48f7;
  void *s21925c48f8[3];
  int s21925c48f9;
  void *s21925c48f10;
  int s21925c48f11[2];
  void *s21925c48f12[2];
  int s21925c48f13;
  void *s21925c48f14[2];
  int s21925c48f15[3];
  void *s21925c48f16[2];
  int s21925c48f17[8];
  char s21925c48f18;
  ::S21925C53 s21925c48f19;
  void  mf21925c48(); // _ZN9S21925C4810mf21925c48Ev
};
//SIG(-1 S21925C48) C1{ m FC2{ m Fp[4]} Fi Fc Fi[3] Fc[2] Fi FC3{ m Fc Fi FC4{ m Fi[3]} Fi[2] FC5{ m Fi[4]} Fi} Fi Fp[3] Fi Fp Fi[2] Fp[2] Fi Fp[2] Fi[3] Fp[2] Fi[8] Fc FC6{ m Fi[5] Fp}}


void  S21925C48 ::mf21925c48(){}

static void Test_S21925C48()
{
  {
    init_simple_test("S21925C48");
    S21925C48 lv;
    check2(sizeof(lv), ABISELECT(304,224), "sizeof(S21925C48)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C48)");
    check_field_offset(lv, s21925c48f0, 0, "S21925C48.s21925c48f0");
    check_field_offset(lv, s21925c48f1, ABISELECT(32,16), "S21925C48.s21925c48f1");
    check_field_offset(lv, s21925c48f2, ABISELECT(36,20), "S21925C48.s21925c48f2");
    check_field_offset(lv, s21925c48f3, ABISELECT(40,24), "S21925C48.s21925c48f3");
    check_field_offset(lv, s21925c48f4, ABISELECT(52,36), "S21925C48.s21925c48f4");
    check_field_offset(lv, s21925c48f5, ABISELECT(56,40), "S21925C48.s21925c48f5");
    check_field_offset(lv, s21925c48f6, ABISELECT(60,44), "S21925C48.s21925c48f6");
    check_field_offset(lv, s21925c48f7, ABISELECT(108,92), "S21925C48.s21925c48f7");
    check_field_offset(lv, s21925c48f8, ABISELECT(112,96), "S21925C48.s21925c48f8");
    check_field_offset(lv, s21925c48f9, ABISELECT(136,108), "S21925C48.s21925c48f9");
    check_field_offset(lv, s21925c48f10, ABISELECT(144,112), "S21925C48.s21925c48f10");
    check_field_offset(lv, s21925c48f11, ABISELECT(152,116), "S21925C48.s21925c48f11");
    check_field_offset(lv, s21925c48f12, ABISELECT(160,124), "S21925C48.s21925c48f12");
    check_field_offset(lv, s21925c48f13, ABISELECT(176,132), "S21925C48.s21925c48f13");
    check_field_offset(lv, s21925c48f14, ABISELECT(184,136), "S21925C48.s21925c48f14");
    check_field_offset(lv, s21925c48f15, ABISELECT(200,144), "S21925C48.s21925c48f15");
    check_field_offset(lv, s21925c48f16, ABISELECT(216,156), "S21925C48.s21925c48f16");
    check_field_offset(lv, s21925c48f17, ABISELECT(232,164), "S21925C48.s21925c48f17");
    check_field_offset(lv, s21925c48f18, ABISELECT(264,196), "S21925C48.s21925c48f18");
    check_field_offset(lv, s21925c48f19, ABISELECT(272,200), "S21925C48.s21925c48f19");
  }
}
static Arrange_To_Call_Me vS21925C48(Test_S21925C48, "S21925C48", ABISELECT(304,224));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C54  {
  char s21925c54f0[4];
  int s21925c54f1;
  char s21925c54f2;
  int s21925c54f3;
  short s21925c54f4;
  int s21925c54f5[4];
  __tsi64 s21925c54f6[3];
  int s21925c54f7[8];
  ::S21925C5_nt s21925c54f8;
  int s21925c54f9[2];
};
//SIG(-1 S21925C54) C1{ Fc[4] Fi Fc Fi Fs Fi[4] FL[3] Fi[8] FC2{ Fi[4]} Fi[2]}



static void Test_S21925C54()
{
  {
    init_simple_test("S21925C54");
    S21925C54 lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S21925C54)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C54)");
    check_field_offset(lv, s21925c54f0, 0, "S21925C54.s21925c54f0");
    check_field_offset(lv, s21925c54f1, 4, "S21925C54.s21925c54f1");
    check_field_offset(lv, s21925c54f2, 8, "S21925C54.s21925c54f2");
    check_field_offset(lv, s21925c54f3, 12, "S21925C54.s21925c54f3");
    check_field_offset(lv, s21925c54f4, 16, "S21925C54.s21925c54f4");
    check_field_offset(lv, s21925c54f5, 20, "S21925C54.s21925c54f5");
    check_field_offset(lv, s21925c54f6, ABISELECT(40,36), "S21925C54.s21925c54f6");
    check_field_offset(lv, s21925c54f7, ABISELECT(64,60), "S21925C54.s21925c54f7");
    check_field_offset(lv, s21925c54f8, ABISELECT(96,92), "S21925C54.s21925c54f8");
    check_field_offset(lv, s21925c54f9, ABISELECT(112,108), "S21925C54.s21925c54f9");
  }
}
static Arrange_To_Call_Me vS21925C54(Test_S21925C54, "S21925C54", ABISELECT(120,116));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C56  {
  char s21925c56f0[8];
  int s21925c56f1[2];
  char s21925c56f2[3];
  void  mf21925c56(); // _ZN9S21925C5610mf21925c56Ev
};
//SIG(-1 S21925C56) C1{ m Fc[8] Fi[2] Fc[3]}


void  S21925C56 ::mf21925c56(){}

static void Test_S21925C56()
{
  {
    init_simple_test("S21925C56");
    S21925C56 lv;
    check2(sizeof(lv), 20, "sizeof(S21925C56)");
    check2(__alignof__(lv), 4, "__alignof__(S21925C56)");
    check_field_offset(lv, s21925c56f0, 0, "S21925C56.s21925c56f0");
    check_field_offset(lv, s21925c56f1, 8, "S21925C56.s21925c56f1");
    check_field_offset(lv, s21925c56f2, 16, "S21925C56.s21925c56f2");
  }
}
static Arrange_To_Call_Me vS21925C56(Test_S21925C56, "S21925C56", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C55  {
  char s21925c55f0[3];
  int s21925c55f1;
  char s21925c55f2[3];
  ::S21925C56 s21925c55f3;
  ::S21925C56 s21925c55f4;
  ::S21925C56 s21925c55f5;
};
//SIG(-1 S21925C55) C1{ Fc[3] Fi Fc[3] FC2{ m Fc[8] Fi[2] Fc[3]} FC2 FC2}



static void Test_S21925C55()
{
  {
    init_simple_test("S21925C55");
    S21925C55 lv;
    check2(sizeof(lv), 72, "sizeof(S21925C55)");
    check2(__alignof__(lv), 4, "__alignof__(S21925C55)");
    check_field_offset(lv, s21925c55f0, 0, "S21925C55.s21925c55f0");
    check_field_offset(lv, s21925c55f1, 4, "S21925C55.s21925c55f1");
    check_field_offset(lv, s21925c55f2, 8, "S21925C55.s21925c55f2");
    check_field_offset(lv, s21925c55f3, 12, "S21925C55.s21925c55f3");
    check_field_offset(lv, s21925c55f4, 32, "S21925C55.s21925c55f4");
    check_field_offset(lv, s21925c55f5, 52, "S21925C55.s21925c55f5");
  }
}
static Arrange_To_Call_Me vS21925C55(Test_S21925C55, "S21925C55", 72);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C57  {
  void *s21925c57f0;
  char s21925c57f1;
  long s21925c57f2;
  void  mf21925c57(); // _ZN9S21925C5710mf21925c57Ev
};
//SIG(-1 S21925C57) C1{ m Fp Fc Fl}


void  S21925C57 ::mf21925c57(){}

static void Test_S21925C57()
{
  {
    init_simple_test("S21925C57");
    S21925C57 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21925C57)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C57)");
    check_field_offset(lv, s21925c57f0, 0, "S21925C57.s21925c57f0");
    check_field_offset(lv, s21925c57f1, ABISELECT(8,4), "S21925C57.s21925c57f1");
    check_field_offset(lv, s21925c57f2, ABISELECT(16,8), "S21925C57.s21925c57f2");
  }
}
static Arrange_To_Call_Me vS21925C57(Test_S21925C57, "S21925C57", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21925C1  {
  void *s21925c1f0;
  int s21925c1f1[3];
  ::S21925C2_nt s21925c1f2;
  ::S21925C2_nt s21925c1f3;
  ::S21925C4_nt s21925c1f4;
  ::S21925C6 s21925c1f5;
  void *s21925c1f6[2];
  int s21925c1f7;
  void *s21925c1f8;
  int s21925c1f9;
  void *s21925c1f10[3];
  ::S21925C7 s21925c1f11;
  ::S21925C29 s21925c1f12;
  void *s21925c1f13;
  char s21925c1f14;
  void *s21925c1f15;
  char s21925c1f16;
  void *s21925c1f17;
  char s21925c1f18;
  void *s21925c1f19;
  char s21925c1f20;
  ::S21925C48 s21925c1f21;
  int s21925c1f22;
  ::S21925C54 s21925c1f23;
  ::S21925C54 s21925c1f24[8];
  ::S21925C54 s21925c1f25[2];
  ::S21925C55 s21925c1f26;
  char s21925c1f27;
  int s21925c1f28;
  char s21925c1f29;
  void *s21925c1f30;
  char s21925c1f31[2];
  ::S21925C57 s21925c1f32;
  char s21925c1f33;
  virtual  ~S21925C1(); // _ZN8S21925C1D1Ev
  virtual void  v1(); // _ZN8S21925C12v1Ev
  S21925C1(); // tgen
};
//SIG(1 S21925C1) C1{ vd v1 Fp Fi[3] FC2{ m FC3{ Fl[4]}} FC2 FC4{ m Fp FC5{ Fi[4]}} FC6{ vd m Fp[2] Fi} Fp[2] Fi Fp Fi Fp[3] FC7{ BC8{ v33 v34 v35 v36 v37 v38 v39} vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fi[2] Fp FC9{ m Fp[3]} FC10{ BC8 vd v40 v41 v42 v43 v44 v45 v46 Fp FC11{ BC12{ vd v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fp Fi} vd v47 v48 v49 v50} FC13{ BC12 vd v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94} FC14{ BC12 vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112} FC15{ BC12 vd v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133} FC16{ BC12 vd v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155} FC15 FC14 FC17{ BC12 vd v156 v157 v158 v159 v160 v161} Fp[4] FC18{ m Fc[6] Fp Fi[2] FC19{ vd m Fi[2] FL[3] Fc[2048] Fi[6] FL Fi[4] Fp[2] Fc} Fi[2]} FC20{ m Fi[3]} FC21{ m Fc} FC22{ m Fp Fi[3] FC19 FC23{ vd m Fi[2] FL Fi[4]} Fi[6] FC5 Fi[4]} Fp Fi[3]} FC24{ vd m Fp Fi Fp[9] Fi} FC25{ FL[2] Fi[6]}} FC26{ vd m Fi[3] Fp FC27{ Fp[3]} Fp Fi[2] Fp FC28{ vd v162 v163 v164 v165 FC29{ vd m Fc Fp Fi[4] Fc[2] FC30{ BC31{ m Fp Fi FC32{ m} FC32}} FC30 FC33{ m Fp Fi FC34{ m} FC34} Fp Fc[2] Fi[2] FC35{ m Fp[2]} FC2 FC4 FC2} FC2 Fc} FC36{ vd v166 v167 v168 v169 v170 FC37{ m Fi Fc FL Fi}[5]}} Fp Fc Fp Fc Fp Fc Fp Fc FC38{ m FC39{ m Fp[4]} Fi Fc Fi[3] Fc[2] Fi FC40{ m Fc Fi FC20 Fi[2] FC41{ m Fi[4]} Fi} Fi Fp[3] Fi Fp Fi[2] Fp[2] Fi Fp[2] Fi[3] Fp[2] Fi[8] Fc FC42{ m Fi[5] Fp}} Fi FC43{ Fc[4] Fi Fc Fi Fs Fi[4] FL[3] Fi[8] FC5 Fi[2]} FC43[8] FC43[2] FC44{ Fc[3] Fi Fc[3] FC45{ m Fc[8] Fi[2] Fc[3]} FC45 FC45} Fc Fi Fc Fp Fc[2] FC46{ m Fp Fc Fl} Fc}


 S21925C1 ::~S21925C1(){ note_dtor("S21925C1", this);}
void  S21925C1 ::v1(){vfunc_called(this, "_ZN8S21925C12v1Ev");}
S21925C1 ::S21925C1(){ note_ctor("S21925C1", this);} // tgen

static void Test_S21925C1()
{
  extern Class_Descriptor cd_S21925C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(935,1696)];
    init_test(&cd_S21925C1, buf);
    S21925C1 *dp, &lv = *(dp=new (buf) S21925C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7472,6780), "sizeof(S21925C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21925C1)");
    check_field_offset(lv, s21925c1f0, ABISELECT(8,4), "S21925C1.s21925c1f0");
    check_field_offset(lv, s21925c1f1, ABISELECT(16,8), "S21925C1.s21925c1f1");
    check_field_offset(lv, s21925c1f2, ABISELECT(32,20), "S21925C1.s21925c1f2");
    check_field_offset(lv, s21925c1f3, ABISELECT(64,36), "S21925C1.s21925c1f3");
    check_field_offset(lv, s21925c1f4, ABISELECT(96,52), "S21925C1.s21925c1f4");
    check_field_offset(lv, s21925c1f5, ABISELECT(120,72), "S21925C1.s21925c1f5");
    check_field_offset(lv, s21925c1f6, ABISELECT(152,88), "S21925C1.s21925c1f6");
    check_field_offset(lv, s21925c1f7, ABISELECT(168,96), "S21925C1.s21925c1f7");
    check_field_offset(lv, s21925c1f8, ABISELECT(176,100), "S21925C1.s21925c1f8");
    check_field_offset(lv, s21925c1f9, ABISELECT(184,104), "S21925C1.s21925c1f9");
    check_field_offset(lv, s21925c1f10, ABISELECT(192,108), "S21925C1.s21925c1f10");
    check_field_offset(lv, s21925c1f11, ABISELECT(216,120), "S21925C1.s21925c1f11");
    check_field_offset(lv, s21925c1f12, ABISELECT(5160,4816), "S21925C1.s21925c1f12");
    check_field_offset(lv, s21925c1f13, ABISELECT(5640,5136), "S21925C1.s21925c1f13");
    check_field_offset(lv, s21925c1f14, ABISELECT(5648,5140), "S21925C1.s21925c1f14");
    check_field_offset(lv, s21925c1f15, ABISELECT(5656,5144), "S21925C1.s21925c1f15");
    check_field_offset(lv, s21925c1f16, ABISELECT(5664,5148), "S21925C1.s21925c1f16");
    check_field_offset(lv, s21925c1f17, ABISELECT(5672,5152), "S21925C1.s21925c1f17");
    check_field_offset(lv, s21925c1f18, ABISELECT(5680,5156), "S21925C1.s21925c1f18");
    check_field_offset(lv, s21925c1f19, ABISELECT(5688,5160), "S21925C1.s21925c1f19");
    check_field_offset(lv, s21925c1f20, ABISELECT(5696,5164), "S21925C1.s21925c1f20");
    check_field_offset(lv, s21925c1f21, ABISELECT(5704,5168), "S21925C1.s21925c1f21");
    check_field_offset(lv, s21925c1f22, ABISELECT(6008,5392), "S21925C1.s21925c1f22");
    check_field_offset(lv, s21925c1f23, ABISELECT(6016,5396), "S21925C1.s21925c1f23");
    check_field_offset(lv, s21925c1f24, ABISELECT(6136,5512), "S21925C1.s21925c1f24");
    check_field_offset(lv, s21925c1f25, ABISELECT(7096,6440), "S21925C1.s21925c1f25");
    check_field_offset(lv, s21925c1f26, ABISELECT(7336,6672), "S21925C1.s21925c1f26");
    check_field_offset(lv, s21925c1f27, ABISELECT(7408,6744), "S21925C1.s21925c1f27");
    check_field_offset(lv, s21925c1f28, ABISELECT(7412,6748), "S21925C1.s21925c1f28");
    check_field_offset(lv, s21925c1f29, ABISELECT(7416,6752), "S21925C1.s21925c1f29");
    check_field_offset(lv, s21925c1f30, ABISELECT(7424,6756), "S21925C1.s21925c1f30");
    check_field_offset(lv, s21925c1f31, ABISELECT(7432,6760), "S21925C1.s21925c1f31");
    check_field_offset(lv, s21925c1f32, ABISELECT(7440,6764), "S21925C1.s21925c1f32");
    check_field_offset(lv, s21925c1f33, ABISELECT(7464,6776), "S21925C1.s21925c1f33");
    test_class_info(&lv, &cd_S21925C1);
    dp->~S21925C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21925C1(Test_S21925C1, "S21925C1", ABISELECT(7472,6780));

#else // __cplusplus

extern void _ZN8S21925C1C1Ev();
extern void _ZN8S21925C1D1Ev();
Name_Map name_map_S21925C1[] = {
  NSPAIR(_ZN8S21925C1C1Ev),
  NSPAIR(_ZN8S21925C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21925C1[];
extern void _ZN8S21925C1D1Ev();
extern void _ZN8S21925C1D0Ev();
extern void _ZN8S21925C12v1Ev();
static  VTBL_ENTRY vtc_S21925C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21925C1[0]),
  (VTBL_ENTRY)&_ZN8S21925C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21925C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21925C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S21925C1[];
extern  VTBL_ENTRY _ZTV8S21925C1[];
Class_Descriptor cd_S21925C1 = {  "S21925C1", // class name
  0,0,//no base classes
  &(vtc_S21925C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7472,6780), // object size
  NSPAIRA(_ZTI8S21925C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21925C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21926C3_nt  {
  __tsi64 s21926c3f0[4];
};
//SIG(-1 S21926C3_nt) C1{ FL[4]}



//skip512 S21926C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21926C2_nt  {
  ::S21926C3_nt s21926c2f0;
  void  mf21926c2(); // _ZN11S21926C2_nt9mf21926c2Ev
};
//SIG(-1 S21926C2_nt) C1{ m FC2{ FL[4]}}


void  S21926C2_nt ::mf21926c2(){}

//skip512 S21926C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21926C37  : S21925C41 {
};
//SIG(-1 S21926C37) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



static void Test_S21926C37()
{
  extern Class_Descriptor cd_S21926C37;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S21926C37, buf);
    S21926C37 &lv = *(new (buf) S21926C37());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S21926C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21926C37)");
    check_base_class_offset(lv, (S21925C41*), 0, "S21926C37");
    test_class_info(&lv, &cd_S21926C37);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21926C37(Test_S21926C37, "S21926C37", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S21925C41;
static Base_Class bases_S21926C37[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C41,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S21926C37 = {  "S21926C37", // class name
  bases_S21926C37, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21926C32  {
  char s21926c32f0;
  void *s21926c32f1;
  int s21926c32f2[4];
  char s21926c32f3[2];
  ::S21925C33_nt s21926c32f4;
  ::S21926C37 s21926c32f5;
  ::S21925C34_nt s21926c32f6;
  void *s21926c32f7;
  char s21926c32f8[2];
  int s21926c32f9[2];
  ::S21925C44_nt s21926c32f10;
  ::S21926C2_nt s21926c32f11;
  ::S21925C4_nt s21926c32f12;
  ::S21926C2_nt s21926c32f13;
  void  mf21926c32(); // _ZN9S21926C3210mf21926c32Ev
  virtual  ~S21926C32(); // _ZN9S21926C32D1Ev
  S21926C32(); // tgen
};
//SIG(-1 S21926C32) C1{ vd m Fc Fp Fi[4] Fc[2] FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC3 Fp Fc[2] Fi[2] FC8{ m Fp[2]} FC9{ m FC10{ FL[4]}} FC11{ m Fp FC12{ Fi[4]}} FC9}


void  S21926C32 ::mf21926c32(){}
 S21926C32 ::~S21926C32(){ note_dtor("S21926C32", this);}
S21926C32 ::S21926C32(){ note_ctor("S21926C32", this);} // tgen

static void Test_S21926C32()
{
  extern Class_Descriptor cd_S21926C32;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,45)];
    init_test(&cd_S21926C32, buf);
    S21926C32 *dp, &lv = *(dp=new (buf) S21926C32());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S21926C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21926C32)");
    check_field_offset(lv, s21926c32f0, ABISELECT(8,4), "S21926C32.s21926c32f0");
    check_field_offset(lv, s21926c32f1, ABISELECT(16,8), "S21926C32.s21926c32f1");
    check_field_offset(lv, s21926c32f2, ABISELECT(24,12), "S21926C32.s21926c32f2");
    check_field_offset(lv, s21926c32f3, ABISELECT(40,28), "S21926C32.s21926c32f3");
    check_field_offset(lv, s21926c32f4, ABISELECT(48,32), "S21926C32.s21926c32f4");
    check_field_offset(lv, s21926c32f5, ABISELECT(64,44), "S21926C32.s21926c32f5");
    check_field_offset(lv, s21926c32f6, ABISELECT(80,56), "S21926C32.s21926c32f6");
    check_field_offset(lv, s21926c32f7, ABISELECT(96,68), "S21926C32.s21926c32f7");
    check_field_offset(lv, s21926c32f8, ABISELECT(104,72), "S21926C32.s21926c32f8");
    check_field_offset(lv, s21926c32f9, ABISELECT(108,76), "S21926C32.s21926c32f9");
    check_field_offset(lv, s21926c32f10, ABISELECT(120,84), "S21926C32.s21926c32f10");
    check_field_offset(lv, s21926c32f11, ABISELECT(136,92), "S21926C32.s21926c32f11");
    check_field_offset(lv, s21926c32f12, ABISELECT(168,124), "S21926C32.s21926c32f12");
    check_field_offset(lv, s21926c32f13, ABISELECT(192,144), "S21926C32.s21926c32f13");
    test_class_info(&lv, &cd_S21926C32);
    dp->~S21926C32();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21926C32(Test_S21926C32, "S21926C32", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN9S21926C32C1Ev();
extern void _ZN9S21926C32D1Ev();
Name_Map name_map_S21926C32[] = {
  NSPAIR(_ZN9S21926C32C1Ev),
  NSPAIR(_ZN9S21926C32D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21926C32[];
extern void _ZN9S21926C32D1Ev();
extern void _ZN9S21926C32D0Ev();
static  VTBL_ENTRY vtc_S21926C32[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21926C32[0]),
  (VTBL_ENTRY)&_ZN9S21926C32D1Ev,
  (VTBL_ENTRY)&_ZN9S21926C32D0Ev,
};
extern VTBL_ENTRY _ZTI9S21926C32[];
extern  VTBL_ENTRY _ZTV9S21926C32[];
Class_Descriptor cd_S21926C32 = {  "S21926C32", // class name
  0,0,//no base classes
  &(vtc_S21926C32[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI9S21926C32),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21926C32),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21926C31  {
  ::S21926C32 s21926c31f0;
  ::S21926C2_nt s21926c31f1;
  char s21926c31f2;
  virtual  ~S21926C31(); // _ZN9S21926C31D1Ev
  virtual void  v201(); // _ZN9S21926C314v201Ev
  virtual void  v202(); // _ZN9S21926C314v202Ev
  virtual void  v203(); // _ZN9S21926C314v203Ev
  virtual void  v204(); // _ZN9S21926C314v204Ev
  S21926C31(); // tgen
};
//SIG(-1 S21926C31) C1{ vd v1 v2 v3 v4 FC2{ vd m Fc Fp Fi[4] Fc[2] FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC4 Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FC11{ FL[4]}} FC12{ m Fp FC13{ Fi[4]}} FC10} FC10 Fc}


 S21926C31 ::~S21926C31(){ note_dtor("S21926C31", this);}
void  S21926C31 ::v201(){vfunc_called(this, "_ZN9S21926C314v201Ev");}
void  S21926C31 ::v202(){vfunc_called(this, "_ZN9S21926C314v202Ev");}
void  S21926C31 ::v203(){vfunc_called(this, "_ZN9S21926C314v203Ev");}
void  S21926C31 ::v204(){vfunc_called(this, "_ZN9S21926C314v204Ev");}
S21926C31 ::S21926C31(){ note_ctor("S21926C31", this);} // tgen

static void Test_S21926C31()
{
  extern Class_Descriptor cd_S21926C31;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,55)];
    init_test(&cd_S21926C31, buf);
    S21926C31 *dp, &lv = *(dp=new (buf) S21926C31());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,216), "sizeof(S21926C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21926C31)");
    check_field_offset(lv, s21926c31f0, ABISELECT(8,4), "S21926C31.s21926c31f0");
    check_field_offset(lv, s21926c31f1, ABISELECT(232,180), "S21926C31.s21926c31f1");
    check_field_offset(lv, s21926c31f2, ABISELECT(264,212), "S21926C31.s21926c31f2");
    test_class_info(&lv, &cd_S21926C31);
    dp->~S21926C31();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21926C31(Test_S21926C31, "S21926C31", ABISELECT(272,216));

#else // __cplusplus

extern void _ZN9S21926C31C1Ev();
extern void _ZN9S21926C31D1Ev();
Name_Map name_map_S21926C31[] = {
  NSPAIR(_ZN9S21926C31C1Ev),
  NSPAIR(_ZN9S21926C31D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21926C31[];
extern void _ZN9S21926C31D1Ev();
extern void _ZN9S21926C31D0Ev();
extern void _ZN9S21926C314v201Ev();
extern void _ZN9S21926C314v202Ev();
extern void _ZN9S21926C314v203Ev();
extern void _ZN9S21926C314v204Ev();
static  VTBL_ENTRY vtc_S21926C31[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21926C31[0]),
  (VTBL_ENTRY)&_ZN9S21926C31D1Ev,
  (VTBL_ENTRY)&_ZN9S21926C31D0Ev,
  (VTBL_ENTRY)&_ZN9S21926C314v201Ev,
  (VTBL_ENTRY)&_ZN9S21926C314v202Ev,
  (VTBL_ENTRY)&_ZN9S21926C314v203Ev,
  (VTBL_ENTRY)&_ZN9S21926C314v204Ev,
};
extern VTBL_ENTRY _ZTI9S21926C31[];
extern  VTBL_ENTRY _ZTV9S21926C31[];
Class_Descriptor cd_S21926C31 = {  "S21926C31", // class name
  0,0,//no base classes
  &(vtc_S21926C31[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,216), // object size
  NSPAIRA(_ZTI9S21926C31),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21926C31),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21926C29  {
  int s21926c29f0[3];
  void *s21926c29f1;
  ::S21925C30_nt s21926c29f2;
  void *s21926c29f3;
  int s21926c29f4[2];
  void *s21926c29f5;
  ::S21926C31 s21926c29f6;
  ::S21925C46 s21926c29f7;
  void  mf21926c29(); // _ZN9S21926C2910mf21926c29Ev
  virtual  ~S21926C29(); // _ZN9S21926C29D1Ev
  S21926C29(); // tgen
};
//SIG(-1 S21926C29) C1{ vd m Fi[3] Fp FC2{ Fp[3]} Fp Fi[2] Fp FC3{ vd v1 v2 v3 v4 FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ BC9{ m Fp Fi FC10{ m} FC10}} FC6 Fp Fc[2] Fi[2] FC11{ m Fp[2]} FC12{ m FC13{ FL[4]}} FC14{ m Fp FC15{ Fi[4]}} FC12} FC12 Fc} FC16{ vd v5 v6 v7 v8 v9 FC17{ m Fi Fc FL Fi}[5]}}


void  S21926C29 ::mf21926c29(){}
 S21926C29 ::~S21926C29(){ note_dtor("S21926C29", this);}
S21926C29 ::S21926C29(){ note_ctor("S21926C29", this);} // tgen

static void Test_S21926C29()
{
  extern Class_Descriptor cd_S21926C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(61,93)];
    init_test(&cd_S21926C29, buf);
    S21926C29 *dp, &lv = *(dp=new (buf) S21926C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,368), "sizeof(S21926C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21926C29)");
    check_field_offset(lv, s21926c29f0, ABISELECT(8,4), "S21926C29.s21926c29f0");
    check_field_offset(lv, s21926c29f1, ABISELECT(24,16), "S21926C29.s21926c29f1");
    check_field_offset(lv, s21926c29f2, ABISELECT(32,20), "S21926C29.s21926c29f2");
    check_field_offset(lv, s21926c29f3, ABISELECT(56,32), "S21926C29.s21926c29f3");
    check_field_offset(lv, s21926c29f4, ABISELECT(64,36), "S21926C29.s21926c29f4");
    check_field_offset(lv, s21926c29f5, ABISELECT(72,44), "S21926C29.s21926c29f5");
    check_field_offset(lv, s21926c29f6, ABISELECT(80,48), "S21926C29.s21926c29f6");
    check_field_offset(lv, s21926c29f7, ABISELECT(352,264), "S21926C29.s21926c29f7");
    test_class_info(&lv, &cd_S21926C29);
    dp->~S21926C29();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21926C29(Test_S21926C29, "S21926C29", ABISELECT(480,368));

#else // __cplusplus

extern void _ZN9S21926C29C1Ev();
extern void _ZN9S21926C29D1Ev();
Name_Map name_map_S21926C29[] = {
  NSPAIR(_ZN9S21926C29C1Ev),
  NSPAIR(_ZN9S21926C29D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21926C29[];
extern void _ZN9S21926C29D1Ev();
extern void _ZN9S21926C29D0Ev();
static  VTBL_ENTRY vtc_S21926C29[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21926C29[0]),
  (VTBL_ENTRY)&_ZN9S21926C29D1Ev,
  (VTBL_ENTRY)&_ZN9S21926C29D0Ev,
};
extern VTBL_ENTRY _ZTI9S21926C29[];
extern  VTBL_ENTRY _ZTV9S21926C29[];
Class_Descriptor cd_S21926C29 = {  "S21926C29", // class name
  0,0,//no base classes
  &(vtc_S21926C29[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(480,368), // object size
  NSPAIRA(_ZTI9S21926C29),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21926C29),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21926C57  {
  void *s21926c57f0;
  char s21926c57f1;
  __tsi64 s21926c57f2;
  void  mf21926c57(); // _ZN9S21926C5710mf21926c57Ev
};
//SIG(-1 S21926C57) C1{ m Fp Fc FL}


void  S21926C57 ::mf21926c57(){}

static void Test_S21926C57()
{
  {
    init_simple_test("S21926C57");
    S21926C57 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S21926C57)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21926C57)");
    check_field_offset(lv, s21926c57f0, 0, "S21926C57.s21926c57f0");
    check_field_offset(lv, s21926c57f1, ABISELECT(8,4), "S21926C57.s21926c57f1");
    check_field_offset(lv, s21926c57f2, ABISELECT(16,8), "S21926C57.s21926c57f2");
  }
}
static Arrange_To_Call_Me vS21926C57(Test_S21926C57, "S21926C57", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21926C1  {
  void *s21926c1f0;
  int s21926c1f1[3];
  ::S21926C2_nt s21926c1f2;
  ::S21926C2_nt s21926c1f3;
  ::S21925C4_nt s21926c1f4;
  ::S21925C6 s21926c1f5;
  void *s21926c1f6[2];
  int s21926c1f7;
  void *s21926c1f8;
  int s21926c1f9;
  void *s21926c1f10[3];
  ::S21925C7 s21926c1f11;
  ::S21926C29 s21926c1f12;
  void *s21926c1f13;
  char s21926c1f14;
  void *s21926c1f15;
  char s21926c1f16;
  void *s21926c1f17;
  char s21926c1f18;
  void *s21926c1f19;
  char s21926c1f20;
  ::S21925C48 s21926c1f21;
  int s21926c1f22;
  ::S21925C54 s21926c1f23;
  ::S21925C54 s21926c1f24[8];
  ::S21925C54 s21926c1f25[2];
  ::S21925C55 s21926c1f26;
  char s21926c1f27;
  int s21926c1f28;
  char s21926c1f29;
  void *s21926c1f30;
  char s21926c1f31[2];
  ::S21926C57 s21926c1f32;
  char s21926c1f33;
  virtual  ~S21926C1(); // _ZN8S21926C1D1Ev
  virtual void  v1(); // _ZN8S21926C12v1Ev
  S21926C1(); // tgen
};
//SIG(1 S21926C1) C1{ vd v1 Fp Fi[3] FC2{ m FC3{ FL[4]}} FC2 FC4{ m Fp FC5{ Fi[4]}} FC6{ vd m Fp[2] Fi} Fp[2] Fi Fp Fi Fp[3] FC7{ BC8{ v33 v34 v35 v36 v37 v38 v39} vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fi[2] Fp FC9{ m Fp[3]} FC10{ BC8 vd v40 v41 v42 v43 v44 v45 v46 Fp FC11{ BC12{ vd v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fp Fi} vd v47 v48 v49 v50} FC13{ BC12 vd v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94} FC14{ BC12 vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112} FC15{ BC12 vd v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133} FC16{ BC12 vd v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155} FC15 FC14 FC17{ BC12 vd v156 v157 v158 v159 v160 v161} Fp[4] FC18{ m Fc[6] Fp Fi[2] FC19{ vd m Fi[2] FL[3] Fc[2048] Fi[6] FL Fi[4] Fp[2] Fc} Fi[2]} FC20{ m Fi[3]} FC21{ m Fc} FC22{ m Fp Fi[3] FC19 FC23{ vd m Fi[2] FL Fi[4]} Fi[6] FC5 Fi[4]} Fp Fi[3]} FC24{ vd m Fp Fi Fp[9] Fi} FC25{ FL[2] Fi[6]}} FC26{ vd m Fi[3] Fp FC27{ Fp[3]} Fp Fi[2] Fp FC28{ vd v162 v163 v164 v165 FC29{ vd m Fc Fp Fi[4] Fc[2] FC30{ BC31{ m Fp Fi FC32{ m} FC32}} FC33{ BC34{ m Fp Fi FC35{ m} FC35}} FC31 Fp Fc[2] Fi[2] FC36{ m Fp[2]} FC2 FC4 FC2} FC2 Fc} FC37{ vd v166 v167 v168 v169 v170 FC38{ m Fi Fc FL Fi}[5]}} Fp Fc Fp Fc Fp Fc Fp Fc FC39{ m FC40{ m Fp[4]} Fi Fc Fi[3] Fc[2] Fi FC41{ m Fc Fi FC20 Fi[2] FC42{ m Fi[4]} Fi} Fi Fp[3] Fi Fp Fi[2] Fp[2] Fi Fp[2] Fi[3] Fp[2] Fi[8] Fc FC43{ m Fi[5] Fp}} Fi FC44{ Fc[4] Fi Fc Fi Fs Fi[4] FL[3] Fi[8] FC5 Fi[2]} FC44[8] FC44[2] FC45{ Fc[3] Fi Fc[3] FC46{ m Fc[8] Fi[2] Fc[3]} FC46 FC46} Fc Fi Fc Fp Fc[2] FC47{ m Fp Fc FL} Fc}


 S21926C1 ::~S21926C1(){ note_dtor("S21926C1", this);}
void  S21926C1 ::v1(){vfunc_called(this, "_ZN8S21926C12v1Ev");}
S21926C1 ::S21926C1(){ note_ctor("S21926C1", this);} // tgen

static void Test_S21926C1()
{
  extern Class_Descriptor cd_S21926C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(935,1717)];
    init_test(&cd_S21926C1, buf);
    S21926C1 *dp, &lv = *(dp=new (buf) S21926C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7472,6864), "sizeof(S21926C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21926C1)");
    check_field_offset(lv, s21926c1f0, ABISELECT(8,4), "S21926C1.s21926c1f0");
    check_field_offset(lv, s21926c1f1, ABISELECT(16,8), "S21926C1.s21926c1f1");
    check_field_offset(lv, s21926c1f2, ABISELECT(32,20), "S21926C1.s21926c1f2");
    check_field_offset(lv, s21926c1f3, ABISELECT(64,52), "S21926C1.s21926c1f3");
    check_field_offset(lv, s21926c1f4, ABISELECT(96,84), "S21926C1.s21926c1f4");
    check_field_offset(lv, s21926c1f5, ABISELECT(120,104), "S21926C1.s21926c1f5");
    check_field_offset(lv, s21926c1f6, ABISELECT(152,120), "S21926C1.s21926c1f6");
    check_field_offset(lv, s21926c1f7, ABISELECT(168,128), "S21926C1.s21926c1f7");
    check_field_offset(lv, s21926c1f8, ABISELECT(176,132), "S21926C1.s21926c1f8");
    check_field_offset(lv, s21926c1f9, ABISELECT(184,136), "S21926C1.s21926c1f9");
    check_field_offset(lv, s21926c1f10, ABISELECT(192,140), "S21926C1.s21926c1f10");
    check_field_offset(lv, s21926c1f11, ABISELECT(216,152), "S21926C1.s21926c1f11");
    check_field_offset(lv, s21926c1f12, ABISELECT(5160,4848), "S21926C1.s21926c1f12");
    check_field_offset(lv, s21926c1f13, ABISELECT(5640,5216), "S21926C1.s21926c1f13");
    check_field_offset(lv, s21926c1f14, ABISELECT(5648,5220), "S21926C1.s21926c1f14");
    check_field_offset(lv, s21926c1f15, ABISELECT(5656,5224), "S21926C1.s21926c1f15");
    check_field_offset(lv, s21926c1f16, ABISELECT(5664,5228), "S21926C1.s21926c1f16");
    check_field_offset(lv, s21926c1f17, ABISELECT(5672,5232), "S21926C1.s21926c1f17");
    check_field_offset(lv, s21926c1f18, ABISELECT(5680,5236), "S21926C1.s21926c1f18");
    check_field_offset(lv, s21926c1f19, ABISELECT(5688,5240), "S21926C1.s21926c1f19");
    check_field_offset(lv, s21926c1f20, ABISELECT(5696,5244), "S21926C1.s21926c1f20");
    check_field_offset(lv, s21926c1f21, ABISELECT(5704,5248), "S21926C1.s21926c1f21");
    check_field_offset(lv, s21926c1f22, ABISELECT(6008,5472), "S21926C1.s21926c1f22");
    check_field_offset(lv, s21926c1f23, ABISELECT(6016,5476), "S21926C1.s21926c1f23");
    check_field_offset(lv, s21926c1f24, ABISELECT(6136,5592), "S21926C1.s21926c1f24");
    check_field_offset(lv, s21926c1f25, ABISELECT(7096,6520), "S21926C1.s21926c1f25");
    check_field_offset(lv, s21926c1f26, ABISELECT(7336,6752), "S21926C1.s21926c1f26");
    check_field_offset(lv, s21926c1f27, ABISELECT(7408,6824), "S21926C1.s21926c1f27");
    check_field_offset(lv, s21926c1f28, ABISELECT(7412,6828), "S21926C1.s21926c1f28");
    check_field_offset(lv, s21926c1f29, ABISELECT(7416,6832), "S21926C1.s21926c1f29");
    check_field_offset(lv, s21926c1f30, ABISELECT(7424,6836), "S21926C1.s21926c1f30");
    check_field_offset(lv, s21926c1f31, ABISELECT(7432,6840), "S21926C1.s21926c1f31");
    check_field_offset(lv, s21926c1f32, ABISELECT(7440,6844), "S21926C1.s21926c1f32");
    check_field_offset(lv, s21926c1f33, ABISELECT(7464,6860), "S21926C1.s21926c1f33");
    test_class_info(&lv, &cd_S21926C1);
    dp->~S21926C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21926C1(Test_S21926C1, "S21926C1", ABISELECT(7472,6864));

#else // __cplusplus

extern void _ZN8S21926C1C1Ev();
extern void _ZN8S21926C1D1Ev();
Name_Map name_map_S21926C1[] = {
  NSPAIR(_ZN8S21926C1C1Ev),
  NSPAIR(_ZN8S21926C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21926C1[];
extern void _ZN8S21926C1D1Ev();
extern void _ZN8S21926C1D0Ev();
extern void _ZN8S21926C12v1Ev();
static  VTBL_ENTRY vtc_S21926C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21926C1[0]),
  (VTBL_ENTRY)&_ZN8S21926C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21926C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21926C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S21926C1[];
extern  VTBL_ENTRY _ZTV8S21926C1[];
Class_Descriptor cd_S21926C1 = {  "S21926C1", // class name
  0,0,//no base classes
  &(vtc_S21926C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7472,6864), // object size
  NSPAIRA(_ZTI8S21926C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21926C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21927C2_nt  {
  __tsi64 s21927c2f0[4];
  void  mf21927c2(); // _ZN11S21927C2_nt9mf21927c2Ev
};
//SIG(-1 S21927C2_nt) C1{ m FL[4]}


void  S21927C2_nt ::mf21927c2(){}

//skip512 S21927C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21927C31  {
  char s21927c31f0;
  void *s21927c31f1;
  int s21927c31f2[4];
  char s21927c31f3[2];
  ::S21926C37 s21927c31f4;
  ::S21925C33_nt s21927c31f5;
  ::S21925C41 s21927c31f6;
  void *s21927c31f7;
  char s21927c31f8[2];
  int s21927c31f9[2];
  ::S21925C44_nt s21927c31f10;
  ::S21927C2_nt s21927c31f11;
  ::S21925C4_nt s21927c31f12;
  ::S21927C2_nt s21927c31f13;
  void  mf21927c31(); // _ZN9S21927C3110mf21927c31Ev
  virtual  ~S21927C31(); // _ZN9S21927C31D1Ev
  S21927C31(); // tgen
};
//SIG(-1 S21927C31) C1{ vd m Fc Fp Fi[4] Fc[2] FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC3 Fp Fc[2] Fi[2] FC8{ m Fp[2]} FC9{ m FL[4]} FC10{ m Fp FC11{ Fi[4]}} FC9}


void  S21927C31 ::mf21927c31(){}
 S21927C31 ::~S21927C31(){ note_dtor("S21927C31", this);}
S21927C31 ::S21927C31(){ note_ctor("S21927C31", this);} // tgen

static void Test_S21927C31()
{
  extern Class_Descriptor cd_S21927C31;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,45)];
    init_test(&cd_S21927C31, buf);
    S21927C31 *dp, &lv = *(dp=new (buf) S21927C31());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S21927C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21927C31)");
    check_field_offset(lv, s21927c31f0, ABISELECT(8,4), "S21927C31.s21927c31f0");
    check_field_offset(lv, s21927c31f1, ABISELECT(16,8), "S21927C31.s21927c31f1");
    check_field_offset(lv, s21927c31f2, ABISELECT(24,12), "S21927C31.s21927c31f2");
    check_field_offset(lv, s21927c31f3, ABISELECT(40,28), "S21927C31.s21927c31f3");
    check_field_offset(lv, s21927c31f4, ABISELECT(48,32), "S21927C31.s21927c31f4");
    check_field_offset(lv, s21927c31f5, ABISELECT(64,44), "S21927C31.s21927c31f5");
    check_field_offset(lv, s21927c31f6, ABISELECT(80,56), "S21927C31.s21927c31f6");
    check_field_offset(lv, s21927c31f7, ABISELECT(96,68), "S21927C31.s21927c31f7");
    check_field_offset(lv, s21927c31f8, ABISELECT(104,72), "S21927C31.s21927c31f8");
    check_field_offset(lv, s21927c31f9, ABISELECT(108,76), "S21927C31.s21927c31f9");
    check_field_offset(lv, s21927c31f10, ABISELECT(120,84), "S21927C31.s21927c31f10");
    check_field_offset(lv, s21927c31f11, ABISELECT(136,92), "S21927C31.s21927c31f11");
    check_field_offset(lv, s21927c31f12, ABISELECT(168,124), "S21927C31.s21927c31f12");
    check_field_offset(lv, s21927c31f13, ABISELECT(192,144), "S21927C31.s21927c31f13");
    test_class_info(&lv, &cd_S21927C31);
    dp->~S21927C31();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21927C31(Test_S21927C31, "S21927C31", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN9S21927C31C1Ev();
extern void _ZN9S21927C31D1Ev();
Name_Map name_map_S21927C31[] = {
  NSPAIR(_ZN9S21927C31C1Ev),
  NSPAIR(_ZN9S21927C31D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21927C31[];
extern void _ZN9S21927C31D1Ev();
extern void _ZN9S21927C31D0Ev();
static  VTBL_ENTRY vtc_S21927C31[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21927C31[0]),
  (VTBL_ENTRY)&_ZN9S21927C31D1Ev,
  (VTBL_ENTRY)&_ZN9S21927C31D0Ev,
};
extern VTBL_ENTRY _ZTI9S21927C31[];
extern  VTBL_ENTRY _ZTV9S21927C31[];
Class_Descriptor cd_S21927C31 = {  "S21927C31", // class name
  0,0,//no base classes
  &(vtc_S21927C31[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI9S21927C31),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21927C31),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21927C30  {
  ::S21927C31 s21927c30f0;
  ::S21927C2_nt s21927c30f1;
  char s21927c30f2;
  virtual  ~S21927C30(); // _ZN9S21927C30D1Ev
  virtual void  v201(); // _ZN9S21927C304v201Ev
  virtual void  v202(); // _ZN9S21927C304v202Ev
  virtual void  v203(); // _ZN9S21927C304v203Ev
  virtual void  v204(); // _ZN9S21927C304v204Ev
  S21927C30(); // tgen
};
//SIG(-1 S21927C30) C1{ vd v1 v2 v3 v4 FC2{ vd m Fc Fp Fi[4] Fc[2] FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC4 Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FL[4]} FC11{ m Fp FC12{ Fi[4]}} FC10} FC10 Fc}


 S21927C30 ::~S21927C30(){ note_dtor("S21927C30", this);}
void  S21927C30 ::v201(){vfunc_called(this, "_ZN9S21927C304v201Ev");}
void  S21927C30 ::v202(){vfunc_called(this, "_ZN9S21927C304v202Ev");}
void  S21927C30 ::v203(){vfunc_called(this, "_ZN9S21927C304v203Ev");}
void  S21927C30 ::v204(){vfunc_called(this, "_ZN9S21927C304v204Ev");}
S21927C30 ::S21927C30(){ note_ctor("S21927C30", this);} // tgen

static void Test_S21927C30()
{
  extern Class_Descriptor cd_S21927C30;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,55)];
    init_test(&cd_S21927C30, buf);
    S21927C30 *dp, &lv = *(dp=new (buf) S21927C30());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,216), "sizeof(S21927C30)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21927C30)");
    check_field_offset(lv, s21927c30f0, ABISELECT(8,4), "S21927C30.s21927c30f0");
    check_field_offset(lv, s21927c30f1, ABISELECT(232,180), "S21927C30.s21927c30f1");
    check_field_offset(lv, s21927c30f2, ABISELECT(264,212), "S21927C30.s21927c30f2");
    test_class_info(&lv, &cd_S21927C30);
    dp->~S21927C30();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21927C30(Test_S21927C30, "S21927C30", ABISELECT(272,216));

#else // __cplusplus

extern void _ZN9S21927C30C1Ev();
extern void _ZN9S21927C30D1Ev();
Name_Map name_map_S21927C30[] = {
  NSPAIR(_ZN9S21927C30C1Ev),
  NSPAIR(_ZN9S21927C30D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21927C30[];
extern void _ZN9S21927C30D1Ev();
extern void _ZN9S21927C30D0Ev();
extern void _ZN9S21927C304v201Ev();
extern void _ZN9S21927C304v202Ev();
extern void _ZN9S21927C304v203Ev();
extern void _ZN9S21927C304v204Ev();
static  VTBL_ENTRY vtc_S21927C30[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21927C30[0]),
  (VTBL_ENTRY)&_ZN9S21927C30D1Ev,
  (VTBL_ENTRY)&_ZN9S21927C30D0Ev,
  (VTBL_ENTRY)&_ZN9S21927C304v201Ev,
  (VTBL_ENTRY)&_ZN9S21927C304v202Ev,
  (VTBL_ENTRY)&_ZN9S21927C304v203Ev,
  (VTBL_ENTRY)&_ZN9S21927C304v204Ev,
};
extern VTBL_ENTRY _ZTI9S21927C30[];
extern  VTBL_ENTRY _ZTV9S21927C30[];
Class_Descriptor cd_S21927C30 = {  "S21927C30", // class name
  0,0,//no base classes
  &(vtc_S21927C30[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,216), // object size
  NSPAIRA(_ZTI9S21927C30),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21927C30),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21927C28  {
  int s21927c28f0[3];
  void *s21927c28f1;
  ::S21925C30_nt s21927c28f2;
  void *s21927c28f3;
  int s21927c28f4[2];
  void *s21927c28f5;
  ::S21927C30 s21927c28f6;
  ::S21925C46 s21927c28f7;
  void  mf21927c28(); // _ZN9S21927C2810mf21927c28Ev
  virtual  ~S21927C28(); // _ZN9S21927C28D1Ev
  S21927C28(); // tgen
};
//SIG(-1 S21927C28) C1{ vd m Fi[3] Fp FC2{ Fp[3]} Fp Fi[2] Fp FC3{ vd v1 v2 v3 v4 FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ BC9{ m Fp Fi FC10{ m} FC10}} FC6 Fp Fc[2] Fi[2] FC11{ m Fp[2]} FC12{ m FL[4]} FC13{ m Fp FC14{ Fi[4]}} FC12} FC12 Fc} FC15{ vd v5 v6 v7 v8 v9 FC16{ m Fi Fc FL Fi}[5]}}


void  S21927C28 ::mf21927c28(){}
 S21927C28 ::~S21927C28(){ note_dtor("S21927C28", this);}
S21927C28 ::S21927C28(){ note_ctor("S21927C28", this);} // tgen

static void Test_S21927C28()
{
  extern Class_Descriptor cd_S21927C28;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(61,93)];
    init_test(&cd_S21927C28, buf);
    S21927C28 *dp, &lv = *(dp=new (buf) S21927C28());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,368), "sizeof(S21927C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21927C28)");
    check_field_offset(lv, s21927c28f0, ABISELECT(8,4), "S21927C28.s21927c28f0");
    check_field_offset(lv, s21927c28f1, ABISELECT(24,16), "S21927C28.s21927c28f1");
    check_field_offset(lv, s21927c28f2, ABISELECT(32,20), "S21927C28.s21927c28f2");
    check_field_offset(lv, s21927c28f3, ABISELECT(56,32), "S21927C28.s21927c28f3");
    check_field_offset(lv, s21927c28f4, ABISELECT(64,36), "S21927C28.s21927c28f4");
    check_field_offset(lv, s21927c28f5, ABISELECT(72,44), "S21927C28.s21927c28f5");
    check_field_offset(lv, s21927c28f6, ABISELECT(80,48), "S21927C28.s21927c28f6");
    check_field_offset(lv, s21927c28f7, ABISELECT(352,264), "S21927C28.s21927c28f7");
    test_class_info(&lv, &cd_S21927C28);
    dp->~S21927C28();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21927C28(Test_S21927C28, "S21927C28", ABISELECT(480,368));

#else // __cplusplus

extern void _ZN9S21927C28C1Ev();
extern void _ZN9S21927C28D1Ev();
Name_Map name_map_S21927C28[] = {
  NSPAIR(_ZN9S21927C28C1Ev),
  NSPAIR(_ZN9S21927C28D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21927C28[];
extern void _ZN9S21927C28D1Ev();
extern void _ZN9S21927C28D0Ev();
static  VTBL_ENTRY vtc_S21927C28[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21927C28[0]),
  (VTBL_ENTRY)&_ZN9S21927C28D1Ev,
  (VTBL_ENTRY)&_ZN9S21927C28D0Ev,
};
extern VTBL_ENTRY _ZTI9S21927C28[];
extern  VTBL_ENTRY _ZTV9S21927C28[];
Class_Descriptor cd_S21927C28 = {  "S21927C28", // class name
  0,0,//no base classes
  &(vtc_S21927C28[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(480,368), // object size
  NSPAIRA(_ZTI9S21927C28),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21927C28),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21927C1  {
  void *s21927c1f0;
  int s21927c1f1[3];
  ::S21927C2_nt s21927c1f2;
  ::S21927C2_nt s21927c1f3;
  ::S21925C4_nt s21927c1f4;
  ::S21925C6 s21927c1f5;
  void *s21927c1f6[2];
  int s21927c1f7;
  void *s21927c1f8;
  int s21927c1f9;
  void *s21927c1f10[3];
  ::S21925C7 s21927c1f11;
  ::S21927C28 s21927c1f12;
  void *s21927c1f13;
  char s21927c1f14;
  void *s21927c1f15;
  char s21927c1f16;
  void *s21927c1f17;
  char s21927c1f18;
  void *s21927c1f19;
  char s21927c1f20;
  ::S21925C48 s21927c1f21;
  int s21927c1f22;
  ::S21925C54 s21927c1f23;
  ::S21925C54 s21927c1f24[8];
  ::S21925C54 s21927c1f25[2];
  ::S21925C55 s21927c1f26;
  char s21927c1f27;
  int s21927c1f28;
  char s21927c1f29;
  void *s21927c1f30;
  char s21927c1f31[2];
  ::S21926C57 s21927c1f32;
  char s21927c1f33;
  virtual  ~S21927C1(); // _ZN8S21927C1D1Ev
  virtual void  v1(); // _ZN8S21927C12v1Ev
  S21927C1(); // tgen
};
//SIG(1 S21927C1) C1{ vd v1 Fp Fi[3] FC2{ m FL[4]} FC2 FC3{ m Fp FC4{ Fi[4]}} FC5{ vd m Fp[2] Fi} Fp[2] Fi Fp Fi Fp[3] FC6{ BC7{ v33 v34 v35 v36 v37 v38 v39} vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fi[2] Fp FC8{ m Fp[3]} FC9{ BC7 vd v40 v41 v42 v43 v44 v45 v46 Fp FC10{ BC11{ vd v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fp Fi} vd v47 v48 v49 v50} FC12{ BC11 vd v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94} FC13{ BC11 vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112} FC14{ BC11 vd v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133} FC15{ BC11 vd v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155} FC14 FC13 FC16{ BC11 vd v156 v157 v158 v159 v160 v161} Fp[4] FC17{ m Fc[6] Fp Fi[2] FC18{ vd m Fi[2] FL[3] Fc[2048] Fi[6] FL Fi[4] Fp[2] Fc} Fi[2]} FC19{ m Fi[3]} FC20{ m Fc} FC21{ m Fp Fi[3] FC18 FC22{ vd m Fi[2] FL Fi[4]} Fi[6] FC4 Fi[4]} Fp Fi[3]} FC23{ vd m Fp Fi Fp[9] Fi} FC24{ FL[2] Fi[6]}} FC25{ vd m Fi[3] Fp FC26{ Fp[3]} Fp Fi[2] Fp FC27{ vd v162 v163 v164 v165 FC28{ vd m Fc Fp Fi[4] Fc[2] FC29{ BC30{ m Fp Fi FC31{ m} FC31}} FC32{ BC33{ m Fp Fi FC34{ m} FC34}} FC30 Fp Fc[2] Fi[2] FC35{ m Fp[2]} FC2 FC3 FC2} FC2 Fc} FC36{ vd v166 v167 v168 v169 v170 FC37{ m Fi Fc FL Fi}[5]}} Fp Fc Fp Fc Fp Fc Fp Fc FC38{ m FC39{ m Fp[4]} Fi Fc Fi[3] Fc[2] Fi FC40{ m Fc Fi FC19 Fi[2] FC41{ m Fi[4]} Fi} Fi Fp[3] Fi Fp Fi[2] Fp[2] Fi Fp[2] Fi[3] Fp[2] Fi[8] Fc FC42{ m Fi[5] Fp}} Fi FC43{ Fc[4] Fi Fc Fi Fs Fi[4] FL[3] Fi[8] FC4 Fi[2]} FC43[8] FC43[2] FC44{ Fc[3] Fi Fc[3] FC45{ m Fc[8] Fi[2] Fc[3]} FC45 FC45} Fc Fi Fc Fp Fc[2] FC46{ m Fp Fc FL} Fc}


 S21927C1 ::~S21927C1(){ note_dtor("S21927C1", this);}
void  S21927C1 ::v1(){vfunc_called(this, "_ZN8S21927C12v1Ev");}
S21927C1 ::S21927C1(){ note_ctor("S21927C1", this);} // tgen

static void Test_S21927C1()
{
  extern Class_Descriptor cd_S21927C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(935,1717)];
    init_test(&cd_S21927C1, buf);
    S21927C1 *dp, &lv = *(dp=new (buf) S21927C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7472,6864), "sizeof(S21927C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21927C1)");
    check_field_offset(lv, s21927c1f0, ABISELECT(8,4), "S21927C1.s21927c1f0");
    check_field_offset(lv, s21927c1f1, ABISELECT(16,8), "S21927C1.s21927c1f1");
    check_field_offset(lv, s21927c1f2, ABISELECT(32,20), "S21927C1.s21927c1f2");
    check_field_offset(lv, s21927c1f3, ABISELECT(64,52), "S21927C1.s21927c1f3");
    check_field_offset(lv, s21927c1f4, ABISELECT(96,84), "S21927C1.s21927c1f4");
    check_field_offset(lv, s21927c1f5, ABISELECT(120,104), "S21927C1.s21927c1f5");
    check_field_offset(lv, s21927c1f6, ABISELECT(152,120), "S21927C1.s21927c1f6");
    check_field_offset(lv, s21927c1f7, ABISELECT(168,128), "S21927C1.s21927c1f7");
    check_field_offset(lv, s21927c1f8, ABISELECT(176,132), "S21927C1.s21927c1f8");
    check_field_offset(lv, s21927c1f9, ABISELECT(184,136), "S21927C1.s21927c1f9");
    check_field_offset(lv, s21927c1f10, ABISELECT(192,140), "S21927C1.s21927c1f10");
    check_field_offset(lv, s21927c1f11, ABISELECT(216,152), "S21927C1.s21927c1f11");
    check_field_offset(lv, s21927c1f12, ABISELECT(5160,4848), "S21927C1.s21927c1f12");
    check_field_offset(lv, s21927c1f13, ABISELECT(5640,5216), "S21927C1.s21927c1f13");
    check_field_offset(lv, s21927c1f14, ABISELECT(5648,5220), "S21927C1.s21927c1f14");
    check_field_offset(lv, s21927c1f15, ABISELECT(5656,5224), "S21927C1.s21927c1f15");
    check_field_offset(lv, s21927c1f16, ABISELECT(5664,5228), "S21927C1.s21927c1f16");
    check_field_offset(lv, s21927c1f17, ABISELECT(5672,5232), "S21927C1.s21927c1f17");
    check_field_offset(lv, s21927c1f18, ABISELECT(5680,5236), "S21927C1.s21927c1f18");
    check_field_offset(lv, s21927c1f19, ABISELECT(5688,5240), "S21927C1.s21927c1f19");
    check_field_offset(lv, s21927c1f20, ABISELECT(5696,5244), "S21927C1.s21927c1f20");
    check_field_offset(lv, s21927c1f21, ABISELECT(5704,5248), "S21927C1.s21927c1f21");
    check_field_offset(lv, s21927c1f22, ABISELECT(6008,5472), "S21927C1.s21927c1f22");
    check_field_offset(lv, s21927c1f23, ABISELECT(6016,5476), "S21927C1.s21927c1f23");
    check_field_offset(lv, s21927c1f24, ABISELECT(6136,5592), "S21927C1.s21927c1f24");
    check_field_offset(lv, s21927c1f25, ABISELECT(7096,6520), "S21927C1.s21927c1f25");
    check_field_offset(lv, s21927c1f26, ABISELECT(7336,6752), "S21927C1.s21927c1f26");
    check_field_offset(lv, s21927c1f27, ABISELECT(7408,6824), "S21927C1.s21927c1f27");
    check_field_offset(lv, s21927c1f28, ABISELECT(7412,6828), "S21927C1.s21927c1f28");
    check_field_offset(lv, s21927c1f29, ABISELECT(7416,6832), "S21927C1.s21927c1f29");
    check_field_offset(lv, s21927c1f30, ABISELECT(7424,6836), "S21927C1.s21927c1f30");
    check_field_offset(lv, s21927c1f31, ABISELECT(7432,6840), "S21927C1.s21927c1f31");
    check_field_offset(lv, s21927c1f32, ABISELECT(7440,6844), "S21927C1.s21927c1f32");
    check_field_offset(lv, s21927c1f33, ABISELECT(7464,6860), "S21927C1.s21927c1f33");
    test_class_info(&lv, &cd_S21927C1);
    dp->~S21927C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21927C1(Test_S21927C1, "S21927C1", ABISELECT(7472,6864));

#else // __cplusplus

extern void _ZN8S21927C1C1Ev();
extern void _ZN8S21927C1D1Ev();
Name_Map name_map_S21927C1[] = {
  NSPAIR(_ZN8S21927C1C1Ev),
  NSPAIR(_ZN8S21927C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21927C1[];
extern void _ZN8S21927C1D1Ev();
extern void _ZN8S21927C1D0Ev();
extern void _ZN8S21927C12v1Ev();
static  VTBL_ENTRY vtc_S21927C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21927C1[0]),
  (VTBL_ENTRY)&_ZN8S21927C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21927C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21927C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S21927C1[];
extern  VTBL_ENTRY _ZTV8S21927C1[];
Class_Descriptor cd_S21927C1 = {  "S21927C1", // class name
  0,0,//no base classes
  &(vtc_S21927C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7472,6864), // object size
  NSPAIRA(_ZTI8S21927C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21927C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C6_nt  {
  int s473c6f0[2];
  void  mf473c6(); // _ZN9S473C6_nt7mf473c6Ev
};
//SIG(-1 S473C6_nt) C1{ m Fi[2]}


void  S473C6_nt ::mf473c6(){}

//skip512 S473C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C5_nt  {
  int s473c5f0;
  __tsi64 s473c5f1;
  void *s473c5f2[4];
  int s473c5f3[2];
  void *s473c5f4;
  ::S473C6_nt s473c5f5;
  void *s473c5f6[2];
  virtual  ~S473C5_nt(); // _ZN9S473C5_ntD1Ev
  virtual void  v10(); // _ZN9S473C5_nt3v10Ev
  virtual void  v11(); // _ZN9S473C5_nt3v11Ev
  virtual void  v12(); // _ZN9S473C5_nt3v12Ev
  virtual void  v13(); // _ZN9S473C5_nt3v13Ev
  virtual void  v14(); // _ZN9S473C5_nt3v14Ev
  virtual void  v15(); // _ZN9S473C5_nt3v15Ev
  virtual void  v16(); // _ZN9S473C5_nt3v16Ev
  virtual void  v17(); // _ZN9S473C5_nt3v17Ev
  virtual void  v18(); // _ZN9S473C5_nt3v18Ev
  virtual void  v19(); // _ZN9S473C5_nt3v19Ev
  virtual void  v20(); // _ZN9S473C5_nt3v20Ev
  virtual void  v21(); // _ZN9S473C5_nt3v21Ev
  virtual void  v22(); // _ZN9S473C5_nt3v22Ev
  virtual void  v23(); // _ZN9S473C5_nt3v23Ev
  virtual void  v24(); // _ZN9S473C5_nt3v24Ev
  virtual void  v25(); // _ZN9S473C5_nt3v25Ev
  virtual void  v26(); // _ZN9S473C5_nt3v26Ev
  virtual void  v27(); // _ZN9S473C5_nt3v27Ev
  virtual void  v28(); // _ZN9S473C5_nt3v28Ev
  virtual void  v29(); // _ZN9S473C5_nt3v29Ev
  virtual void  v30(); // _ZN9S473C5_nt3v30Ev
  virtual void  v31(); // _ZN9S473C5_nt3v31Ev
  virtual void  v32(); // _ZN9S473C5_nt3v32Ev
  virtual void  v33(); // _ZN9S473C5_nt3v33Ev
  virtual void  v34(); // _ZN9S473C5_nt3v34Ev
  virtual void  v35(); // _ZN9S473C5_nt3v35Ev
  virtual void  v36(); // _ZN9S473C5_nt3v36Ev
  virtual void  v37(); // _ZN9S473C5_nt3v37Ev
  virtual void  v38(); // _ZN9S473C5_nt3v38Ev
  virtual void  v39(); // _ZN9S473C5_nt3v39Ev
  virtual void  v40(); // _ZN9S473C5_nt3v40Ev
  virtual void  v41(); // _ZN9S473C5_nt3v41Ev
  virtual void  v42(); // _ZN9S473C5_nt3v42Ev
  virtual void  v43(); // _ZN9S473C5_nt3v43Ev
  virtual void  v44(); // _ZN9S473C5_nt3v44Ev
  virtual void  v45(); // _ZN9S473C5_nt3v45Ev
  virtual void  v46(); // _ZN9S473C5_nt3v46Ev
  virtual void  v47(); // _ZN9S473C5_nt3v47Ev
  virtual void  v48(); // _ZN9S473C5_nt3v48Ev
  virtual void  v49(); // _ZN9S473C5_nt3v49Ev
  virtual void  v50(); // _ZN9S473C5_nt3v50Ev
  virtual void  v51(); // _ZN9S473C5_nt3v51Ev
  virtual void  v52(); // _ZN9S473C5_nt3v52Ev
  virtual void  v53(); // _ZN9S473C5_nt3v53Ev
  virtual void  v54(); // _ZN9S473C5_nt3v54Ev
  virtual void  v55(); // _ZN9S473C5_nt3v55Ev
  virtual void  v56(); // _ZN9S473C5_nt3v56Ev
  virtual void  v57(); // _ZN9S473C5_nt3v57Ev
  virtual void  v58(); // _ZN9S473C5_nt3v58Ev
  virtual void  v59(); // _ZN9S473C5_nt3v59Ev
  virtual void  v60(); // _ZN9S473C5_nt3v60Ev
  virtual void  v61(); // _ZN9S473C5_nt3v61Ev
  virtual void  v62(); // _ZN9S473C5_nt3v62Ev
  virtual void  v63(); // _ZN9S473C5_nt3v63Ev
  virtual void  v64(); // _ZN9S473C5_nt3v64Ev
  virtual void  v65(); // _ZN9S473C5_nt3v65Ev
  virtual void  v66(); // _ZN9S473C5_nt3v66Ev
  virtual void  v67(); // _ZN9S473C5_nt3v67Ev
  virtual void  v68(); // _ZN9S473C5_nt3v68Ev
  virtual void  v69(); // _ZN9S473C5_nt3v69Ev
  virtual void  v70(); // _ZN9S473C5_nt3v70Ev
  virtual void  v71(); // _ZN9S473C5_nt3v71Ev
  virtual void  v72(); // _ZN9S473C5_nt3v72Ev
  virtual void  v73(); // _ZN9S473C5_nt3v73Ev
  S473C5_nt(); // tgen
};
//SIG(-1 S473C5_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S473C5_nt ::~S473C5_nt(){ note_dtor("S473C5_nt", this);}
void  S473C5_nt ::v10(){vfunc_called(this, "_ZN9S473C5_nt3v10Ev");}
void  S473C5_nt ::v11(){vfunc_called(this, "_ZN9S473C5_nt3v11Ev");}
void  S473C5_nt ::v12(){vfunc_called(this, "_ZN9S473C5_nt3v12Ev");}
void  S473C5_nt ::v13(){vfunc_called(this, "_ZN9S473C5_nt3v13Ev");}
void  S473C5_nt ::v14(){vfunc_called(this, "_ZN9S473C5_nt3v14Ev");}
void  S473C5_nt ::v15(){vfunc_called(this, "_ZN9S473C5_nt3v15Ev");}
void  S473C5_nt ::v16(){vfunc_called(this, "_ZN9S473C5_nt3v16Ev");}
void  S473C5_nt ::v17(){vfunc_called(this, "_ZN9S473C5_nt3v17Ev");}
void  S473C5_nt ::v18(){vfunc_called(this, "_ZN9S473C5_nt3v18Ev");}
void  S473C5_nt ::v19(){vfunc_called(this, "_ZN9S473C5_nt3v19Ev");}
void  S473C5_nt ::v20(){vfunc_called(this, "_ZN9S473C5_nt3v20Ev");}
void  S473C5_nt ::v21(){vfunc_called(this, "_ZN9S473C5_nt3v21Ev");}
void  S473C5_nt ::v22(){vfunc_called(this, "_ZN9S473C5_nt3v22Ev");}
void  S473C5_nt ::v23(){vfunc_called(this, "_ZN9S473C5_nt3v23Ev");}
void  S473C5_nt ::v24(){vfunc_called(this, "_ZN9S473C5_nt3v24Ev");}
void  S473C5_nt ::v25(){vfunc_called(this, "_ZN9S473C5_nt3v25Ev");}
void  S473C5_nt ::v26(){vfunc_called(this, "_ZN9S473C5_nt3v26Ev");}
void  S473C5_nt ::v27(){vfunc_called(this, "_ZN9S473C5_nt3v27Ev");}
void  S473C5_nt ::v28(){vfunc_called(this, "_ZN9S473C5_nt3v28Ev");}
void  S473C5_nt ::v29(){vfunc_called(this, "_ZN9S473C5_nt3v29Ev");}
void  S473C5_nt ::v30(){vfunc_called(this, "_ZN9S473C5_nt3v30Ev");}
void  S473C5_nt ::v31(){vfunc_called(this, "_ZN9S473C5_nt3v31Ev");}
void  S473C5_nt ::v32(){vfunc_called(this, "_ZN9S473C5_nt3v32Ev");}
void  S473C5_nt ::v33(){vfunc_called(this, "_ZN9S473C5_nt3v33Ev");}
void  S473C5_nt ::v34(){vfunc_called(this, "_ZN9S473C5_nt3v34Ev");}
void  S473C5_nt ::v35(){vfunc_called(this, "_ZN9S473C5_nt3v35Ev");}
void  S473C5_nt ::v36(){vfunc_called(this, "_ZN9S473C5_nt3v36Ev");}
void  S473C5_nt ::v37(){vfunc_called(this, "_ZN9S473C5_nt3v37Ev");}
void  S473C5_nt ::v38(){vfunc_called(this, "_ZN9S473C5_nt3v38Ev");}
void  S473C5_nt ::v39(){vfunc_called(this, "_ZN9S473C5_nt3v39Ev");}
void  S473C5_nt ::v40(){vfunc_called(this, "_ZN9S473C5_nt3v40Ev");}
void  S473C5_nt ::v41(){vfunc_called(this, "_ZN9S473C5_nt3v41Ev");}
void  S473C5_nt ::v42(){vfunc_called(this, "_ZN9S473C5_nt3v42Ev");}
void  S473C5_nt ::v43(){vfunc_called(this, "_ZN9S473C5_nt3v43Ev");}
void  S473C5_nt ::v44(){vfunc_called(this, "_ZN9S473C5_nt3v44Ev");}
void  S473C5_nt ::v45(){vfunc_called(this, "_ZN9S473C5_nt3v45Ev");}
void  S473C5_nt ::v46(){vfunc_called(this, "_ZN9S473C5_nt3v46Ev");}
void  S473C5_nt ::v47(){vfunc_called(this, "_ZN9S473C5_nt3v47Ev");}
void  S473C5_nt ::v48(){vfunc_called(this, "_ZN9S473C5_nt3v48Ev");}
void  S473C5_nt ::v49(){vfunc_called(this, "_ZN9S473C5_nt3v49Ev");}
void  S473C5_nt ::v50(){vfunc_called(this, "_ZN9S473C5_nt3v50Ev");}
void  S473C5_nt ::v51(){vfunc_called(this, "_ZN9S473C5_nt3v51Ev");}
void  S473C5_nt ::v52(){vfunc_called(this, "_ZN9S473C5_nt3v52Ev");}
void  S473C5_nt ::v53(){vfunc_called(this, "_ZN9S473C5_nt3v53Ev");}
void  S473C5_nt ::v54(){vfunc_called(this, "_ZN9S473C5_nt3v54Ev");}
void  S473C5_nt ::v55(){vfunc_called(this, "_ZN9S473C5_nt3v55Ev");}
void  S473C5_nt ::v56(){vfunc_called(this, "_ZN9S473C5_nt3v56Ev");}
void  S473C5_nt ::v57(){vfunc_called(this, "_ZN9S473C5_nt3v57Ev");}
void  S473C5_nt ::v58(){vfunc_called(this, "_ZN9S473C5_nt3v58Ev");}
void  S473C5_nt ::v59(){vfunc_called(this, "_ZN9S473C5_nt3v59Ev");}
void  S473C5_nt ::v60(){vfunc_called(this, "_ZN9S473C5_nt3v60Ev");}
void  S473C5_nt ::v61(){vfunc_called(this, "_ZN9S473C5_nt3v61Ev");}
void  S473C5_nt ::v62(){vfunc_called(this, "_ZN9S473C5_nt3v62Ev");}
void  S473C5_nt ::v63(){vfunc_called(this, "_ZN9S473C5_nt3v63Ev");}
void  S473C5_nt ::v64(){vfunc_called(this, "_ZN9S473C5_nt3v64Ev");}
void  S473C5_nt ::v65(){vfunc_called(this, "_ZN9S473C5_nt3v65Ev");}
void  S473C5_nt ::v66(){vfunc_called(this, "_ZN9S473C5_nt3v66Ev");}
void  S473C5_nt ::v67(){vfunc_called(this, "_ZN9S473C5_nt3v67Ev");}
void  S473C5_nt ::v68(){vfunc_called(this, "_ZN9S473C5_nt3v68Ev");}
void  S473C5_nt ::v69(){vfunc_called(this, "_ZN9S473C5_nt3v69Ev");}
void  S473C5_nt ::v70(){vfunc_called(this, "_ZN9S473C5_nt3v70Ev");}
void  S473C5_nt ::v71(){vfunc_called(this, "_ZN9S473C5_nt3v71Ev");}
void  S473C5_nt ::v72(){vfunc_called(this, "_ZN9S473C5_nt3v72Ev");}
void  S473C5_nt ::v73(){vfunc_called(this, "_ZN9S473C5_nt3v73Ev");}
S473C5_nt ::S473C5_nt(){ note_ctor("S473C5_nt", this);} // tgen

//skip512 S473C5_nt

#else // __cplusplus

extern void _ZN9S473C5_ntC1Ev();
extern void _ZN9S473C5_ntD1Ev();
Name_Map name_map_S473C5_nt[] = {
  NSPAIR(_ZN9S473C5_ntC1Ev),
  NSPAIR(_ZN9S473C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S473C5_nt[];
extern void _ZN9S473C5_ntD1Ev();
extern void _ZN9S473C5_ntD0Ev();
extern void _ZN9S473C5_nt3v10Ev();
extern void _ZN9S473C5_nt3v11Ev();
extern void _ZN9S473C5_nt3v12Ev();
extern void _ZN9S473C5_nt3v13Ev();
extern void _ZN9S473C5_nt3v14Ev();
extern void _ZN9S473C5_nt3v15Ev();
extern void _ZN9S473C5_nt3v16Ev();
extern void _ZN9S473C5_nt3v17Ev();
extern void _ZN9S473C5_nt3v18Ev();
extern void _ZN9S473C5_nt3v19Ev();
extern void _ZN9S473C5_nt3v20Ev();
extern void _ZN9S473C5_nt3v21Ev();
extern void _ZN9S473C5_nt3v22Ev();
extern void _ZN9S473C5_nt3v23Ev();
extern void _ZN9S473C5_nt3v24Ev();
extern void _ZN9S473C5_nt3v25Ev();
extern void _ZN9S473C5_nt3v26Ev();
extern void _ZN9S473C5_nt3v27Ev();
extern void _ZN9S473C5_nt3v28Ev();
extern void _ZN9S473C5_nt3v29Ev();
extern void _ZN9S473C5_nt3v30Ev();
extern void _ZN9S473C5_nt3v31Ev();
extern void _ZN9S473C5_nt3v32Ev();
extern void _ZN9S473C5_nt3v33Ev();
extern void _ZN9S473C5_nt3v34Ev();
extern void _ZN9S473C5_nt3v35Ev();
extern void _ZN9S473C5_nt3v36Ev();
extern void _ZN9S473C5_nt3v37Ev();
extern void _ZN9S473C5_nt3v38Ev();
extern void _ZN9S473C5_nt3v39Ev();
extern void _ZN9S473C5_nt3v40Ev();
extern void _ZN9S473C5_nt3v41Ev();
extern void _ZN9S473C5_nt3v42Ev();
extern void _ZN9S473C5_nt3v43Ev();
extern void _ZN9S473C5_nt3v44Ev();
extern void _ZN9S473C5_nt3v45Ev();
extern void _ZN9S473C5_nt3v46Ev();
extern void _ZN9S473C5_nt3v47Ev();
extern void _ZN9S473C5_nt3v48Ev();
extern void _ZN9S473C5_nt3v49Ev();
extern void _ZN9S473C5_nt3v50Ev();
extern void _ZN9S473C5_nt3v51Ev();
extern void _ZN9S473C5_nt3v52Ev();
extern void _ZN9S473C5_nt3v53Ev();
extern void _ZN9S473C5_nt3v54Ev();
extern void _ZN9S473C5_nt3v55Ev();
extern void _ZN9S473C5_nt3v56Ev();
extern void _ZN9S473C5_nt3v57Ev();
extern void _ZN9S473C5_nt3v58Ev();
extern void _ZN9S473C5_nt3v59Ev();
extern void _ZN9S473C5_nt3v60Ev();
extern void _ZN9S473C5_nt3v61Ev();
extern void _ZN9S473C5_nt3v62Ev();
extern void _ZN9S473C5_nt3v63Ev();
extern void _ZN9S473C5_nt3v64Ev();
extern void _ZN9S473C5_nt3v65Ev();
extern void _ZN9S473C5_nt3v66Ev();
extern void _ZN9S473C5_nt3v67Ev();
extern void _ZN9S473C5_nt3v68Ev();
extern void _ZN9S473C5_nt3v69Ev();
extern void _ZN9S473C5_nt3v70Ev();
extern void _ZN9S473C5_nt3v71Ev();
extern void _ZN9S473C5_nt3v72Ev();
extern void _ZN9S473C5_nt3v73Ev();
static  VTBL_ENTRY vtc_S473C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S473C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S473C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S473C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v73Ev,
};
extern VTBL_ENTRY _ZTI9S473C5_nt[];
VTBL_ENTRY *P__ZTI9S473C5_nt = _ZTI9S473C5_nt; 
extern  VTBL_ENTRY _ZTV9S473C5_nt[];
Class_Descriptor cd_S473C5_nt = {  "S473C5_nt", // class name
  0,0,//no base classes
  &(vtc_S473C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S473C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S473C5_nt),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C10_nt  {
  void *s473c10f0;
  int s473c10f1[2];
  void  mf473c10(); // _ZN10S473C10_nt8mf473c10Ev
};
//SIG(-1 S473C10_nt) C1{ m Fp Fi[2]}


void  S473C10_nt ::mf473c10(){}

//skip512 S473C10_nt

#else // __cplusplus

Class_Descriptor cd_S473C10_nt = {  "S473C10_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C9_nt  : S473C10_nt {
};
//SIG(-1 S473C9_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S473C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S473C10_nt;
static Base_Class bases_S473C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S473C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S473C9_nt = {  "S473C9_nt", // class name
  bases_S473C9_nt, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C8_nt  : S473C9_nt {
};
//SIG(-1 S473C8_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S473C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S473C10_nt;
extern Class_Descriptor cd_S473C9_nt;
static Base_Class bases_S473C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S473C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S473C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S473C8_nt = {  "S473C8_nt", // class name
  bases_S473C8_nt, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C7_nt  : S473C8_nt {
};
//SIG(-1 S473C7_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S473C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S473C10_nt;
extern Class_Descriptor cd_S473C9_nt;
extern Class_Descriptor cd_S473C8_nt;
static Base_Class bases_S473C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S473C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S473C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S473C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C4_nt  : S473C5_nt {
  int s473c4f0[2];
  void *s473c4f1;
  int s473c4f2[2];
  ::S473C7_nt s473c4f3;
  ::S473C7_nt s473c4f4;
  ::S21925C42 s473c4f5;
  ::S473C7_nt s473c4f6;
  unsigned int s473c4f7:1;
  unsigned int s473c4f8:1;
  unsigned int s473c4f9:1;
  unsigned int s473c4f10:1;
  unsigned int s473c4f11:1;
  int s473c4f12[2];
  virtual  ~S473C4_nt(); // _ZN9S473C4_ntD1Ev
  virtual void  v74(); // _ZN9S473C4_nt3v74Ev
  virtual void  v75(); // _ZN9S473C4_nt3v75Ev
  virtual void  v76(); // _ZN9S473C4_nt3v76Ev
  virtual void  v77(); // _ZN9S473C4_nt3v77Ev
  virtual void  v78(); // _ZN9S473C4_nt3v78Ev
  virtual void  v79(); // _ZN9S473C4_nt3v79Ev
  virtual void  v80(); // _ZN9S473C4_nt3v80Ev
  virtual void  v81(); // _ZN9S473C4_nt3v81Ev
  virtual void  v82(); // _ZN9S473C4_nt3v82Ev
  virtual void  v83(); // _ZN9S473C4_nt3v83Ev
  virtual void  v84(); // _ZN9S473C4_nt3v84Ev
  virtual void  v85(); // _ZN9S473C4_nt3v85Ev
  virtual void  v86(); // _ZN9S473C4_nt3v86Ev
  virtual void  v87(); // _ZN9S473C4_nt3v87Ev
  virtual void  v88(); // _ZN9S473C4_nt3v88Ev
  virtual void  v89(); // _ZN9S473C4_nt3v89Ev
  virtual void  v90(); // _ZN9S473C4_nt3v90Ev
  virtual void  v91(); // _ZN9S473C4_nt3v91Ev
  virtual void  v92(); // _ZN9S473C4_nt3v92Ev
  virtual void  v93(); // _ZN9S473C4_nt3v93Ev
  virtual void  v94(); // _ZN9S473C4_nt3v94Ev
  virtual void  v95(); // _ZN9S473C4_nt3v95Ev
  S473C4_nt(); // tgen
};
//SIG(-1 S473C4_nt) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S473C4_nt ::~S473C4_nt(){ note_dtor("S473C4_nt", this);}
void  S473C4_nt ::v74(){vfunc_called(this, "_ZN9S473C4_nt3v74Ev");}
void  S473C4_nt ::v75(){vfunc_called(this, "_ZN9S473C4_nt3v75Ev");}
void  S473C4_nt ::v76(){vfunc_called(this, "_ZN9S473C4_nt3v76Ev");}
void  S473C4_nt ::v77(){vfunc_called(this, "_ZN9S473C4_nt3v77Ev");}
void  S473C4_nt ::v78(){vfunc_called(this, "_ZN9S473C4_nt3v78Ev");}
void  S473C4_nt ::v79(){vfunc_called(this, "_ZN9S473C4_nt3v79Ev");}
void  S473C4_nt ::v80(){vfunc_called(this, "_ZN9S473C4_nt3v80Ev");}
void  S473C4_nt ::v81(){vfunc_called(this, "_ZN9S473C4_nt3v81Ev");}
void  S473C4_nt ::v82(){vfunc_called(this, "_ZN9S473C4_nt3v82Ev");}
void  S473C4_nt ::v83(){vfunc_called(this, "_ZN9S473C4_nt3v83Ev");}
void  S473C4_nt ::v84(){vfunc_called(this, "_ZN9S473C4_nt3v84Ev");}
void  S473C4_nt ::v85(){vfunc_called(this, "_ZN9S473C4_nt3v85Ev");}
void  S473C4_nt ::v86(){vfunc_called(this, "_ZN9S473C4_nt3v86Ev");}
void  S473C4_nt ::v87(){vfunc_called(this, "_ZN9S473C4_nt3v87Ev");}
void  S473C4_nt ::v88(){vfunc_called(this, "_ZN9S473C4_nt3v88Ev");}
void  S473C4_nt ::v89(){vfunc_called(this, "_ZN9S473C4_nt3v89Ev");}
void  S473C4_nt ::v90(){vfunc_called(this, "_ZN9S473C4_nt3v90Ev");}
void  S473C4_nt ::v91(){vfunc_called(this, "_ZN9S473C4_nt3v91Ev");}
void  S473C4_nt ::v92(){vfunc_called(this, "_ZN9S473C4_nt3v92Ev");}
void  S473C4_nt ::v93(){vfunc_called(this, "_ZN9S473C4_nt3v93Ev");}
void  S473C4_nt ::v94(){vfunc_called(this, "_ZN9S473C4_nt3v94Ev");}
void  S473C4_nt ::v95(){vfunc_called(this, "_ZN9S473C4_nt3v95Ev");}
S473C4_nt ::S473C4_nt(){ note_ctor("S473C4_nt", this);} // tgen

//skip512 S473C4_nt

#else // __cplusplus

extern void _ZN9S473C4_ntC1Ev();
extern void _ZN9S473C4_ntD1Ev();
Name_Map name_map_S473C4_nt[] = {
  NSPAIR(_ZN9S473C4_ntC1Ev),
  NSPAIR(_ZN9S473C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S473C5_nt;
extern VTBL_ENTRY _ZTI9S473C5_nt[];
extern  VTBL_ENTRY _ZTV9S473C5_nt[];
static Base_Class bases_S473C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S473C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S473C4_nt[];
extern void _ZN9S473C4_ntD1Ev();
extern void _ZN9S473C4_ntD0Ev();
extern void _ZN9S473C5_nt3v10Ev();
extern void _ZN9S473C5_nt3v11Ev();
extern void _ZN9S473C5_nt3v12Ev();
extern void _ZN9S473C5_nt3v13Ev();
extern void _ZN9S473C5_nt3v14Ev();
extern void _ZN9S473C5_nt3v15Ev();
extern void _ZN9S473C5_nt3v16Ev();
extern void _ZN9S473C5_nt3v17Ev();
extern void _ZN9S473C5_nt3v18Ev();
extern void _ZN9S473C5_nt3v19Ev();
extern void _ZN9S473C5_nt3v20Ev();
extern void _ZN9S473C5_nt3v21Ev();
extern void _ZN9S473C5_nt3v22Ev();
extern void _ZN9S473C5_nt3v23Ev();
extern void _ZN9S473C5_nt3v24Ev();
extern void _ZN9S473C5_nt3v25Ev();
extern void _ZN9S473C5_nt3v26Ev();
extern void _ZN9S473C5_nt3v27Ev();
extern void _ZN9S473C5_nt3v28Ev();
extern void _ZN9S473C5_nt3v29Ev();
extern void _ZN9S473C5_nt3v30Ev();
extern void _ZN9S473C5_nt3v31Ev();
extern void _ZN9S473C5_nt3v32Ev();
extern void _ZN9S473C5_nt3v33Ev();
extern void _ZN9S473C5_nt3v34Ev();
extern void _ZN9S473C5_nt3v35Ev();
extern void _ZN9S473C5_nt3v36Ev();
extern void _ZN9S473C5_nt3v37Ev();
extern void _ZN9S473C5_nt3v38Ev();
extern void _ZN9S473C5_nt3v39Ev();
extern void _ZN9S473C5_nt3v40Ev();
extern void _ZN9S473C5_nt3v41Ev();
extern void _ZN9S473C5_nt3v42Ev();
extern void _ZN9S473C5_nt3v43Ev();
extern void _ZN9S473C5_nt3v44Ev();
extern void _ZN9S473C5_nt3v45Ev();
extern void _ZN9S473C5_nt3v46Ev();
extern void _ZN9S473C5_nt3v47Ev();
extern void _ZN9S473C5_nt3v48Ev();
extern void _ZN9S473C5_nt3v49Ev();
extern void _ZN9S473C5_nt3v50Ev();
extern void _ZN9S473C5_nt3v51Ev();
extern void _ZN9S473C5_nt3v52Ev();
extern void _ZN9S473C5_nt3v53Ev();
extern void _ZN9S473C5_nt3v54Ev();
extern void _ZN9S473C5_nt3v55Ev();
extern void _ZN9S473C5_nt3v56Ev();
extern void _ZN9S473C5_nt3v57Ev();
extern void _ZN9S473C5_nt3v58Ev();
extern void _ZN9S473C5_nt3v59Ev();
extern void _ZN9S473C5_nt3v60Ev();
extern void _ZN9S473C5_nt3v61Ev();
extern void _ZN9S473C5_nt3v62Ev();
extern void _ZN9S473C5_nt3v63Ev();
extern void _ZN9S473C5_nt3v64Ev();
extern void _ZN9S473C5_nt3v65Ev();
extern void _ZN9S473C5_nt3v66Ev();
extern void _ZN9S473C5_nt3v67Ev();
extern void _ZN9S473C5_nt3v68Ev();
extern void _ZN9S473C5_nt3v69Ev();
extern void _ZN9S473C5_nt3v70Ev();
extern void _ZN9S473C5_nt3v71Ev();
extern void _ZN9S473C5_nt3v72Ev();
extern void _ZN9S473C5_nt3v73Ev();
extern void _ZN9S473C4_nt3v74Ev();
extern void _ZN9S473C4_nt3v75Ev();
extern void _ZN9S473C4_nt3v76Ev();
extern void _ZN9S473C4_nt3v77Ev();
extern void _ZN9S473C4_nt3v78Ev();
extern void _ZN9S473C4_nt3v79Ev();
extern void _ZN9S473C4_nt3v80Ev();
extern void _ZN9S473C4_nt3v81Ev();
extern void _ZN9S473C4_nt3v82Ev();
extern void _ZN9S473C4_nt3v83Ev();
extern void _ZN9S473C4_nt3v84Ev();
extern void _ZN9S473C4_nt3v85Ev();
extern void _ZN9S473C4_nt3v86Ev();
extern void _ZN9S473C4_nt3v87Ev();
extern void _ZN9S473C4_nt3v88Ev();
extern void _ZN9S473C4_nt3v89Ev();
extern void _ZN9S473C4_nt3v90Ev();
extern void _ZN9S473C4_nt3v91Ev();
extern void _ZN9S473C4_nt3v92Ev();
extern void _ZN9S473C4_nt3v93Ev();
extern void _ZN9S473C4_nt3v94Ev();
extern void _ZN9S473C4_nt3v95Ev();
static  VTBL_ENTRY vtc_S473C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S473C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S473C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S473C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v95Ev,
};
extern VTBL_ENTRY _ZTI9S473C4_nt[];
VTBL_ENTRY *P__ZTI9S473C4_nt = _ZTI9S473C4_nt; 
extern  VTBL_ENTRY _ZTV9S473C4_nt[];
Class_Descriptor cd_S473C4_nt = {  "S473C4_nt", // class name
  bases_S473C4_nt, 1,
  &(vtc_S473C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S473C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S473C4_nt),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C3  : S473C4_nt {
  ::S473C6_nt s473c3f0;
  virtual  ~S473C3(); // _ZN6S473C3D1Ev
  virtual void  v96(); // _ZN6S473C33v96Ev
  virtual void  v97(); // _ZN6S473C33v97Ev
  virtual void  v98(); // _ZN6S473C33v98Ev
  virtual void  v99(); // _ZN6S473C33v99Ev
  virtual void  v100(); // _ZN6S473C34v100Ev
  virtual void  v101(); // _ZN6S473C34v101Ev
  virtual void  v102(); // _ZN6S473C34v102Ev
  virtual void  v103(); // _ZN6S473C34v103Ev
  virtual void  v104(); // _ZN6S473C34v104Ev
  virtual void  v105(); // _ZN6S473C34v105Ev
  virtual void  v106(); // _ZN6S473C34v106Ev
  virtual void  v107(); // _ZN6S473C34v107Ev
  virtual void  v108(); // _ZN6S473C34v108Ev
  virtual void  v109(); // _ZN6S473C34v109Ev
  virtual void  v110(); // _ZN6S473C34v110Ev
  virtual void  v111(); // _ZN6S473C34v111Ev
  virtual void  v112(); // _ZN6S473C34v112Ev
  virtual void  v113(); // _ZN6S473C34v113Ev
  virtual void  v114(); // _ZN6S473C34v114Ev
  S473C3(); // tgen
};
//SIG(-1 S473C3) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S473C3 ::~S473C3(){ note_dtor("S473C3", this);}
void  S473C3 ::v96(){vfunc_called(this, "_ZN6S473C33v96Ev");}
void  S473C3 ::v97(){vfunc_called(this, "_ZN6S473C33v97Ev");}
void  S473C3 ::v98(){vfunc_called(this, "_ZN6S473C33v98Ev");}
void  S473C3 ::v99(){vfunc_called(this, "_ZN6S473C33v99Ev");}
void  S473C3 ::v100(){vfunc_called(this, "_ZN6S473C34v100Ev");}
void  S473C3 ::v101(){vfunc_called(this, "_ZN6S473C34v101Ev");}
void  S473C3 ::v102(){vfunc_called(this, "_ZN6S473C34v102Ev");}
void  S473C3 ::v103(){vfunc_called(this, "_ZN6S473C34v103Ev");}
void  S473C3 ::v104(){vfunc_called(this, "_ZN6S473C34v104Ev");}
void  S473C3 ::v105(){vfunc_called(this, "_ZN6S473C34v105Ev");}
void  S473C3 ::v106(){vfunc_called(this, "_ZN6S473C34v106Ev");}
void  S473C3 ::v107(){vfunc_called(this, "_ZN6S473C34v107Ev");}
void  S473C3 ::v108(){vfunc_called(this, "_ZN6S473C34v108Ev");}
void  S473C3 ::v109(){vfunc_called(this, "_ZN6S473C34v109Ev");}
void  S473C3 ::v110(){vfunc_called(this, "_ZN6S473C34v110Ev");}
void  S473C3 ::v111(){vfunc_called(this, "_ZN6S473C34v111Ev");}
void  S473C3 ::v112(){vfunc_called(this, "_ZN6S473C34v112Ev");}
void  S473C3 ::v113(){vfunc_called(this, "_ZN6S473C34v113Ev");}
void  S473C3 ::v114(){vfunc_called(this, "_ZN6S473C34v114Ev");}
S473C3 ::S473C3(){ note_ctor("S473C3", this);} // tgen

static void Test_S473C3()
{
  extern Class_Descriptor cd_S473C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S473C3, buf);
    S473C3 *dp, &lv = *(dp=new (buf) S473C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S473C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S473C3)");
    check_base_class_offset(lv, (S473C5_nt*)(S473C4_nt*), 0, "S473C3");
    check_base_class_offset(lv, (S473C4_nt*), 0, "S473C3");
    check_field_offset(lv, s473c3f0, ABISELECT(188,132), "S473C3.s473c3f0");
    test_class_info(&lv, &cd_S473C3);
    dp->~S473C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS473C3(Test_S473C3, "S473C3", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN6S473C3C1Ev();
extern void _ZN6S473C3D1Ev();
Name_Map name_map_S473C3[] = {
  NSPAIR(_ZN6S473C3C1Ev),
  NSPAIR(_ZN6S473C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S473C5_nt;
extern VTBL_ENTRY _ZTI9S473C5_nt[];
extern  VTBL_ENTRY _ZTV9S473C5_nt[];
extern Class_Descriptor cd_S473C4_nt;
extern VTBL_ENTRY _ZTI9S473C4_nt[];
extern  VTBL_ENTRY _ZTV9S473C4_nt[];
static Base_Class bases_S473C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S473C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S473C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S473C3[];
extern void _ZN6S473C3D1Ev();
extern void _ZN6S473C3D0Ev();
extern void _ZN9S473C5_nt3v10Ev();
extern void _ZN9S473C5_nt3v11Ev();
extern void _ZN9S473C5_nt3v12Ev();
extern void _ZN9S473C5_nt3v13Ev();
extern void _ZN9S473C5_nt3v14Ev();
extern void _ZN9S473C5_nt3v15Ev();
extern void _ZN9S473C5_nt3v16Ev();
extern void _ZN9S473C5_nt3v17Ev();
extern void _ZN9S473C5_nt3v18Ev();
extern void _ZN9S473C5_nt3v19Ev();
extern void _ZN9S473C5_nt3v20Ev();
extern void _ZN9S473C5_nt3v21Ev();
extern void _ZN9S473C5_nt3v22Ev();
extern void _ZN9S473C5_nt3v23Ev();
extern void _ZN9S473C5_nt3v24Ev();
extern void _ZN9S473C5_nt3v25Ev();
extern void _ZN9S473C5_nt3v26Ev();
extern void _ZN9S473C5_nt3v27Ev();
extern void _ZN9S473C5_nt3v28Ev();
extern void _ZN9S473C5_nt3v29Ev();
extern void _ZN9S473C5_nt3v30Ev();
extern void _ZN9S473C5_nt3v31Ev();
extern void _ZN9S473C5_nt3v32Ev();
extern void _ZN9S473C5_nt3v33Ev();
extern void _ZN9S473C5_nt3v34Ev();
extern void _ZN9S473C5_nt3v35Ev();
extern void _ZN9S473C5_nt3v36Ev();
extern void _ZN9S473C5_nt3v37Ev();
extern void _ZN9S473C5_nt3v38Ev();
extern void _ZN9S473C5_nt3v39Ev();
extern void _ZN9S473C5_nt3v40Ev();
extern void _ZN9S473C5_nt3v41Ev();
extern void _ZN9S473C5_nt3v42Ev();
extern void _ZN9S473C5_nt3v43Ev();
extern void _ZN9S473C5_nt3v44Ev();
extern void _ZN9S473C5_nt3v45Ev();
extern void _ZN9S473C5_nt3v46Ev();
extern void _ZN9S473C5_nt3v47Ev();
extern void _ZN9S473C5_nt3v48Ev();
extern void _ZN9S473C5_nt3v49Ev();
extern void _ZN9S473C5_nt3v50Ev();
extern void _ZN9S473C5_nt3v51Ev();
extern void _ZN9S473C5_nt3v52Ev();
extern void _ZN9S473C5_nt3v53Ev();
extern void _ZN9S473C5_nt3v54Ev();
extern void _ZN9S473C5_nt3v55Ev();
extern void _ZN9S473C5_nt3v56Ev();
extern void _ZN9S473C5_nt3v57Ev();
extern void _ZN9S473C5_nt3v58Ev();
extern void _ZN9S473C5_nt3v59Ev();
extern void _ZN9S473C5_nt3v60Ev();
extern void _ZN9S473C5_nt3v61Ev();
extern void _ZN9S473C5_nt3v62Ev();
extern void _ZN9S473C5_nt3v63Ev();
extern void _ZN9S473C5_nt3v64Ev();
extern void _ZN9S473C5_nt3v65Ev();
extern void _ZN9S473C5_nt3v66Ev();
extern void _ZN9S473C5_nt3v67Ev();
extern void _ZN9S473C5_nt3v68Ev();
extern void _ZN9S473C5_nt3v69Ev();
extern void _ZN9S473C5_nt3v70Ev();
extern void _ZN9S473C5_nt3v71Ev();
extern void _ZN9S473C5_nt3v72Ev();
extern void _ZN9S473C5_nt3v73Ev();
extern void _ZN9S473C4_nt3v74Ev();
extern void _ZN9S473C4_nt3v75Ev();
extern void _ZN9S473C4_nt3v76Ev();
extern void _ZN9S473C4_nt3v77Ev();
extern void _ZN9S473C4_nt3v78Ev();
extern void _ZN9S473C4_nt3v79Ev();
extern void _ZN9S473C4_nt3v80Ev();
extern void _ZN9S473C4_nt3v81Ev();
extern void _ZN9S473C4_nt3v82Ev();
extern void _ZN9S473C4_nt3v83Ev();
extern void _ZN9S473C4_nt3v84Ev();
extern void _ZN9S473C4_nt3v85Ev();
extern void _ZN9S473C4_nt3v86Ev();
extern void _ZN9S473C4_nt3v87Ev();
extern void _ZN9S473C4_nt3v88Ev();
extern void _ZN9S473C4_nt3v89Ev();
extern void _ZN9S473C4_nt3v90Ev();
extern void _ZN9S473C4_nt3v91Ev();
extern void _ZN9S473C4_nt3v92Ev();
extern void _ZN9S473C4_nt3v93Ev();
extern void _ZN9S473C4_nt3v94Ev();
extern void _ZN9S473C4_nt3v95Ev();
extern void _ZN6S473C33v96Ev();
extern void _ZN6S473C33v97Ev();
extern void _ZN6S473C33v98Ev();
extern void _ZN6S473C33v99Ev();
extern void _ZN6S473C34v100Ev();
extern void _ZN6S473C34v101Ev();
extern void _ZN6S473C34v102Ev();
extern void _ZN6S473C34v103Ev();
extern void _ZN6S473C34v104Ev();
extern void _ZN6S473C34v105Ev();
extern void _ZN6S473C34v106Ev();
extern void _ZN6S473C34v107Ev();
extern void _ZN6S473C34v108Ev();
extern void _ZN6S473C34v109Ev();
extern void _ZN6S473C34v110Ev();
extern void _ZN6S473C34v111Ev();
extern void _ZN6S473C34v112Ev();
extern void _ZN6S473C34v113Ev();
extern void _ZN6S473C34v114Ev();
static  VTBL_ENTRY vtc_S473C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S473C3[0]),
  (VTBL_ENTRY)&_ZN6S473C3D1Ev,
  (VTBL_ENTRY)&_ZN6S473C3D0Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN6S473C33v96Ev,
  (VTBL_ENTRY)&_ZN6S473C33v97Ev,
  (VTBL_ENTRY)&_ZN6S473C33v98Ev,
  (VTBL_ENTRY)&_ZN6S473C33v99Ev,
  (VTBL_ENTRY)&_ZN6S473C34v100Ev,
  (VTBL_ENTRY)&_ZN6S473C34v101Ev,
  (VTBL_ENTRY)&_ZN6S473C34v102Ev,
  (VTBL_ENTRY)&_ZN6S473C34v103Ev,
  (VTBL_ENTRY)&_ZN6S473C34v104Ev,
  (VTBL_ENTRY)&_ZN6S473C34v105Ev,
  (VTBL_ENTRY)&_ZN6S473C34v106Ev,
  (VTBL_ENTRY)&_ZN6S473C34v107Ev,
  (VTBL_ENTRY)&_ZN6S473C34v108Ev,
  (VTBL_ENTRY)&_ZN6S473C34v109Ev,
  (VTBL_ENTRY)&_ZN6S473C34v110Ev,
  (VTBL_ENTRY)&_ZN6S473C34v111Ev,
  (VTBL_ENTRY)&_ZN6S473C34v112Ev,
  (VTBL_ENTRY)&_ZN6S473C34v113Ev,
  (VTBL_ENTRY)&_ZN6S473C34v114Ev,
};
extern VTBL_ENTRY _ZTI6S473C3[];
extern  VTBL_ENTRY _ZTV6S473C3[];
Class_Descriptor cd_S473C3 = {  "S473C3", // class name
  bases_S473C3, 2,
  &(vtc_S473C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI6S473C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S473C3),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C2  : S473C3 {
  void *s473c2f0;
  virtual  ~S473C2(); // _ZN6S473C2D1Ev
  virtual void  v115(); // _ZN6S473C24v115Ev
  virtual void  v116(); // _ZN6S473C24v116Ev
  virtual void  v117(); // _ZN6S473C24v117Ev
  virtual void  v118(); // _ZN6S473C24v118Ev
  virtual void  v119(); // _ZN6S473C24v119Ev
  virtual void  v120(); // _ZN6S473C24v120Ev
  virtual void  v121(); // _ZN6S473C24v121Ev
  virtual void  v122(); // _ZN6S473C24v122Ev
  virtual void  v123(); // _ZN6S473C24v123Ev
  S473C2(); // tgen
};
//SIG(-1 S473C2) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 FC5} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S473C2 ::~S473C2(){ note_dtor("S473C2", this);}
void  S473C2 ::v115(){vfunc_called(this, "_ZN6S473C24v115Ev");}
void  S473C2 ::v116(){vfunc_called(this, "_ZN6S473C24v116Ev");}
void  S473C2 ::v117(){vfunc_called(this, "_ZN6S473C24v117Ev");}
void  S473C2 ::v118(){vfunc_called(this, "_ZN6S473C24v118Ev");}
void  S473C2 ::v119(){vfunc_called(this, "_ZN6S473C24v119Ev");}
void  S473C2 ::v120(){vfunc_called(this, "_ZN6S473C24v120Ev");}
void  S473C2 ::v121(){vfunc_called(this, "_ZN6S473C24v121Ev");}
void  S473C2 ::v122(){vfunc_called(this, "_ZN6S473C24v122Ev");}
void  S473C2 ::v123(){vfunc_called(this, "_ZN6S473C24v123Ev");}
S473C2 ::S473C2(){ note_ctor("S473C2", this);} // tgen

static void Test_S473C2()
{
  extern Class_Descriptor cd_S473C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S473C2, buf);
    S473C2 *dp, &lv = *(dp=new (buf) S473C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S473C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S473C2)");
    check_base_class_offset(lv, (S473C5_nt*)(S473C4_nt*)(S473C3*), 0, "S473C2");
    check_base_class_offset(lv, (S473C4_nt*)(S473C3*), 0, "S473C2");
    check_base_class_offset(lv, (S473C3*), 0, "S473C2");
    check_field_offset(lv, s473c2f0, ABISELECT(200,140), "S473C2.s473c2f0");
    test_class_info(&lv, &cd_S473C2);
    dp->~S473C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS473C2(Test_S473C2, "S473C2", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN6S473C2C1Ev();
extern void _ZN6S473C2D1Ev();
Name_Map name_map_S473C2[] = {
  NSPAIR(_ZN6S473C2C1Ev),
  NSPAIR(_ZN6S473C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S473C5_nt;
extern VTBL_ENTRY _ZTI9S473C5_nt[];
extern  VTBL_ENTRY _ZTV9S473C5_nt[];
extern Class_Descriptor cd_S473C4_nt;
extern VTBL_ENTRY _ZTI9S473C4_nt[];
extern  VTBL_ENTRY _ZTV9S473C4_nt[];
extern Class_Descriptor cd_S473C3;
extern VTBL_ENTRY _ZTI6S473C3[];
extern  VTBL_ENTRY _ZTV6S473C3[];
static Base_Class bases_S473C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S473C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S473C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S473C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S473C2[];
extern void _ZN6S473C2D1Ev();
extern void _ZN6S473C2D0Ev();
extern void _ZN9S473C5_nt3v10Ev();
extern void _ZN9S473C5_nt3v11Ev();
extern void _ZN9S473C5_nt3v12Ev();
extern void _ZN9S473C5_nt3v13Ev();
extern void _ZN9S473C5_nt3v14Ev();
extern void _ZN9S473C5_nt3v15Ev();
extern void _ZN9S473C5_nt3v16Ev();
extern void _ZN9S473C5_nt3v17Ev();
extern void _ZN9S473C5_nt3v18Ev();
extern void _ZN9S473C5_nt3v19Ev();
extern void _ZN9S473C5_nt3v20Ev();
extern void _ZN9S473C5_nt3v21Ev();
extern void _ZN9S473C5_nt3v22Ev();
extern void _ZN9S473C5_nt3v23Ev();
extern void _ZN9S473C5_nt3v24Ev();
extern void _ZN9S473C5_nt3v25Ev();
extern void _ZN9S473C5_nt3v26Ev();
extern void _ZN9S473C5_nt3v27Ev();
extern void _ZN9S473C5_nt3v28Ev();
extern void _ZN9S473C5_nt3v29Ev();
extern void _ZN9S473C5_nt3v30Ev();
extern void _ZN9S473C5_nt3v31Ev();
extern void _ZN9S473C5_nt3v32Ev();
extern void _ZN9S473C5_nt3v33Ev();
extern void _ZN9S473C5_nt3v34Ev();
extern void _ZN9S473C5_nt3v35Ev();
extern void _ZN9S473C5_nt3v36Ev();
extern void _ZN9S473C5_nt3v37Ev();
extern void _ZN9S473C5_nt3v38Ev();
extern void _ZN9S473C5_nt3v39Ev();
extern void _ZN9S473C5_nt3v40Ev();
extern void _ZN9S473C5_nt3v41Ev();
extern void _ZN9S473C5_nt3v42Ev();
extern void _ZN9S473C5_nt3v43Ev();
extern void _ZN9S473C5_nt3v44Ev();
extern void _ZN9S473C5_nt3v45Ev();
extern void _ZN9S473C5_nt3v46Ev();
extern void _ZN9S473C5_nt3v47Ev();
extern void _ZN9S473C5_nt3v48Ev();
extern void _ZN9S473C5_nt3v49Ev();
extern void _ZN9S473C5_nt3v50Ev();
extern void _ZN9S473C5_nt3v51Ev();
extern void _ZN9S473C5_nt3v52Ev();
extern void _ZN9S473C5_nt3v53Ev();
extern void _ZN9S473C5_nt3v54Ev();
extern void _ZN9S473C5_nt3v55Ev();
extern void _ZN9S473C5_nt3v56Ev();
extern void _ZN9S473C5_nt3v57Ev();
extern void _ZN9S473C5_nt3v58Ev();
extern void _ZN9S473C5_nt3v59Ev();
extern void _ZN9S473C5_nt3v60Ev();
extern void _ZN9S473C5_nt3v61Ev();
extern void _ZN9S473C5_nt3v62Ev();
extern void _ZN9S473C5_nt3v63Ev();
extern void _ZN9S473C5_nt3v64Ev();
extern void _ZN9S473C5_nt3v65Ev();
extern void _ZN9S473C5_nt3v66Ev();
extern void _ZN9S473C5_nt3v67Ev();
extern void _ZN9S473C5_nt3v68Ev();
extern void _ZN9S473C5_nt3v69Ev();
extern void _ZN9S473C5_nt3v70Ev();
extern void _ZN9S473C5_nt3v71Ev();
extern void _ZN9S473C5_nt3v72Ev();
extern void _ZN9S473C5_nt3v73Ev();
extern void _ZN9S473C4_nt3v74Ev();
extern void _ZN9S473C4_nt3v75Ev();
extern void _ZN9S473C4_nt3v76Ev();
extern void _ZN9S473C4_nt3v77Ev();
extern void _ZN9S473C4_nt3v78Ev();
extern void _ZN9S473C4_nt3v79Ev();
extern void _ZN9S473C4_nt3v80Ev();
extern void _ZN9S473C4_nt3v81Ev();
extern void _ZN9S473C4_nt3v82Ev();
extern void _ZN9S473C4_nt3v83Ev();
extern void _ZN9S473C4_nt3v84Ev();
extern void _ZN9S473C4_nt3v85Ev();
extern void _ZN9S473C4_nt3v86Ev();
extern void _ZN9S473C4_nt3v87Ev();
extern void _ZN9S473C4_nt3v88Ev();
extern void _ZN9S473C4_nt3v89Ev();
extern void _ZN9S473C4_nt3v90Ev();
extern void _ZN9S473C4_nt3v91Ev();
extern void _ZN9S473C4_nt3v92Ev();
extern void _ZN9S473C4_nt3v93Ev();
extern void _ZN9S473C4_nt3v94Ev();
extern void _ZN9S473C4_nt3v95Ev();
extern void _ZN6S473C33v96Ev();
extern void _ZN6S473C33v97Ev();
extern void _ZN6S473C33v98Ev();
extern void _ZN6S473C33v99Ev();
extern void _ZN6S473C34v100Ev();
extern void _ZN6S473C34v101Ev();
extern void _ZN6S473C34v102Ev();
extern void _ZN6S473C34v103Ev();
extern void _ZN6S473C34v104Ev();
extern void _ZN6S473C34v105Ev();
extern void _ZN6S473C34v106Ev();
extern void _ZN6S473C34v107Ev();
extern void _ZN6S473C34v108Ev();
extern void _ZN6S473C34v109Ev();
extern void _ZN6S473C34v110Ev();
extern void _ZN6S473C34v111Ev();
extern void _ZN6S473C34v112Ev();
extern void _ZN6S473C34v113Ev();
extern void _ZN6S473C34v114Ev();
extern void _ZN6S473C24v115Ev();
extern void _ZN6S473C24v116Ev();
extern void _ZN6S473C24v117Ev();
extern void _ZN6S473C24v118Ev();
extern void _ZN6S473C24v119Ev();
extern void _ZN6S473C24v120Ev();
extern void _ZN6S473C24v121Ev();
extern void _ZN6S473C24v122Ev();
extern void _ZN6S473C24v123Ev();
static  VTBL_ENTRY vtc_S473C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S473C2[0]),
  (VTBL_ENTRY)&_ZN6S473C2D1Ev,
  (VTBL_ENTRY)&_ZN6S473C2D0Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN6S473C33v96Ev,
  (VTBL_ENTRY)&_ZN6S473C33v97Ev,
  (VTBL_ENTRY)&_ZN6S473C33v98Ev,
  (VTBL_ENTRY)&_ZN6S473C33v99Ev,
  (VTBL_ENTRY)&_ZN6S473C34v100Ev,
  (VTBL_ENTRY)&_ZN6S473C34v101Ev,
  (VTBL_ENTRY)&_ZN6S473C34v102Ev,
  (VTBL_ENTRY)&_ZN6S473C34v103Ev,
  (VTBL_ENTRY)&_ZN6S473C34v104Ev,
  (VTBL_ENTRY)&_ZN6S473C34v105Ev,
  (VTBL_ENTRY)&_ZN6S473C34v106Ev,
  (VTBL_ENTRY)&_ZN6S473C34v107Ev,
  (VTBL_ENTRY)&_ZN6S473C34v108Ev,
  (VTBL_ENTRY)&_ZN6S473C34v109Ev,
  (VTBL_ENTRY)&_ZN6S473C34v110Ev,
  (VTBL_ENTRY)&_ZN6S473C34v111Ev,
  (VTBL_ENTRY)&_ZN6S473C34v112Ev,
  (VTBL_ENTRY)&_ZN6S473C34v113Ev,
  (VTBL_ENTRY)&_ZN6S473C34v114Ev,
  (VTBL_ENTRY)&_ZN6S473C24v115Ev,
  (VTBL_ENTRY)&_ZN6S473C24v116Ev,
  (VTBL_ENTRY)&_ZN6S473C24v117Ev,
  (VTBL_ENTRY)&_ZN6S473C24v118Ev,
  (VTBL_ENTRY)&_ZN6S473C24v119Ev,
  (VTBL_ENTRY)&_ZN6S473C24v120Ev,
  (VTBL_ENTRY)&_ZN6S473C24v121Ev,
  (VTBL_ENTRY)&_ZN6S473C24v122Ev,
  (VTBL_ENTRY)&_ZN6S473C24v123Ev,
};
extern VTBL_ENTRY _ZTI6S473C2[];
extern  VTBL_ENTRY _ZTV6S473C2[];
Class_Descriptor cd_S473C2 = {  "S473C2", // class name
  bases_S473C2, 3,
  &(vtc_S473C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI6S473C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S473C2),118, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C13_nt  {
  int s473c13f0[5];
};
//SIG(-1 S473C13_nt) C1{ Fi[5]}



//skip512 S473C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C12_nt  {
  ::S473C13_nt s473c12f0;
  ::S473C6_nt s473c12f1;
  void *s473c12f2;
  unsigned int s473c12f3:1;
};
//SIG(-1 S473C12_nt) C1{ FC2{ Fi[5]} FC3{ m Fi[2]} Fp Fi:1}



//skip512 S473C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S473C1  : S473C2 {
  ::S473C12_nt s473c1f0;
  virtual  ~S473C1(); // _ZN6S473C1D1Ev
  virtual void  v1(); // _ZN6S473C12v1Ev
  virtual void  v2(); // _ZN6S473C12v2Ev
  virtual void  v3(); // _ZN6S473C12v3Ev
  virtual void  v4(); // _ZN6S473C12v4Ev
  virtual void  v5(); // _ZN6S473C12v5Ev
  virtual void  v6(); // _ZN6S473C12v6Ev
  virtual void  v7(); // _ZN6S473C12v7Ev
  virtual void  v8(); // _ZN6S473C12v8Ev
  virtual void  v9(); // _ZN6S473C12v9Ev
  S473C1(); // tgen
};
//SIG(1 S473C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 FC6} vd v115 v116 v117 v118 v119 v120 v121 v122 v123 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC12{ FC13{ Fi[5]} FC6 Fp Fi:1}}


 S473C1 ::~S473C1(){ note_dtor("S473C1", this);}
void  S473C1 ::v1(){vfunc_called(this, "_ZN6S473C12v1Ev");}
void  S473C1 ::v2(){vfunc_called(this, "_ZN6S473C12v2Ev");}
void  S473C1 ::v3(){vfunc_called(this, "_ZN6S473C12v3Ev");}
void  S473C1 ::v4(){vfunc_called(this, "_ZN6S473C12v4Ev");}
void  S473C1 ::v5(){vfunc_called(this, "_ZN6S473C12v5Ev");}
void  S473C1 ::v6(){vfunc_called(this, "_ZN6S473C12v6Ev");}
void  S473C1 ::v7(){vfunc_called(this, "_ZN6S473C12v7Ev");}
void  S473C1 ::v8(){vfunc_called(this, "_ZN6S473C12v8Ev");}
void  S473C1 ::v9(){vfunc_called(this, "_ZN6S473C12v9Ev");}
S473C1 ::S473C1(){ note_ctor("S473C1", this);} // tgen

static void Test_S473C1()
{
  extern Class_Descriptor cd_S473C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,46)];
    init_test(&cd_S473C1, buf);
    S473C1 *dp, &lv = *(dp=new (buf) S473C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,180), "sizeof(S473C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S473C1)");
    check_base_class_offset(lv, (S473C5_nt*)(S473C4_nt*)(S473C3*)(S473C2*), 0, "S473C1");
    check_base_class_offset(lv, (S473C4_nt*)(S473C3*)(S473C2*), 0, "S473C1");
    check_base_class_offset(lv, (S473C3*)(S473C2*), 0, "S473C1");
    check_base_class_offset(lv, (S473C2*), 0, "S473C1");
    check_field_offset(lv, s473c1f0, ABISELECT(208,144), "S473C1.s473c1f0");
    test_class_info(&lv, &cd_S473C1);
    dp->~S473C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS473C1(Test_S473C1, "S473C1", ABISELECT(256,180));

#else // __cplusplus

extern void _ZN6S473C1C1Ev();
extern void _ZN6S473C1D1Ev();
Name_Map name_map_S473C1[] = {
  NSPAIR(_ZN6S473C1C1Ev),
  NSPAIR(_ZN6S473C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S473C5_nt;
extern VTBL_ENTRY _ZTI9S473C5_nt[];
extern  VTBL_ENTRY _ZTV9S473C5_nt[];
extern Class_Descriptor cd_S473C4_nt;
extern VTBL_ENTRY _ZTI9S473C4_nt[];
extern  VTBL_ENTRY _ZTV9S473C4_nt[];
extern Class_Descriptor cd_S473C3;
extern VTBL_ENTRY _ZTI6S473C3[];
extern  VTBL_ENTRY _ZTV6S473C3[];
extern Class_Descriptor cd_S473C2;
extern VTBL_ENTRY _ZTI6S473C2[];
extern  VTBL_ENTRY _ZTV6S473C2[];
static Base_Class bases_S473C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S473C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S473C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S473C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S473C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S473C1[];
extern void _ZN6S473C1D1Ev();
extern void _ZN6S473C1D0Ev();
extern void _ZN9S473C5_nt3v10Ev();
extern void _ZN9S473C5_nt3v11Ev();
extern void _ZN9S473C5_nt3v12Ev();
extern void _ZN9S473C5_nt3v13Ev();
extern void _ZN9S473C5_nt3v14Ev();
extern void _ZN9S473C5_nt3v15Ev();
extern void _ZN9S473C5_nt3v16Ev();
extern void _ZN9S473C5_nt3v17Ev();
extern void _ZN9S473C5_nt3v18Ev();
extern void _ZN9S473C5_nt3v19Ev();
extern void _ZN9S473C5_nt3v20Ev();
extern void _ZN9S473C5_nt3v21Ev();
extern void _ZN9S473C5_nt3v22Ev();
extern void _ZN9S473C5_nt3v23Ev();
extern void _ZN9S473C5_nt3v24Ev();
extern void _ZN9S473C5_nt3v25Ev();
extern void _ZN9S473C5_nt3v26Ev();
extern void _ZN9S473C5_nt3v27Ev();
extern void _ZN9S473C5_nt3v28Ev();
extern void _ZN9S473C5_nt3v29Ev();
extern void _ZN9S473C5_nt3v30Ev();
extern void _ZN9S473C5_nt3v31Ev();
extern void _ZN9S473C5_nt3v32Ev();
extern void _ZN9S473C5_nt3v33Ev();
extern void _ZN9S473C5_nt3v34Ev();
extern void _ZN9S473C5_nt3v35Ev();
extern void _ZN9S473C5_nt3v36Ev();
extern void _ZN9S473C5_nt3v37Ev();
extern void _ZN9S473C5_nt3v38Ev();
extern void _ZN9S473C5_nt3v39Ev();
extern void _ZN9S473C5_nt3v40Ev();
extern void _ZN9S473C5_nt3v41Ev();
extern void _ZN9S473C5_nt3v42Ev();
extern void _ZN9S473C5_nt3v43Ev();
extern void _ZN9S473C5_nt3v44Ev();
extern void _ZN9S473C5_nt3v45Ev();
extern void _ZN9S473C5_nt3v46Ev();
extern void _ZN9S473C5_nt3v47Ev();
extern void _ZN9S473C5_nt3v48Ev();
extern void _ZN9S473C5_nt3v49Ev();
extern void _ZN9S473C5_nt3v50Ev();
extern void _ZN9S473C5_nt3v51Ev();
extern void _ZN9S473C5_nt3v52Ev();
extern void _ZN9S473C5_nt3v53Ev();
extern void _ZN9S473C5_nt3v54Ev();
extern void _ZN9S473C5_nt3v55Ev();
extern void _ZN9S473C5_nt3v56Ev();
extern void _ZN9S473C5_nt3v57Ev();
extern void _ZN9S473C5_nt3v58Ev();
extern void _ZN9S473C5_nt3v59Ev();
extern void _ZN9S473C5_nt3v60Ev();
extern void _ZN9S473C5_nt3v61Ev();
extern void _ZN9S473C5_nt3v62Ev();
extern void _ZN9S473C5_nt3v63Ev();
extern void _ZN9S473C5_nt3v64Ev();
extern void _ZN9S473C5_nt3v65Ev();
extern void _ZN9S473C5_nt3v66Ev();
extern void _ZN9S473C5_nt3v67Ev();
extern void _ZN9S473C5_nt3v68Ev();
extern void _ZN9S473C5_nt3v69Ev();
extern void _ZN9S473C5_nt3v70Ev();
extern void _ZN9S473C5_nt3v71Ev();
extern void _ZN9S473C5_nt3v72Ev();
extern void _ZN9S473C5_nt3v73Ev();
extern void _ZN9S473C4_nt3v74Ev();
extern void _ZN9S473C4_nt3v75Ev();
extern void _ZN9S473C4_nt3v76Ev();
extern void _ZN9S473C4_nt3v77Ev();
extern void _ZN9S473C4_nt3v78Ev();
extern void _ZN9S473C4_nt3v79Ev();
extern void _ZN9S473C4_nt3v80Ev();
extern void _ZN9S473C4_nt3v81Ev();
extern void _ZN9S473C4_nt3v82Ev();
extern void _ZN9S473C4_nt3v83Ev();
extern void _ZN9S473C4_nt3v84Ev();
extern void _ZN9S473C4_nt3v85Ev();
extern void _ZN9S473C4_nt3v86Ev();
extern void _ZN9S473C4_nt3v87Ev();
extern void _ZN9S473C4_nt3v88Ev();
extern void _ZN9S473C4_nt3v89Ev();
extern void _ZN9S473C4_nt3v90Ev();
extern void _ZN9S473C4_nt3v91Ev();
extern void _ZN9S473C4_nt3v92Ev();
extern void _ZN9S473C4_nt3v93Ev();
extern void _ZN9S473C4_nt3v94Ev();
extern void _ZN9S473C4_nt3v95Ev();
extern void _ZN6S473C33v96Ev();
extern void _ZN6S473C33v97Ev();
extern void _ZN6S473C33v98Ev();
extern void _ZN6S473C33v99Ev();
extern void _ZN6S473C34v100Ev();
extern void _ZN6S473C34v101Ev();
extern void _ZN6S473C34v102Ev();
extern void _ZN6S473C34v103Ev();
extern void _ZN6S473C34v104Ev();
extern void _ZN6S473C34v105Ev();
extern void _ZN6S473C34v106Ev();
extern void _ZN6S473C34v107Ev();
extern void _ZN6S473C34v108Ev();
extern void _ZN6S473C34v109Ev();
extern void _ZN6S473C34v110Ev();
extern void _ZN6S473C34v111Ev();
extern void _ZN6S473C34v112Ev();
extern void _ZN6S473C34v113Ev();
extern void _ZN6S473C34v114Ev();
extern void _ZN6S473C24v115Ev();
extern void _ZN6S473C24v116Ev();
extern void _ZN6S473C24v117Ev();
extern void _ZN6S473C24v118Ev();
extern void _ZN6S473C24v119Ev();
extern void _ZN6S473C24v120Ev();
extern void _ZN6S473C24v121Ev();
extern void _ZN6S473C24v122Ev();
extern void _ZN6S473C24v123Ev();
extern void _ZN6S473C12v1Ev();
extern void _ZN6S473C12v2Ev();
extern void _ZN6S473C12v3Ev();
extern void _ZN6S473C12v4Ev();
extern void _ZN6S473C12v5Ev();
extern void _ZN6S473C12v6Ev();
extern void _ZN6S473C12v7Ev();
extern void _ZN6S473C12v8Ev();
extern void _ZN6S473C12v9Ev();
static  VTBL_ENTRY vtc_S473C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S473C1[0]),
  (VTBL_ENTRY)&_ZN6S473C1D1Ev,
  (VTBL_ENTRY)&_ZN6S473C1D0Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S473C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S473C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN6S473C33v96Ev,
  (VTBL_ENTRY)&_ZN6S473C33v97Ev,
  (VTBL_ENTRY)&_ZN6S473C33v98Ev,
  (VTBL_ENTRY)&_ZN6S473C33v99Ev,
  (VTBL_ENTRY)&_ZN6S473C34v100Ev,
  (VTBL_ENTRY)&_ZN6S473C34v101Ev,
  (VTBL_ENTRY)&_ZN6S473C34v102Ev,
  (VTBL_ENTRY)&_ZN6S473C34v103Ev,
  (VTBL_ENTRY)&_ZN6S473C34v104Ev,
  (VTBL_ENTRY)&_ZN6S473C34v105Ev,
  (VTBL_ENTRY)&_ZN6S473C34v106Ev,
  (VTBL_ENTRY)&_ZN6S473C34v107Ev,
  (VTBL_ENTRY)&_ZN6S473C34v108Ev,
  (VTBL_ENTRY)&_ZN6S473C34v109Ev,
  (VTBL_ENTRY)&_ZN6S473C34v110Ev,
  (VTBL_ENTRY)&_ZN6S473C34v111Ev,
  (VTBL_ENTRY)&_ZN6S473C34v112Ev,
  (VTBL_ENTRY)&_ZN6S473C34v113Ev,
  (VTBL_ENTRY)&_ZN6S473C34v114Ev,
  (VTBL_ENTRY)&_ZN6S473C24v115Ev,
  (VTBL_ENTRY)&_ZN6S473C24v116Ev,
  (VTBL_ENTRY)&_ZN6S473C24v117Ev,
  (VTBL_ENTRY)&_ZN6S473C24v118Ev,
  (VTBL_ENTRY)&_ZN6S473C24v119Ev,
  (VTBL_ENTRY)&_ZN6S473C24v120Ev,
  (VTBL_ENTRY)&_ZN6S473C24v121Ev,
  (VTBL_ENTRY)&_ZN6S473C24v122Ev,
  (VTBL_ENTRY)&_ZN6S473C24v123Ev,
  (VTBL_ENTRY)&_ZN6S473C12v1Ev,
  (VTBL_ENTRY)&_ZN6S473C12v2Ev,
  (VTBL_ENTRY)&_ZN6S473C12v3Ev,
  (VTBL_ENTRY)&_ZN6S473C12v4Ev,
  (VTBL_ENTRY)&_ZN6S473C12v5Ev,
  (VTBL_ENTRY)&_ZN6S473C12v6Ev,
  (VTBL_ENTRY)&_ZN6S473C12v7Ev,
  (VTBL_ENTRY)&_ZN6S473C12v8Ev,
  (VTBL_ENTRY)&_ZN6S473C12v9Ev,
};
extern VTBL_ENTRY _ZTI6S473C1[];
extern  VTBL_ENTRY _ZTV6S473C1[];
Class_Descriptor cd_S473C1 = {  "S473C1", // class name
  bases_S473C1, 4,
  &(vtc_S473C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,180), // object size
  NSPAIRA(_ZTI6S473C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S473C1),127, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S672C5  {
  int s672c5f0;
  __tsi64 s672c5f1;
  void *s672c5f2[4];
  int s672c5f3[2];
  void *s672c5f4;
  ::S473C6_nt s672c5f5;
  void *s672c5f6[2];
  virtual  ~S672C5(); // _ZN6S672C5D1Ev
  virtual void  v6(); // _ZN6S672C52v6Ev
  virtual void  v7(); // _ZN6S672C52v7Ev
  virtual void  v8(); // _ZN6S672C52v8Ev
  virtual void  v9(); // _ZN6S672C52v9Ev
  virtual void  v10(); // _ZN6S672C53v10Ev
  virtual void  v11(); // _ZN6S672C53v11Ev
  virtual void  v12(); // _ZN6S672C53v12Ev
  virtual void  v13(); // _ZN6S672C53v13Ev
  virtual void  v14(); // _ZN6S672C53v14Ev
  virtual void  v15(); // _ZN6S672C53v15Ev
  virtual void  v16(); // _ZN6S672C53v16Ev
  virtual void  v17(); // _ZN6S672C53v17Ev
  virtual void  v18(); // _ZN6S672C53v18Ev
  virtual void  v19(); // _ZN6S672C53v19Ev
  virtual void  v20(); // _ZN6S672C53v20Ev
  virtual void  v21(); // _ZN6S672C53v21Ev
  virtual void  v22(); // _ZN6S672C53v22Ev
  virtual void  v23(); // _ZN6S672C53v23Ev
  virtual void  v24(); // _ZN6S672C53v24Ev
  virtual void  v25(); // _ZN6S672C53v25Ev
  virtual void  v26(); // _ZN6S672C53v26Ev
  virtual void  v27(); // _ZN6S672C53v27Ev
  virtual void  v28(); // _ZN6S672C53v28Ev
  virtual void  v29(); // _ZN6S672C53v29Ev
  virtual void  v30(); // _ZN6S672C53v30Ev
  virtual void  v31(); // _ZN6S672C53v31Ev
  virtual void  v32(); // _ZN6S672C53v32Ev
  virtual void  v33(); // _ZN6S672C53v33Ev
  virtual void  v34(); // _ZN6S672C53v34Ev
  virtual void  v35(); // _ZN6S672C53v35Ev
  virtual void  v36(); // _ZN6S672C53v36Ev
  virtual void  v37(); // _ZN6S672C53v37Ev
  virtual void  v38(); // _ZN6S672C53v38Ev
  virtual void  v39(); // _ZN6S672C53v39Ev
  virtual void  v40(); // _ZN6S672C53v40Ev
  virtual void  v41(); // _ZN6S672C53v41Ev
  virtual void  v42(); // _ZN6S672C53v42Ev
  virtual void  v43(); // _ZN6S672C53v43Ev
  virtual void  v44(); // _ZN6S672C53v44Ev
  virtual void  v45(); // _ZN6S672C53v45Ev
  virtual void  v46(); // _ZN6S672C53v46Ev
  virtual void  v47(); // _ZN6S672C53v47Ev
  virtual void  v48(); // _ZN6S672C53v48Ev
  virtual void  v49(); // _ZN6S672C53v49Ev
  virtual void  v50(); // _ZN6S672C53v50Ev
  virtual void  v51(); // _ZN6S672C53v51Ev
  virtual void  v52(); // _ZN6S672C53v52Ev
  virtual void  v53(); // _ZN6S672C53v53Ev
  virtual void  v54(); // _ZN6S672C53v54Ev
  virtual void  v55(); // _ZN6S672C53v55Ev
  virtual void  v56(); // _ZN6S672C53v56Ev
  virtual void  v57(); // _ZN6S672C53v57Ev
  virtual void  v58(); // _ZN6S672C53v58Ev
  virtual void  v59(); // _ZN6S672C53v59Ev
  virtual void  v60(); // _ZN6S672C53v60Ev
  virtual void  v61(); // _ZN6S672C53v61Ev
  virtual void  v62(); // _ZN6S672C53v62Ev
  virtual void  v63(); // _ZN6S672C53v63Ev
  virtual void  v64(); // _ZN6S672C53v64Ev
  virtual void  v65(); // _ZN6S672C53v65Ev
  virtual void  v66(); // _ZN6S672C53v66Ev
  virtual void  v67(); // _ZN6S672C53v67Ev
  virtual void  v68(); // _ZN6S672C53v68Ev
  virtual void  v69(); // _ZN6S672C53v69Ev
  S672C5(); // tgen
};
//SIG(-1 S672C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S672C5 ::~S672C5(){ note_dtor("S672C5", this);}
void  S672C5 ::v6(){vfunc_called(this, "_ZN6S672C52v6Ev");}
void  S672C5 ::v7(){vfunc_called(this, "_ZN6S672C52v7Ev");}
void  S672C5 ::v8(){vfunc_called(this, "_ZN6S672C52v8Ev");}
void  S672C5 ::v9(){vfunc_called(this, "_ZN6S672C52v9Ev");}
void  S672C5 ::v10(){vfunc_called(this, "_ZN6S672C53v10Ev");}
void  S672C5 ::v11(){vfunc_called(this, "_ZN6S672C53v11Ev");}
void  S672C5 ::v12(){vfunc_called(this, "_ZN6S672C53v12Ev");}
void  S672C5 ::v13(){vfunc_called(this, "_ZN6S672C53v13Ev");}
void  S672C5 ::v14(){vfunc_called(this, "_ZN6S672C53v14Ev");}
void  S672C5 ::v15(){vfunc_called(this, "_ZN6S672C53v15Ev");}
void  S672C5 ::v16(){vfunc_called(this, "_ZN6S672C53v16Ev");}
void  S672C5 ::v17(){vfunc_called(this, "_ZN6S672C53v17Ev");}
void  S672C5 ::v18(){vfunc_called(this, "_ZN6S672C53v18Ev");}
void  S672C5 ::v19(){vfunc_called(this, "_ZN6S672C53v19Ev");}
void  S672C5 ::v20(){vfunc_called(this, "_ZN6S672C53v20Ev");}
void  S672C5 ::v21(){vfunc_called(this, "_ZN6S672C53v21Ev");}
void  S672C5 ::v22(){vfunc_called(this, "_ZN6S672C53v22Ev");}
void  S672C5 ::v23(){vfunc_called(this, "_ZN6S672C53v23Ev");}
void  S672C5 ::v24(){vfunc_called(this, "_ZN6S672C53v24Ev");}
void  S672C5 ::v25(){vfunc_called(this, "_ZN6S672C53v25Ev");}
void  S672C5 ::v26(){vfunc_called(this, "_ZN6S672C53v26Ev");}
void  S672C5 ::v27(){vfunc_called(this, "_ZN6S672C53v27Ev");}
void  S672C5 ::v28(){vfunc_called(this, "_ZN6S672C53v28Ev");}
void  S672C5 ::v29(){vfunc_called(this, "_ZN6S672C53v29Ev");}
void  S672C5 ::v30(){vfunc_called(this, "_ZN6S672C53v30Ev");}
void  S672C5 ::v31(){vfunc_called(this, "_ZN6S672C53v31Ev");}
void  S672C5 ::v32(){vfunc_called(this, "_ZN6S672C53v32Ev");}
void  S672C5 ::v33(){vfunc_called(this, "_ZN6S672C53v33Ev");}
void  S672C5 ::v34(){vfunc_called(this, "_ZN6S672C53v34Ev");}
void  S672C5 ::v35(){vfunc_called(this, "_ZN6S672C53v35Ev");}
void  S672C5 ::v36(){vfunc_called(this, "_ZN6S672C53v36Ev");}
void  S672C5 ::v37(){vfunc_called(this, "_ZN6S672C53v37Ev");}
void  S672C5 ::v38(){vfunc_called(this, "_ZN6S672C53v38Ev");}
void  S672C5 ::v39(){vfunc_called(this, "_ZN6S672C53v39Ev");}
void  S672C5 ::v40(){vfunc_called(this, "_ZN6S672C53v40Ev");}
void  S672C5 ::v41(){vfunc_called(this, "_ZN6S672C53v41Ev");}
void  S672C5 ::v42(){vfunc_called(this, "_ZN6S672C53v42Ev");}
void  S672C5 ::v43(){vfunc_called(this, "_ZN6S672C53v43Ev");}
void  S672C5 ::v44(){vfunc_called(this, "_ZN6S672C53v44Ev");}
void  S672C5 ::v45(){vfunc_called(this, "_ZN6S672C53v45Ev");}
void  S672C5 ::v46(){vfunc_called(this, "_ZN6S672C53v46Ev");}
void  S672C5 ::v47(){vfunc_called(this, "_ZN6S672C53v47Ev");}
void  S672C5 ::v48(){vfunc_called(this, "_ZN6S672C53v48Ev");}
void  S672C5 ::v49(){vfunc_called(this, "_ZN6S672C53v49Ev");}
void  S672C5 ::v50(){vfunc_called(this, "_ZN6S672C53v50Ev");}
void  S672C5 ::v51(){vfunc_called(this, "_ZN6S672C53v51Ev");}
void  S672C5 ::v52(){vfunc_called(this, "_ZN6S672C53v52Ev");}
void  S672C5 ::v53(){vfunc_called(this, "_ZN6S672C53v53Ev");}
void  S672C5 ::v54(){vfunc_called(this, "_ZN6S672C53v54Ev");}
void  S672C5 ::v55(){vfunc_called(this, "_ZN6S672C53v55Ev");}
void  S672C5 ::v56(){vfunc_called(this, "_ZN6S672C53v56Ev");}
void  S672C5 ::v57(){vfunc_called(this, "_ZN6S672C53v57Ev");}
void  S672C5 ::v58(){vfunc_called(this, "_ZN6S672C53v58Ev");}
void  S672C5 ::v59(){vfunc_called(this, "_ZN6S672C53v59Ev");}
void  S672C5 ::v60(){vfunc_called(this, "_ZN6S672C53v60Ev");}
void  S672C5 ::v61(){vfunc_called(this, "_ZN6S672C53v61Ev");}
void  S672C5 ::v62(){vfunc_called(this, "_ZN6S672C53v62Ev");}
void  S672C5 ::v63(){vfunc_called(this, "_ZN6S672C53v63Ev");}
void  S672C5 ::v64(){vfunc_called(this, "_ZN6S672C53v64Ev");}
void  S672C5 ::v65(){vfunc_called(this, "_ZN6S672C53v65Ev");}
void  S672C5 ::v66(){vfunc_called(this, "_ZN6S672C53v66Ev");}
void  S672C5 ::v67(){vfunc_called(this, "_ZN6S672C53v67Ev");}
void  S672C5 ::v68(){vfunc_called(this, "_ZN6S672C53v68Ev");}
void  S672C5 ::v69(){vfunc_called(this, "_ZN6S672C53v69Ev");}
S672C5 ::S672C5(){ note_ctor("S672C5", this);} // tgen

static void Test_S672C5()
{
  extern Class_Descriptor cd_S672C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S672C5, buf);
    S672C5 *dp, &lv = *(dp=new (buf) S672C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S672C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S672C5)");
    check_field_offset(lv, s672c5f0, ABISELECT(8,4), "S672C5.s672c5f0");
    check_field_offset(lv, s672c5f1, ABISELECT(16,8), "S672C5.s672c5f1");
    check_field_offset(lv, s672c5f2, ABISELECT(24,16), "S672C5.s672c5f2");
    check_field_offset(lv, s672c5f3, ABISELECT(56,32), "S672C5.s672c5f3");
    check_field_offset(lv, s672c5f4, ABISELECT(64,40), "S672C5.s672c5f4");
    check_field_offset(lv, s672c5f5, ABISELECT(72,44), "S672C5.s672c5f5");
    check_field_offset(lv, s672c5f6, ABISELECT(80,52), "S672C5.s672c5f6");
    test_class_info(&lv, &cd_S672C5);
    dp->~S672C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS672C5(Test_S672C5, "S672C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S672C5C1Ev();
extern void _ZN6S672C5D1Ev();
Name_Map name_map_S672C5[] = {
  NSPAIR(_ZN6S672C5C1Ev),
  NSPAIR(_ZN6S672C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S672C5[];
extern void _ZN6S672C5D1Ev();
extern void _ZN6S672C5D0Ev();
extern void _ZN6S672C52v6Ev();
extern void _ZN6S672C52v7Ev();
extern void _ZN6S672C52v8Ev();
extern void _ZN6S672C52v9Ev();
extern void _ZN6S672C53v10Ev();
extern void _ZN6S672C53v11Ev();
extern void _ZN6S672C53v12Ev();
extern void _ZN6S672C53v13Ev();
extern void _ZN6S672C53v14Ev();
extern void _ZN6S672C53v15Ev();
extern void _ZN6S672C53v16Ev();
extern void _ZN6S672C53v17Ev();
extern void _ZN6S672C53v18Ev();
extern void _ZN6S672C53v19Ev();
extern void _ZN6S672C53v20Ev();
extern void _ZN6S672C53v21Ev();
extern void _ZN6S672C53v22Ev();
extern void _ZN6S672C53v23Ev();
extern void _ZN6S672C53v24Ev();
extern void _ZN6S672C53v25Ev();
extern void _ZN6S672C53v26Ev();
extern void _ZN6S672C53v27Ev();
extern void _ZN6S672C53v28Ev();
extern void _ZN6S672C53v29Ev();
extern void _ZN6S672C53v30Ev();
extern void _ZN6S672C53v31Ev();
extern void _ZN6S672C53v32Ev();
extern void _ZN6S672C53v33Ev();
extern void _ZN6S672C53v34Ev();
extern void _ZN6S672C53v35Ev();
extern void _ZN6S672C53v36Ev();
extern void _ZN6S672C53v37Ev();
extern void _ZN6S672C53v38Ev();
extern void _ZN6S672C53v39Ev();
extern void _ZN6S672C53v40Ev();
extern void _ZN6S672C53v41Ev();
extern void _ZN6S672C53v42Ev();
extern void _ZN6S672C53v43Ev();
extern void _ZN6S672C53v44Ev();
extern void _ZN6S672C53v45Ev();
extern void _ZN6S672C53v46Ev();
extern void _ZN6S672C53v47Ev();
extern void _ZN6S672C53v48Ev();
extern void _ZN6S672C53v49Ev();
extern void _ZN6S672C53v50Ev();
extern void _ZN6S672C53v51Ev();
extern void _ZN6S672C53v52Ev();
extern void _ZN6S672C53v53Ev();
extern void _ZN6S672C53v54Ev();
extern void _ZN6S672C53v55Ev();
extern void _ZN6S672C53v56Ev();
extern void _ZN6S672C53v57Ev();
extern void _ZN6S672C53v58Ev();
extern void _ZN6S672C53v59Ev();
extern void _ZN6S672C53v60Ev();
extern void _ZN6S672C53v61Ev();
extern void _ZN6S672C53v62Ev();
extern void _ZN6S672C53v63Ev();
extern void _ZN6S672C53v64Ev();
extern void _ZN6S672C53v65Ev();
extern void _ZN6S672C53v66Ev();
extern void _ZN6S672C53v67Ev();
extern void _ZN6S672C53v68Ev();
extern void _ZN6S672C53v69Ev();
static  VTBL_ENTRY vtc_S672C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S672C5[0]),
  (VTBL_ENTRY)&_ZN6S672C5D1Ev,
  (VTBL_ENTRY)&_ZN6S672C5D0Ev,
  (VTBL_ENTRY)&_ZN6S672C52v6Ev,
  (VTBL_ENTRY)&_ZN6S672C52v7Ev,
  (VTBL_ENTRY)&_ZN6S672C52v8Ev,
  (VTBL_ENTRY)&_ZN6S672C52v9Ev,
  (VTBL_ENTRY)&_ZN6S672C53v10Ev,
  (VTBL_ENTRY)&_ZN6S672C53v11Ev,
  (VTBL_ENTRY)&_ZN6S672C53v12Ev,
  (VTBL_ENTRY)&_ZN6S672C53v13Ev,
  (VTBL_ENTRY)&_ZN6S672C53v14Ev,
  (VTBL_ENTRY)&_ZN6S672C53v15Ev,
  (VTBL_ENTRY)&_ZN6S672C53v16Ev,
  (VTBL_ENTRY)&_ZN6S672C53v17Ev,
  (VTBL_ENTRY)&_ZN6S672C53v18Ev,
  (VTBL_ENTRY)&_ZN6S672C53v19Ev,
  (VTBL_ENTRY)&_ZN6S672C53v20Ev,
  (VTBL_ENTRY)&_ZN6S672C53v21Ev,
  (VTBL_ENTRY)&_ZN6S672C53v22Ev,
  (VTBL_ENTRY)&_ZN6S672C53v23Ev,
  (VTBL_ENTRY)&_ZN6S672C53v24Ev,
  (VTBL_ENTRY)&_ZN6S672C53v25Ev,
  (VTBL_ENTRY)&_ZN6S672C53v26Ev,
  (VTBL_ENTRY)&_ZN6S672C53v27Ev,
  (VTBL_ENTRY)&_ZN6S672C53v28Ev,
  (VTBL_ENTRY)&_ZN6S672C53v29Ev,
  (VTBL_ENTRY)&_ZN6S672C53v30Ev,
  (VTBL_ENTRY)&_ZN6S672C53v31Ev,
  (VTBL_ENTRY)&_ZN6S672C53v32Ev,
  (VTBL_ENTRY)&_ZN6S672C53v33Ev,
  (VTBL_ENTRY)&_ZN6S672C53v34Ev,
  (VTBL_ENTRY)&_ZN6S672C53v35Ev,
  (VTBL_ENTRY)&_ZN6S672C53v36Ev,
  (VTBL_ENTRY)&_ZN6S672C53v37Ev,
  (VTBL_ENTRY)&_ZN6S672C53v38Ev,
  (VTBL_ENTRY)&_ZN6S672C53v39Ev,
  (VTBL_ENTRY)&_ZN6S672C53v40Ev,
  (VTBL_ENTRY)&_ZN6S672C53v41Ev,
  (VTBL_ENTRY)&_ZN6S672C53v42Ev,
  (VTBL_ENTRY)&_ZN6S672C53v43Ev,
  (VTBL_ENTRY)&_ZN6S672C53v44Ev,
  (VTBL_ENTRY)&_ZN6S672C53v45Ev,
  (VTBL_ENTRY)&_ZN6S672C53v46Ev,
  (VTBL_ENTRY)&_ZN6S672C53v47Ev,
  (VTBL_ENTRY)&_ZN6S672C53v48Ev,
  (VTBL_ENTRY)&_ZN6S672C53v49Ev,
  (VTBL_ENTRY)&_ZN6S672C53v50Ev,
  (VTBL_ENTRY)&_ZN6S672C53v51Ev,
  (VTBL_ENTRY)&_ZN6S672C53v52Ev,
  (VTBL_ENTRY)&_ZN6S672C53v53Ev,
  (VTBL_ENTRY)&_ZN6S672C53v54Ev,
  (VTBL_ENTRY)&_ZN6S672C53v55Ev,
  (VTBL_ENTRY)&_ZN6S672C53v56Ev,
  (VTBL_ENTRY)&_ZN6S672C53v57Ev,
  (VTBL_ENTRY)&_ZN6S672C53v58Ev,
  (VTBL_ENTRY)&_ZN6S672C53v59Ev,
  (VTBL_ENTRY)&_ZN6S672C53v60Ev,
  (VTBL_ENTRY)&_ZN6S672C53v61Ev,
  (VTBL_ENTRY)&_ZN6S672C53v62Ev,
  (VTBL_ENTRY)&_ZN6S672C53v63Ev,
  (VTBL_ENTRY)&_ZN6S672C53v64Ev,
  (VTBL_ENTRY)&_ZN6S672C53v65Ev,
  (VTBL_ENTRY)&_ZN6S672C53v66Ev,
  (VTBL_ENTRY)&_ZN6S672C53v67Ev,
  (VTBL_ENTRY)&_ZN6S672C53v68Ev,
  (VTBL_ENTRY)&_ZN6S672C53v69Ev,
};
extern VTBL_ENTRY _ZTI6S672C5[];
extern  VTBL_ENTRY _ZTV6S672C5[];
Class_Descriptor cd_S672C5 = {  "S672C5", // class name
  0,0,//no base classes
  &(vtc_S672C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S672C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S672C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S672C4  : S672C5 {
  int s672c4f0[2];
  void *s672c4f1;
  int s672c4f2[2];
  ::S473C7_nt s672c4f3;
  ::S473C7_nt s672c4f4;
  ::S21925C42 s672c4f5;
  ::S473C7_nt s672c4f6;
  unsigned int s672c4f7:1;
  unsigned int s672c4f8:1;
  unsigned int s672c4f9:1;
  unsigned int s672c4f10:1;
  unsigned int s672c4f11:1;
  int s672c4f12[2];
  virtual  ~S672C4(); // _ZN6S672C4D1Ev
  virtual void  v70(); // _ZN6S672C43v70Ev
  virtual void  v71(); // _ZN6S672C43v71Ev
  virtual void  v72(); // _ZN6S672C43v72Ev
  virtual void  v73(); // _ZN6S672C43v73Ev
  virtual void  v74(); // _ZN6S672C43v74Ev
  virtual void  v75(); // _ZN6S672C43v75Ev
  virtual void  v76(); // _ZN6S672C43v76Ev
  virtual void  v77(); // _ZN6S672C43v77Ev
  virtual void  v78(); // _ZN6S672C43v78Ev
  virtual void  v79(); // _ZN6S672C43v79Ev
  virtual void  v80(); // _ZN6S672C43v80Ev
  virtual void  v81(); // _ZN6S672C43v81Ev
  virtual void  v82(); // _ZN6S672C43v82Ev
  virtual void  v83(); // _ZN6S672C43v83Ev
  virtual void  v84(); // _ZN6S672C43v84Ev
  virtual void  v85(); // _ZN6S672C43v85Ev
  virtual void  v86(); // _ZN6S672C43v86Ev
  virtual void  v87(); // _ZN6S672C43v87Ev
  virtual void  v88(); // _ZN6S672C43v88Ev
  virtual void  v89(); // _ZN6S672C43v89Ev
  virtual void  v90(); // _ZN6S672C43v90Ev
  virtual void  v91(); // _ZN6S672C43v91Ev
  S672C4(); // tgen
};
//SIG(-1 S672C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S672C4 ::~S672C4(){ note_dtor("S672C4", this);}
void  S672C4 ::v70(){vfunc_called(this, "_ZN6S672C43v70Ev");}
void  S672C4 ::v71(){vfunc_called(this, "_ZN6S672C43v71Ev");}
void  S672C4 ::v72(){vfunc_called(this, "_ZN6S672C43v72Ev");}
void  S672C4 ::v73(){vfunc_called(this, "_ZN6S672C43v73Ev");}
void  S672C4 ::v74(){vfunc_called(this, "_ZN6S672C43v74Ev");}
void  S672C4 ::v75(){vfunc_called(this, "_ZN6S672C43v75Ev");}
void  S672C4 ::v76(){vfunc_called(this, "_ZN6S672C43v76Ev");}
void  S672C4 ::v77(){vfunc_called(this, "_ZN6S672C43v77Ev");}
void  S672C4 ::v78(){vfunc_called(this, "_ZN6S672C43v78Ev");}
void  S672C4 ::v79(){vfunc_called(this, "_ZN6S672C43v79Ev");}
void  S672C4 ::v80(){vfunc_called(this, "_ZN6S672C43v80Ev");}
void  S672C4 ::v81(){vfunc_called(this, "_ZN6S672C43v81Ev");}
void  S672C4 ::v82(){vfunc_called(this, "_ZN6S672C43v82Ev");}
void  S672C4 ::v83(){vfunc_called(this, "_ZN6S672C43v83Ev");}
void  S672C4 ::v84(){vfunc_called(this, "_ZN6S672C43v84Ev");}
void  S672C4 ::v85(){vfunc_called(this, "_ZN6S672C43v85Ev");}
void  S672C4 ::v86(){vfunc_called(this, "_ZN6S672C43v86Ev");}
void  S672C4 ::v87(){vfunc_called(this, "_ZN6S672C43v87Ev");}
void  S672C4 ::v88(){vfunc_called(this, "_ZN6S672C43v88Ev");}
void  S672C4 ::v89(){vfunc_called(this, "_ZN6S672C43v89Ev");}
void  S672C4 ::v90(){vfunc_called(this, "_ZN6S672C43v90Ev");}
void  S672C4 ::v91(){vfunc_called(this, "_ZN6S672C43v91Ev");}
S672C4 ::S672C4(){ note_ctor("S672C4", this);} // tgen

static void Test_S672C4()
{
  extern Class_Descriptor cd_S672C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S672C4, buf);
    S672C4 *dp, &lv = *(dp=new (buf) S672C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S672C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S672C4)");
    check_base_class_offset(lv, (S672C5*), 0, "S672C4");
    check_field_offset(lv, s672c4f0, ABISELECT(96,60), "S672C4.s672c4f0");
    check_field_offset(lv, s672c4f1, ABISELECT(104,68), "S672C4.s672c4f1");
    check_field_offset(lv, s672c4f2, ABISELECT(112,72), "S672C4.s672c4f2");
    check_field_offset(lv, s672c4f3, ABISELECT(120,80), "S672C4.s672c4f3");
    check_field_offset(lv, s672c4f4, ABISELECT(136,92), "S672C4.s672c4f4");
    check_field_offset(lv, s672c4f5, ABISELECT(152,104), "S672C4.s672c4f5");
    check_field_offset(lv, s672c4f6, ABISELECT(160,108), "S672C4.s672c4f6");
    set_bf_and_test(lv, s672c4f7, ABISELECT(176,120), 0, 1, 1, "S672C4");
    set_bf_and_test(lv, s672c4f8, ABISELECT(176,120), 1, 1, 1, "S672C4");
    set_bf_and_test(lv, s672c4f9, ABISELECT(176,120), 2, 1, 1, "S672C4");
    set_bf_and_test(lv, s672c4f10, ABISELECT(176,120), 3, 1, 1, "S672C4");
    set_bf_and_test(lv, s672c4f11, ABISELECT(176,120), 4, 1, 1, "S672C4");
    check_field_offset(lv, s672c4f12, ABISELECT(180,124), "S672C4.s672c4f12");
    test_class_info(&lv, &cd_S672C4);
    dp->~S672C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS672C4(Test_S672C4, "S672C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S672C4C1Ev();
extern void _ZN6S672C4D1Ev();
Name_Map name_map_S672C4[] = {
  NSPAIR(_ZN6S672C4C1Ev),
  NSPAIR(_ZN6S672C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S672C5;
extern VTBL_ENTRY _ZTI6S672C5[];
extern  VTBL_ENTRY _ZTV6S672C5[];
static Base_Class bases_S672C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S672C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S672C4[];
extern void _ZN6S672C4D1Ev();
extern void _ZN6S672C4D0Ev();
extern void _ZN6S672C52v6Ev();
extern void _ZN6S672C52v7Ev();
extern void _ZN6S672C52v8Ev();
extern void _ZN6S672C52v9Ev();
extern void _ZN6S672C53v10Ev();
extern void _ZN6S672C53v11Ev();
extern void _ZN6S672C53v12Ev();
extern void _ZN6S672C53v13Ev();
extern void _ZN6S672C53v14Ev();
extern void _ZN6S672C53v15Ev();
extern void _ZN6S672C53v16Ev();
extern void _ZN6S672C53v17Ev();
extern void _ZN6S672C53v18Ev();
extern void _ZN6S672C53v19Ev();
extern void _ZN6S672C53v20Ev();
extern void _ZN6S672C53v21Ev();
extern void _ZN6S672C53v22Ev();
extern void _ZN6S672C53v23Ev();
extern void _ZN6S672C53v24Ev();
extern void _ZN6S672C53v25Ev();
extern void _ZN6S672C53v26Ev();
extern void _ZN6S672C53v27Ev();
extern void _ZN6S672C53v28Ev();
extern void _ZN6S672C53v29Ev();
extern void _ZN6S672C53v30Ev();
extern void _ZN6S672C53v31Ev();
extern void _ZN6S672C53v32Ev();
extern void _ZN6S672C53v33Ev();
extern void _ZN6S672C53v34Ev();
extern void _ZN6S672C53v35Ev();
extern void _ZN6S672C53v36Ev();
extern void _ZN6S672C53v37Ev();
extern void _ZN6S672C53v38Ev();
extern void _ZN6S672C53v39Ev();
extern void _ZN6S672C53v40Ev();
extern void _ZN6S672C53v41Ev();
extern void _ZN6S672C53v42Ev();
extern void _ZN6S672C53v43Ev();
extern void _ZN6S672C53v44Ev();
extern void _ZN6S672C53v45Ev();
extern void _ZN6S672C53v46Ev();
extern void _ZN6S672C53v47Ev();
extern void _ZN6S672C53v48Ev();
extern void _ZN6S672C53v49Ev();
extern void _ZN6S672C53v50Ev();
extern void _ZN6S672C53v51Ev();
extern void _ZN6S672C53v52Ev();
extern void _ZN6S672C53v53Ev();
extern void _ZN6S672C53v54Ev();
extern void _ZN6S672C53v55Ev();
extern void _ZN6S672C53v56Ev();
extern void _ZN6S672C53v57Ev();
extern void _ZN6S672C53v58Ev();
extern void _ZN6S672C53v59Ev();
extern void _ZN6S672C53v60Ev();
extern void _ZN6S672C53v61Ev();
extern void _ZN6S672C53v62Ev();
extern void _ZN6S672C53v63Ev();
extern void _ZN6S672C53v64Ev();
extern void _ZN6S672C53v65Ev();
extern void _ZN6S672C53v66Ev();
extern void _ZN6S672C53v67Ev();
extern void _ZN6S672C53v68Ev();
extern void _ZN6S672C53v69Ev();
extern void _ZN6S672C43v70Ev();
extern void _ZN6S672C43v71Ev();
extern void _ZN6S672C43v72Ev();
extern void _ZN6S672C43v73Ev();
extern void _ZN6S672C43v74Ev();
extern void _ZN6S672C43v75Ev();
extern void _ZN6S672C43v76Ev();
extern void _ZN6S672C43v77Ev();
extern void _ZN6S672C43v78Ev();
extern void _ZN6S672C43v79Ev();
extern void _ZN6S672C43v80Ev();
extern void _ZN6S672C43v81Ev();
extern void _ZN6S672C43v82Ev();
extern void _ZN6S672C43v83Ev();
extern void _ZN6S672C43v84Ev();
extern void _ZN6S672C43v85Ev();
extern void _ZN6S672C43v86Ev();
extern void _ZN6S672C43v87Ev();
extern void _ZN6S672C43v88Ev();
extern void _ZN6S672C43v89Ev();
extern void _ZN6S672C43v90Ev();
extern void _ZN6S672C43v91Ev();
static  VTBL_ENTRY vtc_S672C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S672C4[0]),
  (VTBL_ENTRY)&_ZN6S672C4D1Ev,
  (VTBL_ENTRY)&_ZN6S672C4D0Ev,
  (VTBL_ENTRY)&_ZN6S672C52v6Ev,
  (VTBL_ENTRY)&_ZN6S672C52v7Ev,
  (VTBL_ENTRY)&_ZN6S672C52v8Ev,
  (VTBL_ENTRY)&_ZN6S672C52v9Ev,
  (VTBL_ENTRY)&_ZN6S672C53v10Ev,
  (VTBL_ENTRY)&_ZN6S672C53v11Ev,
  (VTBL_ENTRY)&_ZN6S672C53v12Ev,
  (VTBL_ENTRY)&_ZN6S672C53v13Ev,
  (VTBL_ENTRY)&_ZN6S672C53v14Ev,
  (VTBL_ENTRY)&_ZN6S672C53v15Ev,
  (VTBL_ENTRY)&_ZN6S672C53v16Ev,
  (VTBL_ENTRY)&_ZN6S672C53v17Ev,
  (VTBL_ENTRY)&_ZN6S672C53v18Ev,
  (VTBL_ENTRY)&_ZN6S672C53v19Ev,
  (VTBL_ENTRY)&_ZN6S672C53v20Ev,
  (VTBL_ENTRY)&_ZN6S672C53v21Ev,
  (VTBL_ENTRY)&_ZN6S672C53v22Ev,
  (VTBL_ENTRY)&_ZN6S672C53v23Ev,
  (VTBL_ENTRY)&_ZN6S672C53v24Ev,
  (VTBL_ENTRY)&_ZN6S672C53v25Ev,
  (VTBL_ENTRY)&_ZN6S672C53v26Ev,
  (VTBL_ENTRY)&_ZN6S672C53v27Ev,
  (VTBL_ENTRY)&_ZN6S672C53v28Ev,
  (VTBL_ENTRY)&_ZN6S672C53v29Ev,
  (VTBL_ENTRY)&_ZN6S672C53v30Ev,
  (VTBL_ENTRY)&_ZN6S672C53v31Ev,
  (VTBL_ENTRY)&_ZN6S672C53v32Ev,
  (VTBL_ENTRY)&_ZN6S672C53v33Ev,
  (VTBL_ENTRY)&_ZN6S672C53v34Ev,
  (VTBL_ENTRY)&_ZN6S672C53v35Ev,
  (VTBL_ENTRY)&_ZN6S672C53v36Ev,
  (VTBL_ENTRY)&_ZN6S672C53v37Ev,
  (VTBL_ENTRY)&_ZN6S672C53v38Ev,
  (VTBL_ENTRY)&_ZN6S672C53v39Ev,
  (VTBL_ENTRY)&_ZN6S672C53v40Ev,
  (VTBL_ENTRY)&_ZN6S672C53v41Ev,
  (VTBL_ENTRY)&_ZN6S672C53v42Ev,
  (VTBL_ENTRY)&_ZN6S672C53v43Ev,
  (VTBL_ENTRY)&_ZN6S672C53v44Ev,
  (VTBL_ENTRY)&_ZN6S672C53v45Ev,
  (VTBL_ENTRY)&_ZN6S672C53v46Ev,
  (VTBL_ENTRY)&_ZN6S672C53v47Ev,
  (VTBL_ENTRY)&_ZN6S672C53v48Ev,
  (VTBL_ENTRY)&_ZN6S672C53v49Ev,
  (VTBL_ENTRY)&_ZN6S672C53v50Ev,
  (VTBL_ENTRY)&_ZN6S672C53v51Ev,
  (VTBL_ENTRY)&_ZN6S672C53v52Ev,
  (VTBL_ENTRY)&_ZN6S672C53v53Ev,
  (VTBL_ENTRY)&_ZN6S672C53v54Ev,
  (VTBL_ENTRY)&_ZN6S672C53v55Ev,
  (VTBL_ENTRY)&_ZN6S672C53v56Ev,
  (VTBL_ENTRY)&_ZN6S672C53v57Ev,
  (VTBL_ENTRY)&_ZN6S672C53v58Ev,
  (VTBL_ENTRY)&_ZN6S672C53v59Ev,
  (VTBL_ENTRY)&_ZN6S672C53v60Ev,
  (VTBL_ENTRY)&_ZN6S672C53v61Ev,
  (VTBL_ENTRY)&_ZN6S672C53v62Ev,
  (VTBL_ENTRY)&_ZN6S672C53v63Ev,
  (VTBL_ENTRY)&_ZN6S672C53v64Ev,
  (VTBL_ENTRY)&_ZN6S672C53v65Ev,
  (VTBL_ENTRY)&_ZN6S672C53v66Ev,
  (VTBL_ENTRY)&_ZN6S672C53v67Ev,
  (VTBL_ENTRY)&_ZN6S672C53v68Ev,
  (VTBL_ENTRY)&_ZN6S672C53v69Ev,
  (VTBL_ENTRY)&_ZN6S672C43v70Ev,
  (VTBL_ENTRY)&_ZN6S672C43v71Ev,
  (VTBL_ENTRY)&_ZN6S672C43v72Ev,
  (VTBL_ENTRY)&_ZN6S672C43v73Ev,
  (VTBL_ENTRY)&_ZN6S672C43v74Ev,
  (VTBL_ENTRY)&_ZN6S672C43v75Ev,
  (VTBL_ENTRY)&_ZN6S672C43v76Ev,
  (VTBL_ENTRY)&_ZN6S672C43v77Ev,
  (VTBL_ENTRY)&_ZN6S672C43v78Ev,
  (VTBL_ENTRY)&_ZN6S672C43v79Ev,
  (VTBL_ENTRY)&_ZN6S672C43v80Ev,
  (VTBL_ENTRY)&_ZN6S672C43v81Ev,
  (VTBL_ENTRY)&_ZN6S672C43v82Ev,
  (VTBL_ENTRY)&_ZN6S672C43v83Ev,
  (VTBL_ENTRY)&_ZN6S672C43v84Ev,
  (VTBL_ENTRY)&_ZN6S672C43v85Ev,
  (VTBL_ENTRY)&_ZN6S672C43v86Ev,
  (VTBL_ENTRY)&_ZN6S672C43v87Ev,
  (VTBL_ENTRY)&_ZN6S672C43v88Ev,
  (VTBL_ENTRY)&_ZN6S672C43v89Ev,
  (VTBL_ENTRY)&_ZN6S672C43v90Ev,
  (VTBL_ENTRY)&_ZN6S672C43v91Ev,
};
extern VTBL_ENTRY _ZTI6S672C4[];
extern  VTBL_ENTRY _ZTV6S672C4[];
Class_Descriptor cd_S672C4 = {  "S672C4", // class name
  bases_S672C4, 1,
  &(vtc_S672C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S672C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S672C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S672C3  : S672C4 {
  ::S473C6_nt s672c3f0;
  virtual  ~S672C3(); // _ZN6S672C3D1Ev
  virtual void  v92(); // _ZN6S672C33v92Ev
  virtual void  v93(); // _ZN6S672C33v93Ev
  virtual void  v94(); // _ZN6S672C33v94Ev
  virtual void  v95(); // _ZN6S672C33v95Ev
  virtual void  v96(); // _ZN6S672C33v96Ev
  virtual void  v97(); // _ZN6S672C33v97Ev
  virtual void  v98(); // _ZN6S672C33v98Ev
  virtual void  v99(); // _ZN6S672C33v99Ev
  virtual void  v100(); // _ZN6S672C34v100Ev
  virtual void  v101(); // _ZN6S672C34v101Ev
  virtual void  v102(); // _ZN6S672C34v102Ev
  virtual void  v103(); // _ZN6S672C34v103Ev
  virtual void  v104(); // _ZN6S672C34v104Ev
  virtual void  v105(); // _ZN6S672C34v105Ev
  virtual void  v106(); // _ZN6S672C34v106Ev
  virtual void  v107(); // _ZN6S672C34v107Ev
  virtual void  v108(); // _ZN6S672C34v108Ev
  virtual void  v109(); // _ZN6S672C34v109Ev
  virtual void  v110(); // _ZN6S672C34v110Ev
  S672C3(); // tgen
};
//SIG(-1 S672C3) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S672C3 ::~S672C3(){ note_dtor("S672C3", this);}
void  S672C3 ::v92(){vfunc_called(this, "_ZN6S672C33v92Ev");}
void  S672C3 ::v93(){vfunc_called(this, "_ZN6S672C33v93Ev");}
void  S672C3 ::v94(){vfunc_called(this, "_ZN6S672C33v94Ev");}
void  S672C3 ::v95(){vfunc_called(this, "_ZN6S672C33v95Ev");}
void  S672C3 ::v96(){vfunc_called(this, "_ZN6S672C33v96Ev");}
void  S672C3 ::v97(){vfunc_called(this, "_ZN6S672C33v97Ev");}
void  S672C3 ::v98(){vfunc_called(this, "_ZN6S672C33v98Ev");}
void  S672C3 ::v99(){vfunc_called(this, "_ZN6S672C33v99Ev");}
void  S672C3 ::v100(){vfunc_called(this, "_ZN6S672C34v100Ev");}
void  S672C3 ::v101(){vfunc_called(this, "_ZN6S672C34v101Ev");}
void  S672C3 ::v102(){vfunc_called(this, "_ZN6S672C34v102Ev");}
void  S672C3 ::v103(){vfunc_called(this, "_ZN6S672C34v103Ev");}
void  S672C3 ::v104(){vfunc_called(this, "_ZN6S672C34v104Ev");}
void  S672C3 ::v105(){vfunc_called(this, "_ZN6S672C34v105Ev");}
void  S672C3 ::v106(){vfunc_called(this, "_ZN6S672C34v106Ev");}
void  S672C3 ::v107(){vfunc_called(this, "_ZN6S672C34v107Ev");}
void  S672C3 ::v108(){vfunc_called(this, "_ZN6S672C34v108Ev");}
void  S672C3 ::v109(){vfunc_called(this, "_ZN6S672C34v109Ev");}
void  S672C3 ::v110(){vfunc_called(this, "_ZN6S672C34v110Ev");}
S672C3 ::S672C3(){ note_ctor("S672C3", this);} // tgen

static void Test_S672C3()
{
  extern Class_Descriptor cd_S672C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S672C3, buf);
    S672C3 *dp, &lv = *(dp=new (buf) S672C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S672C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S672C3)");
    check_base_class_offset(lv, (S672C5*)(S672C4*), 0, "S672C3");
    check_base_class_offset(lv, (S672C4*), 0, "S672C3");
    check_field_offset(lv, s672c3f0, ABISELECT(188,132), "S672C3.s672c3f0");
    test_class_info(&lv, &cd_S672C3);
    dp->~S672C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS672C3(Test_S672C3, "S672C3", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN6S672C3C1Ev();
extern void _ZN6S672C3D1Ev();
Name_Map name_map_S672C3[] = {
  NSPAIR(_ZN6S672C3C1Ev),
  NSPAIR(_ZN6S672C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S672C5;
extern VTBL_ENTRY _ZTI6S672C5[];
extern  VTBL_ENTRY _ZTV6S672C5[];
extern Class_Descriptor cd_S672C4;
extern VTBL_ENTRY _ZTI6S672C4[];
extern  VTBL_ENTRY _ZTV6S672C4[];
static Base_Class bases_S672C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S672C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S672C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S672C3[];
extern void _ZN6S672C3D1Ev();
extern void _ZN6S672C3D0Ev();
extern void _ZN6S672C52v6Ev();
extern void _ZN6S672C52v7Ev();
extern void _ZN6S672C52v8Ev();
extern void _ZN6S672C52v9Ev();
extern void _ZN6S672C53v10Ev();
extern void _ZN6S672C53v11Ev();
extern void _ZN6S672C53v12Ev();
extern void _ZN6S672C53v13Ev();
extern void _ZN6S672C53v14Ev();
extern void _ZN6S672C53v15Ev();
extern void _ZN6S672C53v16Ev();
extern void _ZN6S672C53v17Ev();
extern void _ZN6S672C53v18Ev();
extern void _ZN6S672C53v19Ev();
extern void _ZN6S672C53v20Ev();
extern void _ZN6S672C53v21Ev();
extern void _ZN6S672C53v22Ev();
extern void _ZN6S672C53v23Ev();
extern void _ZN6S672C53v24Ev();
extern void _ZN6S672C53v25Ev();
extern void _ZN6S672C53v26Ev();
extern void _ZN6S672C53v27Ev();
extern void _ZN6S672C53v28Ev();
extern void _ZN6S672C53v29Ev();
extern void _ZN6S672C53v30Ev();
extern void _ZN6S672C53v31Ev();
extern void _ZN6S672C53v32Ev();
extern void _ZN6S672C53v33Ev();
extern void _ZN6S672C53v34Ev();
extern void _ZN6S672C53v35Ev();
extern void _ZN6S672C53v36Ev();
extern void _ZN6S672C53v37Ev();
extern void _ZN6S672C53v38Ev();
extern void _ZN6S672C53v39Ev();
extern void _ZN6S672C53v40Ev();
extern void _ZN6S672C53v41Ev();
extern void _ZN6S672C53v42Ev();
extern void _ZN6S672C53v43Ev();
extern void _ZN6S672C53v44Ev();
extern void _ZN6S672C53v45Ev();
extern void _ZN6S672C53v46Ev();
extern void _ZN6S672C53v47Ev();
extern void _ZN6S672C53v48Ev();
extern void _ZN6S672C53v49Ev();
extern void _ZN6S672C53v50Ev();
extern void _ZN6S672C53v51Ev();
extern void _ZN6S672C53v52Ev();
extern void _ZN6S672C53v53Ev();
extern void _ZN6S672C53v54Ev();
extern void _ZN6S672C53v55Ev();
extern void _ZN6S672C53v56Ev();
extern void _ZN6S672C53v57Ev();
extern void _ZN6S672C53v58Ev();
extern void _ZN6S672C53v59Ev();
extern void _ZN6S672C53v60Ev();
extern void _ZN6S672C53v61Ev();
extern void _ZN6S672C53v62Ev();
extern void _ZN6S672C53v63Ev();
extern void _ZN6S672C53v64Ev();
extern void _ZN6S672C53v65Ev();
extern void _ZN6S672C53v66Ev();
extern void _ZN6S672C53v67Ev();
extern void _ZN6S672C53v68Ev();
extern void _ZN6S672C53v69Ev();
extern void _ZN6S672C43v70Ev();
extern void _ZN6S672C43v71Ev();
extern void _ZN6S672C43v72Ev();
extern void _ZN6S672C43v73Ev();
extern void _ZN6S672C43v74Ev();
extern void _ZN6S672C43v75Ev();
extern void _ZN6S672C43v76Ev();
extern void _ZN6S672C43v77Ev();
extern void _ZN6S672C43v78Ev();
extern void _ZN6S672C43v79Ev();
extern void _ZN6S672C43v80Ev();
extern void _ZN6S672C43v81Ev();
extern void _ZN6S672C43v82Ev();
extern void _ZN6S672C43v83Ev();
extern void _ZN6S672C43v84Ev();
extern void _ZN6S672C43v85Ev();
extern void _ZN6S672C43v86Ev();
extern void _ZN6S672C43v87Ev();
extern void _ZN6S672C43v88Ev();
extern void _ZN6S672C43v89Ev();
extern void _ZN6S672C43v90Ev();
extern void _ZN6S672C43v91Ev();
extern void _ZN6S672C33v92Ev();
extern void _ZN6S672C33v93Ev();
extern void _ZN6S672C33v94Ev();
extern void _ZN6S672C33v95Ev();
extern void _ZN6S672C33v96Ev();
extern void _ZN6S672C33v97Ev();
extern void _ZN6S672C33v98Ev();
extern void _ZN6S672C33v99Ev();
extern void _ZN6S672C34v100Ev();
extern void _ZN6S672C34v101Ev();
extern void _ZN6S672C34v102Ev();
extern void _ZN6S672C34v103Ev();
extern void _ZN6S672C34v104Ev();
extern void _ZN6S672C34v105Ev();
extern void _ZN6S672C34v106Ev();
extern void _ZN6S672C34v107Ev();
extern void _ZN6S672C34v108Ev();
extern void _ZN6S672C34v109Ev();
extern void _ZN6S672C34v110Ev();
static  VTBL_ENTRY vtc_S672C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S672C3[0]),
  (VTBL_ENTRY)&_ZN6S672C3D1Ev,
  (VTBL_ENTRY)&_ZN6S672C3D0Ev,
  (VTBL_ENTRY)&_ZN6S672C52v6Ev,
  (VTBL_ENTRY)&_ZN6S672C52v7Ev,
  (VTBL_ENTRY)&_ZN6S672C52v8Ev,
  (VTBL_ENTRY)&_ZN6S672C52v9Ev,
  (VTBL_ENTRY)&_ZN6S672C53v10Ev,
  (VTBL_ENTRY)&_ZN6S672C53v11Ev,
  (VTBL_ENTRY)&_ZN6S672C53v12Ev,
  (VTBL_ENTRY)&_ZN6S672C53v13Ev,
  (VTBL_ENTRY)&_ZN6S672C53v14Ev,
  (VTBL_ENTRY)&_ZN6S672C53v15Ev,
  (VTBL_ENTRY)&_ZN6S672C53v16Ev,
  (VTBL_ENTRY)&_ZN6S672C53v17Ev,
  (VTBL_ENTRY)&_ZN6S672C53v18Ev,
  (VTBL_ENTRY)&_ZN6S672C53v19Ev,
  (VTBL_ENTRY)&_ZN6S672C53v20Ev,
  (VTBL_ENTRY)&_ZN6S672C53v21Ev,
  (VTBL_ENTRY)&_ZN6S672C53v22Ev,
  (VTBL_ENTRY)&_ZN6S672C53v23Ev,
  (VTBL_ENTRY)&_ZN6S672C53v24Ev,
  (VTBL_ENTRY)&_ZN6S672C53v25Ev,
  (VTBL_ENTRY)&_ZN6S672C53v26Ev,
  (VTBL_ENTRY)&_ZN6S672C53v27Ev,
  (VTBL_ENTRY)&_ZN6S672C53v28Ev,
  (VTBL_ENTRY)&_ZN6S672C53v29Ev,
  (VTBL_ENTRY)&_ZN6S672C53v30Ev,
  (VTBL_ENTRY)&_ZN6S672C53v31Ev,
  (VTBL_ENTRY)&_ZN6S672C53v32Ev,
  (VTBL_ENTRY)&_ZN6S672C53v33Ev,
  (VTBL_ENTRY)&_ZN6S672C53v34Ev,
  (VTBL_ENTRY)&_ZN6S672C53v35Ev,
  (VTBL_ENTRY)&_ZN6S672C53v36Ev,
  (VTBL_ENTRY)&_ZN6S672C53v37Ev,
  (VTBL_ENTRY)&_ZN6S672C53v38Ev,
  (VTBL_ENTRY)&_ZN6S672C53v39Ev,
  (VTBL_ENTRY)&_ZN6S672C53v40Ev,
  (VTBL_ENTRY)&_ZN6S672C53v41Ev,
  (VTBL_ENTRY)&_ZN6S672C53v42Ev,
  (VTBL_ENTRY)&_ZN6S672C53v43Ev,
  (VTBL_ENTRY)&_ZN6S672C53v44Ev,
  (VTBL_ENTRY)&_ZN6S672C53v45Ev,
  (VTBL_ENTRY)&_ZN6S672C53v46Ev,
  (VTBL_ENTRY)&_ZN6S672C53v47Ev,
  (VTBL_ENTRY)&_ZN6S672C53v48Ev,
  (VTBL_ENTRY)&_ZN6S672C53v49Ev,
  (VTBL_ENTRY)&_ZN6S672C53v50Ev,
  (VTBL_ENTRY)&_ZN6S672C53v51Ev,
  (VTBL_ENTRY)&_ZN6S672C53v52Ev,
  (VTBL_ENTRY)&_ZN6S672C53v53Ev,
  (VTBL_ENTRY)&_ZN6S672C53v54Ev,
  (VTBL_ENTRY)&_ZN6S672C53v55Ev,
  (VTBL_ENTRY)&_ZN6S672C53v56Ev,
  (VTBL_ENTRY)&_ZN6S672C53v57Ev,
  (VTBL_ENTRY)&_ZN6S672C53v58Ev,
  (VTBL_ENTRY)&_ZN6S672C53v59Ev,
  (VTBL_ENTRY)&_ZN6S672C53v60Ev,
  (VTBL_ENTRY)&_ZN6S672C53v61Ev,
  (VTBL_ENTRY)&_ZN6S672C53v62Ev,
  (VTBL_ENTRY)&_ZN6S672C53v63Ev,
  (VTBL_ENTRY)&_ZN6S672C53v64Ev,
  (VTBL_ENTRY)&_ZN6S672C53v65Ev,
  (VTBL_ENTRY)&_ZN6S672C53v66Ev,
  (VTBL_ENTRY)&_ZN6S672C53v67Ev,
  (VTBL_ENTRY)&_ZN6S672C53v68Ev,
  (VTBL_ENTRY)&_ZN6S672C53v69Ev,
  (VTBL_ENTRY)&_ZN6S672C43v70Ev,
  (VTBL_ENTRY)&_ZN6S672C43v71Ev,
  (VTBL_ENTRY)&_ZN6S672C43v72Ev,
  (VTBL_ENTRY)&_ZN6S672C43v73Ev,
  (VTBL_ENTRY)&_ZN6S672C43v74Ev,
  (VTBL_ENTRY)&_ZN6S672C43v75Ev,
  (VTBL_ENTRY)&_ZN6S672C43v76Ev,
  (VTBL_ENTRY)&_ZN6S672C43v77Ev,
  (VTBL_ENTRY)&_ZN6S672C43v78Ev,
  (VTBL_ENTRY)&_ZN6S672C43v79Ev,
  (VTBL_ENTRY)&_ZN6S672C43v80Ev,
  (VTBL_ENTRY)&_ZN6S672C43v81Ev,
  (VTBL_ENTRY)&_ZN6S672C43v82Ev,
  (VTBL_ENTRY)&_ZN6S672C43v83Ev,
  (VTBL_ENTRY)&_ZN6S672C43v84Ev,
  (VTBL_ENTRY)&_ZN6S672C43v85Ev,
  (VTBL_ENTRY)&_ZN6S672C43v86Ev,
  (VTBL_ENTRY)&_ZN6S672C43v87Ev,
  (VTBL_ENTRY)&_ZN6S672C43v88Ev,
  (VTBL_ENTRY)&_ZN6S672C43v89Ev,
  (VTBL_ENTRY)&_ZN6S672C43v90Ev,
  (VTBL_ENTRY)&_ZN6S672C43v91Ev,
  (VTBL_ENTRY)&_ZN6S672C33v92Ev,
  (VTBL_ENTRY)&_ZN6S672C33v93Ev,
  (VTBL_ENTRY)&_ZN6S672C33v94Ev,
  (VTBL_ENTRY)&_ZN6S672C33v95Ev,
  (VTBL_ENTRY)&_ZN6S672C33v96Ev,
  (VTBL_ENTRY)&_ZN6S672C33v97Ev,
  (VTBL_ENTRY)&_ZN6S672C33v98Ev,
  (VTBL_ENTRY)&_ZN6S672C33v99Ev,
  (VTBL_ENTRY)&_ZN6S672C34v100Ev,
  (VTBL_ENTRY)&_ZN6S672C34v101Ev,
  (VTBL_ENTRY)&_ZN6S672C34v102Ev,
  (VTBL_ENTRY)&_ZN6S672C34v103Ev,
  (VTBL_ENTRY)&_ZN6S672C34v104Ev,
  (VTBL_ENTRY)&_ZN6S672C34v105Ev,
  (VTBL_ENTRY)&_ZN6S672C34v106Ev,
  (VTBL_ENTRY)&_ZN6S672C34v107Ev,
  (VTBL_ENTRY)&_ZN6S672C34v108Ev,
  (VTBL_ENTRY)&_ZN6S672C34v109Ev,
  (VTBL_ENTRY)&_ZN6S672C34v110Ev,
};
extern VTBL_ENTRY _ZTI6S672C3[];
extern  VTBL_ENTRY _ZTV6S672C3[];
Class_Descriptor cd_S672C3 = {  "S672C3", // class name
  bases_S672C3, 2,
  &(vtc_S672C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI6S672C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S672C3),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S672C2  : S672C3 {
  void *s672c2f0;
  virtual  ~S672C2(); // _ZN6S672C2D1Ev
  virtual void  v111(); // _ZN6S672C24v111Ev
  virtual void  v112(); // _ZN6S672C24v112Ev
  virtual void  v113(); // _ZN6S672C24v113Ev
  virtual void  v114(); // _ZN6S672C24v114Ev
  virtual void  v115(); // _ZN6S672C24v115Ev
  virtual void  v116(); // _ZN6S672C24v116Ev
  virtual void  v117(); // _ZN6S672C24v117Ev
  virtual void  v118(); // _ZN6S672C24v118Ev
  virtual void  v119(); // _ZN6S672C24v119Ev
  S672C2(); // tgen
};
//SIG(-1 S672C2) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 FC5} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S672C2 ::~S672C2(){ note_dtor("S672C2", this);}
void  S672C2 ::v111(){vfunc_called(this, "_ZN6S672C24v111Ev");}
void  S672C2 ::v112(){vfunc_called(this, "_ZN6S672C24v112Ev");}
void  S672C2 ::v113(){vfunc_called(this, "_ZN6S672C24v113Ev");}
void  S672C2 ::v114(){vfunc_called(this, "_ZN6S672C24v114Ev");}
void  S672C2 ::v115(){vfunc_called(this, "_ZN6S672C24v115Ev");}
void  S672C2 ::v116(){vfunc_called(this, "_ZN6S672C24v116Ev");}
void  S672C2 ::v117(){vfunc_called(this, "_ZN6S672C24v117Ev");}
void  S672C2 ::v118(){vfunc_called(this, "_ZN6S672C24v118Ev");}
void  S672C2 ::v119(){vfunc_called(this, "_ZN6S672C24v119Ev");}
S672C2 ::S672C2(){ note_ctor("S672C2", this);} // tgen

static void Test_S672C2()
{
  extern Class_Descriptor cd_S672C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S672C2, buf);
    S672C2 *dp, &lv = *(dp=new (buf) S672C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S672C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S672C2)");
    check_base_class_offset(lv, (S672C5*)(S672C4*)(S672C3*), 0, "S672C2");
    check_base_class_offset(lv, (S672C4*)(S672C3*), 0, "S672C2");
    check_base_class_offset(lv, (S672C3*), 0, "S672C2");
    check_field_offset(lv, s672c2f0, ABISELECT(200,140), "S672C2.s672c2f0");
    test_class_info(&lv, &cd_S672C2);
    dp->~S672C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS672C2(Test_S672C2, "S672C2", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN6S672C2C1Ev();
extern void _ZN6S672C2D1Ev();
Name_Map name_map_S672C2[] = {
  NSPAIR(_ZN6S672C2C1Ev),
  NSPAIR(_ZN6S672C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S672C5;
extern VTBL_ENTRY _ZTI6S672C5[];
extern  VTBL_ENTRY _ZTV6S672C5[];
extern Class_Descriptor cd_S672C4;
extern VTBL_ENTRY _ZTI6S672C4[];
extern  VTBL_ENTRY _ZTV6S672C4[];
extern Class_Descriptor cd_S672C3;
extern VTBL_ENTRY _ZTI6S672C3[];
extern  VTBL_ENTRY _ZTV6S672C3[];
static Base_Class bases_S672C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S672C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S672C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S672C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S672C2[];
extern void _ZN6S672C2D1Ev();
extern void _ZN6S672C2D0Ev();
extern void _ZN6S672C52v6Ev();
extern void _ZN6S672C52v7Ev();
extern void _ZN6S672C52v8Ev();
extern void _ZN6S672C52v9Ev();
extern void _ZN6S672C53v10Ev();
extern void _ZN6S672C53v11Ev();
extern void _ZN6S672C53v12Ev();
extern void _ZN6S672C53v13Ev();
extern void _ZN6S672C53v14Ev();
extern void _ZN6S672C53v15Ev();
extern void _ZN6S672C53v16Ev();
extern void _ZN6S672C53v17Ev();
extern void _ZN6S672C53v18Ev();
extern void _ZN6S672C53v19Ev();
extern void _ZN6S672C53v20Ev();
extern void _ZN6S672C53v21Ev();
extern void _ZN6S672C53v22Ev();
extern void _ZN6S672C53v23Ev();
extern void _ZN6S672C53v24Ev();
extern void _ZN6S672C53v25Ev();
extern void _ZN6S672C53v26Ev();
extern void _ZN6S672C53v27Ev();
extern void _ZN6S672C53v28Ev();
extern void _ZN6S672C53v29Ev();
extern void _ZN6S672C53v30Ev();
extern void _ZN6S672C53v31Ev();
extern void _ZN6S672C53v32Ev();
extern void _ZN6S672C53v33Ev();
extern void _ZN6S672C53v34Ev();
extern void _ZN6S672C53v35Ev();
extern void _ZN6S672C53v36Ev();
extern void _ZN6S672C53v37Ev();
extern void _ZN6S672C53v38Ev();
extern void _ZN6S672C53v39Ev();
extern void _ZN6S672C53v40Ev();
extern void _ZN6S672C53v41Ev();
extern void _ZN6S672C53v42Ev();
extern void _ZN6S672C53v43Ev();
extern void _ZN6S672C53v44Ev();
extern void _ZN6S672C53v45Ev();
extern void _ZN6S672C53v46Ev();
extern void _ZN6S672C53v47Ev();
extern void _ZN6S672C53v48Ev();
extern void _ZN6S672C53v49Ev();
extern void _ZN6S672C53v50Ev();
extern void _ZN6S672C53v51Ev();
extern void _ZN6S672C53v52Ev();
extern void _ZN6S672C53v53Ev();
extern void _ZN6S672C53v54Ev();
extern void _ZN6S672C53v55Ev();
extern void _ZN6S672C53v56Ev();
extern void _ZN6S672C53v57Ev();
extern void _ZN6S672C53v58Ev();
extern void _ZN6S672C53v59Ev();
extern void _ZN6S672C53v60Ev();
extern void _ZN6S672C53v61Ev();
extern void _ZN6S672C53v62Ev();
extern void _ZN6S672C53v63Ev();
extern void _ZN6S672C53v64Ev();
extern void _ZN6S672C53v65Ev();
extern void _ZN6S672C53v66Ev();
extern void _ZN6S672C53v67Ev();
extern void _ZN6S672C53v68Ev();
extern void _ZN6S672C53v69Ev();
extern void _ZN6S672C43v70Ev();
extern void _ZN6S672C43v71Ev();
extern void _ZN6S672C43v72Ev();
extern void _ZN6S672C43v73Ev();
extern void _ZN6S672C43v74Ev();
extern void _ZN6S672C43v75Ev();
extern void _ZN6S672C43v76Ev();
extern void _ZN6S672C43v77Ev();
extern void _ZN6S672C43v78Ev();
extern void _ZN6S672C43v79Ev();
extern void _ZN6S672C43v80Ev();
extern void _ZN6S672C43v81Ev();
extern void _ZN6S672C43v82Ev();
extern void _ZN6S672C43v83Ev();
extern void _ZN6S672C43v84Ev();
extern void _ZN6S672C43v85Ev();
extern void _ZN6S672C43v86Ev();
extern void _ZN6S672C43v87Ev();
extern void _ZN6S672C43v88Ev();
extern void _ZN6S672C43v89Ev();
extern void _ZN6S672C43v90Ev();
extern void _ZN6S672C43v91Ev();
extern void _ZN6S672C33v92Ev();
extern void _ZN6S672C33v93Ev();
extern void _ZN6S672C33v94Ev();
extern void _ZN6S672C33v95Ev();
extern void _ZN6S672C33v96Ev();
extern void _ZN6S672C33v97Ev();
extern void _ZN6S672C33v98Ev();
extern void _ZN6S672C33v99Ev();
extern void _ZN6S672C34v100Ev();
extern void _ZN6S672C34v101Ev();
extern void _ZN6S672C34v102Ev();
extern void _ZN6S672C34v103Ev();
extern void _ZN6S672C34v104Ev();
extern void _ZN6S672C34v105Ev();
extern void _ZN6S672C34v106Ev();
extern void _ZN6S672C34v107Ev();
extern void _ZN6S672C34v108Ev();
extern void _ZN6S672C34v109Ev();
extern void _ZN6S672C34v110Ev();
extern void _ZN6S672C24v111Ev();
extern void _ZN6S672C24v112Ev();
extern void _ZN6S672C24v113Ev();
extern void _ZN6S672C24v114Ev();
extern void _ZN6S672C24v115Ev();
extern void _ZN6S672C24v116Ev();
extern void _ZN6S672C24v117Ev();
extern void _ZN6S672C24v118Ev();
extern void _ZN6S672C24v119Ev();
static  VTBL_ENTRY vtc_S672C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S672C2[0]),
  (VTBL_ENTRY)&_ZN6S672C2D1Ev,
  (VTBL_ENTRY)&_ZN6S672C2D0Ev,
  (VTBL_ENTRY)&_ZN6S672C52v6Ev,
  (VTBL_ENTRY)&_ZN6S672C52v7Ev,
  (VTBL_ENTRY)&_ZN6S672C52v8Ev,
  (VTBL_ENTRY)&_ZN6S672C52v9Ev,
  (VTBL_ENTRY)&_ZN6S672C53v10Ev,
  (VTBL_ENTRY)&_ZN6S672C53v11Ev,
  (VTBL_ENTRY)&_ZN6S672C53v12Ev,
  (VTBL_ENTRY)&_ZN6S672C53v13Ev,
  (VTBL_ENTRY)&_ZN6S672C53v14Ev,
  (VTBL_ENTRY)&_ZN6S672C53v15Ev,
  (VTBL_ENTRY)&_ZN6S672C53v16Ev,
  (VTBL_ENTRY)&_ZN6S672C53v17Ev,
  (VTBL_ENTRY)&_ZN6S672C53v18Ev,
  (VTBL_ENTRY)&_ZN6S672C53v19Ev,
  (VTBL_ENTRY)&_ZN6S672C53v20Ev,
  (VTBL_ENTRY)&_ZN6S672C53v21Ev,
  (VTBL_ENTRY)&_ZN6S672C53v22Ev,
  (VTBL_ENTRY)&_ZN6S672C53v23Ev,
  (VTBL_ENTRY)&_ZN6S672C53v24Ev,
  (VTBL_ENTRY)&_ZN6S672C53v25Ev,
  (VTBL_ENTRY)&_ZN6S672C53v26Ev,
  (VTBL_ENTRY)&_ZN6S672C53v27Ev,
  (VTBL_ENTRY)&_ZN6S672C53v28Ev,
  (VTBL_ENTRY)&_ZN6S672C53v29Ev,
  (VTBL_ENTRY)&_ZN6S672C53v30Ev,
  (VTBL_ENTRY)&_ZN6S672C53v31Ev,
  (VTBL_ENTRY)&_ZN6S672C53v32Ev,
  (VTBL_ENTRY)&_ZN6S672C53v33Ev,
  (VTBL_ENTRY)&_ZN6S672C53v34Ev,
  (VTBL_ENTRY)&_ZN6S672C53v35Ev,
  (VTBL_ENTRY)&_ZN6S672C53v36Ev,
  (VTBL_ENTRY)&_ZN6S672C53v37Ev,
  (VTBL_ENTRY)&_ZN6S672C53v38Ev,
  (VTBL_ENTRY)&_ZN6S672C53v39Ev,
  (VTBL_ENTRY)&_ZN6S672C53v40Ev,
  (VTBL_ENTRY)&_ZN6S672C53v41Ev,
  (VTBL_ENTRY)&_ZN6S672C53v42Ev,
  (VTBL_ENTRY)&_ZN6S672C53v43Ev,
  (VTBL_ENTRY)&_ZN6S672C53v44Ev,
  (VTBL_ENTRY)&_ZN6S672C53v45Ev,
  (VTBL_ENTRY)&_ZN6S672C53v46Ev,
  (VTBL_ENTRY)&_ZN6S672C53v47Ev,
  (VTBL_ENTRY)&_ZN6S672C53v48Ev,
  (VTBL_ENTRY)&_ZN6S672C53v49Ev,
  (VTBL_ENTRY)&_ZN6S672C53v50Ev,
  (VTBL_ENTRY)&_ZN6S672C53v51Ev,
  (VTBL_ENTRY)&_ZN6S672C53v52Ev,
  (VTBL_ENTRY)&_ZN6S672C53v53Ev,
  (VTBL_ENTRY)&_ZN6S672C53v54Ev,
  (VTBL_ENTRY)&_ZN6S672C53v55Ev,
  (VTBL_ENTRY)&_ZN6S672C53v56Ev,
  (VTBL_ENTRY)&_ZN6S672C53v57Ev,
  (VTBL_ENTRY)&_ZN6S672C53v58Ev,
  (VTBL_ENTRY)&_ZN6S672C53v59Ev,
  (VTBL_ENTRY)&_ZN6S672C53v60Ev,
  (VTBL_ENTRY)&_ZN6S672C53v61Ev,
  (VTBL_ENTRY)&_ZN6S672C53v62Ev,
  (VTBL_ENTRY)&_ZN6S672C53v63Ev,
  (VTBL_ENTRY)&_ZN6S672C53v64Ev,
  (VTBL_ENTRY)&_ZN6S672C53v65Ev,
  (VTBL_ENTRY)&_ZN6S672C53v66Ev,
  (VTBL_ENTRY)&_ZN6S672C53v67Ev,
  (VTBL_ENTRY)&_ZN6S672C53v68Ev,
  (VTBL_ENTRY)&_ZN6S672C53v69Ev,
  (VTBL_ENTRY)&_ZN6S672C43v70Ev,
  (VTBL_ENTRY)&_ZN6S672C43v71Ev,
  (VTBL_ENTRY)&_ZN6S672C43v72Ev,
  (VTBL_ENTRY)&_ZN6S672C43v73Ev,
  (VTBL_ENTRY)&_ZN6S672C43v74Ev,
  (VTBL_ENTRY)&_ZN6S672C43v75Ev,
  (VTBL_ENTRY)&_ZN6S672C43v76Ev,
  (VTBL_ENTRY)&_ZN6S672C43v77Ev,
  (VTBL_ENTRY)&_ZN6S672C43v78Ev,
  (VTBL_ENTRY)&_ZN6S672C43v79Ev,
  (VTBL_ENTRY)&_ZN6S672C43v80Ev,
  (VTBL_ENTRY)&_ZN6S672C43v81Ev,
  (VTBL_ENTRY)&_ZN6S672C43v82Ev,
  (VTBL_ENTRY)&_ZN6S672C43v83Ev,
  (VTBL_ENTRY)&_ZN6S672C43v84Ev,
  (VTBL_ENTRY)&_ZN6S672C43v85Ev,
  (VTBL_ENTRY)&_ZN6S672C43v86Ev,
  (VTBL_ENTRY)&_ZN6S672C43v87Ev,
  (VTBL_ENTRY)&_ZN6S672C43v88Ev,
  (VTBL_ENTRY)&_ZN6S672C43v89Ev,
  (VTBL_ENTRY)&_ZN6S672C43v90Ev,
  (VTBL_ENTRY)&_ZN6S672C43v91Ev,
  (VTBL_ENTRY)&_ZN6S672C33v92Ev,
  (VTBL_ENTRY)&_ZN6S672C33v93Ev,
  (VTBL_ENTRY)&_ZN6S672C33v94Ev,
  (VTBL_ENTRY)&_ZN6S672C33v95Ev,
  (VTBL_ENTRY)&_ZN6S672C33v96Ev,
  (VTBL_ENTRY)&_ZN6S672C33v97Ev,
  (VTBL_ENTRY)&_ZN6S672C33v98Ev,
  (VTBL_ENTRY)&_ZN6S672C33v99Ev,
  (VTBL_ENTRY)&_ZN6S672C34v100Ev,
  (VTBL_ENTRY)&_ZN6S672C34v101Ev,
  (VTBL_ENTRY)&_ZN6S672C34v102Ev,
  (VTBL_ENTRY)&_ZN6S672C34v103Ev,
  (VTBL_ENTRY)&_ZN6S672C34v104Ev,
  (VTBL_ENTRY)&_ZN6S672C34v105Ev,
  (VTBL_ENTRY)&_ZN6S672C34v106Ev,
  (VTBL_ENTRY)&_ZN6S672C34v107Ev,
  (VTBL_ENTRY)&_ZN6S672C34v108Ev,
  (VTBL_ENTRY)&_ZN6S672C34v109Ev,
  (VTBL_ENTRY)&_ZN6S672C34v110Ev,
  (VTBL_ENTRY)&_ZN6S672C24v111Ev,
  (VTBL_ENTRY)&_ZN6S672C24v112Ev,
  (VTBL_ENTRY)&_ZN6S672C24v113Ev,
  (VTBL_ENTRY)&_ZN6S672C24v114Ev,
  (VTBL_ENTRY)&_ZN6S672C24v115Ev,
  (VTBL_ENTRY)&_ZN6S672C24v116Ev,
  (VTBL_ENTRY)&_ZN6S672C24v117Ev,
  (VTBL_ENTRY)&_ZN6S672C24v118Ev,
  (VTBL_ENTRY)&_ZN6S672C24v119Ev,
};
extern VTBL_ENTRY _ZTI6S672C2[];
extern  VTBL_ENTRY _ZTV6S672C2[];
Class_Descriptor cd_S672C2 = {  "S672C2", // class name
  bases_S672C2, 3,
  &(vtc_S672C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI6S672C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S672C2),118, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S672C15  : S473C10_nt {
};
//SIG(-1 S672C15) C1{ BC2{ m Fp Fi[2]}}



static void Test_S672C15()
{
  extern Class_Descriptor cd_S672C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S672C15, buf);
    S672C15 &lv = *(new (buf) S672C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S672C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S672C15)");
    check_base_class_offset(lv, (S473C10_nt*), 0, "S672C15");
    test_class_info(&lv, &cd_S672C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS672C15(Test_S672C15, "S672C15", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S473C10_nt;
static Base_Class bases_S672C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S473C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S672C15 = {  "S672C15", // class name
  bases_S672C15, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S672C14_nt  : S672C15 {
};
//SIG(-1 S672C14_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S672C14_nt

#else // __cplusplus

extern Class_Descriptor cd_S473C10_nt;
extern Class_Descriptor cd_S672C15;
static Base_Class bases_S672C14_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S473C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S672C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S672C1  : S672C2 {
  int s672c1f0;
  ::S473C8_nt s672c1f1;
  ::S672C14_nt s672c1f2;
  unsigned int s672c1f3:1;
  virtual  ~S672C1(); // _ZN6S672C1D1Ev
  virtual void  v1(); // _ZN6S672C12v1Ev
  virtual void  v2(); // _ZN6S672C12v2Ev
  virtual void  v3(); // _ZN6S672C12v3Ev
  virtual void  v4(); // _ZN6S672C12v4Ev
  virtual void  v5(); // _ZN6S672C12v5Ev
  S672C1(); // tgen
};
//SIG(1 S672C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 FC6} vd v111 v112 v113 v114 v115 v116 v117 v118 v119 Fp} vd v1 v2 v3 v4 v5 Fi FC8 FC12{ BC13{ BC10}} Fi:1}


 S672C1 ::~S672C1(){ note_dtor("S672C1", this);}
void  S672C1 ::v1(){vfunc_called(this, "_ZN6S672C12v1Ev");}
void  S672C1 ::v2(){vfunc_called(this, "_ZN6S672C12v2Ev");}
void  S672C1 ::v3(){vfunc_called(this, "_ZN6S672C12v3Ev");}
void  S672C1 ::v4(){vfunc_called(this, "_ZN6S672C12v4Ev");}
void  S672C1 ::v5(){vfunc_called(this, "_ZN6S672C12v5Ev");}
S672C1 ::S672C1(){ note_ctor("S672C1", this);} // tgen

static void Test_S672C1()
{
  extern Class_Descriptor cd_S672C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,45)];
    init_test(&cd_S672C1, buf);
    S672C1 *dp, &lv = *(dp=new (buf) S672C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,176), "sizeof(S672C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S672C1)");
    check_base_class_offset(lv, (S672C5*)(S672C4*)(S672C3*)(S672C2*), 0, "S672C1");
    check_base_class_offset(lv, (S672C4*)(S672C3*)(S672C2*), 0, "S672C1");
    check_base_class_offset(lv, (S672C3*)(S672C2*), 0, "S672C1");
    check_base_class_offset(lv, (S672C2*), 0, "S672C1");
    check_field_offset(lv, s672c1f0, ABISELECT(208,144), "S672C1.s672c1f0");
    check_field_offset(lv, s672c1f1, ABISELECT(216,148), "S672C1.s672c1f1");
    check_field_offset(lv, s672c1f2, ABISELECT(232,160), "S672C1.s672c1f2");
    set_bf_and_test(lv, s672c1f3, ABISELECT(248,172), 0, 1, 1, "S672C1");
    test_class_info(&lv, &cd_S672C1);
    dp->~S672C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS672C1(Test_S672C1, "S672C1", ABISELECT(256,176));

#else // __cplusplus

extern void _ZN6S672C1C1Ev();
extern void _ZN6S672C1D1Ev();
Name_Map name_map_S672C1[] = {
  NSPAIR(_ZN6S672C1C1Ev),
  NSPAIR(_ZN6S672C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S672C5;
extern VTBL_ENTRY _ZTI6S672C5[];
extern  VTBL_ENTRY _ZTV6S672C5[];
extern Class_Descriptor cd_S672C4;
extern VTBL_ENTRY _ZTI6S672C4[];
extern  VTBL_ENTRY _ZTV6S672C4[];
extern Class_Descriptor cd_S672C3;
extern VTBL_ENTRY _ZTI6S672C3[];
extern  VTBL_ENTRY _ZTV6S672C3[];
extern Class_Descriptor cd_S672C2;
extern VTBL_ENTRY _ZTI6S672C2[];
extern  VTBL_ENTRY _ZTV6S672C2[];
static Base_Class bases_S672C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S672C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S672C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S672C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S672C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S672C1[];
extern void _ZN6S672C1D1Ev();
extern void _ZN6S672C1D0Ev();
extern void _ZN6S672C52v6Ev();
extern void _ZN6S672C52v7Ev();
extern void _ZN6S672C52v8Ev();
extern void _ZN6S672C52v9Ev();
extern void _ZN6S672C53v10Ev();
extern void _ZN6S672C53v11Ev();
extern void _ZN6S672C53v12Ev();
extern void _ZN6S672C53v13Ev();
extern void _ZN6S672C53v14Ev();
extern void _ZN6S672C53v15Ev();
extern void _ZN6S672C53v16Ev();
extern void _ZN6S672C53v17Ev();
extern void _ZN6S672C53v18Ev();
extern void _ZN6S672C53v19Ev();
extern void _ZN6S672C53v20Ev();
extern void _ZN6S672C53v21Ev();
extern void _ZN6S672C53v22Ev();
extern void _ZN6S672C53v23Ev();
extern void _ZN6S672C53v24Ev();
extern void _ZN6S672C53v25Ev();
extern void _ZN6S672C53v26Ev();
extern void _ZN6S672C53v27Ev();
extern void _ZN6S672C53v28Ev();
extern void _ZN6S672C53v29Ev();
extern void _ZN6S672C53v30Ev();
extern void _ZN6S672C53v31Ev();
extern void _ZN6S672C53v32Ev();
extern void _ZN6S672C53v33Ev();
extern void _ZN6S672C53v34Ev();
extern void _ZN6S672C53v35Ev();
extern void _ZN6S672C53v36Ev();
extern void _ZN6S672C53v37Ev();
extern void _ZN6S672C53v38Ev();
extern void _ZN6S672C53v39Ev();
extern void _ZN6S672C53v40Ev();
extern void _ZN6S672C53v41Ev();
extern void _ZN6S672C53v42Ev();
extern void _ZN6S672C53v43Ev();
extern void _ZN6S672C53v44Ev();
extern void _ZN6S672C53v45Ev();
extern void _ZN6S672C53v46Ev();
extern void _ZN6S672C53v47Ev();
extern void _ZN6S672C53v48Ev();
extern void _ZN6S672C53v49Ev();
extern void _ZN6S672C53v50Ev();
extern void _ZN6S672C53v51Ev();
extern void _ZN6S672C53v52Ev();
extern void _ZN6S672C53v53Ev();
extern void _ZN6S672C53v54Ev();
extern void _ZN6S672C53v55Ev();
extern void _ZN6S672C53v56Ev();
extern void _ZN6S672C53v57Ev();
extern void _ZN6S672C53v58Ev();
extern void _ZN6S672C53v59Ev();
extern void _ZN6S672C53v60Ev();
extern void _ZN6S672C53v61Ev();
extern void _ZN6S672C53v62Ev();
extern void _ZN6S672C53v63Ev();
extern void _ZN6S672C53v64Ev();
extern void _ZN6S672C53v65Ev();
extern void _ZN6S672C53v66Ev();
extern void _ZN6S672C53v67Ev();
extern void _ZN6S672C53v68Ev();
extern void _ZN6S672C53v69Ev();
extern void _ZN6S672C43v70Ev();
extern void _ZN6S672C43v71Ev();
extern void _ZN6S672C43v72Ev();
extern void _ZN6S672C43v73Ev();
extern void _ZN6S672C43v74Ev();
extern void _ZN6S672C43v75Ev();
extern void _ZN6S672C43v76Ev();
extern void _ZN6S672C43v77Ev();
extern void _ZN6S672C43v78Ev();
extern void _ZN6S672C43v79Ev();
extern void _ZN6S672C43v80Ev();
extern void _ZN6S672C43v81Ev();
extern void _ZN6S672C43v82Ev();
extern void _ZN6S672C43v83Ev();
extern void _ZN6S672C43v84Ev();
extern void _ZN6S672C43v85Ev();
extern void _ZN6S672C43v86Ev();
extern void _ZN6S672C43v87Ev();
extern void _ZN6S672C43v88Ev();
extern void _ZN6S672C43v89Ev();
extern void _ZN6S672C43v90Ev();
extern void _ZN6S672C43v91Ev();
extern void _ZN6S672C33v92Ev();
extern void _ZN6S672C33v93Ev();
extern void _ZN6S672C33v94Ev();
extern void _ZN6S672C33v95Ev();
extern void _ZN6S672C33v96Ev();
extern void _ZN6S672C33v97Ev();
extern void _ZN6S672C33v98Ev();
extern void _ZN6S672C33v99Ev();
extern void _ZN6S672C34v100Ev();
extern void _ZN6S672C34v101Ev();
extern void _ZN6S672C34v102Ev();
extern void _ZN6S672C34v103Ev();
extern void _ZN6S672C34v104Ev();
extern void _ZN6S672C34v105Ev();
extern void _ZN6S672C34v106Ev();
extern void _ZN6S672C34v107Ev();
extern void _ZN6S672C34v108Ev();
extern void _ZN6S672C34v109Ev();
extern void _ZN6S672C34v110Ev();
extern void _ZN6S672C24v111Ev();
extern void _ZN6S672C24v112Ev();
extern void _ZN6S672C24v113Ev();
extern void _ZN6S672C24v114Ev();
extern void _ZN6S672C24v115Ev();
extern void _ZN6S672C24v116Ev();
extern void _ZN6S672C24v117Ev();
extern void _ZN6S672C24v118Ev();
extern void _ZN6S672C24v119Ev();
extern void _ZN6S672C12v1Ev();
extern void _ZN6S672C12v2Ev();
extern void _ZN6S672C12v3Ev();
extern void _ZN6S672C12v4Ev();
extern void _ZN6S672C12v5Ev();
static  VTBL_ENTRY vtc_S672C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S672C1[0]),
  (VTBL_ENTRY)&_ZN6S672C1D1Ev,
  (VTBL_ENTRY)&_ZN6S672C1D0Ev,
  (VTBL_ENTRY)&_ZN6S672C52v6Ev,
  (VTBL_ENTRY)&_ZN6S672C52v7Ev,
  (VTBL_ENTRY)&_ZN6S672C52v8Ev,
  (VTBL_ENTRY)&_ZN6S672C52v9Ev,
  (VTBL_ENTRY)&_ZN6S672C53v10Ev,
  (VTBL_ENTRY)&_ZN6S672C53v11Ev,
  (VTBL_ENTRY)&_ZN6S672C53v12Ev,
  (VTBL_ENTRY)&_ZN6S672C53v13Ev,
  (VTBL_ENTRY)&_ZN6S672C53v14Ev,
  (VTBL_ENTRY)&_ZN6S672C53v15Ev,
  (VTBL_ENTRY)&_ZN6S672C53v16Ev,
  (VTBL_ENTRY)&_ZN6S672C53v17Ev,
  (VTBL_ENTRY)&_ZN6S672C53v18Ev,
  (VTBL_ENTRY)&_ZN6S672C53v19Ev,
  (VTBL_ENTRY)&_ZN6S672C53v20Ev,
  (VTBL_ENTRY)&_ZN6S672C53v21Ev,
  (VTBL_ENTRY)&_ZN6S672C53v22Ev,
  (VTBL_ENTRY)&_ZN6S672C53v23Ev,
  (VTBL_ENTRY)&_ZN6S672C53v24Ev,
  (VTBL_ENTRY)&_ZN6S672C53v25Ev,
  (VTBL_ENTRY)&_ZN6S672C53v26Ev,
  (VTBL_ENTRY)&_ZN6S672C53v27Ev,
  (VTBL_ENTRY)&_ZN6S672C53v28Ev,
  (VTBL_ENTRY)&_ZN6S672C53v29Ev,
  (VTBL_ENTRY)&_ZN6S672C53v30Ev,
  (VTBL_ENTRY)&_ZN6S672C53v31Ev,
  (VTBL_ENTRY)&_ZN6S672C53v32Ev,
  (VTBL_ENTRY)&_ZN6S672C53v33Ev,
  (VTBL_ENTRY)&_ZN6S672C53v34Ev,
  (VTBL_ENTRY)&_ZN6S672C53v35Ev,
  (VTBL_ENTRY)&_ZN6S672C53v36Ev,
  (VTBL_ENTRY)&_ZN6S672C53v37Ev,
  (VTBL_ENTRY)&_ZN6S672C53v38Ev,
  (VTBL_ENTRY)&_ZN6S672C53v39Ev,
  (VTBL_ENTRY)&_ZN6S672C53v40Ev,
  (VTBL_ENTRY)&_ZN6S672C53v41Ev,
  (VTBL_ENTRY)&_ZN6S672C53v42Ev,
  (VTBL_ENTRY)&_ZN6S672C53v43Ev,
  (VTBL_ENTRY)&_ZN6S672C53v44Ev,
  (VTBL_ENTRY)&_ZN6S672C53v45Ev,
  (VTBL_ENTRY)&_ZN6S672C53v46Ev,
  (VTBL_ENTRY)&_ZN6S672C53v47Ev,
  (VTBL_ENTRY)&_ZN6S672C53v48Ev,
  (VTBL_ENTRY)&_ZN6S672C53v49Ev,
  (VTBL_ENTRY)&_ZN6S672C53v50Ev,
  (VTBL_ENTRY)&_ZN6S672C53v51Ev,
  (VTBL_ENTRY)&_ZN6S672C53v52Ev,
  (VTBL_ENTRY)&_ZN6S672C53v53Ev,
  (VTBL_ENTRY)&_ZN6S672C53v54Ev,
  (VTBL_ENTRY)&_ZN6S672C53v55Ev,
  (VTBL_ENTRY)&_ZN6S672C53v56Ev,
  (VTBL_ENTRY)&_ZN6S672C53v57Ev,
  (VTBL_ENTRY)&_ZN6S672C53v58Ev,
  (VTBL_ENTRY)&_ZN6S672C53v59Ev,
  (VTBL_ENTRY)&_ZN6S672C53v60Ev,
  (VTBL_ENTRY)&_ZN6S672C53v61Ev,
  (VTBL_ENTRY)&_ZN6S672C53v62Ev,
  (VTBL_ENTRY)&_ZN6S672C53v63Ev,
  (VTBL_ENTRY)&_ZN6S672C53v64Ev,
  (VTBL_ENTRY)&_ZN6S672C53v65Ev,
  (VTBL_ENTRY)&_ZN6S672C53v66Ev,
  (VTBL_ENTRY)&_ZN6S672C53v67Ev,
  (VTBL_ENTRY)&_ZN6S672C53v68Ev,
  (VTBL_ENTRY)&_ZN6S672C53v69Ev,
  (VTBL_ENTRY)&_ZN6S672C43v70Ev,
  (VTBL_ENTRY)&_ZN6S672C43v71Ev,
  (VTBL_ENTRY)&_ZN6S672C43v72Ev,
  (VTBL_ENTRY)&_ZN6S672C43v73Ev,
  (VTBL_ENTRY)&_ZN6S672C43v74Ev,
  (VTBL_ENTRY)&_ZN6S672C43v75Ev,
  (VTBL_ENTRY)&_ZN6S672C43v76Ev,
  (VTBL_ENTRY)&_ZN6S672C43v77Ev,
  (VTBL_ENTRY)&_ZN6S672C43v78Ev,
  (VTBL_ENTRY)&_ZN6S672C43v79Ev,
  (VTBL_ENTRY)&_ZN6S672C43v80Ev,
  (VTBL_ENTRY)&_ZN6S672C43v81Ev,
  (VTBL_ENTRY)&_ZN6S672C43v82Ev,
  (VTBL_ENTRY)&_ZN6S672C43v83Ev,
  (VTBL_ENTRY)&_ZN6S672C43v84Ev,
  (VTBL_ENTRY)&_ZN6S672C43v85Ev,
  (VTBL_ENTRY)&_ZN6S672C43v86Ev,
  (VTBL_ENTRY)&_ZN6S672C43v87Ev,
  (VTBL_ENTRY)&_ZN6S672C43v88Ev,
  (VTBL_ENTRY)&_ZN6S672C43v89Ev,
  (VTBL_ENTRY)&_ZN6S672C43v90Ev,
  (VTBL_ENTRY)&_ZN6S672C43v91Ev,
  (VTBL_ENTRY)&_ZN6S672C33v92Ev,
  (VTBL_ENTRY)&_ZN6S672C33v93Ev,
  (VTBL_ENTRY)&_ZN6S672C33v94Ev,
  (VTBL_ENTRY)&_ZN6S672C33v95Ev,
  (VTBL_ENTRY)&_ZN6S672C33v96Ev,
  (VTBL_ENTRY)&_ZN6S672C33v97Ev,
  (VTBL_ENTRY)&_ZN6S672C33v98Ev,
  (VTBL_ENTRY)&_ZN6S672C33v99Ev,
  (VTBL_ENTRY)&_ZN6S672C34v100Ev,
  (VTBL_ENTRY)&_ZN6S672C34v101Ev,
  (VTBL_ENTRY)&_ZN6S672C34v102Ev,
  (VTBL_ENTRY)&_ZN6S672C34v103Ev,
  (VTBL_ENTRY)&_ZN6S672C34v104Ev,
  (VTBL_ENTRY)&_ZN6S672C34v105Ev,
  (VTBL_ENTRY)&_ZN6S672C34v106Ev,
  (VTBL_ENTRY)&_ZN6S672C34v107Ev,
  (VTBL_ENTRY)&_ZN6S672C34v108Ev,
  (VTBL_ENTRY)&_ZN6S672C34v109Ev,
  (VTBL_ENTRY)&_ZN6S672C34v110Ev,
  (VTBL_ENTRY)&_ZN6S672C24v111Ev,
  (VTBL_ENTRY)&_ZN6S672C24v112Ev,
  (VTBL_ENTRY)&_ZN6S672C24v113Ev,
  (VTBL_ENTRY)&_ZN6S672C24v114Ev,
  (VTBL_ENTRY)&_ZN6S672C24v115Ev,
  (VTBL_ENTRY)&_ZN6S672C24v116Ev,
  (VTBL_ENTRY)&_ZN6S672C24v117Ev,
  (VTBL_ENTRY)&_ZN6S672C24v118Ev,
  (VTBL_ENTRY)&_ZN6S672C24v119Ev,
  (VTBL_ENTRY)&_ZN6S672C12v1Ev,
  (VTBL_ENTRY)&_ZN6S672C12v2Ev,
  (VTBL_ENTRY)&_ZN6S672C12v3Ev,
  (VTBL_ENTRY)&_ZN6S672C12v4Ev,
  (VTBL_ENTRY)&_ZN6S672C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S672C1[];
extern  VTBL_ENTRY _ZTV6S672C1[];
Class_Descriptor cd_S672C1 = {  "S672C1", // class name
  bases_S672C1, 4,
  &(vtc_S672C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,176), // object size
  NSPAIRA(_ZTI6S672C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S672C1),123, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S472C5  {
  int s472c5f0;
  __tsi64 s472c5f1;
  void *s472c5f2[4];
  int s472c5f3[2];
  void *s472c5f4;
  ::S473C6_nt s472c5f5;
  void *s472c5f6[2];
  virtual  ~S472C5(); // _ZN6S472C5D1Ev
  virtual void  v10(); // _ZN6S472C53v10Ev
  virtual void  v11(); // _ZN6S472C53v11Ev
  virtual void  v12(); // _ZN6S472C53v12Ev
  virtual void  v13(); // _ZN6S472C53v13Ev
  virtual void  v14(); // _ZN6S472C53v14Ev
  virtual void  v15(); // _ZN6S472C53v15Ev
  virtual void  v16(); // _ZN6S472C53v16Ev
  virtual void  v17(); // _ZN6S472C53v17Ev
  virtual void  v18(); // _ZN6S472C53v18Ev
  virtual void  v19(); // _ZN6S472C53v19Ev
  virtual void  v20(); // _ZN6S472C53v20Ev
  virtual void  v21(); // _ZN6S472C53v21Ev
  virtual void  v22(); // _ZN6S472C53v22Ev
  virtual void  v23(); // _ZN6S472C53v23Ev
  virtual void  v24(); // _ZN6S472C53v24Ev
  virtual void  v25(); // _ZN6S472C53v25Ev
  virtual void  v26(); // _ZN6S472C53v26Ev
  virtual void  v27(); // _ZN6S472C53v27Ev
  virtual void  v28(); // _ZN6S472C53v28Ev
  virtual void  v29(); // _ZN6S472C53v29Ev
  virtual void  v30(); // _ZN6S472C53v30Ev
  virtual void  v31(); // _ZN6S472C53v31Ev
  virtual void  v32(); // _ZN6S472C53v32Ev
  virtual void  v33(); // _ZN6S472C53v33Ev
  virtual void  v34(); // _ZN6S472C53v34Ev
  virtual void  v35(); // _ZN6S472C53v35Ev
  virtual void  v36(); // _ZN6S472C53v36Ev
  virtual void  v37(); // _ZN6S472C53v37Ev
  virtual void  v38(); // _ZN6S472C53v38Ev
  virtual void  v39(); // _ZN6S472C53v39Ev
  virtual void  v40(); // _ZN6S472C53v40Ev
  virtual void  v41(); // _ZN6S472C53v41Ev
  virtual void  v42(); // _ZN6S472C53v42Ev
  virtual void  v43(); // _ZN6S472C53v43Ev
  virtual void  v44(); // _ZN6S472C53v44Ev
  virtual void  v45(); // _ZN6S472C53v45Ev
  virtual void  v46(); // _ZN6S472C53v46Ev
  virtual void  v47(); // _ZN6S472C53v47Ev
  virtual void  v48(); // _ZN6S472C53v48Ev
  virtual void  v49(); // _ZN6S472C53v49Ev
  virtual void  v50(); // _ZN6S472C53v50Ev
  virtual void  v51(); // _ZN6S472C53v51Ev
  virtual void  v52(); // _ZN6S472C53v52Ev
  virtual void  v53(); // _ZN6S472C53v53Ev
  virtual void  v54(); // _ZN6S472C53v54Ev
  virtual void  v55(); // _ZN6S472C53v55Ev
  virtual void  v56(); // _ZN6S472C53v56Ev
  virtual void  v57(); // _ZN6S472C53v57Ev
  virtual void  v58(); // _ZN6S472C53v58Ev
  virtual void  v59(); // _ZN6S472C53v59Ev
  virtual void  v60(); // _ZN6S472C53v60Ev
  virtual void  v61(); // _ZN6S472C53v61Ev
  virtual void  v62(); // _ZN6S472C53v62Ev
  virtual void  v63(); // _ZN6S472C53v63Ev
  virtual void  v64(); // _ZN6S472C53v64Ev
  virtual void  v65(); // _ZN6S472C53v65Ev
  virtual void  v66(); // _ZN6S472C53v66Ev
  virtual void  v67(); // _ZN6S472C53v67Ev
  virtual void  v68(); // _ZN6S472C53v68Ev
  virtual void  v69(); // _ZN6S472C53v69Ev
  virtual void  v70(); // _ZN6S472C53v70Ev
  virtual void  v71(); // _ZN6S472C53v71Ev
  virtual void  v72(); // _ZN6S472C53v72Ev
  virtual void  v73(); // _ZN6S472C53v73Ev
  S472C5(); // tgen
};
//SIG(-1 S472C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S472C5 ::~S472C5(){ note_dtor("S472C5", this);}
void  S472C5 ::v10(){vfunc_called(this, "_ZN6S472C53v10Ev");}
void  S472C5 ::v11(){vfunc_called(this, "_ZN6S472C53v11Ev");}
void  S472C5 ::v12(){vfunc_called(this, "_ZN6S472C53v12Ev");}
void  S472C5 ::v13(){vfunc_called(this, "_ZN6S472C53v13Ev");}
void  S472C5 ::v14(){vfunc_called(this, "_ZN6S472C53v14Ev");}
void  S472C5 ::v15(){vfunc_called(this, "_ZN6S472C53v15Ev");}
void  S472C5 ::v16(){vfunc_called(this, "_ZN6S472C53v16Ev");}
void  S472C5 ::v17(){vfunc_called(this, "_ZN6S472C53v17Ev");}
void  S472C5 ::v18(){vfunc_called(this, "_ZN6S472C53v18Ev");}
void  S472C5 ::v19(){vfunc_called(this, "_ZN6S472C53v19Ev");}
void  S472C5 ::v20(){vfunc_called(this, "_ZN6S472C53v20Ev");}
void  S472C5 ::v21(){vfunc_called(this, "_ZN6S472C53v21Ev");}
void  S472C5 ::v22(){vfunc_called(this, "_ZN6S472C53v22Ev");}
void  S472C5 ::v23(){vfunc_called(this, "_ZN6S472C53v23Ev");}
void  S472C5 ::v24(){vfunc_called(this, "_ZN6S472C53v24Ev");}
void  S472C5 ::v25(){vfunc_called(this, "_ZN6S472C53v25Ev");}
void  S472C5 ::v26(){vfunc_called(this, "_ZN6S472C53v26Ev");}
void  S472C5 ::v27(){vfunc_called(this, "_ZN6S472C53v27Ev");}
void  S472C5 ::v28(){vfunc_called(this, "_ZN6S472C53v28Ev");}
void  S472C5 ::v29(){vfunc_called(this, "_ZN6S472C53v29Ev");}
void  S472C5 ::v30(){vfunc_called(this, "_ZN6S472C53v30Ev");}
void  S472C5 ::v31(){vfunc_called(this, "_ZN6S472C53v31Ev");}
void  S472C5 ::v32(){vfunc_called(this, "_ZN6S472C53v32Ev");}
void  S472C5 ::v33(){vfunc_called(this, "_ZN6S472C53v33Ev");}
void  S472C5 ::v34(){vfunc_called(this, "_ZN6S472C53v34Ev");}
void  S472C5 ::v35(){vfunc_called(this, "_ZN6S472C53v35Ev");}
void  S472C5 ::v36(){vfunc_called(this, "_ZN6S472C53v36Ev");}
void  S472C5 ::v37(){vfunc_called(this, "_ZN6S472C53v37Ev");}
void  S472C5 ::v38(){vfunc_called(this, "_ZN6S472C53v38Ev");}
void  S472C5 ::v39(){vfunc_called(this, "_ZN6S472C53v39Ev");}
void  S472C5 ::v40(){vfunc_called(this, "_ZN6S472C53v40Ev");}
void  S472C5 ::v41(){vfunc_called(this, "_ZN6S472C53v41Ev");}
void  S472C5 ::v42(){vfunc_called(this, "_ZN6S472C53v42Ev");}
void  S472C5 ::v43(){vfunc_called(this, "_ZN6S472C53v43Ev");}
void  S472C5 ::v44(){vfunc_called(this, "_ZN6S472C53v44Ev");}
void  S472C5 ::v45(){vfunc_called(this, "_ZN6S472C53v45Ev");}
void  S472C5 ::v46(){vfunc_called(this, "_ZN6S472C53v46Ev");}
void  S472C5 ::v47(){vfunc_called(this, "_ZN6S472C53v47Ev");}
void  S472C5 ::v48(){vfunc_called(this, "_ZN6S472C53v48Ev");}
void  S472C5 ::v49(){vfunc_called(this, "_ZN6S472C53v49Ev");}
void  S472C5 ::v50(){vfunc_called(this, "_ZN6S472C53v50Ev");}
void  S472C5 ::v51(){vfunc_called(this, "_ZN6S472C53v51Ev");}
void  S472C5 ::v52(){vfunc_called(this, "_ZN6S472C53v52Ev");}
void  S472C5 ::v53(){vfunc_called(this, "_ZN6S472C53v53Ev");}
void  S472C5 ::v54(){vfunc_called(this, "_ZN6S472C53v54Ev");}
void  S472C5 ::v55(){vfunc_called(this, "_ZN6S472C53v55Ev");}
void  S472C5 ::v56(){vfunc_called(this, "_ZN6S472C53v56Ev");}
void  S472C5 ::v57(){vfunc_called(this, "_ZN6S472C53v57Ev");}
void  S472C5 ::v58(){vfunc_called(this, "_ZN6S472C53v58Ev");}
void  S472C5 ::v59(){vfunc_called(this, "_ZN6S472C53v59Ev");}
void  S472C5 ::v60(){vfunc_called(this, "_ZN6S472C53v60Ev");}
void  S472C5 ::v61(){vfunc_called(this, "_ZN6S472C53v61Ev");}
void  S472C5 ::v62(){vfunc_called(this, "_ZN6S472C53v62Ev");}
void  S472C5 ::v63(){vfunc_called(this, "_ZN6S472C53v63Ev");}
void  S472C5 ::v64(){vfunc_called(this, "_ZN6S472C53v64Ev");}
void  S472C5 ::v65(){vfunc_called(this, "_ZN6S472C53v65Ev");}
void  S472C5 ::v66(){vfunc_called(this, "_ZN6S472C53v66Ev");}
void  S472C5 ::v67(){vfunc_called(this, "_ZN6S472C53v67Ev");}
void  S472C5 ::v68(){vfunc_called(this, "_ZN6S472C53v68Ev");}
void  S472C5 ::v69(){vfunc_called(this, "_ZN6S472C53v69Ev");}
void  S472C5 ::v70(){vfunc_called(this, "_ZN6S472C53v70Ev");}
void  S472C5 ::v71(){vfunc_called(this, "_ZN6S472C53v71Ev");}
void  S472C5 ::v72(){vfunc_called(this, "_ZN6S472C53v72Ev");}
void  S472C5 ::v73(){vfunc_called(this, "_ZN6S472C53v73Ev");}
S472C5 ::S472C5(){ note_ctor("S472C5", this);} // tgen

static void Test_S472C5()
{
  extern Class_Descriptor cd_S472C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S472C5, buf);
    S472C5 *dp, &lv = *(dp=new (buf) S472C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S472C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S472C5)");
    check_field_offset(lv, s472c5f0, ABISELECT(8,4), "S472C5.s472c5f0");
    check_field_offset(lv, s472c5f1, ABISELECT(16,8), "S472C5.s472c5f1");
    check_field_offset(lv, s472c5f2, ABISELECT(24,16), "S472C5.s472c5f2");
    check_field_offset(lv, s472c5f3, ABISELECT(56,32), "S472C5.s472c5f3");
    check_field_offset(lv, s472c5f4, ABISELECT(64,40), "S472C5.s472c5f4");
    check_field_offset(lv, s472c5f5, ABISELECT(72,44), "S472C5.s472c5f5");
    check_field_offset(lv, s472c5f6, ABISELECT(80,52), "S472C5.s472c5f6");
    test_class_info(&lv, &cd_S472C5);
    dp->~S472C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS472C5(Test_S472C5, "S472C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S472C5C1Ev();
extern void _ZN6S472C5D1Ev();
Name_Map name_map_S472C5[] = {
  NSPAIR(_ZN6S472C5C1Ev),
  NSPAIR(_ZN6S472C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S472C5[];
extern void _ZN6S472C5D1Ev();
extern void _ZN6S472C5D0Ev();
extern void _ZN6S472C53v10Ev();
extern void _ZN6S472C53v11Ev();
extern void _ZN6S472C53v12Ev();
extern void _ZN6S472C53v13Ev();
extern void _ZN6S472C53v14Ev();
extern void _ZN6S472C53v15Ev();
extern void _ZN6S472C53v16Ev();
extern void _ZN6S472C53v17Ev();
extern void _ZN6S472C53v18Ev();
extern void _ZN6S472C53v19Ev();
extern void _ZN6S472C53v20Ev();
extern void _ZN6S472C53v21Ev();
extern void _ZN6S472C53v22Ev();
extern void _ZN6S472C53v23Ev();
extern void _ZN6S472C53v24Ev();
extern void _ZN6S472C53v25Ev();
extern void _ZN6S472C53v26Ev();
extern void _ZN6S472C53v27Ev();
extern void _ZN6S472C53v28Ev();
extern void _ZN6S472C53v29Ev();
extern void _ZN6S472C53v30Ev();
extern void _ZN6S472C53v31Ev();
extern void _ZN6S472C53v32Ev();
extern void _ZN6S472C53v33Ev();
extern void _ZN6S472C53v34Ev();
extern void _ZN6S472C53v35Ev();
extern void _ZN6S472C53v36Ev();
extern void _ZN6S472C53v37Ev();
extern void _ZN6S472C53v38Ev();
extern void _ZN6S472C53v39Ev();
extern void _ZN6S472C53v40Ev();
extern void _ZN6S472C53v41Ev();
extern void _ZN6S472C53v42Ev();
extern void _ZN6S472C53v43Ev();
extern void _ZN6S472C53v44Ev();
extern void _ZN6S472C53v45Ev();
extern void _ZN6S472C53v46Ev();
extern void _ZN6S472C53v47Ev();
extern void _ZN6S472C53v48Ev();
extern void _ZN6S472C53v49Ev();
extern void _ZN6S472C53v50Ev();
extern void _ZN6S472C53v51Ev();
extern void _ZN6S472C53v52Ev();
extern void _ZN6S472C53v53Ev();
extern void _ZN6S472C53v54Ev();
extern void _ZN6S472C53v55Ev();
extern void _ZN6S472C53v56Ev();
extern void _ZN6S472C53v57Ev();
extern void _ZN6S472C53v58Ev();
extern void _ZN6S472C53v59Ev();
extern void _ZN6S472C53v60Ev();
extern void _ZN6S472C53v61Ev();
extern void _ZN6S472C53v62Ev();
extern void _ZN6S472C53v63Ev();
extern void _ZN6S472C53v64Ev();
extern void _ZN6S472C53v65Ev();
extern void _ZN6S472C53v66Ev();
extern void _ZN6S472C53v67Ev();
extern void _ZN6S472C53v68Ev();
extern void _ZN6S472C53v69Ev();
extern void _ZN6S472C53v70Ev();
extern void _ZN6S472C53v71Ev();
extern void _ZN6S472C53v72Ev();
extern void _ZN6S472C53v73Ev();
static  VTBL_ENTRY vtc_S472C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S472C5[0]),
  (VTBL_ENTRY)&_ZN6S472C5D1Ev,
  (VTBL_ENTRY)&_ZN6S472C5D0Ev,
  (VTBL_ENTRY)&_ZN6S472C53v10Ev,
  (VTBL_ENTRY)&_ZN6S472C53v11Ev,
  (VTBL_ENTRY)&_ZN6S472C53v12Ev,
  (VTBL_ENTRY)&_ZN6S472C53v13Ev,
  (VTBL_ENTRY)&_ZN6S472C53v14Ev,
  (VTBL_ENTRY)&_ZN6S472C53v15Ev,
  (VTBL_ENTRY)&_ZN6S472C53v16Ev,
  (VTBL_ENTRY)&_ZN6S472C53v17Ev,
  (VTBL_ENTRY)&_ZN6S472C53v18Ev,
  (VTBL_ENTRY)&_ZN6S472C53v19Ev,
  (VTBL_ENTRY)&_ZN6S472C53v20Ev,
  (VTBL_ENTRY)&_ZN6S472C53v21Ev,
  (VTBL_ENTRY)&_ZN6S472C53v22Ev,
  (VTBL_ENTRY)&_ZN6S472C53v23Ev,
  (VTBL_ENTRY)&_ZN6S472C53v24Ev,
  (VTBL_ENTRY)&_ZN6S472C53v25Ev,
  (VTBL_ENTRY)&_ZN6S472C53v26Ev,
  (VTBL_ENTRY)&_ZN6S472C53v27Ev,
  (VTBL_ENTRY)&_ZN6S472C53v28Ev,
  (VTBL_ENTRY)&_ZN6S472C53v29Ev,
  (VTBL_ENTRY)&_ZN6S472C53v30Ev,
  (VTBL_ENTRY)&_ZN6S472C53v31Ev,
  (VTBL_ENTRY)&_ZN6S472C53v32Ev,
  (VTBL_ENTRY)&_ZN6S472C53v33Ev,
  (VTBL_ENTRY)&_ZN6S472C53v34Ev,
  (VTBL_ENTRY)&_ZN6S472C53v35Ev,
  (VTBL_ENTRY)&_ZN6S472C53v36Ev,
  (VTBL_ENTRY)&_ZN6S472C53v37Ev,
  (VTBL_ENTRY)&_ZN6S472C53v38Ev,
  (VTBL_ENTRY)&_ZN6S472C53v39Ev,
  (VTBL_ENTRY)&_ZN6S472C53v40Ev,
  (VTBL_ENTRY)&_ZN6S472C53v41Ev,
  (VTBL_ENTRY)&_ZN6S472C53v42Ev,
  (VTBL_ENTRY)&_ZN6S472C53v43Ev,
  (VTBL_ENTRY)&_ZN6S472C53v44Ev,
  (VTBL_ENTRY)&_ZN6S472C53v45Ev,
  (VTBL_ENTRY)&_ZN6S472C53v46Ev,
  (VTBL_ENTRY)&_ZN6S472C53v47Ev,
  (VTBL_ENTRY)&_ZN6S472C53v48Ev,
  (VTBL_ENTRY)&_ZN6S472C53v49Ev,
  (VTBL_ENTRY)&_ZN6S472C53v50Ev,
  (VTBL_ENTRY)&_ZN6S472C53v51Ev,
  (VTBL_ENTRY)&_ZN6S472C53v52Ev,
  (VTBL_ENTRY)&_ZN6S472C53v53Ev,
  (VTBL_ENTRY)&_ZN6S472C53v54Ev,
  (VTBL_ENTRY)&_ZN6S472C53v55Ev,
  (VTBL_ENTRY)&_ZN6S472C53v56Ev,
  (VTBL_ENTRY)&_ZN6S472C53v57Ev,
  (VTBL_ENTRY)&_ZN6S472C53v58Ev,
  (VTBL_ENTRY)&_ZN6S472C53v59Ev,
  (VTBL_ENTRY)&_ZN6S472C53v60Ev,
  (VTBL_ENTRY)&_ZN6S472C53v61Ev,
  (VTBL_ENTRY)&_ZN6S472C53v62Ev,
  (VTBL_ENTRY)&_ZN6S472C53v63Ev,
  (VTBL_ENTRY)&_ZN6S472C53v64Ev,
  (VTBL_ENTRY)&_ZN6S472C53v65Ev,
  (VTBL_ENTRY)&_ZN6S472C53v66Ev,
  (VTBL_ENTRY)&_ZN6S472C53v67Ev,
  (VTBL_ENTRY)&_ZN6S472C53v68Ev,
  (VTBL_ENTRY)&_ZN6S472C53v69Ev,
  (VTBL_ENTRY)&_ZN6S472C53v70Ev,
  (VTBL_ENTRY)&_ZN6S472C53v71Ev,
  (VTBL_ENTRY)&_ZN6S472C53v72Ev,
  (VTBL_ENTRY)&_ZN6S472C53v73Ev,
};
extern VTBL_ENTRY _ZTI6S472C5[];
extern  VTBL_ENTRY _ZTV6S472C5[];
Class_Descriptor cd_S472C5 = {  "S472C5", // class name
  0,0,//no base classes
  &(vtc_S472C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S472C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S472C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S472C4  : S472C5 {
  int s472c4f0[2];
  void *s472c4f1;
  int s472c4f2[2];
  ::S473C7_nt s472c4f3;
  ::S473C7_nt s472c4f4;
  ::S21925C42 s472c4f5;
  ::S473C7_nt s472c4f6;
  unsigned int s472c4f7:1;
  unsigned int s472c4f8:1;
  unsigned int s472c4f9:1;
  unsigned int s472c4f10:1;
  unsigned int s472c4f11:1;
  int s472c4f12[2];
  virtual  ~S472C4(); // _ZN6S472C4D1Ev
  virtual void  v74(); // _ZN6S472C43v74Ev
  virtual void  v75(); // _ZN6S472C43v75Ev
  virtual void  v76(); // _ZN6S472C43v76Ev
  virtual void  v77(); // _ZN6S472C43v77Ev
  virtual void  v78(); // _ZN6S472C43v78Ev
  virtual void  v79(); // _ZN6S472C43v79Ev
  virtual void  v80(); // _ZN6S472C43v80Ev
  virtual void  v81(); // _ZN6S472C43v81Ev
  virtual void  v82(); // _ZN6S472C43v82Ev
  virtual void  v83(); // _ZN6S472C43v83Ev
  virtual void  v84(); // _ZN6S472C43v84Ev
  virtual void  v85(); // _ZN6S472C43v85Ev
  virtual void  v86(); // _ZN6S472C43v86Ev
  virtual void  v87(); // _ZN6S472C43v87Ev
  virtual void  v88(); // _ZN6S472C43v88Ev
  virtual void  v89(); // _ZN6S472C43v89Ev
  virtual void  v90(); // _ZN6S472C43v90Ev
  virtual void  v91(); // _ZN6S472C43v91Ev
  virtual void  v92(); // _ZN6S472C43v92Ev
  virtual void  v93(); // _ZN6S472C43v93Ev
  virtual void  v94(); // _ZN6S472C43v94Ev
  virtual void  v95(); // _ZN6S472C43v95Ev
  S472C4(); // tgen
};
//SIG(-1 S472C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S472C4 ::~S472C4(){ note_dtor("S472C4", this);}
void  S472C4 ::v74(){vfunc_called(this, "_ZN6S472C43v74Ev");}
void  S472C4 ::v75(){vfunc_called(this, "_ZN6S472C43v75Ev");}
void  S472C4 ::v76(){vfunc_called(this, "_ZN6S472C43v76Ev");}
void  S472C4 ::v77(){vfunc_called(this, "_ZN6S472C43v77Ev");}
void  S472C4 ::v78(){vfunc_called(this, "_ZN6S472C43v78Ev");}
void  S472C4 ::v79(){vfunc_called(this, "_ZN6S472C43v79Ev");}
void  S472C4 ::v80(){vfunc_called(this, "_ZN6S472C43v80Ev");}
void  S472C4 ::v81(){vfunc_called(this, "_ZN6S472C43v81Ev");}
void  S472C4 ::v82(){vfunc_called(this, "_ZN6S472C43v82Ev");}
void  S472C4 ::v83(){vfunc_called(this, "_ZN6S472C43v83Ev");}
void  S472C4 ::v84(){vfunc_called(this, "_ZN6S472C43v84Ev");}
void  S472C4 ::v85(){vfunc_called(this, "_ZN6S472C43v85Ev");}
void  S472C4 ::v86(){vfunc_called(this, "_ZN6S472C43v86Ev");}
void  S472C4 ::v87(){vfunc_called(this, "_ZN6S472C43v87Ev");}
void  S472C4 ::v88(){vfunc_called(this, "_ZN6S472C43v88Ev");}
void  S472C4 ::v89(){vfunc_called(this, "_ZN6S472C43v89Ev");}
void  S472C4 ::v90(){vfunc_called(this, "_ZN6S472C43v90Ev");}
void  S472C4 ::v91(){vfunc_called(this, "_ZN6S472C43v91Ev");}
void  S472C4 ::v92(){vfunc_called(this, "_ZN6S472C43v92Ev");}
void  S472C4 ::v93(){vfunc_called(this, "_ZN6S472C43v93Ev");}
void  S472C4 ::v94(){vfunc_called(this, "_ZN6S472C43v94Ev");}
void  S472C4 ::v95(){vfunc_called(this, "_ZN6S472C43v95Ev");}
S472C4 ::S472C4(){ note_ctor("S472C4", this);} // tgen

static void Test_S472C4()
{
  extern Class_Descriptor cd_S472C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S472C4, buf);
    S472C4 *dp, &lv = *(dp=new (buf) S472C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S472C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S472C4)");
    check_base_class_offset(lv, (S472C5*), 0, "S472C4");
    check_field_offset(lv, s472c4f0, ABISELECT(96,60), "S472C4.s472c4f0");
    check_field_offset(lv, s472c4f1, ABISELECT(104,68), "S472C4.s472c4f1");
    check_field_offset(lv, s472c4f2, ABISELECT(112,72), "S472C4.s472c4f2");
    check_field_offset(lv, s472c4f3, ABISELECT(120,80), "S472C4.s472c4f3");
    check_field_offset(lv, s472c4f4, ABISELECT(136,92), "S472C4.s472c4f4");
    check_field_offset(lv, s472c4f5, ABISELECT(152,104), "S472C4.s472c4f5");
    check_field_offset(lv, s472c4f6, ABISELECT(160,108), "S472C4.s472c4f6");
    set_bf_and_test(lv, s472c4f7, ABISELECT(176,120), 0, 1, 1, "S472C4");
    set_bf_and_test(lv, s472c4f8, ABISELECT(176,120), 1, 1, 1, "S472C4");
    set_bf_and_test(lv, s472c4f9, ABISELECT(176,120), 2, 1, 1, "S472C4");
    set_bf_and_test(lv, s472c4f10, ABISELECT(176,120), 3, 1, 1, "S472C4");
    set_bf_and_test(lv, s472c4f11, ABISELECT(176,120), 4, 1, 1, "S472C4");
    check_field_offset(lv, s472c4f12, ABISELECT(180,124), "S472C4.s472c4f12");
    test_class_info(&lv, &cd_S472C4);
    dp->~S472C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS472C4(Test_S472C4, "S472C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S472C4C1Ev();
extern void _ZN6S472C4D1Ev();
Name_Map name_map_S472C4[] = {
  NSPAIR(_ZN6S472C4C1Ev),
  NSPAIR(_ZN6S472C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S472C5;
extern VTBL_ENTRY _ZTI6S472C5[];
extern  VTBL_ENTRY _ZTV6S472C5[];
static Base_Class bases_S472C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S472C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S472C4[];
extern void _ZN6S472C4D1Ev();
extern void _ZN6S472C4D0Ev();
extern void _ZN6S472C53v10Ev();
extern void _ZN6S472C53v11Ev();
extern void _ZN6S472C53v12Ev();
extern void _ZN6S472C53v13Ev();
extern void _ZN6S472C53v14Ev();
extern void _ZN6S472C53v15Ev();
extern void _ZN6S472C53v16Ev();
extern void _ZN6S472C53v17Ev();
extern void _ZN6S472C53v18Ev();
extern void _ZN6S472C53v19Ev();
extern void _ZN6S472C53v20Ev();
extern void _ZN6S472C53v21Ev();
extern void _ZN6S472C53v22Ev();
extern void _ZN6S472C53v23Ev();
extern void _ZN6S472C53v24Ev();
extern void _ZN6S472C53v25Ev();
extern void _ZN6S472C53v26Ev();
extern void _ZN6S472C53v27Ev();
extern void _ZN6S472C53v28Ev();
extern void _ZN6S472C53v29Ev();
extern void _ZN6S472C53v30Ev();
extern void _ZN6S472C53v31Ev();
extern void _ZN6S472C53v32Ev();
extern void _ZN6S472C53v33Ev();
extern void _ZN6S472C53v34Ev();
extern void _ZN6S472C53v35Ev();
extern void _ZN6S472C53v36Ev();
extern void _ZN6S472C53v37Ev();
extern void _ZN6S472C53v38Ev();
extern void _ZN6S472C53v39Ev();
extern void _ZN6S472C53v40Ev();
extern void _ZN6S472C53v41Ev();
extern void _ZN6S472C53v42Ev();
extern void _ZN6S472C53v43Ev();
extern void _ZN6S472C53v44Ev();
extern void _ZN6S472C53v45Ev();
extern void _ZN6S472C53v46Ev();
extern void _ZN6S472C53v47Ev();
extern void _ZN6S472C53v48Ev();
extern void _ZN6S472C53v49Ev();
extern void _ZN6S472C53v50Ev();
extern void _ZN6S472C53v51Ev();
extern void _ZN6S472C53v52Ev();
extern void _ZN6S472C53v53Ev();
extern void _ZN6S472C53v54Ev();
extern void _ZN6S472C53v55Ev();
extern void _ZN6S472C53v56Ev();
extern void _ZN6S472C53v57Ev();
extern void _ZN6S472C53v58Ev();
extern void _ZN6S472C53v59Ev();
extern void _ZN6S472C53v60Ev();
extern void _ZN6S472C53v61Ev();
extern void _ZN6S472C53v62Ev();
extern void _ZN6S472C53v63Ev();
extern void _ZN6S472C53v64Ev();
extern void _ZN6S472C53v65Ev();
extern void _ZN6S472C53v66Ev();
extern void _ZN6S472C53v67Ev();
extern void _ZN6S472C53v68Ev();
extern void _ZN6S472C53v69Ev();
extern void _ZN6S472C53v70Ev();
extern void _ZN6S472C53v71Ev();
extern void _ZN6S472C53v72Ev();
extern void _ZN6S472C53v73Ev();
extern void _ZN6S472C43v74Ev();
extern void _ZN6S472C43v75Ev();
extern void _ZN6S472C43v76Ev();
extern void _ZN6S472C43v77Ev();
extern void _ZN6S472C43v78Ev();
extern void _ZN6S472C43v79Ev();
extern void _ZN6S472C43v80Ev();
extern void _ZN6S472C43v81Ev();
extern void _ZN6S472C43v82Ev();
extern void _ZN6S472C43v83Ev();
extern void _ZN6S472C43v84Ev();
extern void _ZN6S472C43v85Ev();
extern void _ZN6S472C43v86Ev();
extern void _ZN6S472C43v87Ev();
extern void _ZN6S472C43v88Ev();
extern void _ZN6S472C43v89Ev();
extern void _ZN6S472C43v90Ev();
extern void _ZN6S472C43v91Ev();
extern void _ZN6S472C43v92Ev();
extern void _ZN6S472C43v93Ev();
extern void _ZN6S472C43v94Ev();
extern void _ZN6S472C43v95Ev();
static  VTBL_ENTRY vtc_S472C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S472C4[0]),
  (VTBL_ENTRY)&_ZN6S472C4D1Ev,
  (VTBL_ENTRY)&_ZN6S472C4D0Ev,
  (VTBL_ENTRY)&_ZN6S472C53v10Ev,
  (VTBL_ENTRY)&_ZN6S472C53v11Ev,
  (VTBL_ENTRY)&_ZN6S472C53v12Ev,
  (VTBL_ENTRY)&_ZN6S472C53v13Ev,
  (VTBL_ENTRY)&_ZN6S472C53v14Ev,
  (VTBL_ENTRY)&_ZN6S472C53v15Ev,
  (VTBL_ENTRY)&_ZN6S472C53v16Ev,
  (VTBL_ENTRY)&_ZN6S472C53v17Ev,
  (VTBL_ENTRY)&_ZN6S472C53v18Ev,
  (VTBL_ENTRY)&_ZN6S472C53v19Ev,
  (VTBL_ENTRY)&_ZN6S472C53v20Ev,
  (VTBL_ENTRY)&_ZN6S472C53v21Ev,
  (VTBL_ENTRY)&_ZN6S472C53v22Ev,
  (VTBL_ENTRY)&_ZN6S472C53v23Ev,
  (VTBL_ENTRY)&_ZN6S472C53v24Ev,
  (VTBL_ENTRY)&_ZN6S472C53v25Ev,
  (VTBL_ENTRY)&_ZN6S472C53v26Ev,
  (VTBL_ENTRY)&_ZN6S472C53v27Ev,
  (VTBL_ENTRY)&_ZN6S472C53v28Ev,
  (VTBL_ENTRY)&_ZN6S472C53v29Ev,
  (VTBL_ENTRY)&_ZN6S472C53v30Ev,
  (VTBL_ENTRY)&_ZN6S472C53v31Ev,
  (VTBL_ENTRY)&_ZN6S472C53v32Ev,
  (VTBL_ENTRY)&_ZN6S472C53v33Ev,
  (VTBL_ENTRY)&_ZN6S472C53v34Ev,
  (VTBL_ENTRY)&_ZN6S472C53v35Ev,
  (VTBL_ENTRY)&_ZN6S472C53v36Ev,
  (VTBL_ENTRY)&_ZN6S472C53v37Ev,
  (VTBL_ENTRY)&_ZN6S472C53v38Ev,
  (VTBL_ENTRY)&_ZN6S472C53v39Ev,
  (VTBL_ENTRY)&_ZN6S472C53v40Ev,
  (VTBL_ENTRY)&_ZN6S472C53v41Ev,
  (VTBL_ENTRY)&_ZN6S472C53v42Ev,
  (VTBL_ENTRY)&_ZN6S472C53v43Ev,
  (VTBL_ENTRY)&_ZN6S472C53v44Ev,
  (VTBL_ENTRY)&_ZN6S472C53v45Ev,
  (VTBL_ENTRY)&_ZN6S472C53v46Ev,
  (VTBL_ENTRY)&_ZN6S472C53v47Ev,
  (VTBL_ENTRY)&_ZN6S472C53v48Ev,
  (VTBL_ENTRY)&_ZN6S472C53v49Ev,
  (VTBL_ENTRY)&_ZN6S472C53v50Ev,
  (VTBL_ENTRY)&_ZN6S472C53v51Ev,
  (VTBL_ENTRY)&_ZN6S472C53v52Ev,
  (VTBL_ENTRY)&_ZN6S472C53v53Ev,
  (VTBL_ENTRY)&_ZN6S472C53v54Ev,
  (VTBL_ENTRY)&_ZN6S472C53v55Ev,
  (VTBL_ENTRY)&_ZN6S472C53v56Ev,
  (VTBL_ENTRY)&_ZN6S472C53v57Ev,
  (VTBL_ENTRY)&_ZN6S472C53v58Ev,
  (VTBL_ENTRY)&_ZN6S472C53v59Ev,
  (VTBL_ENTRY)&_ZN6S472C53v60Ev,
  (VTBL_ENTRY)&_ZN6S472C53v61Ev,
  (VTBL_ENTRY)&_ZN6S472C53v62Ev,
  (VTBL_ENTRY)&_ZN6S472C53v63Ev,
  (VTBL_ENTRY)&_ZN6S472C53v64Ev,
  (VTBL_ENTRY)&_ZN6S472C53v65Ev,
  (VTBL_ENTRY)&_ZN6S472C53v66Ev,
  (VTBL_ENTRY)&_ZN6S472C53v67Ev,
  (VTBL_ENTRY)&_ZN6S472C53v68Ev,
  (VTBL_ENTRY)&_ZN6S472C53v69Ev,
  (VTBL_ENTRY)&_ZN6S472C53v70Ev,
  (VTBL_ENTRY)&_ZN6S472C53v71Ev,
  (VTBL_ENTRY)&_ZN6S472C53v72Ev,
  (VTBL_ENTRY)&_ZN6S472C53v73Ev,
  (VTBL_ENTRY)&_ZN6S472C43v74Ev,
  (VTBL_ENTRY)&_ZN6S472C43v75Ev,
  (VTBL_ENTRY)&_ZN6S472C43v76Ev,
  (VTBL_ENTRY)&_ZN6S472C43v77Ev,
  (VTBL_ENTRY)&_ZN6S472C43v78Ev,
  (VTBL_ENTRY)&_ZN6S472C43v79Ev,
  (VTBL_ENTRY)&_ZN6S472C43v80Ev,
  (VTBL_ENTRY)&_ZN6S472C43v81Ev,
  (VTBL_ENTRY)&_ZN6S472C43v82Ev,
  (VTBL_ENTRY)&_ZN6S472C43v83Ev,
  (VTBL_ENTRY)&_ZN6S472C43v84Ev,
  (VTBL_ENTRY)&_ZN6S472C43v85Ev,
  (VTBL_ENTRY)&_ZN6S472C43v86Ev,
  (VTBL_ENTRY)&_ZN6S472C43v87Ev,
  (VTBL_ENTRY)&_ZN6S472C43v88Ev,
  (VTBL_ENTRY)&_ZN6S472C43v89Ev,
  (VTBL_ENTRY)&_ZN6S472C43v90Ev,
  (VTBL_ENTRY)&_ZN6S472C43v91Ev,
  (VTBL_ENTRY)&_ZN6S472C43v92Ev,
  (VTBL_ENTRY)&_ZN6S472C43v93Ev,
  (VTBL_ENTRY)&_ZN6S472C43v94Ev,
  (VTBL_ENTRY)&_ZN6S472C43v95Ev,
};
extern VTBL_ENTRY _ZTI6S472C4[];
extern  VTBL_ENTRY _ZTV6S472C4[];
Class_Descriptor cd_S472C4 = {  "S472C4", // class name
  bases_S472C4, 1,
  &(vtc_S472C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S472C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S472C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S472C3  : S472C4 {
  ::S473C6_nt s472c3f0;
  virtual  ~S472C3(); // _ZN6S472C3D1Ev
  virtual void  v96(); // _ZN6S472C33v96Ev
  virtual void  v97(); // _ZN6S472C33v97Ev
  virtual void  v98(); // _ZN6S472C33v98Ev
  virtual void  v99(); // _ZN6S472C33v99Ev
  virtual void  v100(); // _ZN6S472C34v100Ev
  virtual void  v101(); // _ZN6S472C34v101Ev
  virtual void  v102(); // _ZN6S472C34v102Ev
  virtual void  v103(); // _ZN6S472C34v103Ev
  virtual void  v104(); // _ZN6S472C34v104Ev
  virtual void  v105(); // _ZN6S472C34v105Ev
  virtual void  v106(); // _ZN6S472C34v106Ev
  virtual void  v107(); // _ZN6S472C34v107Ev
  virtual void  v108(); // _ZN6S472C34v108Ev
  virtual void  v109(); // _ZN6S472C34v109Ev
  virtual void  v110(); // _ZN6S472C34v110Ev
  virtual void  v111(); // _ZN6S472C34v111Ev
  virtual void  v112(); // _ZN6S472C34v112Ev
  virtual void  v113(); // _ZN6S472C34v113Ev
  virtual void  v114(); // _ZN6S472C34v114Ev
  S472C3(); // tgen
};
//SIG(-1 S472C3) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S472C3 ::~S472C3(){ note_dtor("S472C3", this);}
void  S472C3 ::v96(){vfunc_called(this, "_ZN6S472C33v96Ev");}
void  S472C3 ::v97(){vfunc_called(this, "_ZN6S472C33v97Ev");}
void  S472C3 ::v98(){vfunc_called(this, "_ZN6S472C33v98Ev");}
void  S472C3 ::v99(){vfunc_called(this, "_ZN6S472C33v99Ev");}
void  S472C3 ::v100(){vfunc_called(this, "_ZN6S472C34v100Ev");}
void  S472C3 ::v101(){vfunc_called(this, "_ZN6S472C34v101Ev");}
void  S472C3 ::v102(){vfunc_called(this, "_ZN6S472C34v102Ev");}
void  S472C3 ::v103(){vfunc_called(this, "_ZN6S472C34v103Ev");}
void  S472C3 ::v104(){vfunc_called(this, "_ZN6S472C34v104Ev");}
void  S472C3 ::v105(){vfunc_called(this, "_ZN6S472C34v105Ev");}
void  S472C3 ::v106(){vfunc_called(this, "_ZN6S472C34v106Ev");}
void  S472C3 ::v107(){vfunc_called(this, "_ZN6S472C34v107Ev");}
void  S472C3 ::v108(){vfunc_called(this, "_ZN6S472C34v108Ev");}
void  S472C3 ::v109(){vfunc_called(this, "_ZN6S472C34v109Ev");}
void  S472C3 ::v110(){vfunc_called(this, "_ZN6S472C34v110Ev");}
void  S472C3 ::v111(){vfunc_called(this, "_ZN6S472C34v111Ev");}
void  S472C3 ::v112(){vfunc_called(this, "_ZN6S472C34v112Ev");}
void  S472C3 ::v113(){vfunc_called(this, "_ZN6S472C34v113Ev");}
void  S472C3 ::v114(){vfunc_called(this, "_ZN6S472C34v114Ev");}
S472C3 ::S472C3(){ note_ctor("S472C3", this);} // tgen

static void Test_S472C3()
{
  extern Class_Descriptor cd_S472C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S472C3, buf);
    S472C3 *dp, &lv = *(dp=new (buf) S472C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S472C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S472C3)");
    check_base_class_offset(lv, (S472C5*)(S472C4*), 0, "S472C3");
    check_base_class_offset(lv, (S472C4*), 0, "S472C3");
    check_field_offset(lv, s472c3f0, ABISELECT(188,132), "S472C3.s472c3f0");
    test_class_info(&lv, &cd_S472C3);
    dp->~S472C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS472C3(Test_S472C3, "S472C3", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN6S472C3C1Ev();
extern void _ZN6S472C3D1Ev();
Name_Map name_map_S472C3[] = {
  NSPAIR(_ZN6S472C3C1Ev),
  NSPAIR(_ZN6S472C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S472C5;
extern VTBL_ENTRY _ZTI6S472C5[];
extern  VTBL_ENTRY _ZTV6S472C5[];
extern Class_Descriptor cd_S472C4;
extern VTBL_ENTRY _ZTI6S472C4[];
extern  VTBL_ENTRY _ZTV6S472C4[];
static Base_Class bases_S472C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S472C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S472C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S472C3[];
extern void _ZN6S472C3D1Ev();
extern void _ZN6S472C3D0Ev();
extern void _ZN6S472C53v10Ev();
extern void _ZN6S472C53v11Ev();
extern void _ZN6S472C53v12Ev();
extern void _ZN6S472C53v13Ev();
extern void _ZN6S472C53v14Ev();
extern void _ZN6S472C53v15Ev();
extern void _ZN6S472C53v16Ev();
extern void _ZN6S472C53v17Ev();
extern void _ZN6S472C53v18Ev();
extern void _ZN6S472C53v19Ev();
extern void _ZN6S472C53v20Ev();
extern void _ZN6S472C53v21Ev();
extern void _ZN6S472C53v22Ev();
extern void _ZN6S472C53v23Ev();
extern void _ZN6S472C53v24Ev();
extern void _ZN6S472C53v25Ev();
extern void _ZN6S472C53v26Ev();
extern void _ZN6S472C53v27Ev();
extern void _ZN6S472C53v28Ev();
extern void _ZN6S472C53v29Ev();
extern void _ZN6S472C53v30Ev();
extern void _ZN6S472C53v31Ev();
extern void _ZN6S472C53v32Ev();
extern void _ZN6S472C53v33Ev();
extern void _ZN6S472C53v34Ev();
extern void _ZN6S472C53v35Ev();
extern void _ZN6S472C53v36Ev();
extern void _ZN6S472C53v37Ev();
extern void _ZN6S472C53v38Ev();
extern void _ZN6S472C53v39Ev();
extern void _ZN6S472C53v40Ev();
extern void _ZN6S472C53v41Ev();
extern void _ZN6S472C53v42Ev();
extern void _ZN6S472C53v43Ev();
extern void _ZN6S472C53v44Ev();
extern void _ZN6S472C53v45Ev();
extern void _ZN6S472C53v46Ev();
extern void _ZN6S472C53v47Ev();
extern void _ZN6S472C53v48Ev();
extern void _ZN6S472C53v49Ev();
extern void _ZN6S472C53v50Ev();
extern void _ZN6S472C53v51Ev();
extern void _ZN6S472C53v52Ev();
extern void _ZN6S472C53v53Ev();
extern void _ZN6S472C53v54Ev();
extern void _ZN6S472C53v55Ev();
extern void _ZN6S472C53v56Ev();
extern void _ZN6S472C53v57Ev();
extern void _ZN6S472C53v58Ev();
extern void _ZN6S472C53v59Ev();
extern void _ZN6S472C53v60Ev();
extern void _ZN6S472C53v61Ev();
extern void _ZN6S472C53v62Ev();
extern void _ZN6S472C53v63Ev();
extern void _ZN6S472C53v64Ev();
extern void _ZN6S472C53v65Ev();
extern void _ZN6S472C53v66Ev();
extern void _ZN6S472C53v67Ev();
extern void _ZN6S472C53v68Ev();
extern void _ZN6S472C53v69Ev();
extern void _ZN6S472C53v70Ev();
extern void _ZN6S472C53v71Ev();
extern void _ZN6S472C53v72Ev();
extern void _ZN6S472C53v73Ev();
extern void _ZN6S472C43v74Ev();
extern void _ZN6S472C43v75Ev();
extern void _ZN6S472C43v76Ev();
extern void _ZN6S472C43v77Ev();
extern void _ZN6S472C43v78Ev();
extern void _ZN6S472C43v79Ev();
extern void _ZN6S472C43v80Ev();
extern void _ZN6S472C43v81Ev();
extern void _ZN6S472C43v82Ev();
extern void _ZN6S472C43v83Ev();
extern void _ZN6S472C43v84Ev();
extern void _ZN6S472C43v85Ev();
extern void _ZN6S472C43v86Ev();
extern void _ZN6S472C43v87Ev();
extern void _ZN6S472C43v88Ev();
extern void _ZN6S472C43v89Ev();
extern void _ZN6S472C43v90Ev();
extern void _ZN6S472C43v91Ev();
extern void _ZN6S472C43v92Ev();
extern void _ZN6S472C43v93Ev();
extern void _ZN6S472C43v94Ev();
extern void _ZN6S472C43v95Ev();
extern void _ZN6S472C33v96Ev();
extern void _ZN6S472C33v97Ev();
extern void _ZN6S472C33v98Ev();
extern void _ZN6S472C33v99Ev();
extern void _ZN6S472C34v100Ev();
extern void _ZN6S472C34v101Ev();
extern void _ZN6S472C34v102Ev();
extern void _ZN6S472C34v103Ev();
extern void _ZN6S472C34v104Ev();
extern void _ZN6S472C34v105Ev();
extern void _ZN6S472C34v106Ev();
extern void _ZN6S472C34v107Ev();
extern void _ZN6S472C34v108Ev();
extern void _ZN6S472C34v109Ev();
extern void _ZN6S472C34v110Ev();
extern void _ZN6S472C34v111Ev();
extern void _ZN6S472C34v112Ev();
extern void _ZN6S472C34v113Ev();
extern void _ZN6S472C34v114Ev();
static  VTBL_ENTRY vtc_S472C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S472C3[0]),
  (VTBL_ENTRY)&_ZN6S472C3D1Ev,
  (VTBL_ENTRY)&_ZN6S472C3D0Ev,
  (VTBL_ENTRY)&_ZN6S472C53v10Ev,
  (VTBL_ENTRY)&_ZN6S472C53v11Ev,
  (VTBL_ENTRY)&_ZN6S472C53v12Ev,
  (VTBL_ENTRY)&_ZN6S472C53v13Ev,
  (VTBL_ENTRY)&_ZN6S472C53v14Ev,
  (VTBL_ENTRY)&_ZN6S472C53v15Ev,
  (VTBL_ENTRY)&_ZN6S472C53v16Ev,
  (VTBL_ENTRY)&_ZN6S472C53v17Ev,
  (VTBL_ENTRY)&_ZN6S472C53v18Ev,
  (VTBL_ENTRY)&_ZN6S472C53v19Ev,
  (VTBL_ENTRY)&_ZN6S472C53v20Ev,
  (VTBL_ENTRY)&_ZN6S472C53v21Ev,
  (VTBL_ENTRY)&_ZN6S472C53v22Ev,
  (VTBL_ENTRY)&_ZN6S472C53v23Ev,
  (VTBL_ENTRY)&_ZN6S472C53v24Ev,
  (VTBL_ENTRY)&_ZN6S472C53v25Ev,
  (VTBL_ENTRY)&_ZN6S472C53v26Ev,
  (VTBL_ENTRY)&_ZN6S472C53v27Ev,
  (VTBL_ENTRY)&_ZN6S472C53v28Ev,
  (VTBL_ENTRY)&_ZN6S472C53v29Ev,
  (VTBL_ENTRY)&_ZN6S472C53v30Ev,
  (VTBL_ENTRY)&_ZN6S472C53v31Ev,
  (VTBL_ENTRY)&_ZN6S472C53v32Ev,
  (VTBL_ENTRY)&_ZN6S472C53v33Ev,
  (VTBL_ENTRY)&_ZN6S472C53v34Ev,
  (VTBL_ENTRY)&_ZN6S472C53v35Ev,
  (VTBL_ENTRY)&_ZN6S472C53v36Ev,
  (VTBL_ENTRY)&_ZN6S472C53v37Ev,
  (VTBL_ENTRY)&_ZN6S472C53v38Ev,
  (VTBL_ENTRY)&_ZN6S472C53v39Ev,
  (VTBL_ENTRY)&_ZN6S472C53v40Ev,
  (VTBL_ENTRY)&_ZN6S472C53v41Ev,
  (VTBL_ENTRY)&_ZN6S472C53v42Ev,
  (VTBL_ENTRY)&_ZN6S472C53v43Ev,
  (VTBL_ENTRY)&_ZN6S472C53v44Ev,
  (VTBL_ENTRY)&_ZN6S472C53v45Ev,
  (VTBL_ENTRY)&_ZN6S472C53v46Ev,
  (VTBL_ENTRY)&_ZN6S472C53v47Ev,
  (VTBL_ENTRY)&_ZN6S472C53v48Ev,
  (VTBL_ENTRY)&_ZN6S472C53v49Ev,
  (VTBL_ENTRY)&_ZN6S472C53v50Ev,
  (VTBL_ENTRY)&_ZN6S472C53v51Ev,
  (VTBL_ENTRY)&_ZN6S472C53v52Ev,
  (VTBL_ENTRY)&_ZN6S472C53v53Ev,
  (VTBL_ENTRY)&_ZN6S472C53v54Ev,
  (VTBL_ENTRY)&_ZN6S472C53v55Ev,
  (VTBL_ENTRY)&_ZN6S472C53v56Ev,
  (VTBL_ENTRY)&_ZN6S472C53v57Ev,
  (VTBL_ENTRY)&_ZN6S472C53v58Ev,
  (VTBL_ENTRY)&_ZN6S472C53v59Ev,
  (VTBL_ENTRY)&_ZN6S472C53v60Ev,
  (VTBL_ENTRY)&_ZN6S472C53v61Ev,
  (VTBL_ENTRY)&_ZN6S472C53v62Ev,
  (VTBL_ENTRY)&_ZN6S472C53v63Ev,
  (VTBL_ENTRY)&_ZN6S472C53v64Ev,
  (VTBL_ENTRY)&_ZN6S472C53v65Ev,
  (VTBL_ENTRY)&_ZN6S472C53v66Ev,
  (VTBL_ENTRY)&_ZN6S472C53v67Ev,
  (VTBL_ENTRY)&_ZN6S472C53v68Ev,
  (VTBL_ENTRY)&_ZN6S472C53v69Ev,
  (VTBL_ENTRY)&_ZN6S472C53v70Ev,
  (VTBL_ENTRY)&_ZN6S472C53v71Ev,
  (VTBL_ENTRY)&_ZN6S472C53v72Ev,
  (VTBL_ENTRY)&_ZN6S472C53v73Ev,
  (VTBL_ENTRY)&_ZN6S472C43v74Ev,
  (VTBL_ENTRY)&_ZN6S472C43v75Ev,
  (VTBL_ENTRY)&_ZN6S472C43v76Ev,
  (VTBL_ENTRY)&_ZN6S472C43v77Ev,
  (VTBL_ENTRY)&_ZN6S472C43v78Ev,
  (VTBL_ENTRY)&_ZN6S472C43v79Ev,
  (VTBL_ENTRY)&_ZN6S472C43v80Ev,
  (VTBL_ENTRY)&_ZN6S472C43v81Ev,
  (VTBL_ENTRY)&_ZN6S472C43v82Ev,
  (VTBL_ENTRY)&_ZN6S472C43v83Ev,
  (VTBL_ENTRY)&_ZN6S472C43v84Ev,
  (VTBL_ENTRY)&_ZN6S472C43v85Ev,
  (VTBL_ENTRY)&_ZN6S472C43v86Ev,
  (VTBL_ENTRY)&_ZN6S472C43v87Ev,
  (VTBL_ENTRY)&_ZN6S472C43v88Ev,
  (VTBL_ENTRY)&_ZN6S472C43v89Ev,
  (VTBL_ENTRY)&_ZN6S472C43v90Ev,
  (VTBL_ENTRY)&_ZN6S472C43v91Ev,
  (VTBL_ENTRY)&_ZN6S472C43v92Ev,
  (VTBL_ENTRY)&_ZN6S472C43v93Ev,
  (VTBL_ENTRY)&_ZN6S472C43v94Ev,
  (VTBL_ENTRY)&_ZN6S472C43v95Ev,
  (VTBL_ENTRY)&_ZN6S472C33v96Ev,
  (VTBL_ENTRY)&_ZN6S472C33v97Ev,
  (VTBL_ENTRY)&_ZN6S472C33v98Ev,
  (VTBL_ENTRY)&_ZN6S472C33v99Ev,
  (VTBL_ENTRY)&_ZN6S472C34v100Ev,
  (VTBL_ENTRY)&_ZN6S472C34v101Ev,
  (VTBL_ENTRY)&_ZN6S472C34v102Ev,
  (VTBL_ENTRY)&_ZN6S472C34v103Ev,
  (VTBL_ENTRY)&_ZN6S472C34v104Ev,
  (VTBL_ENTRY)&_ZN6S472C34v105Ev,
  (VTBL_ENTRY)&_ZN6S472C34v106Ev,
  (VTBL_ENTRY)&_ZN6S472C34v107Ev,
  (VTBL_ENTRY)&_ZN6S472C34v108Ev,
  (VTBL_ENTRY)&_ZN6S472C34v109Ev,
  (VTBL_ENTRY)&_ZN6S472C34v110Ev,
  (VTBL_ENTRY)&_ZN6S472C34v111Ev,
  (VTBL_ENTRY)&_ZN6S472C34v112Ev,
  (VTBL_ENTRY)&_ZN6S472C34v113Ev,
  (VTBL_ENTRY)&_ZN6S472C34v114Ev,
};
extern VTBL_ENTRY _ZTI6S472C3[];
extern  VTBL_ENTRY _ZTV6S472C3[];
Class_Descriptor cd_S472C3 = {  "S472C3", // class name
  bases_S472C3, 2,
  &(vtc_S472C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI6S472C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S472C3),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S472C2  : S472C3 {
  void *s472c2f0;
  virtual  ~S472C2(); // _ZN6S472C2D1Ev
  virtual void  v115(); // _ZN6S472C24v115Ev
  virtual void  v116(); // _ZN6S472C24v116Ev
  virtual void  v117(); // _ZN6S472C24v117Ev
  virtual void  v118(); // _ZN6S472C24v118Ev
  virtual void  v119(); // _ZN6S472C24v119Ev
  virtual void  v120(); // _ZN6S472C24v120Ev
  virtual void  v121(); // _ZN6S472C24v121Ev
  virtual void  v122(); // _ZN6S472C24v122Ev
  virtual void  v123(); // _ZN6S472C24v123Ev
  S472C2(); // tgen
};
//SIG(-1 S472C2) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 FC5} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S472C2 ::~S472C2(){ note_dtor("S472C2", this);}
void  S472C2 ::v115(){vfunc_called(this, "_ZN6S472C24v115Ev");}
void  S472C2 ::v116(){vfunc_called(this, "_ZN6S472C24v116Ev");}
void  S472C2 ::v117(){vfunc_called(this, "_ZN6S472C24v117Ev");}
void  S472C2 ::v118(){vfunc_called(this, "_ZN6S472C24v118Ev");}
void  S472C2 ::v119(){vfunc_called(this, "_ZN6S472C24v119Ev");}
void  S472C2 ::v120(){vfunc_called(this, "_ZN6S472C24v120Ev");}
void  S472C2 ::v121(){vfunc_called(this, "_ZN6S472C24v121Ev");}
void  S472C2 ::v122(){vfunc_called(this, "_ZN6S472C24v122Ev");}
void  S472C2 ::v123(){vfunc_called(this, "_ZN6S472C24v123Ev");}
S472C2 ::S472C2(){ note_ctor("S472C2", this);} // tgen

static void Test_S472C2()
{
  extern Class_Descriptor cd_S472C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S472C2, buf);
    S472C2 *dp, &lv = *(dp=new (buf) S472C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S472C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S472C2)");
    check_base_class_offset(lv, (S472C5*)(S472C4*)(S472C3*), 0, "S472C2");
    check_base_class_offset(lv, (S472C4*)(S472C3*), 0, "S472C2");
    check_base_class_offset(lv, (S472C3*), 0, "S472C2");
    check_field_offset(lv, s472c2f0, ABISELECT(200,140), "S472C2.s472c2f0");
    test_class_info(&lv, &cd_S472C2);
    dp->~S472C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS472C2(Test_S472C2, "S472C2", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN6S472C2C1Ev();
extern void _ZN6S472C2D1Ev();
Name_Map name_map_S472C2[] = {
  NSPAIR(_ZN6S472C2C1Ev),
  NSPAIR(_ZN6S472C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S472C5;
extern VTBL_ENTRY _ZTI6S472C5[];
extern  VTBL_ENTRY _ZTV6S472C5[];
extern Class_Descriptor cd_S472C4;
extern VTBL_ENTRY _ZTI6S472C4[];
extern  VTBL_ENTRY _ZTV6S472C4[];
extern Class_Descriptor cd_S472C3;
extern VTBL_ENTRY _ZTI6S472C3[];
extern  VTBL_ENTRY _ZTV6S472C3[];
static Base_Class bases_S472C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S472C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S472C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S472C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S472C2[];
extern void _ZN6S472C2D1Ev();
extern void _ZN6S472C2D0Ev();
extern void _ZN6S472C53v10Ev();
extern void _ZN6S472C53v11Ev();
extern void _ZN6S472C53v12Ev();
extern void _ZN6S472C53v13Ev();
extern void _ZN6S472C53v14Ev();
extern void _ZN6S472C53v15Ev();
extern void _ZN6S472C53v16Ev();
extern void _ZN6S472C53v17Ev();
extern void _ZN6S472C53v18Ev();
extern void _ZN6S472C53v19Ev();
extern void _ZN6S472C53v20Ev();
extern void _ZN6S472C53v21Ev();
extern void _ZN6S472C53v22Ev();
extern void _ZN6S472C53v23Ev();
extern void _ZN6S472C53v24Ev();
extern void _ZN6S472C53v25Ev();
extern void _ZN6S472C53v26Ev();
extern void _ZN6S472C53v27Ev();
extern void _ZN6S472C53v28Ev();
extern void _ZN6S472C53v29Ev();
extern void _ZN6S472C53v30Ev();
extern void _ZN6S472C53v31Ev();
extern void _ZN6S472C53v32Ev();
extern void _ZN6S472C53v33Ev();
extern void _ZN6S472C53v34Ev();
extern void _ZN6S472C53v35Ev();
extern void _ZN6S472C53v36Ev();
extern void _ZN6S472C53v37Ev();
extern void _ZN6S472C53v38Ev();
extern void _ZN6S472C53v39Ev();
extern void _ZN6S472C53v40Ev();
extern void _ZN6S472C53v41Ev();
extern void _ZN6S472C53v42Ev();
extern void _ZN6S472C53v43Ev();
extern void _ZN6S472C53v44Ev();
extern void _ZN6S472C53v45Ev();
extern void _ZN6S472C53v46Ev();
extern void _ZN6S472C53v47Ev();
extern void _ZN6S472C53v48Ev();
extern void _ZN6S472C53v49Ev();
extern void _ZN6S472C53v50Ev();
extern void _ZN6S472C53v51Ev();
extern void _ZN6S472C53v52Ev();
extern void _ZN6S472C53v53Ev();
extern void _ZN6S472C53v54Ev();
extern void _ZN6S472C53v55Ev();
extern void _ZN6S472C53v56Ev();
extern void _ZN6S472C53v57Ev();
extern void _ZN6S472C53v58Ev();
extern void _ZN6S472C53v59Ev();
extern void _ZN6S472C53v60Ev();
extern void _ZN6S472C53v61Ev();
extern void _ZN6S472C53v62Ev();
extern void _ZN6S472C53v63Ev();
extern void _ZN6S472C53v64Ev();
extern void _ZN6S472C53v65Ev();
extern void _ZN6S472C53v66Ev();
extern void _ZN6S472C53v67Ev();
extern void _ZN6S472C53v68Ev();
extern void _ZN6S472C53v69Ev();
extern void _ZN6S472C53v70Ev();
extern void _ZN6S472C53v71Ev();
extern void _ZN6S472C53v72Ev();
extern void _ZN6S472C53v73Ev();
extern void _ZN6S472C43v74Ev();
extern void _ZN6S472C43v75Ev();
extern void _ZN6S472C43v76Ev();
extern void _ZN6S472C43v77Ev();
extern void _ZN6S472C43v78Ev();
extern void _ZN6S472C43v79Ev();
extern void _ZN6S472C43v80Ev();
extern void _ZN6S472C43v81Ev();
extern void _ZN6S472C43v82Ev();
extern void _ZN6S472C43v83Ev();
extern void _ZN6S472C43v84Ev();
extern void _ZN6S472C43v85Ev();
extern void _ZN6S472C43v86Ev();
extern void _ZN6S472C43v87Ev();
extern void _ZN6S472C43v88Ev();
extern void _ZN6S472C43v89Ev();
extern void _ZN6S472C43v90Ev();
extern void _ZN6S472C43v91Ev();
extern void _ZN6S472C43v92Ev();
extern void _ZN6S472C43v93Ev();
extern void _ZN6S472C43v94Ev();
extern void _ZN6S472C43v95Ev();
extern void _ZN6S472C33v96Ev();
extern void _ZN6S472C33v97Ev();
extern void _ZN6S472C33v98Ev();
extern void _ZN6S472C33v99Ev();
extern void _ZN6S472C34v100Ev();
extern void _ZN6S472C34v101Ev();
extern void _ZN6S472C34v102Ev();
extern void _ZN6S472C34v103Ev();
extern void _ZN6S472C34v104Ev();
extern void _ZN6S472C34v105Ev();
extern void _ZN6S472C34v106Ev();
extern void _ZN6S472C34v107Ev();
extern void _ZN6S472C34v108Ev();
extern void _ZN6S472C34v109Ev();
extern void _ZN6S472C34v110Ev();
extern void _ZN6S472C34v111Ev();
extern void _ZN6S472C34v112Ev();
extern void _ZN6S472C34v113Ev();
extern void _ZN6S472C34v114Ev();
extern void _ZN6S472C24v115Ev();
extern void _ZN6S472C24v116Ev();
extern void _ZN6S472C24v117Ev();
extern void _ZN6S472C24v118Ev();
extern void _ZN6S472C24v119Ev();
extern void _ZN6S472C24v120Ev();
extern void _ZN6S472C24v121Ev();
extern void _ZN6S472C24v122Ev();
extern void _ZN6S472C24v123Ev();
static  VTBL_ENTRY vtc_S472C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S472C2[0]),
  (VTBL_ENTRY)&_ZN6S472C2D1Ev,
  (VTBL_ENTRY)&_ZN6S472C2D0Ev,
  (VTBL_ENTRY)&_ZN6S472C53v10Ev,
  (VTBL_ENTRY)&_ZN6S472C53v11Ev,
  (VTBL_ENTRY)&_ZN6S472C53v12Ev,
  (VTBL_ENTRY)&_ZN6S472C53v13Ev,
  (VTBL_ENTRY)&_ZN6S472C53v14Ev,
  (VTBL_ENTRY)&_ZN6S472C53v15Ev,
  (VTBL_ENTRY)&_ZN6S472C53v16Ev,
  (VTBL_ENTRY)&_ZN6S472C53v17Ev,
  (VTBL_ENTRY)&_ZN6S472C53v18Ev,
  (VTBL_ENTRY)&_ZN6S472C53v19Ev,
  (VTBL_ENTRY)&_ZN6S472C53v20Ev,
  (VTBL_ENTRY)&_ZN6S472C53v21Ev,
  (VTBL_ENTRY)&_ZN6S472C53v22Ev,
  (VTBL_ENTRY)&_ZN6S472C53v23Ev,
  (VTBL_ENTRY)&_ZN6S472C53v24Ev,
  (VTBL_ENTRY)&_ZN6S472C53v25Ev,
  (VTBL_ENTRY)&_ZN6S472C53v26Ev,
  (VTBL_ENTRY)&_ZN6S472C53v27Ev,
  (VTBL_ENTRY)&_ZN6S472C53v28Ev,
  (VTBL_ENTRY)&_ZN6S472C53v29Ev,
  (VTBL_ENTRY)&_ZN6S472C53v30Ev,
  (VTBL_ENTRY)&_ZN6S472C53v31Ev,
  (VTBL_ENTRY)&_ZN6S472C53v32Ev,
  (VTBL_ENTRY)&_ZN6S472C53v33Ev,
  (VTBL_ENTRY)&_ZN6S472C53v34Ev,
  (VTBL_ENTRY)&_ZN6S472C53v35Ev,
  (VTBL_ENTRY)&_ZN6S472C53v36Ev,
  (VTBL_ENTRY)&_ZN6S472C53v37Ev,
  (VTBL_ENTRY)&_ZN6S472C53v38Ev,
  (VTBL_ENTRY)&_ZN6S472C53v39Ev,
  (VTBL_ENTRY)&_ZN6S472C53v40Ev,
  (VTBL_ENTRY)&_ZN6S472C53v41Ev,
  (VTBL_ENTRY)&_ZN6S472C53v42Ev,
  (VTBL_ENTRY)&_ZN6S472C53v43Ev,
  (VTBL_ENTRY)&_ZN6S472C53v44Ev,
  (VTBL_ENTRY)&_ZN6S472C53v45Ev,
  (VTBL_ENTRY)&_ZN6S472C53v46Ev,
  (VTBL_ENTRY)&_ZN6S472C53v47Ev,
  (VTBL_ENTRY)&_ZN6S472C53v48Ev,
  (VTBL_ENTRY)&_ZN6S472C53v49Ev,
  (VTBL_ENTRY)&_ZN6S472C53v50Ev,
  (VTBL_ENTRY)&_ZN6S472C53v51Ev,
  (VTBL_ENTRY)&_ZN6S472C53v52Ev,
  (VTBL_ENTRY)&_ZN6S472C53v53Ev,
  (VTBL_ENTRY)&_ZN6S472C53v54Ev,
  (VTBL_ENTRY)&_ZN6S472C53v55Ev,
  (VTBL_ENTRY)&_ZN6S472C53v56Ev,
  (VTBL_ENTRY)&_ZN6S472C53v57Ev,
  (VTBL_ENTRY)&_ZN6S472C53v58Ev,
  (VTBL_ENTRY)&_ZN6S472C53v59Ev,
  (VTBL_ENTRY)&_ZN6S472C53v60Ev,
  (VTBL_ENTRY)&_ZN6S472C53v61Ev,
  (VTBL_ENTRY)&_ZN6S472C53v62Ev,
  (VTBL_ENTRY)&_ZN6S472C53v63Ev,
  (VTBL_ENTRY)&_ZN6S472C53v64Ev,
  (VTBL_ENTRY)&_ZN6S472C53v65Ev,
  (VTBL_ENTRY)&_ZN6S472C53v66Ev,
  (VTBL_ENTRY)&_ZN6S472C53v67Ev,
  (VTBL_ENTRY)&_ZN6S472C53v68Ev,
  (VTBL_ENTRY)&_ZN6S472C53v69Ev,
  (VTBL_ENTRY)&_ZN6S472C53v70Ev,
  (VTBL_ENTRY)&_ZN6S472C53v71Ev,
  (VTBL_ENTRY)&_ZN6S472C53v72Ev,
  (VTBL_ENTRY)&_ZN6S472C53v73Ev,
  (VTBL_ENTRY)&_ZN6S472C43v74Ev,
  (VTBL_ENTRY)&_ZN6S472C43v75Ev,
  (VTBL_ENTRY)&_ZN6S472C43v76Ev,
  (VTBL_ENTRY)&_ZN6S472C43v77Ev,
  (VTBL_ENTRY)&_ZN6S472C43v78Ev,
  (VTBL_ENTRY)&_ZN6S472C43v79Ev,
  (VTBL_ENTRY)&_ZN6S472C43v80Ev,
  (VTBL_ENTRY)&_ZN6S472C43v81Ev,
  (VTBL_ENTRY)&_ZN6S472C43v82Ev,
  (VTBL_ENTRY)&_ZN6S472C43v83Ev,
  (VTBL_ENTRY)&_ZN6S472C43v84Ev,
  (VTBL_ENTRY)&_ZN6S472C43v85Ev,
  (VTBL_ENTRY)&_ZN6S472C43v86Ev,
  (VTBL_ENTRY)&_ZN6S472C43v87Ev,
  (VTBL_ENTRY)&_ZN6S472C43v88Ev,
  (VTBL_ENTRY)&_ZN6S472C43v89Ev,
  (VTBL_ENTRY)&_ZN6S472C43v90Ev,
  (VTBL_ENTRY)&_ZN6S472C43v91Ev,
  (VTBL_ENTRY)&_ZN6S472C43v92Ev,
  (VTBL_ENTRY)&_ZN6S472C43v93Ev,
  (VTBL_ENTRY)&_ZN6S472C43v94Ev,
  (VTBL_ENTRY)&_ZN6S472C43v95Ev,
  (VTBL_ENTRY)&_ZN6S472C33v96Ev,
  (VTBL_ENTRY)&_ZN6S472C33v97Ev,
  (VTBL_ENTRY)&_ZN6S472C33v98Ev,
  (VTBL_ENTRY)&_ZN6S472C33v99Ev,
  (VTBL_ENTRY)&_ZN6S472C34v100Ev,
  (VTBL_ENTRY)&_ZN6S472C34v101Ev,
  (VTBL_ENTRY)&_ZN6S472C34v102Ev,
  (VTBL_ENTRY)&_ZN6S472C34v103Ev,
  (VTBL_ENTRY)&_ZN6S472C34v104Ev,
  (VTBL_ENTRY)&_ZN6S472C34v105Ev,
  (VTBL_ENTRY)&_ZN6S472C34v106Ev,
  (VTBL_ENTRY)&_ZN6S472C34v107Ev,
  (VTBL_ENTRY)&_ZN6S472C34v108Ev,
  (VTBL_ENTRY)&_ZN6S472C34v109Ev,
  (VTBL_ENTRY)&_ZN6S472C34v110Ev,
  (VTBL_ENTRY)&_ZN6S472C34v111Ev,
  (VTBL_ENTRY)&_ZN6S472C34v112Ev,
  (VTBL_ENTRY)&_ZN6S472C34v113Ev,
  (VTBL_ENTRY)&_ZN6S472C34v114Ev,
  (VTBL_ENTRY)&_ZN6S472C24v115Ev,
  (VTBL_ENTRY)&_ZN6S472C24v116Ev,
  (VTBL_ENTRY)&_ZN6S472C24v117Ev,
  (VTBL_ENTRY)&_ZN6S472C24v118Ev,
  (VTBL_ENTRY)&_ZN6S472C24v119Ev,
  (VTBL_ENTRY)&_ZN6S472C24v120Ev,
  (VTBL_ENTRY)&_ZN6S472C24v121Ev,
  (VTBL_ENTRY)&_ZN6S472C24v122Ev,
  (VTBL_ENTRY)&_ZN6S472C24v123Ev,
};
extern VTBL_ENTRY _ZTI6S472C2[];
extern  VTBL_ENTRY _ZTV6S472C2[];
Class_Descriptor cd_S472C2 = {  "S472C2", // class name
  bases_S472C2, 3,
  &(vtc_S472C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI6S472C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S472C2),118, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S472C1  : S472C2 {
  ::S672C14_nt s472c1f0;
  virtual  ~S472C1(); // _ZN6S472C1D1Ev
  virtual void  v1(); // _ZN6S472C12v1Ev
  virtual void  v2(); // _ZN6S472C12v2Ev
  virtual void  v3(); // _ZN6S472C12v3Ev
  virtual void  v4(); // _ZN6S472C12v4Ev
  virtual void  v5(); // _ZN6S472C12v5Ev
  virtual void  v6(); // _ZN6S472C12v6Ev
  virtual void  v7(); // _ZN6S472C12v7Ev
  virtual void  v8(); // _ZN6S472C12v8Ev
  virtual void  v9(); // _ZN6S472C12v9Ev
  S472C1(); // tgen
};
//SIG(1 S472C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 FC6} vd v115 v116 v117 v118 v119 v120 v121 v122 v123 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC12{ BC13{ BC10}}}


 S472C1 ::~S472C1(){ note_dtor("S472C1", this);}
void  S472C1 ::v1(){vfunc_called(this, "_ZN6S472C12v1Ev");}
void  S472C1 ::v2(){vfunc_called(this, "_ZN6S472C12v2Ev");}
void  S472C1 ::v3(){vfunc_called(this, "_ZN6S472C12v3Ev");}
void  S472C1 ::v4(){vfunc_called(this, "_ZN6S472C12v4Ev");}
void  S472C1 ::v5(){vfunc_called(this, "_ZN6S472C12v5Ev");}
void  S472C1 ::v6(){vfunc_called(this, "_ZN6S472C12v6Ev");}
void  S472C1 ::v7(){vfunc_called(this, "_ZN6S472C12v7Ev");}
void  S472C1 ::v8(){vfunc_called(this, "_ZN6S472C12v8Ev");}
void  S472C1 ::v9(){vfunc_called(this, "_ZN6S472C12v9Ev");}
S472C1 ::S472C1(){ note_ctor("S472C1", this);} // tgen

static void Test_S472C1()
{
  extern Class_Descriptor cd_S472C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,40)];
    init_test(&cd_S472C1, buf);
    S472C1 *dp, &lv = *(dp=new (buf) S472C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,156), "sizeof(S472C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S472C1)");
    check_base_class_offset(lv, (S472C5*)(S472C4*)(S472C3*)(S472C2*), 0, "S472C1");
    check_base_class_offset(lv, (S472C4*)(S472C3*)(S472C2*), 0, "S472C1");
    check_base_class_offset(lv, (S472C3*)(S472C2*), 0, "S472C1");
    check_base_class_offset(lv, (S472C2*), 0, "S472C1");
    check_field_offset(lv, s472c1f0, ABISELECT(208,144), "S472C1.s472c1f0");
    test_class_info(&lv, &cd_S472C1);
    dp->~S472C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS472C1(Test_S472C1, "S472C1", ABISELECT(224,156));

#else // __cplusplus

extern void _ZN6S472C1C1Ev();
extern void _ZN6S472C1D1Ev();
Name_Map name_map_S472C1[] = {
  NSPAIR(_ZN6S472C1C1Ev),
  NSPAIR(_ZN6S472C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S472C5;
extern VTBL_ENTRY _ZTI6S472C5[];
extern  VTBL_ENTRY _ZTV6S472C5[];
extern Class_Descriptor cd_S472C4;
extern VTBL_ENTRY _ZTI6S472C4[];
extern  VTBL_ENTRY _ZTV6S472C4[];
extern Class_Descriptor cd_S472C3;
extern VTBL_ENTRY _ZTI6S472C3[];
extern  VTBL_ENTRY _ZTV6S472C3[];
extern Class_Descriptor cd_S472C2;
extern VTBL_ENTRY _ZTI6S472C2[];
extern  VTBL_ENTRY _ZTV6S472C2[];
static Base_Class bases_S472C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S472C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S472C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S472C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S472C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S472C1[];
extern void _ZN6S472C1D1Ev();
extern void _ZN6S472C1D0Ev();
extern void _ZN6S472C53v10Ev();
extern void _ZN6S472C53v11Ev();
extern void _ZN6S472C53v12Ev();
extern void _ZN6S472C53v13Ev();
extern void _ZN6S472C53v14Ev();
extern void _ZN6S472C53v15Ev();
extern void _ZN6S472C53v16Ev();
extern void _ZN6S472C53v17Ev();
extern void _ZN6S472C53v18Ev();
extern void _ZN6S472C53v19Ev();
extern void _ZN6S472C53v20Ev();
extern void _ZN6S472C53v21Ev();
extern void _ZN6S472C53v22Ev();
extern void _ZN6S472C53v23Ev();
extern void _ZN6S472C53v24Ev();
extern void _ZN6S472C53v25Ev();
extern void _ZN6S472C53v26Ev();
extern void _ZN6S472C53v27Ev();
extern void _ZN6S472C53v28Ev();
extern void _ZN6S472C53v29Ev();
extern void _ZN6S472C53v30Ev();
extern void _ZN6S472C53v31Ev();
extern void _ZN6S472C53v32Ev();
extern void _ZN6S472C53v33Ev();
extern void _ZN6S472C53v34Ev();
extern void _ZN6S472C53v35Ev();
extern void _ZN6S472C53v36Ev();
extern void _ZN6S472C53v37Ev();
extern void _ZN6S472C53v38Ev();
extern void _ZN6S472C53v39Ev();
extern void _ZN6S472C53v40Ev();
extern void _ZN6S472C53v41Ev();
extern void _ZN6S472C53v42Ev();
extern void _ZN6S472C53v43Ev();
extern void _ZN6S472C53v44Ev();
extern void _ZN6S472C53v45Ev();
extern void _ZN6S472C53v46Ev();
extern void _ZN6S472C53v47Ev();
extern void _ZN6S472C53v48Ev();
extern void _ZN6S472C53v49Ev();
extern void _ZN6S472C53v50Ev();
extern void _ZN6S472C53v51Ev();
extern void _ZN6S472C53v52Ev();
extern void _ZN6S472C53v53Ev();
extern void _ZN6S472C53v54Ev();
extern void _ZN6S472C53v55Ev();
extern void _ZN6S472C53v56Ev();
extern void _ZN6S472C53v57Ev();
extern void _ZN6S472C53v58Ev();
extern void _ZN6S472C53v59Ev();
extern void _ZN6S472C53v60Ev();
extern void _ZN6S472C53v61Ev();
extern void _ZN6S472C53v62Ev();
extern void _ZN6S472C53v63Ev();
extern void _ZN6S472C53v64Ev();
extern void _ZN6S472C53v65Ev();
extern void _ZN6S472C53v66Ev();
extern void _ZN6S472C53v67Ev();
extern void _ZN6S472C53v68Ev();
extern void _ZN6S472C53v69Ev();
extern void _ZN6S472C53v70Ev();
extern void _ZN6S472C53v71Ev();
extern void _ZN6S472C53v72Ev();
extern void _ZN6S472C53v73Ev();
extern void _ZN6S472C43v74Ev();
extern void _ZN6S472C43v75Ev();
extern void _ZN6S472C43v76Ev();
extern void _ZN6S472C43v77Ev();
extern void _ZN6S472C43v78Ev();
extern void _ZN6S472C43v79Ev();
extern void _ZN6S472C43v80Ev();
extern void _ZN6S472C43v81Ev();
extern void _ZN6S472C43v82Ev();
extern void _ZN6S472C43v83Ev();
extern void _ZN6S472C43v84Ev();
extern void _ZN6S472C43v85Ev();
extern void _ZN6S472C43v86Ev();
extern void _ZN6S472C43v87Ev();
extern void _ZN6S472C43v88Ev();
extern void _ZN6S472C43v89Ev();
extern void _ZN6S472C43v90Ev();
extern void _ZN6S472C43v91Ev();
extern void _ZN6S472C43v92Ev();
extern void _ZN6S472C43v93Ev();
extern void _ZN6S472C43v94Ev();
extern void _ZN6S472C43v95Ev();
extern void _ZN6S472C33v96Ev();
extern void _ZN6S472C33v97Ev();
extern void _ZN6S472C33v98Ev();
extern void _ZN6S472C33v99Ev();
extern void _ZN6S472C34v100Ev();
extern void _ZN6S472C34v101Ev();
extern void _ZN6S472C34v102Ev();
extern void _ZN6S472C34v103Ev();
extern void _ZN6S472C34v104Ev();
extern void _ZN6S472C34v105Ev();
extern void _ZN6S472C34v106Ev();
extern void _ZN6S472C34v107Ev();
extern void _ZN6S472C34v108Ev();
extern void _ZN6S472C34v109Ev();
extern void _ZN6S472C34v110Ev();
extern void _ZN6S472C34v111Ev();
extern void _ZN6S472C34v112Ev();
extern void _ZN6S472C34v113Ev();
extern void _ZN6S472C34v114Ev();
extern void _ZN6S472C24v115Ev();
extern void _ZN6S472C24v116Ev();
extern void _ZN6S472C24v117Ev();
extern void _ZN6S472C24v118Ev();
extern void _ZN6S472C24v119Ev();
extern void _ZN6S472C24v120Ev();
extern void _ZN6S472C24v121Ev();
extern void _ZN6S472C24v122Ev();
extern void _ZN6S472C24v123Ev();
extern void _ZN6S472C12v1Ev();
extern void _ZN6S472C12v2Ev();
extern void _ZN6S472C12v3Ev();
extern void _ZN6S472C12v4Ev();
extern void _ZN6S472C12v5Ev();
extern void _ZN6S472C12v6Ev();
extern void _ZN6S472C12v7Ev();
extern void _ZN6S472C12v8Ev();
extern void _ZN6S472C12v9Ev();
static  VTBL_ENTRY vtc_S472C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S472C1[0]),
  (VTBL_ENTRY)&_ZN6S472C1D1Ev,
  (VTBL_ENTRY)&_ZN6S472C1D0Ev,
  (VTBL_ENTRY)&_ZN6S472C53v10Ev,
  (VTBL_ENTRY)&_ZN6S472C53v11Ev,
  (VTBL_ENTRY)&_ZN6S472C53v12Ev,
  (VTBL_ENTRY)&_ZN6S472C53v13Ev,
  (VTBL_ENTRY)&_ZN6S472C53v14Ev,
  (VTBL_ENTRY)&_ZN6S472C53v15Ev,
  (VTBL_ENTRY)&_ZN6S472C53v16Ev,
  (VTBL_ENTRY)&_ZN6S472C53v17Ev,
  (VTBL_ENTRY)&_ZN6S472C53v18Ev,
  (VTBL_ENTRY)&_ZN6S472C53v19Ev,
  (VTBL_ENTRY)&_ZN6S472C53v20Ev,
  (VTBL_ENTRY)&_ZN6S472C53v21Ev,
  (VTBL_ENTRY)&_ZN6S472C53v22Ev,
  (VTBL_ENTRY)&_ZN6S472C53v23Ev,
  (VTBL_ENTRY)&_ZN6S472C53v24Ev,
  (VTBL_ENTRY)&_ZN6S472C53v25Ev,
  (VTBL_ENTRY)&_ZN6S472C53v26Ev,
  (VTBL_ENTRY)&_ZN6S472C53v27Ev,
  (VTBL_ENTRY)&_ZN6S472C53v28Ev,
  (VTBL_ENTRY)&_ZN6S472C53v29Ev,
  (VTBL_ENTRY)&_ZN6S472C53v30Ev,
  (VTBL_ENTRY)&_ZN6S472C53v31Ev,
  (VTBL_ENTRY)&_ZN6S472C53v32Ev,
  (VTBL_ENTRY)&_ZN6S472C53v33Ev,
  (VTBL_ENTRY)&_ZN6S472C53v34Ev,
  (VTBL_ENTRY)&_ZN6S472C53v35Ev,
  (VTBL_ENTRY)&_ZN6S472C53v36Ev,
  (VTBL_ENTRY)&_ZN6S472C53v37Ev,
  (VTBL_ENTRY)&_ZN6S472C53v38Ev,
  (VTBL_ENTRY)&_ZN6S472C53v39Ev,
  (VTBL_ENTRY)&_ZN6S472C53v40Ev,
  (VTBL_ENTRY)&_ZN6S472C53v41Ev,
  (VTBL_ENTRY)&_ZN6S472C53v42Ev,
  (VTBL_ENTRY)&_ZN6S472C53v43Ev,
  (VTBL_ENTRY)&_ZN6S472C53v44Ev,
  (VTBL_ENTRY)&_ZN6S472C53v45Ev,
  (VTBL_ENTRY)&_ZN6S472C53v46Ev,
  (VTBL_ENTRY)&_ZN6S472C53v47Ev,
  (VTBL_ENTRY)&_ZN6S472C53v48Ev,
  (VTBL_ENTRY)&_ZN6S472C53v49Ev,
  (VTBL_ENTRY)&_ZN6S472C53v50Ev,
  (VTBL_ENTRY)&_ZN6S472C53v51Ev,
  (VTBL_ENTRY)&_ZN6S472C53v52Ev,
  (VTBL_ENTRY)&_ZN6S472C53v53Ev,
  (VTBL_ENTRY)&_ZN6S472C53v54Ev,
  (VTBL_ENTRY)&_ZN6S472C53v55Ev,
  (VTBL_ENTRY)&_ZN6S472C53v56Ev,
  (VTBL_ENTRY)&_ZN6S472C53v57Ev,
  (VTBL_ENTRY)&_ZN6S472C53v58Ev,
  (VTBL_ENTRY)&_ZN6S472C53v59Ev,
  (VTBL_ENTRY)&_ZN6S472C53v60Ev,
  (VTBL_ENTRY)&_ZN6S472C53v61Ev,
  (VTBL_ENTRY)&_ZN6S472C53v62Ev,
  (VTBL_ENTRY)&_ZN6S472C53v63Ev,
  (VTBL_ENTRY)&_ZN6S472C53v64Ev,
  (VTBL_ENTRY)&_ZN6S472C53v65Ev,
  (VTBL_ENTRY)&_ZN6S472C53v66Ev,
  (VTBL_ENTRY)&_ZN6S472C53v67Ev,
  (VTBL_ENTRY)&_ZN6S472C53v68Ev,
  (VTBL_ENTRY)&_ZN6S472C53v69Ev,
  (VTBL_ENTRY)&_ZN6S472C53v70Ev,
  (VTBL_ENTRY)&_ZN6S472C53v71Ev,
  (VTBL_ENTRY)&_ZN6S472C53v72Ev,
  (VTBL_ENTRY)&_ZN6S472C53v73Ev,
  (VTBL_ENTRY)&_ZN6S472C43v74Ev,
  (VTBL_ENTRY)&_ZN6S472C43v75Ev,
  (VTBL_ENTRY)&_ZN6S472C43v76Ev,
  (VTBL_ENTRY)&_ZN6S472C43v77Ev,
  (VTBL_ENTRY)&_ZN6S472C43v78Ev,
  (VTBL_ENTRY)&_ZN6S472C43v79Ev,
  (VTBL_ENTRY)&_ZN6S472C43v80Ev,
  (VTBL_ENTRY)&_ZN6S472C43v81Ev,
  (VTBL_ENTRY)&_ZN6S472C43v82Ev,
  (VTBL_ENTRY)&_ZN6S472C43v83Ev,
  (VTBL_ENTRY)&_ZN6S472C43v84Ev,
  (VTBL_ENTRY)&_ZN6S472C43v85Ev,
  (VTBL_ENTRY)&_ZN6S472C43v86Ev,
  (VTBL_ENTRY)&_ZN6S472C43v87Ev,
  (VTBL_ENTRY)&_ZN6S472C43v88Ev,
  (VTBL_ENTRY)&_ZN6S472C43v89Ev,
  (VTBL_ENTRY)&_ZN6S472C43v90Ev,
  (VTBL_ENTRY)&_ZN6S472C43v91Ev,
  (VTBL_ENTRY)&_ZN6S472C43v92Ev,
  (VTBL_ENTRY)&_ZN6S472C43v93Ev,
  (VTBL_ENTRY)&_ZN6S472C43v94Ev,
  (VTBL_ENTRY)&_ZN6S472C43v95Ev,
  (VTBL_ENTRY)&_ZN6S472C33v96Ev,
  (VTBL_ENTRY)&_ZN6S472C33v97Ev,
  (VTBL_ENTRY)&_ZN6S472C33v98Ev,
  (VTBL_ENTRY)&_ZN6S472C33v99Ev,
  (VTBL_ENTRY)&_ZN6S472C34v100Ev,
  (VTBL_ENTRY)&_ZN6S472C34v101Ev,
  (VTBL_ENTRY)&_ZN6S472C34v102Ev,
  (VTBL_ENTRY)&_ZN6S472C34v103Ev,
  (VTBL_ENTRY)&_ZN6S472C34v104Ev,
  (VTBL_ENTRY)&_ZN6S472C34v105Ev,
  (VTBL_ENTRY)&_ZN6S472C34v106Ev,
  (VTBL_ENTRY)&_ZN6S472C34v107Ev,
  (VTBL_ENTRY)&_ZN6S472C34v108Ev,
  (VTBL_ENTRY)&_ZN6S472C34v109Ev,
  (VTBL_ENTRY)&_ZN6S472C34v110Ev,
  (VTBL_ENTRY)&_ZN6S472C34v111Ev,
  (VTBL_ENTRY)&_ZN6S472C34v112Ev,
  (VTBL_ENTRY)&_ZN6S472C34v113Ev,
  (VTBL_ENTRY)&_ZN6S472C34v114Ev,
  (VTBL_ENTRY)&_ZN6S472C24v115Ev,
  (VTBL_ENTRY)&_ZN6S472C24v116Ev,
  (VTBL_ENTRY)&_ZN6S472C24v117Ev,
  (VTBL_ENTRY)&_ZN6S472C24v118Ev,
  (VTBL_ENTRY)&_ZN6S472C24v119Ev,
  (VTBL_ENTRY)&_ZN6S472C24v120Ev,
  (VTBL_ENTRY)&_ZN6S472C24v121Ev,
  (VTBL_ENTRY)&_ZN6S472C24v122Ev,
  (VTBL_ENTRY)&_ZN6S472C24v123Ev,
  (VTBL_ENTRY)&_ZN6S472C12v1Ev,
  (VTBL_ENTRY)&_ZN6S472C12v2Ev,
  (VTBL_ENTRY)&_ZN6S472C12v3Ev,
  (VTBL_ENTRY)&_ZN6S472C12v4Ev,
  (VTBL_ENTRY)&_ZN6S472C12v5Ev,
  (VTBL_ENTRY)&_ZN6S472C12v6Ev,
  (VTBL_ENTRY)&_ZN6S472C12v7Ev,
  (VTBL_ENTRY)&_ZN6S472C12v8Ev,
  (VTBL_ENTRY)&_ZN6S472C12v9Ev,
};
extern VTBL_ENTRY _ZTI6S472C1[];
extern  VTBL_ENTRY _ZTV6S472C1[];
Class_Descriptor cd_S472C1 = {  "S472C1", // class name
  bases_S472C1, 4,
  &(vtc_S472C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,156), // object size
  NSPAIRA(_ZTI6S472C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S472C1),127, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S707C5  {
  int s707c5f0;
  __tsi64 s707c5f1;
  void *s707c5f2[4];
  int s707c5f3[2];
  void *s707c5f4;
  ::S473C6_nt s707c5f5;
  void *s707c5f6[2];
  virtual  ~S707C5(); // _ZN6S707C5D1Ev
  virtual void  v9(); // _ZN6S707C52v9Ev
  virtual void  v10(); // _ZN6S707C53v10Ev
  virtual void  v11(); // _ZN6S707C53v11Ev
  virtual void  v12(); // _ZN6S707C53v12Ev
  virtual void  v13(); // _ZN6S707C53v13Ev
  virtual void  v14(); // _ZN6S707C53v14Ev
  virtual void  v15(); // _ZN6S707C53v15Ev
  virtual void  v16(); // _ZN6S707C53v16Ev
  virtual void  v17(); // _ZN6S707C53v17Ev
  virtual void  v18(); // _ZN6S707C53v18Ev
  virtual void  v19(); // _ZN6S707C53v19Ev
  virtual void  v20(); // _ZN6S707C53v20Ev
  virtual void  v21(); // _ZN6S707C53v21Ev
  virtual void  v22(); // _ZN6S707C53v22Ev
  virtual void  v23(); // _ZN6S707C53v23Ev
  virtual void  v24(); // _ZN6S707C53v24Ev
  virtual void  v25(); // _ZN6S707C53v25Ev
  virtual void  v26(); // _ZN6S707C53v26Ev
  virtual void  v27(); // _ZN6S707C53v27Ev
  virtual void  v28(); // _ZN6S707C53v28Ev
  virtual void  v29(); // _ZN6S707C53v29Ev
  virtual void  v30(); // _ZN6S707C53v30Ev
  virtual void  v31(); // _ZN6S707C53v31Ev
  virtual void  v32(); // _ZN6S707C53v32Ev
  virtual void  v33(); // _ZN6S707C53v33Ev
  virtual void  v34(); // _ZN6S707C53v34Ev
  virtual void  v35(); // _ZN6S707C53v35Ev
  virtual void  v36(); // _ZN6S707C53v36Ev
  virtual void  v37(); // _ZN6S707C53v37Ev
  virtual void  v38(); // _ZN6S707C53v38Ev
  virtual void  v39(); // _ZN6S707C53v39Ev
  virtual void  v40(); // _ZN6S707C53v40Ev
  virtual void  v41(); // _ZN6S707C53v41Ev
  virtual void  v42(); // _ZN6S707C53v42Ev
  virtual void  v43(); // _ZN6S707C53v43Ev
  virtual void  v44(); // _ZN6S707C53v44Ev
  virtual void  v45(); // _ZN6S707C53v45Ev
  virtual void  v46(); // _ZN6S707C53v46Ev
  virtual void  v47(); // _ZN6S707C53v47Ev
  virtual void  v48(); // _ZN6S707C53v48Ev
  virtual void  v49(); // _ZN6S707C53v49Ev
  virtual void  v50(); // _ZN6S707C53v50Ev
  virtual void  v51(); // _ZN6S707C53v51Ev
  virtual void  v52(); // _ZN6S707C53v52Ev
  virtual void  v53(); // _ZN6S707C53v53Ev
  virtual void  v54(); // _ZN6S707C53v54Ev
  virtual void  v55(); // _ZN6S707C53v55Ev
  virtual void  v56(); // _ZN6S707C53v56Ev
  virtual void  v57(); // _ZN6S707C53v57Ev
  virtual void  v58(); // _ZN6S707C53v58Ev
  virtual void  v59(); // _ZN6S707C53v59Ev
  virtual void  v60(); // _ZN6S707C53v60Ev
  virtual void  v61(); // _ZN6S707C53v61Ev
  virtual void  v62(); // _ZN6S707C53v62Ev
  virtual void  v63(); // _ZN6S707C53v63Ev
  virtual void  v64(); // _ZN6S707C53v64Ev
  virtual void  v65(); // _ZN6S707C53v65Ev
  virtual void  v66(); // _ZN6S707C53v66Ev
  virtual void  v67(); // _ZN6S707C53v67Ev
  virtual void  v68(); // _ZN6S707C53v68Ev
  virtual void  v69(); // _ZN6S707C53v69Ev
  virtual void  v70(); // _ZN6S707C53v70Ev
  virtual void  v71(); // _ZN6S707C53v71Ev
  virtual void  v72(); // _ZN6S707C53v72Ev
  S707C5(); // tgen
};
//SIG(-1 S707C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S707C5 ::~S707C5(){ note_dtor("S707C5", this);}
void  S707C5 ::v9(){vfunc_called(this, "_ZN6S707C52v9Ev");}
void  S707C5 ::v10(){vfunc_called(this, "_ZN6S707C53v10Ev");}
void  S707C5 ::v11(){vfunc_called(this, "_ZN6S707C53v11Ev");}
void  S707C5 ::v12(){vfunc_called(this, "_ZN6S707C53v12Ev");}
void  S707C5 ::v13(){vfunc_called(this, "_ZN6S707C53v13Ev");}
void  S707C5 ::v14(){vfunc_called(this, "_ZN6S707C53v14Ev");}
void  S707C5 ::v15(){vfunc_called(this, "_ZN6S707C53v15Ev");}
void  S707C5 ::v16(){vfunc_called(this, "_ZN6S707C53v16Ev");}
void  S707C5 ::v17(){vfunc_called(this, "_ZN6S707C53v17Ev");}
void  S707C5 ::v18(){vfunc_called(this, "_ZN6S707C53v18Ev");}
void  S707C5 ::v19(){vfunc_called(this, "_ZN6S707C53v19Ev");}
void  S707C5 ::v20(){vfunc_called(this, "_ZN6S707C53v20Ev");}
void  S707C5 ::v21(){vfunc_called(this, "_ZN6S707C53v21Ev");}
void  S707C5 ::v22(){vfunc_called(this, "_ZN6S707C53v22Ev");}
void  S707C5 ::v23(){vfunc_called(this, "_ZN6S707C53v23Ev");}
void  S707C5 ::v24(){vfunc_called(this, "_ZN6S707C53v24Ev");}
void  S707C5 ::v25(){vfunc_called(this, "_ZN6S707C53v25Ev");}
void  S707C5 ::v26(){vfunc_called(this, "_ZN6S707C53v26Ev");}
void  S707C5 ::v27(){vfunc_called(this, "_ZN6S707C53v27Ev");}
void  S707C5 ::v28(){vfunc_called(this, "_ZN6S707C53v28Ev");}
void  S707C5 ::v29(){vfunc_called(this, "_ZN6S707C53v29Ev");}
void  S707C5 ::v30(){vfunc_called(this, "_ZN6S707C53v30Ev");}
void  S707C5 ::v31(){vfunc_called(this, "_ZN6S707C53v31Ev");}
void  S707C5 ::v32(){vfunc_called(this, "_ZN6S707C53v32Ev");}
void  S707C5 ::v33(){vfunc_called(this, "_ZN6S707C53v33Ev");}
void  S707C5 ::v34(){vfunc_called(this, "_ZN6S707C53v34Ev");}
void  S707C5 ::v35(){vfunc_called(this, "_ZN6S707C53v35Ev");}
void  S707C5 ::v36(){vfunc_called(this, "_ZN6S707C53v36Ev");}
void  S707C5 ::v37(){vfunc_called(this, "_ZN6S707C53v37Ev");}
void  S707C5 ::v38(){vfunc_called(this, "_ZN6S707C53v38Ev");}
void  S707C5 ::v39(){vfunc_called(this, "_ZN6S707C53v39Ev");}
void  S707C5 ::v40(){vfunc_called(this, "_ZN6S707C53v40Ev");}
void  S707C5 ::v41(){vfunc_called(this, "_ZN6S707C53v41Ev");}
void  S707C5 ::v42(){vfunc_called(this, "_ZN6S707C53v42Ev");}
void  S707C5 ::v43(){vfunc_called(this, "_ZN6S707C53v43Ev");}
void  S707C5 ::v44(){vfunc_called(this, "_ZN6S707C53v44Ev");}
void  S707C5 ::v45(){vfunc_called(this, "_ZN6S707C53v45Ev");}
void  S707C5 ::v46(){vfunc_called(this, "_ZN6S707C53v46Ev");}
void  S707C5 ::v47(){vfunc_called(this, "_ZN6S707C53v47Ev");}
void  S707C5 ::v48(){vfunc_called(this, "_ZN6S707C53v48Ev");}
void  S707C5 ::v49(){vfunc_called(this, "_ZN6S707C53v49Ev");}
void  S707C5 ::v50(){vfunc_called(this, "_ZN6S707C53v50Ev");}
void  S707C5 ::v51(){vfunc_called(this, "_ZN6S707C53v51Ev");}
void  S707C5 ::v52(){vfunc_called(this, "_ZN6S707C53v52Ev");}
void  S707C5 ::v53(){vfunc_called(this, "_ZN6S707C53v53Ev");}
void  S707C5 ::v54(){vfunc_called(this, "_ZN6S707C53v54Ev");}
void  S707C5 ::v55(){vfunc_called(this, "_ZN6S707C53v55Ev");}
void  S707C5 ::v56(){vfunc_called(this, "_ZN6S707C53v56Ev");}
void  S707C5 ::v57(){vfunc_called(this, "_ZN6S707C53v57Ev");}
void  S707C5 ::v58(){vfunc_called(this, "_ZN6S707C53v58Ev");}
void  S707C5 ::v59(){vfunc_called(this, "_ZN6S707C53v59Ev");}
void  S707C5 ::v60(){vfunc_called(this, "_ZN6S707C53v60Ev");}
void  S707C5 ::v61(){vfunc_called(this, "_ZN6S707C53v61Ev");}
void  S707C5 ::v62(){vfunc_called(this, "_ZN6S707C53v62Ev");}
void  S707C5 ::v63(){vfunc_called(this, "_ZN6S707C53v63Ev");}
void  S707C5 ::v64(){vfunc_called(this, "_ZN6S707C53v64Ev");}
void  S707C5 ::v65(){vfunc_called(this, "_ZN6S707C53v65Ev");}
void  S707C5 ::v66(){vfunc_called(this, "_ZN6S707C53v66Ev");}
void  S707C5 ::v67(){vfunc_called(this, "_ZN6S707C53v67Ev");}
void  S707C5 ::v68(){vfunc_called(this, "_ZN6S707C53v68Ev");}
void  S707C5 ::v69(){vfunc_called(this, "_ZN6S707C53v69Ev");}
void  S707C5 ::v70(){vfunc_called(this, "_ZN6S707C53v70Ev");}
void  S707C5 ::v71(){vfunc_called(this, "_ZN6S707C53v71Ev");}
void  S707C5 ::v72(){vfunc_called(this, "_ZN6S707C53v72Ev");}
S707C5 ::S707C5(){ note_ctor("S707C5", this);} // tgen

static void Test_S707C5()
{
  extern Class_Descriptor cd_S707C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S707C5, buf);
    S707C5 *dp, &lv = *(dp=new (buf) S707C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S707C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S707C5)");
    check_field_offset(lv, s707c5f0, ABISELECT(8,4), "S707C5.s707c5f0");
    check_field_offset(lv, s707c5f1, ABISELECT(16,8), "S707C5.s707c5f1");
    check_field_offset(lv, s707c5f2, ABISELECT(24,16), "S707C5.s707c5f2");
    check_field_offset(lv, s707c5f3, ABISELECT(56,32), "S707C5.s707c5f3");
    check_field_offset(lv, s707c5f4, ABISELECT(64,40), "S707C5.s707c5f4");
    check_field_offset(lv, s707c5f5, ABISELECT(72,44), "S707C5.s707c5f5");
    check_field_offset(lv, s707c5f6, ABISELECT(80,52), "S707C5.s707c5f6");
    test_class_info(&lv, &cd_S707C5);
    dp->~S707C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS707C5(Test_S707C5, "S707C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S707C5C1Ev();
extern void _ZN6S707C5D1Ev();
Name_Map name_map_S707C5[] = {
  NSPAIR(_ZN6S707C5C1Ev),
  NSPAIR(_ZN6S707C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S707C5[];
extern void _ZN6S707C5D1Ev();
extern void _ZN6S707C5D0Ev();
extern void _ZN6S707C52v9Ev();
extern void _ZN6S707C53v10Ev();
extern void _ZN6S707C53v11Ev();
extern void _ZN6S707C53v12Ev();
extern void _ZN6S707C53v13Ev();
extern void _ZN6S707C53v14Ev();
extern void _ZN6S707C53v15Ev();
extern void _ZN6S707C53v16Ev();
extern void _ZN6S707C53v17Ev();
extern void _ZN6S707C53v18Ev();
extern void _ZN6S707C53v19Ev();
extern void _ZN6S707C53v20Ev();
extern void _ZN6S707C53v21Ev();
extern void _ZN6S707C53v22Ev();
extern void _ZN6S707C53v23Ev();
extern void _ZN6S707C53v24Ev();
extern void _ZN6S707C53v25Ev();
extern void _ZN6S707C53v26Ev();
extern void _ZN6S707C53v27Ev();
extern void _ZN6S707C53v28Ev();
extern void _ZN6S707C53v29Ev();
extern void _ZN6S707C53v30Ev();
extern void _ZN6S707C53v31Ev();
extern void _ZN6S707C53v32Ev();
extern void _ZN6S707C53v33Ev();
extern void _ZN6S707C53v34Ev();
extern void _ZN6S707C53v35Ev();
extern void _ZN6S707C53v36Ev();
extern void _ZN6S707C53v37Ev();
extern void _ZN6S707C53v38Ev();
extern void _ZN6S707C53v39Ev();
extern void _ZN6S707C53v40Ev();
extern void _ZN6S707C53v41Ev();
extern void _ZN6S707C53v42Ev();
extern void _ZN6S707C53v43Ev();
extern void _ZN6S707C53v44Ev();
extern void _ZN6S707C53v45Ev();
extern void _ZN6S707C53v46Ev();
extern void _ZN6S707C53v47Ev();
extern void _ZN6S707C53v48Ev();
extern void _ZN6S707C53v49Ev();
extern void _ZN6S707C53v50Ev();
extern void _ZN6S707C53v51Ev();
extern void _ZN6S707C53v52Ev();
extern void _ZN6S707C53v53Ev();
extern void _ZN6S707C53v54Ev();
extern void _ZN6S707C53v55Ev();
extern void _ZN6S707C53v56Ev();
extern void _ZN6S707C53v57Ev();
extern void _ZN6S707C53v58Ev();
extern void _ZN6S707C53v59Ev();
extern void _ZN6S707C53v60Ev();
extern void _ZN6S707C53v61Ev();
extern void _ZN6S707C53v62Ev();
extern void _ZN6S707C53v63Ev();
extern void _ZN6S707C53v64Ev();
extern void _ZN6S707C53v65Ev();
extern void _ZN6S707C53v66Ev();
extern void _ZN6S707C53v67Ev();
extern void _ZN6S707C53v68Ev();
extern void _ZN6S707C53v69Ev();
extern void _ZN6S707C53v70Ev();
extern void _ZN6S707C53v71Ev();
extern void _ZN6S707C53v72Ev();
static  VTBL_ENTRY vtc_S707C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S707C5[0]),
  (VTBL_ENTRY)&_ZN6S707C5D1Ev,
  (VTBL_ENTRY)&_ZN6S707C5D0Ev,
  (VTBL_ENTRY)&_ZN6S707C52v9Ev,
  (VTBL_ENTRY)&_ZN6S707C53v10Ev,
  (VTBL_ENTRY)&_ZN6S707C53v11Ev,
  (VTBL_ENTRY)&_ZN6S707C53v12Ev,
  (VTBL_ENTRY)&_ZN6S707C53v13Ev,
  (VTBL_ENTRY)&_ZN6S707C53v14Ev,
  (VTBL_ENTRY)&_ZN6S707C53v15Ev,
  (VTBL_ENTRY)&_ZN6S707C53v16Ev,
  (VTBL_ENTRY)&_ZN6S707C53v17Ev,
  (VTBL_ENTRY)&_ZN6S707C53v18Ev,
  (VTBL_ENTRY)&_ZN6S707C53v19Ev,
  (VTBL_ENTRY)&_ZN6S707C53v20Ev,
  (VTBL_ENTRY)&_ZN6S707C53v21Ev,
  (VTBL_ENTRY)&_ZN6S707C53v22Ev,
  (VTBL_ENTRY)&_ZN6S707C53v23Ev,
  (VTBL_ENTRY)&_ZN6S707C53v24Ev,
  (VTBL_ENTRY)&_ZN6S707C53v25Ev,
  (VTBL_ENTRY)&_ZN6S707C53v26Ev,
  (VTBL_ENTRY)&_ZN6S707C53v27Ev,
  (VTBL_ENTRY)&_ZN6S707C53v28Ev,
  (VTBL_ENTRY)&_ZN6S707C53v29Ev,
  (VTBL_ENTRY)&_ZN6S707C53v30Ev,
  (VTBL_ENTRY)&_ZN6S707C53v31Ev,
  (VTBL_ENTRY)&_ZN6S707C53v32Ev,
  (VTBL_ENTRY)&_ZN6S707C53v33Ev,
  (VTBL_ENTRY)&_ZN6S707C53v34Ev,
  (VTBL_ENTRY)&_ZN6S707C53v35Ev,
  (VTBL_ENTRY)&_ZN6S707C53v36Ev,
  (VTBL_ENTRY)&_ZN6S707C53v37Ev,
  (VTBL_ENTRY)&_ZN6S707C53v38Ev,
  (VTBL_ENTRY)&_ZN6S707C53v39Ev,
  (VTBL_ENTRY)&_ZN6S707C53v40Ev,
  (VTBL_ENTRY)&_ZN6S707C53v41Ev,
  (VTBL_ENTRY)&_ZN6S707C53v42Ev,
  (VTBL_ENTRY)&_ZN6S707C53v43Ev,
  (VTBL_ENTRY)&_ZN6S707C53v44Ev,
  (VTBL_ENTRY)&_ZN6S707C53v45Ev,
  (VTBL_ENTRY)&_ZN6S707C53v46Ev,
  (VTBL_ENTRY)&_ZN6S707C53v47Ev,
  (VTBL_ENTRY)&_ZN6S707C53v48Ev,
  (VTBL_ENTRY)&_ZN6S707C53v49Ev,
  (VTBL_ENTRY)&_ZN6S707C53v50Ev,
  (VTBL_ENTRY)&_ZN6S707C53v51Ev,
  (VTBL_ENTRY)&_ZN6S707C53v52Ev,
  (VTBL_ENTRY)&_ZN6S707C53v53Ev,
  (VTBL_ENTRY)&_ZN6S707C53v54Ev,
  (VTBL_ENTRY)&_ZN6S707C53v55Ev,
  (VTBL_ENTRY)&_ZN6S707C53v56Ev,
  (VTBL_ENTRY)&_ZN6S707C53v57Ev,
  (VTBL_ENTRY)&_ZN6S707C53v58Ev,
  (VTBL_ENTRY)&_ZN6S707C53v59Ev,
  (VTBL_ENTRY)&_ZN6S707C53v60Ev,
  (VTBL_ENTRY)&_ZN6S707C53v61Ev,
  (VTBL_ENTRY)&_ZN6S707C53v62Ev,
  (VTBL_ENTRY)&_ZN6S707C53v63Ev,
  (VTBL_ENTRY)&_ZN6S707C53v64Ev,
  (VTBL_ENTRY)&_ZN6S707C53v65Ev,
  (VTBL_ENTRY)&_ZN6S707C53v66Ev,
  (VTBL_ENTRY)&_ZN6S707C53v67Ev,
  (VTBL_ENTRY)&_ZN6S707C53v68Ev,
  (VTBL_ENTRY)&_ZN6S707C53v69Ev,
  (VTBL_ENTRY)&_ZN6S707C53v70Ev,
  (VTBL_ENTRY)&_ZN6S707C53v71Ev,
  (VTBL_ENTRY)&_ZN6S707C53v72Ev,
};
extern VTBL_ENTRY _ZTI6S707C5[];
extern  VTBL_ENTRY _ZTV6S707C5[];
Class_Descriptor cd_S707C5 = {  "S707C5", // class name
  0,0,//no base classes
  &(vtc_S707C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S707C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S707C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S707C4  : S707C5 {
  int s707c4f0[2];
  void *s707c4f1;
  int s707c4f2[2];
  ::S473C7_nt s707c4f3;
  ::S473C7_nt s707c4f4;
  ::S21925C42 s707c4f5;
  ::S473C7_nt s707c4f6;
  unsigned int s707c4f7:1;
  unsigned int s707c4f8:1;
  unsigned int s707c4f9:1;
  unsigned int s707c4f10:1;
  unsigned int s707c4f11:1;
  int s707c4f12[2];
  virtual  ~S707C4(); // _ZN6S707C4D1Ev
  virtual void  v73(); // _ZN6S707C43v73Ev
  virtual void  v74(); // _ZN6S707C43v74Ev
  virtual void  v75(); // _ZN6S707C43v75Ev
  virtual void  v76(); // _ZN6S707C43v76Ev
  virtual void  v77(); // _ZN6S707C43v77Ev
  virtual void  v78(); // _ZN6S707C43v78Ev
  virtual void  v79(); // _ZN6S707C43v79Ev
  virtual void  v80(); // _ZN6S707C43v80Ev
  virtual void  v81(); // _ZN6S707C43v81Ev
  virtual void  v82(); // _ZN6S707C43v82Ev
  virtual void  v83(); // _ZN6S707C43v83Ev
  virtual void  v84(); // _ZN6S707C43v84Ev
  virtual void  v85(); // _ZN6S707C43v85Ev
  virtual void  v86(); // _ZN6S707C43v86Ev
  virtual void  v87(); // _ZN6S707C43v87Ev
  virtual void  v88(); // _ZN6S707C43v88Ev
  virtual void  v89(); // _ZN6S707C43v89Ev
  virtual void  v90(); // _ZN6S707C43v90Ev
  virtual void  v91(); // _ZN6S707C43v91Ev
  virtual void  v92(); // _ZN6S707C43v92Ev
  virtual void  v93(); // _ZN6S707C43v93Ev
  virtual void  v94(); // _ZN6S707C43v94Ev
  S707C4(); // tgen
};
//SIG(-1 S707C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S707C4 ::~S707C4(){ note_dtor("S707C4", this);}
void  S707C4 ::v73(){vfunc_called(this, "_ZN6S707C43v73Ev");}
void  S707C4 ::v74(){vfunc_called(this, "_ZN6S707C43v74Ev");}
void  S707C4 ::v75(){vfunc_called(this, "_ZN6S707C43v75Ev");}
void  S707C4 ::v76(){vfunc_called(this, "_ZN6S707C43v76Ev");}
void  S707C4 ::v77(){vfunc_called(this, "_ZN6S707C43v77Ev");}
void  S707C4 ::v78(){vfunc_called(this, "_ZN6S707C43v78Ev");}
void  S707C4 ::v79(){vfunc_called(this, "_ZN6S707C43v79Ev");}
void  S707C4 ::v80(){vfunc_called(this, "_ZN6S707C43v80Ev");}
void  S707C4 ::v81(){vfunc_called(this, "_ZN6S707C43v81Ev");}
void  S707C4 ::v82(){vfunc_called(this, "_ZN6S707C43v82Ev");}
void  S707C4 ::v83(){vfunc_called(this, "_ZN6S707C43v83Ev");}
void  S707C4 ::v84(){vfunc_called(this, "_ZN6S707C43v84Ev");}
void  S707C4 ::v85(){vfunc_called(this, "_ZN6S707C43v85Ev");}
void  S707C4 ::v86(){vfunc_called(this, "_ZN6S707C43v86Ev");}
void  S707C4 ::v87(){vfunc_called(this, "_ZN6S707C43v87Ev");}
void  S707C4 ::v88(){vfunc_called(this, "_ZN6S707C43v88Ev");}
void  S707C4 ::v89(){vfunc_called(this, "_ZN6S707C43v89Ev");}
void  S707C4 ::v90(){vfunc_called(this, "_ZN6S707C43v90Ev");}
void  S707C4 ::v91(){vfunc_called(this, "_ZN6S707C43v91Ev");}
void  S707C4 ::v92(){vfunc_called(this, "_ZN6S707C43v92Ev");}
void  S707C4 ::v93(){vfunc_called(this, "_ZN6S707C43v93Ev");}
void  S707C4 ::v94(){vfunc_called(this, "_ZN6S707C43v94Ev");}
S707C4 ::S707C4(){ note_ctor("S707C4", this);} // tgen

static void Test_S707C4()
{
  extern Class_Descriptor cd_S707C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S707C4, buf);
    S707C4 *dp, &lv = *(dp=new (buf) S707C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S707C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S707C4)");
    check_base_class_offset(lv, (S707C5*), 0, "S707C4");
    check_field_offset(lv, s707c4f0, ABISELECT(96,60), "S707C4.s707c4f0");
    check_field_offset(lv, s707c4f1, ABISELECT(104,68), "S707C4.s707c4f1");
    check_field_offset(lv, s707c4f2, ABISELECT(112,72), "S707C4.s707c4f2");
    check_field_offset(lv, s707c4f3, ABISELECT(120,80), "S707C4.s707c4f3");
    check_field_offset(lv, s707c4f4, ABISELECT(136,92), "S707C4.s707c4f4");
    check_field_offset(lv, s707c4f5, ABISELECT(152,104), "S707C4.s707c4f5");
    check_field_offset(lv, s707c4f6, ABISELECT(160,108), "S707C4.s707c4f6");
    set_bf_and_test(lv, s707c4f7, ABISELECT(176,120), 0, 1, 1, "S707C4");
    set_bf_and_test(lv, s707c4f8, ABISELECT(176,120), 1, 1, 1, "S707C4");
    set_bf_and_test(lv, s707c4f9, ABISELECT(176,120), 2, 1, 1, "S707C4");
    set_bf_and_test(lv, s707c4f10, ABISELECT(176,120), 3, 1, 1, "S707C4");
    set_bf_and_test(lv, s707c4f11, ABISELECT(176,120), 4, 1, 1, "S707C4");
    check_field_offset(lv, s707c4f12, ABISELECT(180,124), "S707C4.s707c4f12");
    test_class_info(&lv, &cd_S707C4);
    dp->~S707C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS707C4(Test_S707C4, "S707C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S707C4C1Ev();
extern void _ZN6S707C4D1Ev();
Name_Map name_map_S707C4[] = {
  NSPAIR(_ZN6S707C4C1Ev),
  NSPAIR(_ZN6S707C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S707C5;
extern VTBL_ENTRY _ZTI6S707C5[];
extern  VTBL_ENTRY _ZTV6S707C5[];
static Base_Class bases_S707C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S707C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S707C4[];
extern void _ZN6S707C4D1Ev();
extern void _ZN6S707C4D0Ev();
extern void _ZN6S707C52v9Ev();
extern void _ZN6S707C53v10Ev();
extern void _ZN6S707C53v11Ev();
extern void _ZN6S707C53v12Ev();
extern void _ZN6S707C53v13Ev();
extern void _ZN6S707C53v14Ev();
extern void _ZN6S707C53v15Ev();
extern void _ZN6S707C53v16Ev();
extern void _ZN6S707C53v17Ev();
extern void _ZN6S707C53v18Ev();
extern void _ZN6S707C53v19Ev();
extern void _ZN6S707C53v20Ev();
extern void _ZN6S707C53v21Ev();
extern void _ZN6S707C53v22Ev();
extern void _ZN6S707C53v23Ev();
extern void _ZN6S707C53v24Ev();
extern void _ZN6S707C53v25Ev();
extern void _ZN6S707C53v26Ev();
extern void _ZN6S707C53v27Ev();
extern void _ZN6S707C53v28Ev();
extern void _ZN6S707C53v29Ev();
extern void _ZN6S707C53v30Ev();
extern void _ZN6S707C53v31Ev();
extern void _ZN6S707C53v32Ev();
extern void _ZN6S707C53v33Ev();
extern void _ZN6S707C53v34Ev();
extern void _ZN6S707C53v35Ev();
extern void _ZN6S707C53v36Ev();
extern void _ZN6S707C53v37Ev();
extern void _ZN6S707C53v38Ev();
extern void _ZN6S707C53v39Ev();
extern void _ZN6S707C53v40Ev();
extern void _ZN6S707C53v41Ev();
extern void _ZN6S707C53v42Ev();
extern void _ZN6S707C53v43Ev();
extern void _ZN6S707C53v44Ev();
extern void _ZN6S707C53v45Ev();
extern void _ZN6S707C53v46Ev();
extern void _ZN6S707C53v47Ev();
extern void _ZN6S707C53v48Ev();
extern void _ZN6S707C53v49Ev();
extern void _ZN6S707C53v50Ev();
extern void _ZN6S707C53v51Ev();
extern void _ZN6S707C53v52Ev();
extern void _ZN6S707C53v53Ev();
extern void _ZN6S707C53v54Ev();
extern void _ZN6S707C53v55Ev();
extern void _ZN6S707C53v56Ev();
extern void _ZN6S707C53v57Ev();
extern void _ZN6S707C53v58Ev();
extern void _ZN6S707C53v59Ev();
extern void _ZN6S707C53v60Ev();
extern void _ZN6S707C53v61Ev();
extern void _ZN6S707C53v62Ev();
extern void _ZN6S707C53v63Ev();
extern void _ZN6S707C53v64Ev();
extern void _ZN6S707C53v65Ev();
extern void _ZN6S707C53v66Ev();
extern void _ZN6S707C53v67Ev();
extern void _ZN6S707C53v68Ev();
extern void _ZN6S707C53v69Ev();
extern void _ZN6S707C53v70Ev();
extern void _ZN6S707C53v71Ev();
extern void _ZN6S707C53v72Ev();
extern void _ZN6S707C43v73Ev();
extern void _ZN6S707C43v74Ev();
extern void _ZN6S707C43v75Ev();
extern void _ZN6S707C43v76Ev();
extern void _ZN6S707C43v77Ev();
extern void _ZN6S707C43v78Ev();
extern void _ZN6S707C43v79Ev();
extern void _ZN6S707C43v80Ev();
extern void _ZN6S707C43v81Ev();
extern void _ZN6S707C43v82Ev();
extern void _ZN6S707C43v83Ev();
extern void _ZN6S707C43v84Ev();
extern void _ZN6S707C43v85Ev();
extern void _ZN6S707C43v86Ev();
extern void _ZN6S707C43v87Ev();
extern void _ZN6S707C43v88Ev();
extern void _ZN6S707C43v89Ev();
extern void _ZN6S707C43v90Ev();
extern void _ZN6S707C43v91Ev();
extern void _ZN6S707C43v92Ev();
extern void _ZN6S707C43v93Ev();
extern void _ZN6S707C43v94Ev();
static  VTBL_ENTRY vtc_S707C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S707C4[0]),
  (VTBL_ENTRY)&_ZN6S707C4D1Ev,
  (VTBL_ENTRY)&_ZN6S707C4D0Ev,
  (VTBL_ENTRY)&_ZN6S707C52v9Ev,
  (VTBL_ENTRY)&_ZN6S707C53v10Ev,
  (VTBL_ENTRY)&_ZN6S707C53v11Ev,
  (VTBL_ENTRY)&_ZN6S707C53v12Ev,
  (VTBL_ENTRY)&_ZN6S707C53v13Ev,
  (VTBL_ENTRY)&_ZN6S707C53v14Ev,
  (VTBL_ENTRY)&_ZN6S707C53v15Ev,
  (VTBL_ENTRY)&_ZN6S707C53v16Ev,
  (VTBL_ENTRY)&_ZN6S707C53v17Ev,
  (VTBL_ENTRY)&_ZN6S707C53v18Ev,
  (VTBL_ENTRY)&_ZN6S707C53v19Ev,
  (VTBL_ENTRY)&_ZN6S707C53v20Ev,
  (VTBL_ENTRY)&_ZN6S707C53v21Ev,
  (VTBL_ENTRY)&_ZN6S707C53v22Ev,
  (VTBL_ENTRY)&_ZN6S707C53v23Ev,
  (VTBL_ENTRY)&_ZN6S707C53v24Ev,
  (VTBL_ENTRY)&_ZN6S707C53v25Ev,
  (VTBL_ENTRY)&_ZN6S707C53v26Ev,
  (VTBL_ENTRY)&_ZN6S707C53v27Ev,
  (VTBL_ENTRY)&_ZN6S707C53v28Ev,
  (VTBL_ENTRY)&_ZN6S707C53v29Ev,
  (VTBL_ENTRY)&_ZN6S707C53v30Ev,
  (VTBL_ENTRY)&_ZN6S707C53v31Ev,
  (VTBL_ENTRY)&_ZN6S707C53v32Ev,
  (VTBL_ENTRY)&_ZN6S707C53v33Ev,
  (VTBL_ENTRY)&_ZN6S707C53v34Ev,
  (VTBL_ENTRY)&_ZN6S707C53v35Ev,
  (VTBL_ENTRY)&_ZN6S707C53v36Ev,
  (VTBL_ENTRY)&_ZN6S707C53v37Ev,
  (VTBL_ENTRY)&_ZN6S707C53v38Ev,
  (VTBL_ENTRY)&_ZN6S707C53v39Ev,
  (VTBL_ENTRY)&_ZN6S707C53v40Ev,
  (VTBL_ENTRY)&_ZN6S707C53v41Ev,
  (VTBL_ENTRY)&_ZN6S707C53v42Ev,
  (VTBL_ENTRY)&_ZN6S707C53v43Ev,
  (VTBL_ENTRY)&_ZN6S707C53v44Ev,
  (VTBL_ENTRY)&_ZN6S707C53v45Ev,
  (VTBL_ENTRY)&_ZN6S707C53v46Ev,
  (VTBL_ENTRY)&_ZN6S707C53v47Ev,
  (VTBL_ENTRY)&_ZN6S707C53v48Ev,
  (VTBL_ENTRY)&_ZN6S707C53v49Ev,
  (VTBL_ENTRY)&_ZN6S707C53v50Ev,
  (VTBL_ENTRY)&_ZN6S707C53v51Ev,
  (VTBL_ENTRY)&_ZN6S707C53v52Ev,
  (VTBL_ENTRY)&_ZN6S707C53v53Ev,
  (VTBL_ENTRY)&_ZN6S707C53v54Ev,
  (VTBL_ENTRY)&_ZN6S707C53v55Ev,
  (VTBL_ENTRY)&_ZN6S707C53v56Ev,
  (VTBL_ENTRY)&_ZN6S707C53v57Ev,
  (VTBL_ENTRY)&_ZN6S707C53v58Ev,
  (VTBL_ENTRY)&_ZN6S707C53v59Ev,
  (VTBL_ENTRY)&_ZN6S707C53v60Ev,
  (VTBL_ENTRY)&_ZN6S707C53v61Ev,
  (VTBL_ENTRY)&_ZN6S707C53v62Ev,
  (VTBL_ENTRY)&_ZN6S707C53v63Ev,
  (VTBL_ENTRY)&_ZN6S707C53v64Ev,
  (VTBL_ENTRY)&_ZN6S707C53v65Ev,
  (VTBL_ENTRY)&_ZN6S707C53v66Ev,
  (VTBL_ENTRY)&_ZN6S707C53v67Ev,
  (VTBL_ENTRY)&_ZN6S707C53v68Ev,
  (VTBL_ENTRY)&_ZN6S707C53v69Ev,
  (VTBL_ENTRY)&_ZN6S707C53v70Ev,
  (VTBL_ENTRY)&_ZN6S707C53v71Ev,
  (VTBL_ENTRY)&_ZN6S707C53v72Ev,
  (VTBL_ENTRY)&_ZN6S707C43v73Ev,
  (VTBL_ENTRY)&_ZN6S707C43v74Ev,
  (VTBL_ENTRY)&_ZN6S707C43v75Ev,
  (VTBL_ENTRY)&_ZN6S707C43v76Ev,
  (VTBL_ENTRY)&_ZN6S707C43v77Ev,
  (VTBL_ENTRY)&_ZN6S707C43v78Ev,
  (VTBL_ENTRY)&_ZN6S707C43v79Ev,
  (VTBL_ENTRY)&_ZN6S707C43v80Ev,
  (VTBL_ENTRY)&_ZN6S707C43v81Ev,
  (VTBL_ENTRY)&_ZN6S707C43v82Ev,
  (VTBL_ENTRY)&_ZN6S707C43v83Ev,
  (VTBL_ENTRY)&_ZN6S707C43v84Ev,
  (VTBL_ENTRY)&_ZN6S707C43v85Ev,
  (VTBL_ENTRY)&_ZN6S707C43v86Ev,
  (VTBL_ENTRY)&_ZN6S707C43v87Ev,
  (VTBL_ENTRY)&_ZN6S707C43v88Ev,
  (VTBL_ENTRY)&_ZN6S707C43v89Ev,
  (VTBL_ENTRY)&_ZN6S707C43v90Ev,
  (VTBL_ENTRY)&_ZN6S707C43v91Ev,
  (VTBL_ENTRY)&_ZN6S707C43v92Ev,
  (VTBL_ENTRY)&_ZN6S707C43v93Ev,
  (VTBL_ENTRY)&_ZN6S707C43v94Ev,
};
extern VTBL_ENTRY _ZTI6S707C4[];
extern  VTBL_ENTRY _ZTV6S707C4[];
Class_Descriptor cd_S707C4 = {  "S707C4", // class name
  bases_S707C4, 1,
  &(vtc_S707C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S707C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S707C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S707C3  : S707C4 {
  ::S473C6_nt s707c3f0;
  virtual  ~S707C3(); // _ZN6S707C3D1Ev
  virtual void  v95(); // _ZN6S707C33v95Ev
  virtual void  v96(); // _ZN6S707C33v96Ev
  virtual void  v97(); // _ZN6S707C33v97Ev
  virtual void  v98(); // _ZN6S707C33v98Ev
  virtual void  v99(); // _ZN6S707C33v99Ev
  virtual void  v100(); // _ZN6S707C34v100Ev
  virtual void  v101(); // _ZN6S707C34v101Ev
  virtual void  v102(); // _ZN6S707C34v102Ev
  virtual void  v103(); // _ZN6S707C34v103Ev
  virtual void  v104(); // _ZN6S707C34v104Ev
  virtual void  v105(); // _ZN6S707C34v105Ev
  virtual void  v106(); // _ZN6S707C34v106Ev
  virtual void  v107(); // _ZN6S707C34v107Ev
  virtual void  v108(); // _ZN6S707C34v108Ev
  virtual void  v109(); // _ZN6S707C34v109Ev
  virtual void  v110(); // _ZN6S707C34v110Ev
  virtual void  v111(); // _ZN6S707C34v111Ev
  virtual void  v112(); // _ZN6S707C34v112Ev
  virtual void  v113(); // _ZN6S707C34v113Ev
  S707C3(); // tgen
};
//SIG(-1 S707C3) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S707C3 ::~S707C3(){ note_dtor("S707C3", this);}
void  S707C3 ::v95(){vfunc_called(this, "_ZN6S707C33v95Ev");}
void  S707C3 ::v96(){vfunc_called(this, "_ZN6S707C33v96Ev");}
void  S707C3 ::v97(){vfunc_called(this, "_ZN6S707C33v97Ev");}
void  S707C3 ::v98(){vfunc_called(this, "_ZN6S707C33v98Ev");}
void  S707C3 ::v99(){vfunc_called(this, "_ZN6S707C33v99Ev");}
void  S707C3 ::v100(){vfunc_called(this, "_ZN6S707C34v100Ev");}
void  S707C3 ::v101(){vfunc_called(this, "_ZN6S707C34v101Ev");}
void  S707C3 ::v102(){vfunc_called(this, "_ZN6S707C34v102Ev");}
void  S707C3 ::v103(){vfunc_called(this, "_ZN6S707C34v103Ev");}
void  S707C3 ::v104(){vfunc_called(this, "_ZN6S707C34v104Ev");}
void  S707C3 ::v105(){vfunc_called(this, "_ZN6S707C34v105Ev");}
void  S707C3 ::v106(){vfunc_called(this, "_ZN6S707C34v106Ev");}
void  S707C3 ::v107(){vfunc_called(this, "_ZN6S707C34v107Ev");}
void  S707C3 ::v108(){vfunc_called(this, "_ZN6S707C34v108Ev");}
void  S707C3 ::v109(){vfunc_called(this, "_ZN6S707C34v109Ev");}
void  S707C3 ::v110(){vfunc_called(this, "_ZN6S707C34v110Ev");}
void  S707C3 ::v111(){vfunc_called(this, "_ZN6S707C34v111Ev");}
void  S707C3 ::v112(){vfunc_called(this, "_ZN6S707C34v112Ev");}
void  S707C3 ::v113(){vfunc_called(this, "_ZN6S707C34v113Ev");}
S707C3 ::S707C3(){ note_ctor("S707C3", this);} // tgen

static void Test_S707C3()
{
  extern Class_Descriptor cd_S707C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S707C3, buf);
    S707C3 *dp, &lv = *(dp=new (buf) S707C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S707C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S707C3)");
    check_base_class_offset(lv, (S707C5*)(S707C4*), 0, "S707C3");
    check_base_class_offset(lv, (S707C4*), 0, "S707C3");
    check_field_offset(lv, s707c3f0, ABISELECT(188,132), "S707C3.s707c3f0");
    test_class_info(&lv, &cd_S707C3);
    dp->~S707C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS707C3(Test_S707C3, "S707C3", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN6S707C3C1Ev();
extern void _ZN6S707C3D1Ev();
Name_Map name_map_S707C3[] = {
  NSPAIR(_ZN6S707C3C1Ev),
  NSPAIR(_ZN6S707C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S707C5;
extern VTBL_ENTRY _ZTI6S707C5[];
extern  VTBL_ENTRY _ZTV6S707C5[];
extern Class_Descriptor cd_S707C4;
extern VTBL_ENTRY _ZTI6S707C4[];
extern  VTBL_ENTRY _ZTV6S707C4[];
static Base_Class bases_S707C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S707C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S707C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S707C3[];
extern void _ZN6S707C3D1Ev();
extern void _ZN6S707C3D0Ev();
extern void _ZN6S707C52v9Ev();
extern void _ZN6S707C53v10Ev();
extern void _ZN6S707C53v11Ev();
extern void _ZN6S707C53v12Ev();
extern void _ZN6S707C53v13Ev();
extern void _ZN6S707C53v14Ev();
extern void _ZN6S707C53v15Ev();
extern void _ZN6S707C53v16Ev();
extern void _ZN6S707C53v17Ev();
extern void _ZN6S707C53v18Ev();
extern void _ZN6S707C53v19Ev();
extern void _ZN6S707C53v20Ev();
extern void _ZN6S707C53v21Ev();
extern void _ZN6S707C53v22Ev();
extern void _ZN6S707C53v23Ev();
extern void _ZN6S707C53v24Ev();
extern void _ZN6S707C53v25Ev();
extern void _ZN6S707C53v26Ev();
extern void _ZN6S707C53v27Ev();
extern void _ZN6S707C53v28Ev();
extern void _ZN6S707C53v29Ev();
extern void _ZN6S707C53v30Ev();
extern void _ZN6S707C53v31Ev();
extern void _ZN6S707C53v32Ev();
extern void _ZN6S707C53v33Ev();
extern void _ZN6S707C53v34Ev();
extern void _ZN6S707C53v35Ev();
extern void _ZN6S707C53v36Ev();
extern void _ZN6S707C53v37Ev();
extern void _ZN6S707C53v38Ev();
extern void _ZN6S707C53v39Ev();
extern void _ZN6S707C53v40Ev();
extern void _ZN6S707C53v41Ev();
extern void _ZN6S707C53v42Ev();
extern void _ZN6S707C53v43Ev();
extern void _ZN6S707C53v44Ev();
extern void _ZN6S707C53v45Ev();
extern void _ZN6S707C53v46Ev();
extern void _ZN6S707C53v47Ev();
extern void _ZN6S707C53v48Ev();
extern void _ZN6S707C53v49Ev();
extern void _ZN6S707C53v50Ev();
extern void _ZN6S707C53v51Ev();
extern void _ZN6S707C53v52Ev();
extern void _ZN6S707C53v53Ev();
extern void _ZN6S707C53v54Ev();
extern void _ZN6S707C53v55Ev();
extern void _ZN6S707C53v56Ev();
extern void _ZN6S707C53v57Ev();
extern void _ZN6S707C53v58Ev();
extern void _ZN6S707C53v59Ev();
extern void _ZN6S707C53v60Ev();
extern void _ZN6S707C53v61Ev();
extern void _ZN6S707C53v62Ev();
extern void _ZN6S707C53v63Ev();
extern void _ZN6S707C53v64Ev();
extern void _ZN6S707C53v65Ev();
extern void _ZN6S707C53v66Ev();
extern void _ZN6S707C53v67Ev();
extern void _ZN6S707C53v68Ev();
extern void _ZN6S707C53v69Ev();
extern void _ZN6S707C53v70Ev();
extern void _ZN6S707C53v71Ev();
extern void _ZN6S707C53v72Ev();
extern void _ZN6S707C43v73Ev();
extern void _ZN6S707C43v74Ev();
extern void _ZN6S707C43v75Ev();
extern void _ZN6S707C43v76Ev();
extern void _ZN6S707C43v77Ev();
extern void _ZN6S707C43v78Ev();
extern void _ZN6S707C43v79Ev();
extern void _ZN6S707C43v80Ev();
extern void _ZN6S707C43v81Ev();
extern void _ZN6S707C43v82Ev();
extern void _ZN6S707C43v83Ev();
extern void _ZN6S707C43v84Ev();
extern void _ZN6S707C43v85Ev();
extern void _ZN6S707C43v86Ev();
extern void _ZN6S707C43v87Ev();
extern void _ZN6S707C43v88Ev();
extern void _ZN6S707C43v89Ev();
extern void _ZN6S707C43v90Ev();
extern void _ZN6S707C43v91Ev();
extern void _ZN6S707C43v92Ev();
extern void _ZN6S707C43v93Ev();
extern void _ZN6S707C43v94Ev();
extern void _ZN6S707C33v95Ev();
extern void _ZN6S707C33v96Ev();
extern void _ZN6S707C33v97Ev();
extern void _ZN6S707C33v98Ev();
extern void _ZN6S707C33v99Ev();
extern void _ZN6S707C34v100Ev();
extern void _ZN6S707C34v101Ev();
extern void _ZN6S707C34v102Ev();
extern void _ZN6S707C34v103Ev();
extern void _ZN6S707C34v104Ev();
extern void _ZN6S707C34v105Ev();
extern void _ZN6S707C34v106Ev();
extern void _ZN6S707C34v107Ev();
extern void _ZN6S707C34v108Ev();
extern void _ZN6S707C34v109Ev();
extern void _ZN6S707C34v110Ev();
extern void _ZN6S707C34v111Ev();
extern void _ZN6S707C34v112Ev();
extern void _ZN6S707C34v113Ev();
static  VTBL_ENTRY vtc_S707C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S707C3[0]),
  (VTBL_ENTRY)&_ZN6S707C3D1Ev,
  (VTBL_ENTRY)&_ZN6S707C3D0Ev,
  (VTBL_ENTRY)&_ZN6S707C52v9Ev,
  (VTBL_ENTRY)&_ZN6S707C53v10Ev,
  (VTBL_ENTRY)&_ZN6S707C53v11Ev,
  (VTBL_ENTRY)&_ZN6S707C53v12Ev,
  (VTBL_ENTRY)&_ZN6S707C53v13Ev,
  (VTBL_ENTRY)&_ZN6S707C53v14Ev,
  (VTBL_ENTRY)&_ZN6S707C53v15Ev,
  (VTBL_ENTRY)&_ZN6S707C53v16Ev,
  (VTBL_ENTRY)&_ZN6S707C53v17Ev,
  (VTBL_ENTRY)&_ZN6S707C53v18Ev,
  (VTBL_ENTRY)&_ZN6S707C53v19Ev,
  (VTBL_ENTRY)&_ZN6S707C53v20Ev,
  (VTBL_ENTRY)&_ZN6S707C53v21Ev,
  (VTBL_ENTRY)&_ZN6S707C53v22Ev,
  (VTBL_ENTRY)&_ZN6S707C53v23Ev,
  (VTBL_ENTRY)&_ZN6S707C53v24Ev,
  (VTBL_ENTRY)&_ZN6S707C53v25Ev,
  (VTBL_ENTRY)&_ZN6S707C53v26Ev,
  (VTBL_ENTRY)&_ZN6S707C53v27Ev,
  (VTBL_ENTRY)&_ZN6S707C53v28Ev,
  (VTBL_ENTRY)&_ZN6S707C53v29Ev,
  (VTBL_ENTRY)&_ZN6S707C53v30Ev,
  (VTBL_ENTRY)&_ZN6S707C53v31Ev,
  (VTBL_ENTRY)&_ZN6S707C53v32Ev,
  (VTBL_ENTRY)&_ZN6S707C53v33Ev,
  (VTBL_ENTRY)&_ZN6S707C53v34Ev,
  (VTBL_ENTRY)&_ZN6S707C53v35Ev,
  (VTBL_ENTRY)&_ZN6S707C53v36Ev,
  (VTBL_ENTRY)&_ZN6S707C53v37Ev,
  (VTBL_ENTRY)&_ZN6S707C53v38Ev,
  (VTBL_ENTRY)&_ZN6S707C53v39Ev,
  (VTBL_ENTRY)&_ZN6S707C53v40Ev,
  (VTBL_ENTRY)&_ZN6S707C53v41Ev,
  (VTBL_ENTRY)&_ZN6S707C53v42Ev,
  (VTBL_ENTRY)&_ZN6S707C53v43Ev,
  (VTBL_ENTRY)&_ZN6S707C53v44Ev,
  (VTBL_ENTRY)&_ZN6S707C53v45Ev,
  (VTBL_ENTRY)&_ZN6S707C53v46Ev,
  (VTBL_ENTRY)&_ZN6S707C53v47Ev,
  (VTBL_ENTRY)&_ZN6S707C53v48Ev,
  (VTBL_ENTRY)&_ZN6S707C53v49Ev,
  (VTBL_ENTRY)&_ZN6S707C53v50Ev,
  (VTBL_ENTRY)&_ZN6S707C53v51Ev,
  (VTBL_ENTRY)&_ZN6S707C53v52Ev,
  (VTBL_ENTRY)&_ZN6S707C53v53Ev,
  (VTBL_ENTRY)&_ZN6S707C53v54Ev,
  (VTBL_ENTRY)&_ZN6S707C53v55Ev,
  (VTBL_ENTRY)&_ZN6S707C53v56Ev,
  (VTBL_ENTRY)&_ZN6S707C53v57Ev,
  (VTBL_ENTRY)&_ZN6S707C53v58Ev,
  (VTBL_ENTRY)&_ZN6S707C53v59Ev,
  (VTBL_ENTRY)&_ZN6S707C53v60Ev,
  (VTBL_ENTRY)&_ZN6S707C53v61Ev,
  (VTBL_ENTRY)&_ZN6S707C53v62Ev,
  (VTBL_ENTRY)&_ZN6S707C53v63Ev,
  (VTBL_ENTRY)&_ZN6S707C53v64Ev,
  (VTBL_ENTRY)&_ZN6S707C53v65Ev,
  (VTBL_ENTRY)&_ZN6S707C53v66Ev,
  (VTBL_ENTRY)&_ZN6S707C53v67Ev,
  (VTBL_ENTRY)&_ZN6S707C53v68Ev,
  (VTBL_ENTRY)&_ZN6S707C53v69Ev,
  (VTBL_ENTRY)&_ZN6S707C53v70Ev,
  (VTBL_ENTRY)&_ZN6S707C53v71Ev,
  (VTBL_ENTRY)&_ZN6S707C53v72Ev,
  (VTBL_ENTRY)&_ZN6S707C43v73Ev,
  (VTBL_ENTRY)&_ZN6S707C43v74Ev,
  (VTBL_ENTRY)&_ZN6S707C43v75Ev,
  (VTBL_ENTRY)&_ZN6S707C43v76Ev,
  (VTBL_ENTRY)&_ZN6S707C43v77Ev,
  (VTBL_ENTRY)&_ZN6S707C43v78Ev,
  (VTBL_ENTRY)&_ZN6S707C43v79Ev,
  (VTBL_ENTRY)&_ZN6S707C43v80Ev,
  (VTBL_ENTRY)&_ZN6S707C43v81Ev,
  (VTBL_ENTRY)&_ZN6S707C43v82Ev,
  (VTBL_ENTRY)&_ZN6S707C43v83Ev,
  (VTBL_ENTRY)&_ZN6S707C43v84Ev,
  (VTBL_ENTRY)&_ZN6S707C43v85Ev,
  (VTBL_ENTRY)&_ZN6S707C43v86Ev,
  (VTBL_ENTRY)&_ZN6S707C43v87Ev,
  (VTBL_ENTRY)&_ZN6S707C43v88Ev,
  (VTBL_ENTRY)&_ZN6S707C43v89Ev,
  (VTBL_ENTRY)&_ZN6S707C43v90Ev,
  (VTBL_ENTRY)&_ZN6S707C43v91Ev,
  (VTBL_ENTRY)&_ZN6S707C43v92Ev,
  (VTBL_ENTRY)&_ZN6S707C43v93Ev,
  (VTBL_ENTRY)&_ZN6S707C43v94Ev,
  (VTBL_ENTRY)&_ZN6S707C33v95Ev,
  (VTBL_ENTRY)&_ZN6S707C33v96Ev,
  (VTBL_ENTRY)&_ZN6S707C33v97Ev,
  (VTBL_ENTRY)&_ZN6S707C33v98Ev,
  (VTBL_ENTRY)&_ZN6S707C33v99Ev,
  (VTBL_ENTRY)&_ZN6S707C34v100Ev,
  (VTBL_ENTRY)&_ZN6S707C34v101Ev,
  (VTBL_ENTRY)&_ZN6S707C34v102Ev,
  (VTBL_ENTRY)&_ZN6S707C34v103Ev,
  (VTBL_ENTRY)&_ZN6S707C34v104Ev,
  (VTBL_ENTRY)&_ZN6S707C34v105Ev,
  (VTBL_ENTRY)&_ZN6S707C34v106Ev,
  (VTBL_ENTRY)&_ZN6S707C34v107Ev,
  (VTBL_ENTRY)&_ZN6S707C34v108Ev,
  (VTBL_ENTRY)&_ZN6S707C34v109Ev,
  (VTBL_ENTRY)&_ZN6S707C34v110Ev,
  (VTBL_ENTRY)&_ZN6S707C34v111Ev,
  (VTBL_ENTRY)&_ZN6S707C34v112Ev,
  (VTBL_ENTRY)&_ZN6S707C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S707C3[];
extern  VTBL_ENTRY _ZTV6S707C3[];
Class_Descriptor cd_S707C3 = {  "S707C3", // class name
  bases_S707C3, 2,
  &(vtc_S707C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI6S707C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S707C3),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S707C2  : S707C3 {
  void *s707c2f0;
  virtual  ~S707C2(); // _ZN6S707C2D1Ev
  virtual void  v114(); // _ZN6S707C24v114Ev
  virtual void  v115(); // _ZN6S707C24v115Ev
  virtual void  v116(); // _ZN6S707C24v116Ev
  virtual void  v117(); // _ZN6S707C24v117Ev
  virtual void  v118(); // _ZN6S707C24v118Ev
  virtual void  v119(); // _ZN6S707C24v119Ev
  virtual void  v120(); // _ZN6S707C24v120Ev
  virtual void  v121(); // _ZN6S707C24v121Ev
  virtual void  v122(); // _ZN6S707C24v122Ev
  S707C2(); // tgen
};
//SIG(-1 S707C2) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 FC5} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S707C2 ::~S707C2(){ note_dtor("S707C2", this);}
void  S707C2 ::v114(){vfunc_called(this, "_ZN6S707C24v114Ev");}
void  S707C2 ::v115(){vfunc_called(this, "_ZN6S707C24v115Ev");}
void  S707C2 ::v116(){vfunc_called(this, "_ZN6S707C24v116Ev");}
void  S707C2 ::v117(){vfunc_called(this, "_ZN6S707C24v117Ev");}
void  S707C2 ::v118(){vfunc_called(this, "_ZN6S707C24v118Ev");}
void  S707C2 ::v119(){vfunc_called(this, "_ZN6S707C24v119Ev");}
void  S707C2 ::v120(){vfunc_called(this, "_ZN6S707C24v120Ev");}
void  S707C2 ::v121(){vfunc_called(this, "_ZN6S707C24v121Ev");}
void  S707C2 ::v122(){vfunc_called(this, "_ZN6S707C24v122Ev");}
S707C2 ::S707C2(){ note_ctor("S707C2", this);} // tgen

static void Test_S707C2()
{
  extern Class_Descriptor cd_S707C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S707C2, buf);
    S707C2 *dp, &lv = *(dp=new (buf) S707C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S707C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S707C2)");
    check_base_class_offset(lv, (S707C5*)(S707C4*)(S707C3*), 0, "S707C2");
    check_base_class_offset(lv, (S707C4*)(S707C3*), 0, "S707C2");
    check_base_class_offset(lv, (S707C3*), 0, "S707C2");
    check_field_offset(lv, s707c2f0, ABISELECT(200,140), "S707C2.s707c2f0");
    test_class_info(&lv, &cd_S707C2);
    dp->~S707C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS707C2(Test_S707C2, "S707C2", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN6S707C2C1Ev();
extern void _ZN6S707C2D1Ev();
Name_Map name_map_S707C2[] = {
  NSPAIR(_ZN6S707C2C1Ev),
  NSPAIR(_ZN6S707C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S707C5;
extern VTBL_ENTRY _ZTI6S707C5[];
extern  VTBL_ENTRY _ZTV6S707C5[];
extern Class_Descriptor cd_S707C4;
extern VTBL_ENTRY _ZTI6S707C4[];
extern  VTBL_ENTRY _ZTV6S707C4[];
extern Class_Descriptor cd_S707C3;
extern VTBL_ENTRY _ZTI6S707C3[];
extern  VTBL_ENTRY _ZTV6S707C3[];
static Base_Class bases_S707C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S707C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S707C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S707C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S707C2[];
extern void _ZN6S707C2D1Ev();
extern void _ZN6S707C2D0Ev();
extern void _ZN6S707C52v9Ev();
extern void _ZN6S707C53v10Ev();
extern void _ZN6S707C53v11Ev();
extern void _ZN6S707C53v12Ev();
extern void _ZN6S707C53v13Ev();
extern void _ZN6S707C53v14Ev();
extern void _ZN6S707C53v15Ev();
extern void _ZN6S707C53v16Ev();
extern void _ZN6S707C53v17Ev();
extern void _ZN6S707C53v18Ev();
extern void _ZN6S707C53v19Ev();
extern void _ZN6S707C53v20Ev();
extern void _ZN6S707C53v21Ev();
extern void _ZN6S707C53v22Ev();
extern void _ZN6S707C53v23Ev();
extern void _ZN6S707C53v24Ev();
extern void _ZN6S707C53v25Ev();
extern void _ZN6S707C53v26Ev();
extern void _ZN6S707C53v27Ev();
extern void _ZN6S707C53v28Ev();
extern void _ZN6S707C53v29Ev();
extern void _ZN6S707C53v30Ev();
extern void _ZN6S707C53v31Ev();
extern void _ZN6S707C53v32Ev();
extern void _ZN6S707C53v33Ev();
extern void _ZN6S707C53v34Ev();
extern void _ZN6S707C53v35Ev();
extern void _ZN6S707C53v36Ev();
extern void _ZN6S707C53v37Ev();
extern void _ZN6S707C53v38Ev();
extern void _ZN6S707C53v39Ev();
extern void _ZN6S707C53v40Ev();
extern void _ZN6S707C53v41Ev();
extern void _ZN6S707C53v42Ev();
extern void _ZN6S707C53v43Ev();
extern void _ZN6S707C53v44Ev();
extern void _ZN6S707C53v45Ev();
extern void _ZN6S707C53v46Ev();
extern void _ZN6S707C53v47Ev();
extern void _ZN6S707C53v48Ev();
extern void _ZN6S707C53v49Ev();
extern void _ZN6S707C53v50Ev();
extern void _ZN6S707C53v51Ev();
extern void _ZN6S707C53v52Ev();
extern void _ZN6S707C53v53Ev();
extern void _ZN6S707C53v54Ev();
extern void _ZN6S707C53v55Ev();
extern void _ZN6S707C53v56Ev();
extern void _ZN6S707C53v57Ev();
extern void _ZN6S707C53v58Ev();
extern void _ZN6S707C53v59Ev();
extern void _ZN6S707C53v60Ev();
extern void _ZN6S707C53v61Ev();
extern void _ZN6S707C53v62Ev();
extern void _ZN6S707C53v63Ev();
extern void _ZN6S707C53v64Ev();
extern void _ZN6S707C53v65Ev();
extern void _ZN6S707C53v66Ev();
extern void _ZN6S707C53v67Ev();
extern void _ZN6S707C53v68Ev();
extern void _ZN6S707C53v69Ev();
extern void _ZN6S707C53v70Ev();
extern void _ZN6S707C53v71Ev();
extern void _ZN6S707C53v72Ev();
extern void _ZN6S707C43v73Ev();
extern void _ZN6S707C43v74Ev();
extern void _ZN6S707C43v75Ev();
extern void _ZN6S707C43v76Ev();
extern void _ZN6S707C43v77Ev();
extern void _ZN6S707C43v78Ev();
extern void _ZN6S707C43v79Ev();
extern void _ZN6S707C43v80Ev();
extern void _ZN6S707C43v81Ev();
extern void _ZN6S707C43v82Ev();
extern void _ZN6S707C43v83Ev();
extern void _ZN6S707C43v84Ev();
extern void _ZN6S707C43v85Ev();
extern void _ZN6S707C43v86Ev();
extern void _ZN6S707C43v87Ev();
extern void _ZN6S707C43v88Ev();
extern void _ZN6S707C43v89Ev();
extern void _ZN6S707C43v90Ev();
extern void _ZN6S707C43v91Ev();
extern void _ZN6S707C43v92Ev();
extern void _ZN6S707C43v93Ev();
extern void _ZN6S707C43v94Ev();
extern void _ZN6S707C33v95Ev();
extern void _ZN6S707C33v96Ev();
extern void _ZN6S707C33v97Ev();
extern void _ZN6S707C33v98Ev();
extern void _ZN6S707C33v99Ev();
extern void _ZN6S707C34v100Ev();
extern void _ZN6S707C34v101Ev();
extern void _ZN6S707C34v102Ev();
extern void _ZN6S707C34v103Ev();
extern void _ZN6S707C34v104Ev();
extern void _ZN6S707C34v105Ev();
extern void _ZN6S707C34v106Ev();
extern void _ZN6S707C34v107Ev();
extern void _ZN6S707C34v108Ev();
extern void _ZN6S707C34v109Ev();
extern void _ZN6S707C34v110Ev();
extern void _ZN6S707C34v111Ev();
extern void _ZN6S707C34v112Ev();
extern void _ZN6S707C34v113Ev();
extern void _ZN6S707C24v114Ev();
extern void _ZN6S707C24v115Ev();
extern void _ZN6S707C24v116Ev();
extern void _ZN6S707C24v117Ev();
extern void _ZN6S707C24v118Ev();
extern void _ZN6S707C24v119Ev();
extern void _ZN6S707C24v120Ev();
extern void _ZN6S707C24v121Ev();
extern void _ZN6S707C24v122Ev();
static  VTBL_ENTRY vtc_S707C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S707C2[0]),
  (VTBL_ENTRY)&_ZN6S707C2D1Ev,
  (VTBL_ENTRY)&_ZN6S707C2D0Ev,
  (VTBL_ENTRY)&_ZN6S707C52v9Ev,
  (VTBL_ENTRY)&_ZN6S707C53v10Ev,
  (VTBL_ENTRY)&_ZN6S707C53v11Ev,
  (VTBL_ENTRY)&_ZN6S707C53v12Ev,
  (VTBL_ENTRY)&_ZN6S707C53v13Ev,
  (VTBL_ENTRY)&_ZN6S707C53v14Ev,
  (VTBL_ENTRY)&_ZN6S707C53v15Ev,
  (VTBL_ENTRY)&_ZN6S707C53v16Ev,
  (VTBL_ENTRY)&_ZN6S707C53v17Ev,
  (VTBL_ENTRY)&_ZN6S707C53v18Ev,
  (VTBL_ENTRY)&_ZN6S707C53v19Ev,
  (VTBL_ENTRY)&_ZN6S707C53v20Ev,
  (VTBL_ENTRY)&_ZN6S707C53v21Ev,
  (VTBL_ENTRY)&_ZN6S707C53v22Ev,
  (VTBL_ENTRY)&_ZN6S707C53v23Ev,
  (VTBL_ENTRY)&_ZN6S707C53v24Ev,
  (VTBL_ENTRY)&_ZN6S707C53v25Ev,
  (VTBL_ENTRY)&_ZN6S707C53v26Ev,
  (VTBL_ENTRY)&_ZN6S707C53v27Ev,
  (VTBL_ENTRY)&_ZN6S707C53v28Ev,
  (VTBL_ENTRY)&_ZN6S707C53v29Ev,
  (VTBL_ENTRY)&_ZN6S707C53v30Ev,
  (VTBL_ENTRY)&_ZN6S707C53v31Ev,
  (VTBL_ENTRY)&_ZN6S707C53v32Ev,
  (VTBL_ENTRY)&_ZN6S707C53v33Ev,
  (VTBL_ENTRY)&_ZN6S707C53v34Ev,
  (VTBL_ENTRY)&_ZN6S707C53v35Ev,
  (VTBL_ENTRY)&_ZN6S707C53v36Ev,
  (VTBL_ENTRY)&_ZN6S707C53v37Ev,
  (VTBL_ENTRY)&_ZN6S707C53v38Ev,
  (VTBL_ENTRY)&_ZN6S707C53v39Ev,
  (VTBL_ENTRY)&_ZN6S707C53v40Ev,
  (VTBL_ENTRY)&_ZN6S707C53v41Ev,
  (VTBL_ENTRY)&_ZN6S707C53v42Ev,
  (VTBL_ENTRY)&_ZN6S707C53v43Ev,
  (VTBL_ENTRY)&_ZN6S707C53v44Ev,
  (VTBL_ENTRY)&_ZN6S707C53v45Ev,
  (VTBL_ENTRY)&_ZN6S707C53v46Ev,
  (VTBL_ENTRY)&_ZN6S707C53v47Ev,
  (VTBL_ENTRY)&_ZN6S707C53v48Ev,
  (VTBL_ENTRY)&_ZN6S707C53v49Ev,
  (VTBL_ENTRY)&_ZN6S707C53v50Ev,
  (VTBL_ENTRY)&_ZN6S707C53v51Ev,
  (VTBL_ENTRY)&_ZN6S707C53v52Ev,
  (VTBL_ENTRY)&_ZN6S707C53v53Ev,
  (VTBL_ENTRY)&_ZN6S707C53v54Ev,
  (VTBL_ENTRY)&_ZN6S707C53v55Ev,
  (VTBL_ENTRY)&_ZN6S707C53v56Ev,
  (VTBL_ENTRY)&_ZN6S707C53v57Ev,
  (VTBL_ENTRY)&_ZN6S707C53v58Ev,
  (VTBL_ENTRY)&_ZN6S707C53v59Ev,
  (VTBL_ENTRY)&_ZN6S707C53v60Ev,
  (VTBL_ENTRY)&_ZN6S707C53v61Ev,
  (VTBL_ENTRY)&_ZN6S707C53v62Ev,
  (VTBL_ENTRY)&_ZN6S707C53v63Ev,
  (VTBL_ENTRY)&_ZN6S707C53v64Ev,
  (VTBL_ENTRY)&_ZN6S707C53v65Ev,
  (VTBL_ENTRY)&_ZN6S707C53v66Ev,
  (VTBL_ENTRY)&_ZN6S707C53v67Ev,
  (VTBL_ENTRY)&_ZN6S707C53v68Ev,
  (VTBL_ENTRY)&_ZN6S707C53v69Ev,
  (VTBL_ENTRY)&_ZN6S707C53v70Ev,
  (VTBL_ENTRY)&_ZN6S707C53v71Ev,
  (VTBL_ENTRY)&_ZN6S707C53v72Ev,
  (VTBL_ENTRY)&_ZN6S707C43v73Ev,
  (VTBL_ENTRY)&_ZN6S707C43v74Ev,
  (VTBL_ENTRY)&_ZN6S707C43v75Ev,
  (VTBL_ENTRY)&_ZN6S707C43v76Ev,
  (VTBL_ENTRY)&_ZN6S707C43v77Ev,
  (VTBL_ENTRY)&_ZN6S707C43v78Ev,
  (VTBL_ENTRY)&_ZN6S707C43v79Ev,
  (VTBL_ENTRY)&_ZN6S707C43v80Ev,
  (VTBL_ENTRY)&_ZN6S707C43v81Ev,
  (VTBL_ENTRY)&_ZN6S707C43v82Ev,
  (VTBL_ENTRY)&_ZN6S707C43v83Ev,
  (VTBL_ENTRY)&_ZN6S707C43v84Ev,
  (VTBL_ENTRY)&_ZN6S707C43v85Ev,
  (VTBL_ENTRY)&_ZN6S707C43v86Ev,
  (VTBL_ENTRY)&_ZN6S707C43v87Ev,
  (VTBL_ENTRY)&_ZN6S707C43v88Ev,
  (VTBL_ENTRY)&_ZN6S707C43v89Ev,
  (VTBL_ENTRY)&_ZN6S707C43v90Ev,
  (VTBL_ENTRY)&_ZN6S707C43v91Ev,
  (VTBL_ENTRY)&_ZN6S707C43v92Ev,
  (VTBL_ENTRY)&_ZN6S707C43v93Ev,
  (VTBL_ENTRY)&_ZN6S707C43v94Ev,
  (VTBL_ENTRY)&_ZN6S707C33v95Ev,
  (VTBL_ENTRY)&_ZN6S707C33v96Ev,
  (VTBL_ENTRY)&_ZN6S707C33v97Ev,
  (VTBL_ENTRY)&_ZN6S707C33v98Ev,
  (VTBL_ENTRY)&_ZN6S707C33v99Ev,
  (VTBL_ENTRY)&_ZN6S707C34v100Ev,
  (VTBL_ENTRY)&_ZN6S707C34v101Ev,
  (VTBL_ENTRY)&_ZN6S707C34v102Ev,
  (VTBL_ENTRY)&_ZN6S707C34v103Ev,
  (VTBL_ENTRY)&_ZN6S707C34v104Ev,
  (VTBL_ENTRY)&_ZN6S707C34v105Ev,
  (VTBL_ENTRY)&_ZN6S707C34v106Ev,
  (VTBL_ENTRY)&_ZN6S707C34v107Ev,
  (VTBL_ENTRY)&_ZN6S707C34v108Ev,
  (VTBL_ENTRY)&_ZN6S707C34v109Ev,
  (VTBL_ENTRY)&_ZN6S707C34v110Ev,
  (VTBL_ENTRY)&_ZN6S707C34v111Ev,
  (VTBL_ENTRY)&_ZN6S707C34v112Ev,
  (VTBL_ENTRY)&_ZN6S707C34v113Ev,
  (VTBL_ENTRY)&_ZN6S707C24v114Ev,
  (VTBL_ENTRY)&_ZN6S707C24v115Ev,
  (VTBL_ENTRY)&_ZN6S707C24v116Ev,
  (VTBL_ENTRY)&_ZN6S707C24v117Ev,
  (VTBL_ENTRY)&_ZN6S707C24v118Ev,
  (VTBL_ENTRY)&_ZN6S707C24v119Ev,
  (VTBL_ENTRY)&_ZN6S707C24v120Ev,
  (VTBL_ENTRY)&_ZN6S707C24v121Ev,
  (VTBL_ENTRY)&_ZN6S707C24v122Ev,
};
extern VTBL_ENTRY _ZTI6S707C2[];
extern  VTBL_ENTRY _ZTV6S707C2[];
Class_Descriptor cd_S707C2 = {  "S707C2", // class name
  bases_S707C2, 3,
  &(vtc_S707C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI6S707C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S707C2),118, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S707C1  : S707C2 {
  ::S672C14_nt s707c1f0;
  virtual  ~S707C1(); // _ZN6S707C1D1Ev
  virtual void  v1(); // _ZN6S707C12v1Ev
  virtual void  v2(); // _ZN6S707C12v2Ev
  virtual void  v3(); // _ZN6S707C12v3Ev
  virtual void  v4(); // _ZN6S707C12v4Ev
  virtual void  v5(); // _ZN6S707C12v5Ev
  virtual void  v6(); // _ZN6S707C12v6Ev
  virtual void  v7(); // _ZN6S707C12v7Ev
  virtual void  v8(); // _ZN6S707C12v8Ev
  S707C1(); // tgen
};
//SIG(1 S707C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 FC6} vd v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 FC12{ BC13{ BC10}}}


 S707C1 ::~S707C1(){ note_dtor("S707C1", this);}
void  S707C1 ::v1(){vfunc_called(this, "_ZN6S707C12v1Ev");}
void  S707C1 ::v2(){vfunc_called(this, "_ZN6S707C12v2Ev");}
void  S707C1 ::v3(){vfunc_called(this, "_ZN6S707C12v3Ev");}
void  S707C1 ::v4(){vfunc_called(this, "_ZN6S707C12v4Ev");}
void  S707C1 ::v5(){vfunc_called(this, "_ZN6S707C12v5Ev");}
void  S707C1 ::v6(){vfunc_called(this, "_ZN6S707C12v6Ev");}
void  S707C1 ::v7(){vfunc_called(this, "_ZN6S707C12v7Ev");}
void  S707C1 ::v8(){vfunc_called(this, "_ZN6S707C12v8Ev");}
S707C1 ::S707C1(){ note_ctor("S707C1", this);} // tgen

static void Test_S707C1()
{
  extern Class_Descriptor cd_S707C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,40)];
    init_test(&cd_S707C1, buf);
    S707C1 *dp, &lv = *(dp=new (buf) S707C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,156), "sizeof(S707C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S707C1)");
    check_base_class_offset(lv, (S707C5*)(S707C4*)(S707C3*)(S707C2*), 0, "S707C1");
    check_base_class_offset(lv, (S707C4*)(S707C3*)(S707C2*), 0, "S707C1");
    check_base_class_offset(lv, (S707C3*)(S707C2*), 0, "S707C1");
    check_base_class_offset(lv, (S707C2*), 0, "S707C1");
    check_field_offset(lv, s707c1f0, ABISELECT(208,144), "S707C1.s707c1f0");
    test_class_info(&lv, &cd_S707C1);
    dp->~S707C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS707C1(Test_S707C1, "S707C1", ABISELECT(224,156));

#else // __cplusplus

extern void _ZN6S707C1C1Ev();
extern void _ZN6S707C1D1Ev();
Name_Map name_map_S707C1[] = {
  NSPAIR(_ZN6S707C1C1Ev),
  NSPAIR(_ZN6S707C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S707C5;
extern VTBL_ENTRY _ZTI6S707C5[];
extern  VTBL_ENTRY _ZTV6S707C5[];
extern Class_Descriptor cd_S707C4;
extern VTBL_ENTRY _ZTI6S707C4[];
extern  VTBL_ENTRY _ZTV6S707C4[];
extern Class_Descriptor cd_S707C3;
extern VTBL_ENTRY _ZTI6S707C3[];
extern  VTBL_ENTRY _ZTV6S707C3[];
extern Class_Descriptor cd_S707C2;
extern VTBL_ENTRY _ZTI6S707C2[];
extern  VTBL_ENTRY _ZTV6S707C2[];
static Base_Class bases_S707C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S707C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S707C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S707C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S707C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S707C1[];
extern void _ZN6S707C1D1Ev();
extern void _ZN6S707C1D0Ev();
extern void _ZN6S707C52v9Ev();
extern void _ZN6S707C53v10Ev();
extern void _ZN6S707C53v11Ev();
extern void _ZN6S707C53v12Ev();
extern void _ZN6S707C53v13Ev();
extern void _ZN6S707C53v14Ev();
extern void _ZN6S707C53v15Ev();
extern void _ZN6S707C53v16Ev();
extern void _ZN6S707C53v17Ev();
extern void _ZN6S707C53v18Ev();
extern void _ZN6S707C53v19Ev();
extern void _ZN6S707C53v20Ev();
extern void _ZN6S707C53v21Ev();
extern void _ZN6S707C53v22Ev();
extern void _ZN6S707C53v23Ev();
extern void _ZN6S707C53v24Ev();
extern void _ZN6S707C53v25Ev();
extern void _ZN6S707C53v26Ev();
extern void _ZN6S707C53v27Ev();
extern void _ZN6S707C53v28Ev();
extern void _ZN6S707C53v29Ev();
extern void _ZN6S707C53v30Ev();
extern void _ZN6S707C53v31Ev();
extern void _ZN6S707C53v32Ev();
extern void _ZN6S707C53v33Ev();
extern void _ZN6S707C53v34Ev();
extern void _ZN6S707C53v35Ev();
extern void _ZN6S707C53v36Ev();
extern void _ZN6S707C53v37Ev();
extern void _ZN6S707C53v38Ev();
extern void _ZN6S707C53v39Ev();
extern void _ZN6S707C53v40Ev();
extern void _ZN6S707C53v41Ev();
extern void _ZN6S707C53v42Ev();
extern void _ZN6S707C53v43Ev();
extern void _ZN6S707C53v44Ev();
extern void _ZN6S707C53v45Ev();
extern void _ZN6S707C53v46Ev();
extern void _ZN6S707C53v47Ev();
extern void _ZN6S707C53v48Ev();
extern void _ZN6S707C53v49Ev();
extern void _ZN6S707C53v50Ev();
extern void _ZN6S707C53v51Ev();
extern void _ZN6S707C53v52Ev();
extern void _ZN6S707C53v53Ev();
extern void _ZN6S707C53v54Ev();
extern void _ZN6S707C53v55Ev();
extern void _ZN6S707C53v56Ev();
extern void _ZN6S707C53v57Ev();
extern void _ZN6S707C53v58Ev();
extern void _ZN6S707C53v59Ev();
extern void _ZN6S707C53v60Ev();
extern void _ZN6S707C53v61Ev();
extern void _ZN6S707C53v62Ev();
extern void _ZN6S707C53v63Ev();
extern void _ZN6S707C53v64Ev();
extern void _ZN6S707C53v65Ev();
extern void _ZN6S707C53v66Ev();
extern void _ZN6S707C53v67Ev();
extern void _ZN6S707C53v68Ev();
extern void _ZN6S707C53v69Ev();
extern void _ZN6S707C53v70Ev();
extern void _ZN6S707C53v71Ev();
extern void _ZN6S707C53v72Ev();
extern void _ZN6S707C43v73Ev();
extern void _ZN6S707C43v74Ev();
extern void _ZN6S707C43v75Ev();
extern void _ZN6S707C43v76Ev();
extern void _ZN6S707C43v77Ev();
extern void _ZN6S707C43v78Ev();
extern void _ZN6S707C43v79Ev();
extern void _ZN6S707C43v80Ev();
extern void _ZN6S707C43v81Ev();
extern void _ZN6S707C43v82Ev();
extern void _ZN6S707C43v83Ev();
extern void _ZN6S707C43v84Ev();
extern void _ZN6S707C43v85Ev();
extern void _ZN6S707C43v86Ev();
extern void _ZN6S707C43v87Ev();
extern void _ZN6S707C43v88Ev();
extern void _ZN6S707C43v89Ev();
extern void _ZN6S707C43v90Ev();
extern void _ZN6S707C43v91Ev();
extern void _ZN6S707C43v92Ev();
extern void _ZN6S707C43v93Ev();
extern void _ZN6S707C43v94Ev();
extern void _ZN6S707C33v95Ev();
extern void _ZN6S707C33v96Ev();
extern void _ZN6S707C33v97Ev();
extern void _ZN6S707C33v98Ev();
extern void _ZN6S707C33v99Ev();
extern void _ZN6S707C34v100Ev();
extern void _ZN6S707C34v101Ev();
extern void _ZN6S707C34v102Ev();
extern void _ZN6S707C34v103Ev();
extern void _ZN6S707C34v104Ev();
extern void _ZN6S707C34v105Ev();
extern void _ZN6S707C34v106Ev();
extern void _ZN6S707C34v107Ev();
extern void _ZN6S707C34v108Ev();
extern void _ZN6S707C34v109Ev();
extern void _ZN6S707C34v110Ev();
extern void _ZN6S707C34v111Ev();
extern void _ZN6S707C34v112Ev();
extern void _ZN6S707C34v113Ev();
extern void _ZN6S707C24v114Ev();
extern void _ZN6S707C24v115Ev();
extern void _ZN6S707C24v116Ev();
extern void _ZN6S707C24v117Ev();
extern void _ZN6S707C24v118Ev();
extern void _ZN6S707C24v119Ev();
extern void _ZN6S707C24v120Ev();
extern void _ZN6S707C24v121Ev();
extern void _ZN6S707C24v122Ev();
extern void _ZN6S707C12v1Ev();
extern void _ZN6S707C12v2Ev();
extern void _ZN6S707C12v3Ev();
extern void _ZN6S707C12v4Ev();
extern void _ZN6S707C12v5Ev();
extern void _ZN6S707C12v6Ev();
extern void _ZN6S707C12v7Ev();
extern void _ZN6S707C12v8Ev();
static  VTBL_ENTRY vtc_S707C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S707C1[0]),
  (VTBL_ENTRY)&_ZN6S707C1D1Ev,
  (VTBL_ENTRY)&_ZN6S707C1D0Ev,
  (VTBL_ENTRY)&_ZN6S707C52v9Ev,
  (VTBL_ENTRY)&_ZN6S707C53v10Ev,
  (VTBL_ENTRY)&_ZN6S707C53v11Ev,
  (VTBL_ENTRY)&_ZN6S707C53v12Ev,
  (VTBL_ENTRY)&_ZN6S707C53v13Ev,
  (VTBL_ENTRY)&_ZN6S707C53v14Ev,
  (VTBL_ENTRY)&_ZN6S707C53v15Ev,
  (VTBL_ENTRY)&_ZN6S707C53v16Ev,
  (VTBL_ENTRY)&_ZN6S707C53v17Ev,
  (VTBL_ENTRY)&_ZN6S707C53v18Ev,
  (VTBL_ENTRY)&_ZN6S707C53v19Ev,
  (VTBL_ENTRY)&_ZN6S707C53v20Ev,
  (VTBL_ENTRY)&_ZN6S707C53v21Ev,
  (VTBL_ENTRY)&_ZN6S707C53v22Ev,
  (VTBL_ENTRY)&_ZN6S707C53v23Ev,
  (VTBL_ENTRY)&_ZN6S707C53v24Ev,
  (VTBL_ENTRY)&_ZN6S707C53v25Ev,
  (VTBL_ENTRY)&_ZN6S707C53v26Ev,
  (VTBL_ENTRY)&_ZN6S707C53v27Ev,
  (VTBL_ENTRY)&_ZN6S707C53v28Ev,
  (VTBL_ENTRY)&_ZN6S707C53v29Ev,
  (VTBL_ENTRY)&_ZN6S707C53v30Ev,
  (VTBL_ENTRY)&_ZN6S707C53v31Ev,
  (VTBL_ENTRY)&_ZN6S707C53v32Ev,
  (VTBL_ENTRY)&_ZN6S707C53v33Ev,
  (VTBL_ENTRY)&_ZN6S707C53v34Ev,
  (VTBL_ENTRY)&_ZN6S707C53v35Ev,
  (VTBL_ENTRY)&_ZN6S707C53v36Ev,
  (VTBL_ENTRY)&_ZN6S707C53v37Ev,
  (VTBL_ENTRY)&_ZN6S707C53v38Ev,
  (VTBL_ENTRY)&_ZN6S707C53v39Ev,
  (VTBL_ENTRY)&_ZN6S707C53v40Ev,
  (VTBL_ENTRY)&_ZN6S707C53v41Ev,
  (VTBL_ENTRY)&_ZN6S707C53v42Ev,
  (VTBL_ENTRY)&_ZN6S707C53v43Ev,
  (VTBL_ENTRY)&_ZN6S707C53v44Ev,
  (VTBL_ENTRY)&_ZN6S707C53v45Ev,
  (VTBL_ENTRY)&_ZN6S707C53v46Ev,
  (VTBL_ENTRY)&_ZN6S707C53v47Ev,
  (VTBL_ENTRY)&_ZN6S707C53v48Ev,
  (VTBL_ENTRY)&_ZN6S707C53v49Ev,
  (VTBL_ENTRY)&_ZN6S707C53v50Ev,
  (VTBL_ENTRY)&_ZN6S707C53v51Ev,
  (VTBL_ENTRY)&_ZN6S707C53v52Ev,
  (VTBL_ENTRY)&_ZN6S707C53v53Ev,
  (VTBL_ENTRY)&_ZN6S707C53v54Ev,
  (VTBL_ENTRY)&_ZN6S707C53v55Ev,
  (VTBL_ENTRY)&_ZN6S707C53v56Ev,
  (VTBL_ENTRY)&_ZN6S707C53v57Ev,
  (VTBL_ENTRY)&_ZN6S707C53v58Ev,
  (VTBL_ENTRY)&_ZN6S707C53v59Ev,
  (VTBL_ENTRY)&_ZN6S707C53v60Ev,
  (VTBL_ENTRY)&_ZN6S707C53v61Ev,
  (VTBL_ENTRY)&_ZN6S707C53v62Ev,
  (VTBL_ENTRY)&_ZN6S707C53v63Ev,
  (VTBL_ENTRY)&_ZN6S707C53v64Ev,
  (VTBL_ENTRY)&_ZN6S707C53v65Ev,
  (VTBL_ENTRY)&_ZN6S707C53v66Ev,
  (VTBL_ENTRY)&_ZN6S707C53v67Ev,
  (VTBL_ENTRY)&_ZN6S707C53v68Ev,
  (VTBL_ENTRY)&_ZN6S707C53v69Ev,
  (VTBL_ENTRY)&_ZN6S707C53v70Ev,
  (VTBL_ENTRY)&_ZN6S707C53v71Ev,
  (VTBL_ENTRY)&_ZN6S707C53v72Ev,
  (VTBL_ENTRY)&_ZN6S707C43v73Ev,
  (VTBL_ENTRY)&_ZN6S707C43v74Ev,
  (VTBL_ENTRY)&_ZN6S707C43v75Ev,
  (VTBL_ENTRY)&_ZN6S707C43v76Ev,
  (VTBL_ENTRY)&_ZN6S707C43v77Ev,
  (VTBL_ENTRY)&_ZN6S707C43v78Ev,
  (VTBL_ENTRY)&_ZN6S707C43v79Ev,
  (VTBL_ENTRY)&_ZN6S707C43v80Ev,
  (VTBL_ENTRY)&_ZN6S707C43v81Ev,
  (VTBL_ENTRY)&_ZN6S707C43v82Ev,
  (VTBL_ENTRY)&_ZN6S707C43v83Ev,
  (VTBL_ENTRY)&_ZN6S707C43v84Ev,
  (VTBL_ENTRY)&_ZN6S707C43v85Ev,
  (VTBL_ENTRY)&_ZN6S707C43v86Ev,
  (VTBL_ENTRY)&_ZN6S707C43v87Ev,
  (VTBL_ENTRY)&_ZN6S707C43v88Ev,
  (VTBL_ENTRY)&_ZN6S707C43v89Ev,
  (VTBL_ENTRY)&_ZN6S707C43v90Ev,
  (VTBL_ENTRY)&_ZN6S707C43v91Ev,
  (VTBL_ENTRY)&_ZN6S707C43v92Ev,
  (VTBL_ENTRY)&_ZN6S707C43v93Ev,
  (VTBL_ENTRY)&_ZN6S707C43v94Ev,
  (VTBL_ENTRY)&_ZN6S707C33v95Ev,
  (VTBL_ENTRY)&_ZN6S707C33v96Ev,
  (VTBL_ENTRY)&_ZN6S707C33v97Ev,
  (VTBL_ENTRY)&_ZN6S707C33v98Ev,
  (VTBL_ENTRY)&_ZN6S707C33v99Ev,
  (VTBL_ENTRY)&_ZN6S707C34v100Ev,
  (VTBL_ENTRY)&_ZN6S707C34v101Ev,
  (VTBL_ENTRY)&_ZN6S707C34v102Ev,
  (VTBL_ENTRY)&_ZN6S707C34v103Ev,
  (VTBL_ENTRY)&_ZN6S707C34v104Ev,
  (VTBL_ENTRY)&_ZN6S707C34v105Ev,
  (VTBL_ENTRY)&_ZN6S707C34v106Ev,
  (VTBL_ENTRY)&_ZN6S707C34v107Ev,
  (VTBL_ENTRY)&_ZN6S707C34v108Ev,
  (VTBL_ENTRY)&_ZN6S707C34v109Ev,
  (VTBL_ENTRY)&_ZN6S707C34v110Ev,
  (VTBL_ENTRY)&_ZN6S707C34v111Ev,
  (VTBL_ENTRY)&_ZN6S707C34v112Ev,
  (VTBL_ENTRY)&_ZN6S707C34v113Ev,
  (VTBL_ENTRY)&_ZN6S707C24v114Ev,
  (VTBL_ENTRY)&_ZN6S707C24v115Ev,
  (VTBL_ENTRY)&_ZN6S707C24v116Ev,
  (VTBL_ENTRY)&_ZN6S707C24v117Ev,
  (VTBL_ENTRY)&_ZN6S707C24v118Ev,
  (VTBL_ENTRY)&_ZN6S707C24v119Ev,
  (VTBL_ENTRY)&_ZN6S707C24v120Ev,
  (VTBL_ENTRY)&_ZN6S707C24v121Ev,
  (VTBL_ENTRY)&_ZN6S707C24v122Ev,
  (VTBL_ENTRY)&_ZN6S707C12v1Ev,
  (VTBL_ENTRY)&_ZN6S707C12v2Ev,
  (VTBL_ENTRY)&_ZN6S707C12v3Ev,
  (VTBL_ENTRY)&_ZN6S707C12v4Ev,
  (VTBL_ENTRY)&_ZN6S707C12v5Ev,
  (VTBL_ENTRY)&_ZN6S707C12v6Ev,
  (VTBL_ENTRY)&_ZN6S707C12v7Ev,
  (VTBL_ENTRY)&_ZN6S707C12v8Ev,
};
extern VTBL_ENTRY _ZTI6S707C1[];
extern  VTBL_ENTRY _ZTV6S707C1[];
Class_Descriptor cd_S707C1 = {  "S707C1", // class name
  bases_S707C1, 4,
  &(vtc_S707C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,156), // object size
  NSPAIRA(_ZTI6S707C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S707C1),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S671C5  {
  int s671c5f0;
  __tsi64 s671c5f1;
  void *s671c5f2[4];
  int s671c5f3[2];
  void *s671c5f4;
  ::S473C6_nt s671c5f5;
  void *s671c5f6[2];
  virtual  ~S671C5(); // _ZN6S671C5D1Ev
  virtual void  v6(); // _ZN6S671C52v6Ev
  virtual void  v7(); // _ZN6S671C52v7Ev
  virtual void  v8(); // _ZN6S671C52v8Ev
  virtual void  v9(); // _ZN6S671C52v9Ev
  virtual void  v10(); // _ZN6S671C53v10Ev
  virtual void  v11(); // _ZN6S671C53v11Ev
  virtual void  v12(); // _ZN6S671C53v12Ev
  virtual void  v13(); // _ZN6S671C53v13Ev
  virtual void  v14(); // _ZN6S671C53v14Ev
  virtual void  v15(); // _ZN6S671C53v15Ev
  virtual void  v16(); // _ZN6S671C53v16Ev
  virtual void  v17(); // _ZN6S671C53v17Ev
  virtual void  v18(); // _ZN6S671C53v18Ev
  virtual void  v19(); // _ZN6S671C53v19Ev
  virtual void  v20(); // _ZN6S671C53v20Ev
  virtual void  v21(); // _ZN6S671C53v21Ev
  virtual void  v22(); // _ZN6S671C53v22Ev
  virtual void  v23(); // _ZN6S671C53v23Ev
  virtual void  v24(); // _ZN6S671C53v24Ev
  virtual void  v25(); // _ZN6S671C53v25Ev
  virtual void  v26(); // _ZN6S671C53v26Ev
  virtual void  v27(); // _ZN6S671C53v27Ev
  virtual void  v28(); // _ZN6S671C53v28Ev
  virtual void  v29(); // _ZN6S671C53v29Ev
  virtual void  v30(); // _ZN6S671C53v30Ev
  virtual void  v31(); // _ZN6S671C53v31Ev
  virtual void  v32(); // _ZN6S671C53v32Ev
  virtual void  v33(); // _ZN6S671C53v33Ev
  virtual void  v34(); // _ZN6S671C53v34Ev
  virtual void  v35(); // _ZN6S671C53v35Ev
  virtual void  v36(); // _ZN6S671C53v36Ev
  virtual void  v37(); // _ZN6S671C53v37Ev
  virtual void  v38(); // _ZN6S671C53v38Ev
  virtual void  v39(); // _ZN6S671C53v39Ev
  virtual void  v40(); // _ZN6S671C53v40Ev
  virtual void  v41(); // _ZN6S671C53v41Ev
  virtual void  v42(); // _ZN6S671C53v42Ev
  virtual void  v43(); // _ZN6S671C53v43Ev
  virtual void  v44(); // _ZN6S671C53v44Ev
  virtual void  v45(); // _ZN6S671C53v45Ev
  virtual void  v46(); // _ZN6S671C53v46Ev
  virtual void  v47(); // _ZN6S671C53v47Ev
  virtual void  v48(); // _ZN6S671C53v48Ev
  virtual void  v49(); // _ZN6S671C53v49Ev
  virtual void  v50(); // _ZN6S671C53v50Ev
  virtual void  v51(); // _ZN6S671C53v51Ev
  virtual void  v52(); // _ZN6S671C53v52Ev
  virtual void  v53(); // _ZN6S671C53v53Ev
  virtual void  v54(); // _ZN6S671C53v54Ev
  virtual void  v55(); // _ZN6S671C53v55Ev
  virtual void  v56(); // _ZN6S671C53v56Ev
  virtual void  v57(); // _ZN6S671C53v57Ev
  virtual void  v58(); // _ZN6S671C53v58Ev
  virtual void  v59(); // _ZN6S671C53v59Ev
  virtual void  v60(); // _ZN6S671C53v60Ev
  virtual void  v61(); // _ZN6S671C53v61Ev
  virtual void  v62(); // _ZN6S671C53v62Ev
  virtual void  v63(); // _ZN6S671C53v63Ev
  virtual void  v64(); // _ZN6S671C53v64Ev
  virtual void  v65(); // _ZN6S671C53v65Ev
  virtual void  v66(); // _ZN6S671C53v66Ev
  virtual void  v67(); // _ZN6S671C53v67Ev
  virtual void  v68(); // _ZN6S671C53v68Ev
  virtual void  v69(); // _ZN6S671C53v69Ev
  S671C5(); // tgen
};
//SIG(-1 S671C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S671C5 ::~S671C5(){ note_dtor("S671C5", this);}
void  S671C5 ::v6(){vfunc_called(this, "_ZN6S671C52v6Ev");}
void  S671C5 ::v7(){vfunc_called(this, "_ZN6S671C52v7Ev");}
void  S671C5 ::v8(){vfunc_called(this, "_ZN6S671C52v8Ev");}
void  S671C5 ::v9(){vfunc_called(this, "_ZN6S671C52v9Ev");}
void  S671C5 ::v10(){vfunc_called(this, "_ZN6S671C53v10Ev");}
void  S671C5 ::v11(){vfunc_called(this, "_ZN6S671C53v11Ev");}
void  S671C5 ::v12(){vfunc_called(this, "_ZN6S671C53v12Ev");}
void  S671C5 ::v13(){vfunc_called(this, "_ZN6S671C53v13Ev");}
void  S671C5 ::v14(){vfunc_called(this, "_ZN6S671C53v14Ev");}
void  S671C5 ::v15(){vfunc_called(this, "_ZN6S671C53v15Ev");}
void  S671C5 ::v16(){vfunc_called(this, "_ZN6S671C53v16Ev");}
void  S671C5 ::v17(){vfunc_called(this, "_ZN6S671C53v17Ev");}
void  S671C5 ::v18(){vfunc_called(this, "_ZN6S671C53v18Ev");}
void  S671C5 ::v19(){vfunc_called(this, "_ZN6S671C53v19Ev");}
void  S671C5 ::v20(){vfunc_called(this, "_ZN6S671C53v20Ev");}
void  S671C5 ::v21(){vfunc_called(this, "_ZN6S671C53v21Ev");}
void  S671C5 ::v22(){vfunc_called(this, "_ZN6S671C53v22Ev");}
void  S671C5 ::v23(){vfunc_called(this, "_ZN6S671C53v23Ev");}
void  S671C5 ::v24(){vfunc_called(this, "_ZN6S671C53v24Ev");}
void  S671C5 ::v25(){vfunc_called(this, "_ZN6S671C53v25Ev");}
void  S671C5 ::v26(){vfunc_called(this, "_ZN6S671C53v26Ev");}
void  S671C5 ::v27(){vfunc_called(this, "_ZN6S671C53v27Ev");}
void  S671C5 ::v28(){vfunc_called(this, "_ZN6S671C53v28Ev");}
void  S671C5 ::v29(){vfunc_called(this, "_ZN6S671C53v29Ev");}
void  S671C5 ::v30(){vfunc_called(this, "_ZN6S671C53v30Ev");}
void  S671C5 ::v31(){vfunc_called(this, "_ZN6S671C53v31Ev");}
void  S671C5 ::v32(){vfunc_called(this, "_ZN6S671C53v32Ev");}
void  S671C5 ::v33(){vfunc_called(this, "_ZN6S671C53v33Ev");}
void  S671C5 ::v34(){vfunc_called(this, "_ZN6S671C53v34Ev");}
void  S671C5 ::v35(){vfunc_called(this, "_ZN6S671C53v35Ev");}
void  S671C5 ::v36(){vfunc_called(this, "_ZN6S671C53v36Ev");}
void  S671C5 ::v37(){vfunc_called(this, "_ZN6S671C53v37Ev");}
void  S671C5 ::v38(){vfunc_called(this, "_ZN6S671C53v38Ev");}
void  S671C5 ::v39(){vfunc_called(this, "_ZN6S671C53v39Ev");}
void  S671C5 ::v40(){vfunc_called(this, "_ZN6S671C53v40Ev");}
void  S671C5 ::v41(){vfunc_called(this, "_ZN6S671C53v41Ev");}
void  S671C5 ::v42(){vfunc_called(this, "_ZN6S671C53v42Ev");}
void  S671C5 ::v43(){vfunc_called(this, "_ZN6S671C53v43Ev");}
void  S671C5 ::v44(){vfunc_called(this, "_ZN6S671C53v44Ev");}
void  S671C5 ::v45(){vfunc_called(this, "_ZN6S671C53v45Ev");}
void  S671C5 ::v46(){vfunc_called(this, "_ZN6S671C53v46Ev");}
void  S671C5 ::v47(){vfunc_called(this, "_ZN6S671C53v47Ev");}
void  S671C5 ::v48(){vfunc_called(this, "_ZN6S671C53v48Ev");}
void  S671C5 ::v49(){vfunc_called(this, "_ZN6S671C53v49Ev");}
void  S671C5 ::v50(){vfunc_called(this, "_ZN6S671C53v50Ev");}
void  S671C5 ::v51(){vfunc_called(this, "_ZN6S671C53v51Ev");}
void  S671C5 ::v52(){vfunc_called(this, "_ZN6S671C53v52Ev");}
void  S671C5 ::v53(){vfunc_called(this, "_ZN6S671C53v53Ev");}
void  S671C5 ::v54(){vfunc_called(this, "_ZN6S671C53v54Ev");}
void  S671C5 ::v55(){vfunc_called(this, "_ZN6S671C53v55Ev");}
void  S671C5 ::v56(){vfunc_called(this, "_ZN6S671C53v56Ev");}
void  S671C5 ::v57(){vfunc_called(this, "_ZN6S671C53v57Ev");}
void  S671C5 ::v58(){vfunc_called(this, "_ZN6S671C53v58Ev");}
void  S671C5 ::v59(){vfunc_called(this, "_ZN6S671C53v59Ev");}
void  S671C5 ::v60(){vfunc_called(this, "_ZN6S671C53v60Ev");}
void  S671C5 ::v61(){vfunc_called(this, "_ZN6S671C53v61Ev");}
void  S671C5 ::v62(){vfunc_called(this, "_ZN6S671C53v62Ev");}
void  S671C5 ::v63(){vfunc_called(this, "_ZN6S671C53v63Ev");}
void  S671C5 ::v64(){vfunc_called(this, "_ZN6S671C53v64Ev");}
void  S671C5 ::v65(){vfunc_called(this, "_ZN6S671C53v65Ev");}
void  S671C5 ::v66(){vfunc_called(this, "_ZN6S671C53v66Ev");}
void  S671C5 ::v67(){vfunc_called(this, "_ZN6S671C53v67Ev");}
void  S671C5 ::v68(){vfunc_called(this, "_ZN6S671C53v68Ev");}
void  S671C5 ::v69(){vfunc_called(this, "_ZN6S671C53v69Ev");}
S671C5 ::S671C5(){ note_ctor("S671C5", this);} // tgen

static void Test_S671C5()
{
  extern Class_Descriptor cd_S671C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S671C5, buf);
    S671C5 *dp, &lv = *(dp=new (buf) S671C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S671C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S671C5)");
    check_field_offset(lv, s671c5f0, ABISELECT(8,4), "S671C5.s671c5f0");
    check_field_offset(lv, s671c5f1, ABISELECT(16,8), "S671C5.s671c5f1");
    check_field_offset(lv, s671c5f2, ABISELECT(24,16), "S671C5.s671c5f2");
    check_field_offset(lv, s671c5f3, ABISELECT(56,32), "S671C5.s671c5f3");
    check_field_offset(lv, s671c5f4, ABISELECT(64,40), "S671C5.s671c5f4");
    check_field_offset(lv, s671c5f5, ABISELECT(72,44), "S671C5.s671c5f5");
    check_field_offset(lv, s671c5f6, ABISELECT(80,52), "S671C5.s671c5f6");
    test_class_info(&lv, &cd_S671C5);
    dp->~S671C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS671C5(Test_S671C5, "S671C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S671C5C1Ev();
extern void _ZN6S671C5D1Ev();
Name_Map name_map_S671C5[] = {
  NSPAIR(_ZN6S671C5C1Ev),
  NSPAIR(_ZN6S671C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S671C5[];
extern void _ZN6S671C5D1Ev();
extern void _ZN6S671C5D0Ev();
extern void _ZN6S671C52v6Ev();
extern void _ZN6S671C52v7Ev();
extern void _ZN6S671C52v8Ev();
extern void _ZN6S671C52v9Ev();
extern void _ZN6S671C53v10Ev();
extern void _ZN6S671C53v11Ev();
extern void _ZN6S671C53v12Ev();
extern void _ZN6S671C53v13Ev();
extern void _ZN6S671C53v14Ev();
extern void _ZN6S671C53v15Ev();
extern void _ZN6S671C53v16Ev();
extern void _ZN6S671C53v17Ev();
extern void _ZN6S671C53v18Ev();
extern void _ZN6S671C53v19Ev();
extern void _ZN6S671C53v20Ev();
extern void _ZN6S671C53v21Ev();
extern void _ZN6S671C53v22Ev();
extern void _ZN6S671C53v23Ev();
extern void _ZN6S671C53v24Ev();
extern void _ZN6S671C53v25Ev();
extern void _ZN6S671C53v26Ev();
extern void _ZN6S671C53v27Ev();
extern void _ZN6S671C53v28Ev();
extern void _ZN6S671C53v29Ev();
extern void _ZN6S671C53v30Ev();
extern void _ZN6S671C53v31Ev();
extern void _ZN6S671C53v32Ev();
extern void _ZN6S671C53v33Ev();
extern void _ZN6S671C53v34Ev();
extern void _ZN6S671C53v35Ev();
extern void _ZN6S671C53v36Ev();
extern void _ZN6S671C53v37Ev();
extern void _ZN6S671C53v38Ev();
extern void _ZN6S671C53v39Ev();
extern void _ZN6S671C53v40Ev();
extern void _ZN6S671C53v41Ev();
extern void _ZN6S671C53v42Ev();
extern void _ZN6S671C53v43Ev();
extern void _ZN6S671C53v44Ev();
extern void _ZN6S671C53v45Ev();
extern void _ZN6S671C53v46Ev();
extern void _ZN6S671C53v47Ev();
extern void _ZN6S671C53v48Ev();
extern void _ZN6S671C53v49Ev();
extern void _ZN6S671C53v50Ev();
extern void _ZN6S671C53v51Ev();
extern void _ZN6S671C53v52Ev();
extern void _ZN6S671C53v53Ev();
extern void _ZN6S671C53v54Ev();
extern void _ZN6S671C53v55Ev();
extern void _ZN6S671C53v56Ev();
extern void _ZN6S671C53v57Ev();
extern void _ZN6S671C53v58Ev();
extern void _ZN6S671C53v59Ev();
extern void _ZN6S671C53v60Ev();
extern void _ZN6S671C53v61Ev();
extern void _ZN6S671C53v62Ev();
extern void _ZN6S671C53v63Ev();
extern void _ZN6S671C53v64Ev();
extern void _ZN6S671C53v65Ev();
extern void _ZN6S671C53v66Ev();
extern void _ZN6S671C53v67Ev();
extern void _ZN6S671C53v68Ev();
extern void _ZN6S671C53v69Ev();
static  VTBL_ENTRY vtc_S671C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S671C5[0]),
  (VTBL_ENTRY)&_ZN6S671C5D1Ev,
  (VTBL_ENTRY)&_ZN6S671C5D0Ev,
  (VTBL_ENTRY)&_ZN6S671C52v6Ev,
  (VTBL_ENTRY)&_ZN6S671C52v7Ev,
  (VTBL_ENTRY)&_ZN6S671C52v8Ev,
  (VTBL_ENTRY)&_ZN6S671C52v9Ev,
  (VTBL_ENTRY)&_ZN6S671C53v10Ev,
  (VTBL_ENTRY)&_ZN6S671C53v11Ev,
  (VTBL_ENTRY)&_ZN6S671C53v12Ev,
  (VTBL_ENTRY)&_ZN6S671C53v13Ev,
  (VTBL_ENTRY)&_ZN6S671C53v14Ev,
  (VTBL_ENTRY)&_ZN6S671C53v15Ev,
  (VTBL_ENTRY)&_ZN6S671C53v16Ev,
  (VTBL_ENTRY)&_ZN6S671C53v17Ev,
  (VTBL_ENTRY)&_ZN6S671C53v18Ev,
  (VTBL_ENTRY)&_ZN6S671C53v19Ev,
  (VTBL_ENTRY)&_ZN6S671C53v20Ev,
  (VTBL_ENTRY)&_ZN6S671C53v21Ev,
  (VTBL_ENTRY)&_ZN6S671C53v22Ev,
  (VTBL_ENTRY)&_ZN6S671C53v23Ev,
  (VTBL_ENTRY)&_ZN6S671C53v24Ev,
  (VTBL_ENTRY)&_ZN6S671C53v25Ev,
  (VTBL_ENTRY)&_ZN6S671C53v26Ev,
  (VTBL_ENTRY)&_ZN6S671C53v27Ev,
  (VTBL_ENTRY)&_ZN6S671C53v28Ev,
  (VTBL_ENTRY)&_ZN6S671C53v29Ev,
  (VTBL_ENTRY)&_ZN6S671C53v30Ev,
  (VTBL_ENTRY)&_ZN6S671C53v31Ev,
  (VTBL_ENTRY)&_ZN6S671C53v32Ev,
  (VTBL_ENTRY)&_ZN6S671C53v33Ev,
  (VTBL_ENTRY)&_ZN6S671C53v34Ev,
  (VTBL_ENTRY)&_ZN6S671C53v35Ev,
  (VTBL_ENTRY)&_ZN6S671C53v36Ev,
  (VTBL_ENTRY)&_ZN6S671C53v37Ev,
  (VTBL_ENTRY)&_ZN6S671C53v38Ev,
  (VTBL_ENTRY)&_ZN6S671C53v39Ev,
  (VTBL_ENTRY)&_ZN6S671C53v40Ev,
  (VTBL_ENTRY)&_ZN6S671C53v41Ev,
  (VTBL_ENTRY)&_ZN6S671C53v42Ev,
  (VTBL_ENTRY)&_ZN6S671C53v43Ev,
  (VTBL_ENTRY)&_ZN6S671C53v44Ev,
  (VTBL_ENTRY)&_ZN6S671C53v45Ev,
  (VTBL_ENTRY)&_ZN6S671C53v46Ev,
  (VTBL_ENTRY)&_ZN6S671C53v47Ev,
  (VTBL_ENTRY)&_ZN6S671C53v48Ev,
  (VTBL_ENTRY)&_ZN6S671C53v49Ev,
  (VTBL_ENTRY)&_ZN6S671C53v50Ev,
  (VTBL_ENTRY)&_ZN6S671C53v51Ev,
  (VTBL_ENTRY)&_ZN6S671C53v52Ev,
  (VTBL_ENTRY)&_ZN6S671C53v53Ev,
  (VTBL_ENTRY)&_ZN6S671C53v54Ev,
  (VTBL_ENTRY)&_ZN6S671C53v55Ev,
  (VTBL_ENTRY)&_ZN6S671C53v56Ev,
  (VTBL_ENTRY)&_ZN6S671C53v57Ev,
  (VTBL_ENTRY)&_ZN6S671C53v58Ev,
  (VTBL_ENTRY)&_ZN6S671C53v59Ev,
  (VTBL_ENTRY)&_ZN6S671C53v60Ev,
  (VTBL_ENTRY)&_ZN6S671C53v61Ev,
  (VTBL_ENTRY)&_ZN6S671C53v62Ev,
  (VTBL_ENTRY)&_ZN6S671C53v63Ev,
  (VTBL_ENTRY)&_ZN6S671C53v64Ev,
  (VTBL_ENTRY)&_ZN6S671C53v65Ev,
  (VTBL_ENTRY)&_ZN6S671C53v66Ev,
  (VTBL_ENTRY)&_ZN6S671C53v67Ev,
  (VTBL_ENTRY)&_ZN6S671C53v68Ev,
  (VTBL_ENTRY)&_ZN6S671C53v69Ev,
};
extern VTBL_ENTRY _ZTI6S671C5[];
extern  VTBL_ENTRY _ZTV6S671C5[];
Class_Descriptor cd_S671C5 = {  "S671C5", // class name
  0,0,//no base classes
  &(vtc_S671C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S671C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S671C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S671C4  : S671C5 {
  int s671c4f0[2];
  void *s671c4f1;
  int s671c4f2[2];
  ::S473C7_nt s671c4f3;
  ::S473C7_nt s671c4f4;
  ::S21925C42 s671c4f5;
  ::S473C7_nt s671c4f6;
  unsigned int s671c4f7:1;
  unsigned int s671c4f8:1;
  unsigned int s671c4f9:1;
  unsigned int s671c4f10:1;
  unsigned int s671c4f11:1;
  int s671c4f12[2];
  virtual  ~S671C4(); // _ZN6S671C4D1Ev
  virtual void  v70(); // _ZN6S671C43v70Ev
  virtual void  v71(); // _ZN6S671C43v71Ev
  virtual void  v72(); // _ZN6S671C43v72Ev
  virtual void  v73(); // _ZN6S671C43v73Ev
  virtual void  v74(); // _ZN6S671C43v74Ev
  virtual void  v75(); // _ZN6S671C43v75Ev
  virtual void  v76(); // _ZN6S671C43v76Ev
  virtual void  v77(); // _ZN6S671C43v77Ev
  virtual void  v78(); // _ZN6S671C43v78Ev
  virtual void  v79(); // _ZN6S671C43v79Ev
  virtual void  v80(); // _ZN6S671C43v80Ev
  virtual void  v81(); // _ZN6S671C43v81Ev
  virtual void  v82(); // _ZN6S671C43v82Ev
  virtual void  v83(); // _ZN6S671C43v83Ev
  virtual void  v84(); // _ZN6S671C43v84Ev
  virtual void  v85(); // _ZN6S671C43v85Ev
  virtual void  v86(); // _ZN6S671C43v86Ev
  virtual void  v87(); // _ZN6S671C43v87Ev
  virtual void  v88(); // _ZN6S671C43v88Ev
  virtual void  v89(); // _ZN6S671C43v89Ev
  virtual void  v90(); // _ZN6S671C43v90Ev
  virtual void  v91(); // _ZN6S671C43v91Ev
  S671C4(); // tgen
};
//SIG(-1 S671C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S671C4 ::~S671C4(){ note_dtor("S671C4", this);}
void  S671C4 ::v70(){vfunc_called(this, "_ZN6S671C43v70Ev");}
void  S671C4 ::v71(){vfunc_called(this, "_ZN6S671C43v71Ev");}
void  S671C4 ::v72(){vfunc_called(this, "_ZN6S671C43v72Ev");}
void  S671C4 ::v73(){vfunc_called(this, "_ZN6S671C43v73Ev");}
void  S671C4 ::v74(){vfunc_called(this, "_ZN6S671C43v74Ev");}
void  S671C4 ::v75(){vfunc_called(this, "_ZN6S671C43v75Ev");}
void  S671C4 ::v76(){vfunc_called(this, "_ZN6S671C43v76Ev");}
void  S671C4 ::v77(){vfunc_called(this, "_ZN6S671C43v77Ev");}
void  S671C4 ::v78(){vfunc_called(this, "_ZN6S671C43v78Ev");}
void  S671C4 ::v79(){vfunc_called(this, "_ZN6S671C43v79Ev");}
void  S671C4 ::v80(){vfunc_called(this, "_ZN6S671C43v80Ev");}
void  S671C4 ::v81(){vfunc_called(this, "_ZN6S671C43v81Ev");}
void  S671C4 ::v82(){vfunc_called(this, "_ZN6S671C43v82Ev");}
void  S671C4 ::v83(){vfunc_called(this, "_ZN6S671C43v83Ev");}
void  S671C4 ::v84(){vfunc_called(this, "_ZN6S671C43v84Ev");}
void  S671C4 ::v85(){vfunc_called(this, "_ZN6S671C43v85Ev");}
void  S671C4 ::v86(){vfunc_called(this, "_ZN6S671C43v86Ev");}
void  S671C4 ::v87(){vfunc_called(this, "_ZN6S671C43v87Ev");}
void  S671C4 ::v88(){vfunc_called(this, "_ZN6S671C43v88Ev");}
void  S671C4 ::v89(){vfunc_called(this, "_ZN6S671C43v89Ev");}
void  S671C4 ::v90(){vfunc_called(this, "_ZN6S671C43v90Ev");}
void  S671C4 ::v91(){vfunc_called(this, "_ZN6S671C43v91Ev");}
S671C4 ::S671C4(){ note_ctor("S671C4", this);} // tgen

static void Test_S671C4()
{
  extern Class_Descriptor cd_S671C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S671C4, buf);
    S671C4 *dp, &lv = *(dp=new (buf) S671C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S671C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S671C4)");
    check_base_class_offset(lv, (S671C5*), 0, "S671C4");
    check_field_offset(lv, s671c4f0, ABISELECT(96,60), "S671C4.s671c4f0");
    check_field_offset(lv, s671c4f1, ABISELECT(104,68), "S671C4.s671c4f1");
    check_field_offset(lv, s671c4f2, ABISELECT(112,72), "S671C4.s671c4f2");
    check_field_offset(lv, s671c4f3, ABISELECT(120,80), "S671C4.s671c4f3");
    check_field_offset(lv, s671c4f4, ABISELECT(136,92), "S671C4.s671c4f4");
    check_field_offset(lv, s671c4f5, ABISELECT(152,104), "S671C4.s671c4f5");
    check_field_offset(lv, s671c4f6, ABISELECT(160,108), "S671C4.s671c4f6");
    set_bf_and_test(lv, s671c4f7, ABISELECT(176,120), 0, 1, 1, "S671C4");
    set_bf_and_test(lv, s671c4f8, ABISELECT(176,120), 1, 1, 1, "S671C4");
    set_bf_and_test(lv, s671c4f9, ABISELECT(176,120), 2, 1, 1, "S671C4");
    set_bf_and_test(lv, s671c4f10, ABISELECT(176,120), 3, 1, 1, "S671C4");
    set_bf_and_test(lv, s671c4f11, ABISELECT(176,120), 4, 1, 1, "S671C4");
    check_field_offset(lv, s671c4f12, ABISELECT(180,124), "S671C4.s671c4f12");
    test_class_info(&lv, &cd_S671C4);
    dp->~S671C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS671C4(Test_S671C4, "S671C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S671C4C1Ev();
extern void _ZN6S671C4D1Ev();
Name_Map name_map_S671C4[] = {
  NSPAIR(_ZN6S671C4C1Ev),
  NSPAIR(_ZN6S671C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S671C5;
extern VTBL_ENTRY _ZTI6S671C5[];
extern  VTBL_ENTRY _ZTV6S671C5[];
static Base_Class bases_S671C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S671C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S671C4[];
extern void _ZN6S671C4D1Ev();
extern void _ZN6S671C4D0Ev();
extern void _ZN6S671C52v6Ev();
extern void _ZN6S671C52v7Ev();
extern void _ZN6S671C52v8Ev();
extern void _ZN6S671C52v9Ev();
extern void _ZN6S671C53v10Ev();
extern void _ZN6S671C53v11Ev();
extern void _ZN6S671C53v12Ev();
extern void _ZN6S671C53v13Ev();
extern void _ZN6S671C53v14Ev();
extern void _ZN6S671C53v15Ev();
extern void _ZN6S671C53v16Ev();
extern void _ZN6S671C53v17Ev();
extern void _ZN6S671C53v18Ev();
extern void _ZN6S671C53v19Ev();
extern void _ZN6S671C53v20Ev();
extern void _ZN6S671C53v21Ev();
extern void _ZN6S671C53v22Ev();
extern void _ZN6S671C53v23Ev();
extern void _ZN6S671C53v24Ev();
extern void _ZN6S671C53v25Ev();
extern void _ZN6S671C53v26Ev();
extern void _ZN6S671C53v27Ev();
extern void _ZN6S671C53v28Ev();
extern void _ZN6S671C53v29Ev();
extern void _ZN6S671C53v30Ev();
extern void _ZN6S671C53v31Ev();
extern void _ZN6S671C53v32Ev();
extern void _ZN6S671C53v33Ev();
extern void _ZN6S671C53v34Ev();
extern void _ZN6S671C53v35Ev();
extern void _ZN6S671C53v36Ev();
extern void _ZN6S671C53v37Ev();
extern void _ZN6S671C53v38Ev();
extern void _ZN6S671C53v39Ev();
extern void _ZN6S671C53v40Ev();
extern void _ZN6S671C53v41Ev();
extern void _ZN6S671C53v42Ev();
extern void _ZN6S671C53v43Ev();
extern void _ZN6S671C53v44Ev();
extern void _ZN6S671C53v45Ev();
extern void _ZN6S671C53v46Ev();
extern void _ZN6S671C53v47Ev();
extern void _ZN6S671C53v48Ev();
extern void _ZN6S671C53v49Ev();
extern void _ZN6S671C53v50Ev();
extern void _ZN6S671C53v51Ev();
extern void _ZN6S671C53v52Ev();
extern void _ZN6S671C53v53Ev();
extern void _ZN6S671C53v54Ev();
extern void _ZN6S671C53v55Ev();
extern void _ZN6S671C53v56Ev();
extern void _ZN6S671C53v57Ev();
extern void _ZN6S671C53v58Ev();
extern void _ZN6S671C53v59Ev();
extern void _ZN6S671C53v60Ev();
extern void _ZN6S671C53v61Ev();
extern void _ZN6S671C53v62Ev();
extern void _ZN6S671C53v63Ev();
extern void _ZN6S671C53v64Ev();
extern void _ZN6S671C53v65Ev();
extern void _ZN6S671C53v66Ev();
extern void _ZN6S671C53v67Ev();
extern void _ZN6S671C53v68Ev();
extern void _ZN6S671C53v69Ev();
extern void _ZN6S671C43v70Ev();
extern void _ZN6S671C43v71Ev();
extern void _ZN6S671C43v72Ev();
extern void _ZN6S671C43v73Ev();
extern void _ZN6S671C43v74Ev();
extern void _ZN6S671C43v75Ev();
extern void _ZN6S671C43v76Ev();
extern void _ZN6S671C43v77Ev();
extern void _ZN6S671C43v78Ev();
extern void _ZN6S671C43v79Ev();
extern void _ZN6S671C43v80Ev();
extern void _ZN6S671C43v81Ev();
extern void _ZN6S671C43v82Ev();
extern void _ZN6S671C43v83Ev();
extern void _ZN6S671C43v84Ev();
extern void _ZN6S671C43v85Ev();
extern void _ZN6S671C43v86Ev();
extern void _ZN6S671C43v87Ev();
extern void _ZN6S671C43v88Ev();
extern void _ZN6S671C43v89Ev();
extern void _ZN6S671C43v90Ev();
extern void _ZN6S671C43v91Ev();
static  VTBL_ENTRY vtc_S671C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S671C4[0]),
  (VTBL_ENTRY)&_ZN6S671C4D1Ev,
  (VTBL_ENTRY)&_ZN6S671C4D0Ev,
  (VTBL_ENTRY)&_ZN6S671C52v6Ev,
  (VTBL_ENTRY)&_ZN6S671C52v7Ev,
  (VTBL_ENTRY)&_ZN6S671C52v8Ev,
  (VTBL_ENTRY)&_ZN6S671C52v9Ev,
  (VTBL_ENTRY)&_ZN6S671C53v10Ev,
  (VTBL_ENTRY)&_ZN6S671C53v11Ev,
  (VTBL_ENTRY)&_ZN6S671C53v12Ev,
  (VTBL_ENTRY)&_ZN6S671C53v13Ev,
  (VTBL_ENTRY)&_ZN6S671C53v14Ev,
  (VTBL_ENTRY)&_ZN6S671C53v15Ev,
  (VTBL_ENTRY)&_ZN6S671C53v16Ev,
  (VTBL_ENTRY)&_ZN6S671C53v17Ev,
  (VTBL_ENTRY)&_ZN6S671C53v18Ev,
  (VTBL_ENTRY)&_ZN6S671C53v19Ev,
  (VTBL_ENTRY)&_ZN6S671C53v20Ev,
  (VTBL_ENTRY)&_ZN6S671C53v21Ev,
  (VTBL_ENTRY)&_ZN6S671C53v22Ev,
  (VTBL_ENTRY)&_ZN6S671C53v23Ev,
  (VTBL_ENTRY)&_ZN6S671C53v24Ev,
  (VTBL_ENTRY)&_ZN6S671C53v25Ev,
  (VTBL_ENTRY)&_ZN6S671C53v26Ev,
  (VTBL_ENTRY)&_ZN6S671C53v27Ev,
  (VTBL_ENTRY)&_ZN6S671C53v28Ev,
  (VTBL_ENTRY)&_ZN6S671C53v29Ev,
  (VTBL_ENTRY)&_ZN6S671C53v30Ev,
  (VTBL_ENTRY)&_ZN6S671C53v31Ev,
  (VTBL_ENTRY)&_ZN6S671C53v32Ev,
  (VTBL_ENTRY)&_ZN6S671C53v33Ev,
  (VTBL_ENTRY)&_ZN6S671C53v34Ev,
  (VTBL_ENTRY)&_ZN6S671C53v35Ev,
  (VTBL_ENTRY)&_ZN6S671C53v36Ev,
  (VTBL_ENTRY)&_ZN6S671C53v37Ev,
  (VTBL_ENTRY)&_ZN6S671C53v38Ev,
  (VTBL_ENTRY)&_ZN6S671C53v39Ev,
  (VTBL_ENTRY)&_ZN6S671C53v40Ev,
  (VTBL_ENTRY)&_ZN6S671C53v41Ev,
  (VTBL_ENTRY)&_ZN6S671C53v42Ev,
  (VTBL_ENTRY)&_ZN6S671C53v43Ev,
  (VTBL_ENTRY)&_ZN6S671C53v44Ev,
  (VTBL_ENTRY)&_ZN6S671C53v45Ev,
  (VTBL_ENTRY)&_ZN6S671C53v46Ev,
  (VTBL_ENTRY)&_ZN6S671C53v47Ev,
  (VTBL_ENTRY)&_ZN6S671C53v48Ev,
  (VTBL_ENTRY)&_ZN6S671C53v49Ev,
  (VTBL_ENTRY)&_ZN6S671C53v50Ev,
  (VTBL_ENTRY)&_ZN6S671C53v51Ev,
  (VTBL_ENTRY)&_ZN6S671C53v52Ev,
  (VTBL_ENTRY)&_ZN6S671C53v53Ev,
  (VTBL_ENTRY)&_ZN6S671C53v54Ev,
  (VTBL_ENTRY)&_ZN6S671C53v55Ev,
  (VTBL_ENTRY)&_ZN6S671C53v56Ev,
  (VTBL_ENTRY)&_ZN6S671C53v57Ev,
  (VTBL_ENTRY)&_ZN6S671C53v58Ev,
  (VTBL_ENTRY)&_ZN6S671C53v59Ev,
  (VTBL_ENTRY)&_ZN6S671C53v60Ev,
  (VTBL_ENTRY)&_ZN6S671C53v61Ev,
  (VTBL_ENTRY)&_ZN6S671C53v62Ev,
  (VTBL_ENTRY)&_ZN6S671C53v63Ev,
  (VTBL_ENTRY)&_ZN6S671C53v64Ev,
  (VTBL_ENTRY)&_ZN6S671C53v65Ev,
  (VTBL_ENTRY)&_ZN6S671C53v66Ev,
  (VTBL_ENTRY)&_ZN6S671C53v67Ev,
  (VTBL_ENTRY)&_ZN6S671C53v68Ev,
  (VTBL_ENTRY)&_ZN6S671C53v69Ev,
  (VTBL_ENTRY)&_ZN6S671C43v70Ev,
  (VTBL_ENTRY)&_ZN6S671C43v71Ev,
  (VTBL_ENTRY)&_ZN6S671C43v72Ev,
  (VTBL_ENTRY)&_ZN6S671C43v73Ev,
  (VTBL_ENTRY)&_ZN6S671C43v74Ev,
  (VTBL_ENTRY)&_ZN6S671C43v75Ev,
  (VTBL_ENTRY)&_ZN6S671C43v76Ev,
  (VTBL_ENTRY)&_ZN6S671C43v77Ev,
  (VTBL_ENTRY)&_ZN6S671C43v78Ev,
  (VTBL_ENTRY)&_ZN6S671C43v79Ev,
  (VTBL_ENTRY)&_ZN6S671C43v80Ev,
  (VTBL_ENTRY)&_ZN6S671C43v81Ev,
  (VTBL_ENTRY)&_ZN6S671C43v82Ev,
  (VTBL_ENTRY)&_ZN6S671C43v83Ev,
  (VTBL_ENTRY)&_ZN6S671C43v84Ev,
  (VTBL_ENTRY)&_ZN6S671C43v85Ev,
  (VTBL_ENTRY)&_ZN6S671C43v86Ev,
  (VTBL_ENTRY)&_ZN6S671C43v87Ev,
  (VTBL_ENTRY)&_ZN6S671C43v88Ev,
  (VTBL_ENTRY)&_ZN6S671C43v89Ev,
  (VTBL_ENTRY)&_ZN6S671C43v90Ev,
  (VTBL_ENTRY)&_ZN6S671C43v91Ev,
};
extern VTBL_ENTRY _ZTI6S671C4[];
extern  VTBL_ENTRY _ZTV6S671C4[];
Class_Descriptor cd_S671C4 = {  "S671C4", // class name
  bases_S671C4, 1,
  &(vtc_S671C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S671C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S671C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S671C3  : S671C4 {
  ::S473C6_nt s671c3f0;
  virtual  ~S671C3(); // _ZN6S671C3D1Ev
  virtual void  v92(); // _ZN6S671C33v92Ev
  virtual void  v93(); // _ZN6S671C33v93Ev
  virtual void  v94(); // _ZN6S671C33v94Ev
  virtual void  v95(); // _ZN6S671C33v95Ev
  virtual void  v96(); // _ZN6S671C33v96Ev
  virtual void  v97(); // _ZN6S671C33v97Ev
  virtual void  v98(); // _ZN6S671C33v98Ev
  virtual void  v99(); // _ZN6S671C33v99Ev
  virtual void  v100(); // _ZN6S671C34v100Ev
  virtual void  v101(); // _ZN6S671C34v101Ev
  virtual void  v102(); // _ZN6S671C34v102Ev
  virtual void  v103(); // _ZN6S671C34v103Ev
  virtual void  v104(); // _ZN6S671C34v104Ev
  virtual void  v105(); // _ZN6S671C34v105Ev
  virtual void  v106(); // _ZN6S671C34v106Ev
  virtual void  v107(); // _ZN6S671C34v107Ev
  virtual void  v108(); // _ZN6S671C34v108Ev
  virtual void  v109(); // _ZN6S671C34v109Ev
  virtual void  v110(); // _ZN6S671C34v110Ev
  S671C3(); // tgen
};
//SIG(-1 S671C3) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S671C3 ::~S671C3(){ note_dtor("S671C3", this);}
void  S671C3 ::v92(){vfunc_called(this, "_ZN6S671C33v92Ev");}
void  S671C3 ::v93(){vfunc_called(this, "_ZN6S671C33v93Ev");}
void  S671C3 ::v94(){vfunc_called(this, "_ZN6S671C33v94Ev");}
void  S671C3 ::v95(){vfunc_called(this, "_ZN6S671C33v95Ev");}
void  S671C3 ::v96(){vfunc_called(this, "_ZN6S671C33v96Ev");}
void  S671C3 ::v97(){vfunc_called(this, "_ZN6S671C33v97Ev");}
void  S671C3 ::v98(){vfunc_called(this, "_ZN6S671C33v98Ev");}
void  S671C3 ::v99(){vfunc_called(this, "_ZN6S671C33v99Ev");}
void  S671C3 ::v100(){vfunc_called(this, "_ZN6S671C34v100Ev");}
void  S671C3 ::v101(){vfunc_called(this, "_ZN6S671C34v101Ev");}
void  S671C3 ::v102(){vfunc_called(this, "_ZN6S671C34v102Ev");}
void  S671C3 ::v103(){vfunc_called(this, "_ZN6S671C34v103Ev");}
void  S671C3 ::v104(){vfunc_called(this, "_ZN6S671C34v104Ev");}
void  S671C3 ::v105(){vfunc_called(this, "_ZN6S671C34v105Ev");}
void  S671C3 ::v106(){vfunc_called(this, "_ZN6S671C34v106Ev");}
void  S671C3 ::v107(){vfunc_called(this, "_ZN6S671C34v107Ev");}
void  S671C3 ::v108(){vfunc_called(this, "_ZN6S671C34v108Ev");}
void  S671C3 ::v109(){vfunc_called(this, "_ZN6S671C34v109Ev");}
void  S671C3 ::v110(){vfunc_called(this, "_ZN6S671C34v110Ev");}
S671C3 ::S671C3(){ note_ctor("S671C3", this);} // tgen

static void Test_S671C3()
{
  extern Class_Descriptor cd_S671C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S671C3, buf);
    S671C3 *dp, &lv = *(dp=new (buf) S671C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S671C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S671C3)");
    check_base_class_offset(lv, (S671C5*)(S671C4*), 0, "S671C3");
    check_base_class_offset(lv, (S671C4*), 0, "S671C3");
    check_field_offset(lv, s671c3f0, ABISELECT(188,132), "S671C3.s671c3f0");
    test_class_info(&lv, &cd_S671C3);
    dp->~S671C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS671C3(Test_S671C3, "S671C3", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN6S671C3C1Ev();
extern void _ZN6S671C3D1Ev();
Name_Map name_map_S671C3[] = {
  NSPAIR(_ZN6S671C3C1Ev),
  NSPAIR(_ZN6S671C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S671C5;
extern VTBL_ENTRY _ZTI6S671C5[];
extern  VTBL_ENTRY _ZTV6S671C5[];
extern Class_Descriptor cd_S671C4;
extern VTBL_ENTRY _ZTI6S671C4[];
extern  VTBL_ENTRY _ZTV6S671C4[];
static Base_Class bases_S671C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S671C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S671C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S671C3[];
extern void _ZN6S671C3D1Ev();
extern void _ZN6S671C3D0Ev();
extern void _ZN6S671C52v6Ev();
extern void _ZN6S671C52v7Ev();
extern void _ZN6S671C52v8Ev();
extern void _ZN6S671C52v9Ev();
extern void _ZN6S671C53v10Ev();
extern void _ZN6S671C53v11Ev();
extern void _ZN6S671C53v12Ev();
extern void _ZN6S671C53v13Ev();
extern void _ZN6S671C53v14Ev();
extern void _ZN6S671C53v15Ev();
extern void _ZN6S671C53v16Ev();
extern void _ZN6S671C53v17Ev();
extern void _ZN6S671C53v18Ev();
extern void _ZN6S671C53v19Ev();
extern void _ZN6S671C53v20Ev();
extern void _ZN6S671C53v21Ev();
extern void _ZN6S671C53v22Ev();
extern void _ZN6S671C53v23Ev();
extern void _ZN6S671C53v24Ev();
extern void _ZN6S671C53v25Ev();
extern void _ZN6S671C53v26Ev();
extern void _ZN6S671C53v27Ev();
extern void _ZN6S671C53v28Ev();
extern void _ZN6S671C53v29Ev();
extern void _ZN6S671C53v30Ev();
extern void _ZN6S671C53v31Ev();
extern void _ZN6S671C53v32Ev();
extern void _ZN6S671C53v33Ev();
extern void _ZN6S671C53v34Ev();
extern void _ZN6S671C53v35Ev();
extern void _ZN6S671C53v36Ev();
extern void _ZN6S671C53v37Ev();
extern void _ZN6S671C53v38Ev();
extern void _ZN6S671C53v39Ev();
extern void _ZN6S671C53v40Ev();
extern void _ZN6S671C53v41Ev();
extern void _ZN6S671C53v42Ev();
extern void _ZN6S671C53v43Ev();
extern void _ZN6S671C53v44Ev();
extern void _ZN6S671C53v45Ev();
extern void _ZN6S671C53v46Ev();
extern void _ZN6S671C53v47Ev();
extern void _ZN6S671C53v48Ev();
extern void _ZN6S671C53v49Ev();
extern void _ZN6S671C53v50Ev();
extern void _ZN6S671C53v51Ev();
extern void _ZN6S671C53v52Ev();
extern void _ZN6S671C53v53Ev();
extern void _ZN6S671C53v54Ev();
extern void _ZN6S671C53v55Ev();
extern void _ZN6S671C53v56Ev();
extern void _ZN6S671C53v57Ev();
extern void _ZN6S671C53v58Ev();
extern void _ZN6S671C53v59Ev();
extern void _ZN6S671C53v60Ev();
extern void _ZN6S671C53v61Ev();
extern void _ZN6S671C53v62Ev();
extern void _ZN6S671C53v63Ev();
extern void _ZN6S671C53v64Ev();
extern void _ZN6S671C53v65Ev();
extern void _ZN6S671C53v66Ev();
extern void _ZN6S671C53v67Ev();
extern void _ZN6S671C53v68Ev();
extern void _ZN6S671C53v69Ev();
extern void _ZN6S671C43v70Ev();
extern void _ZN6S671C43v71Ev();
extern void _ZN6S671C43v72Ev();
extern void _ZN6S671C43v73Ev();
extern void _ZN6S671C43v74Ev();
extern void _ZN6S671C43v75Ev();
extern void _ZN6S671C43v76Ev();
extern void _ZN6S671C43v77Ev();
extern void _ZN6S671C43v78Ev();
extern void _ZN6S671C43v79Ev();
extern void _ZN6S671C43v80Ev();
extern void _ZN6S671C43v81Ev();
extern void _ZN6S671C43v82Ev();
extern void _ZN6S671C43v83Ev();
extern void _ZN6S671C43v84Ev();
extern void _ZN6S671C43v85Ev();
extern void _ZN6S671C43v86Ev();
extern void _ZN6S671C43v87Ev();
extern void _ZN6S671C43v88Ev();
extern void _ZN6S671C43v89Ev();
extern void _ZN6S671C43v90Ev();
extern void _ZN6S671C43v91Ev();
extern void _ZN6S671C33v92Ev();
extern void _ZN6S671C33v93Ev();
extern void _ZN6S671C33v94Ev();
extern void _ZN6S671C33v95Ev();
extern void _ZN6S671C33v96Ev();
extern void _ZN6S671C33v97Ev();
extern void _ZN6S671C33v98Ev();
extern void _ZN6S671C33v99Ev();
extern void _ZN6S671C34v100Ev();
extern void _ZN6S671C34v101Ev();
extern void _ZN6S671C34v102Ev();
extern void _ZN6S671C34v103Ev();
extern void _ZN6S671C34v104Ev();
extern void _ZN6S671C34v105Ev();
extern void _ZN6S671C34v106Ev();
extern void _ZN6S671C34v107Ev();
extern void _ZN6S671C34v108Ev();
extern void _ZN6S671C34v109Ev();
extern void _ZN6S671C34v110Ev();
static  VTBL_ENTRY vtc_S671C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S671C3[0]),
  (VTBL_ENTRY)&_ZN6S671C3D1Ev,
  (VTBL_ENTRY)&_ZN6S671C3D0Ev,
  (VTBL_ENTRY)&_ZN6S671C52v6Ev,
  (VTBL_ENTRY)&_ZN6S671C52v7Ev,
  (VTBL_ENTRY)&_ZN6S671C52v8Ev,
  (VTBL_ENTRY)&_ZN6S671C52v9Ev,
  (VTBL_ENTRY)&_ZN6S671C53v10Ev,
  (VTBL_ENTRY)&_ZN6S671C53v11Ev,
  (VTBL_ENTRY)&_ZN6S671C53v12Ev,
  (VTBL_ENTRY)&_ZN6S671C53v13Ev,
  (VTBL_ENTRY)&_ZN6S671C53v14Ev,
  (VTBL_ENTRY)&_ZN6S671C53v15Ev,
  (VTBL_ENTRY)&_ZN6S671C53v16Ev,
  (VTBL_ENTRY)&_ZN6S671C53v17Ev,
  (VTBL_ENTRY)&_ZN6S671C53v18Ev,
  (VTBL_ENTRY)&_ZN6S671C53v19Ev,
  (VTBL_ENTRY)&_ZN6S671C53v20Ev,
  (VTBL_ENTRY)&_ZN6S671C53v21Ev,
  (VTBL_ENTRY)&_ZN6S671C53v22Ev,
  (VTBL_ENTRY)&_ZN6S671C53v23Ev,
  (VTBL_ENTRY)&_ZN6S671C53v24Ev,
  (VTBL_ENTRY)&_ZN6S671C53v25Ev,
  (VTBL_ENTRY)&_ZN6S671C53v26Ev,
  (VTBL_ENTRY)&_ZN6S671C53v27Ev,
  (VTBL_ENTRY)&_ZN6S671C53v28Ev,
  (VTBL_ENTRY)&_ZN6S671C53v29Ev,
  (VTBL_ENTRY)&_ZN6S671C53v30Ev,
  (VTBL_ENTRY)&_ZN6S671C53v31Ev,
  (VTBL_ENTRY)&_ZN6S671C53v32Ev,
  (VTBL_ENTRY)&_ZN6S671C53v33Ev,
  (VTBL_ENTRY)&_ZN6S671C53v34Ev,
  (VTBL_ENTRY)&_ZN6S671C53v35Ev,
  (VTBL_ENTRY)&_ZN6S671C53v36Ev,
  (VTBL_ENTRY)&_ZN6S671C53v37Ev,
  (VTBL_ENTRY)&_ZN6S671C53v38Ev,
  (VTBL_ENTRY)&_ZN6S671C53v39Ev,
  (VTBL_ENTRY)&_ZN6S671C53v40Ev,
  (VTBL_ENTRY)&_ZN6S671C53v41Ev,
  (VTBL_ENTRY)&_ZN6S671C53v42Ev,
  (VTBL_ENTRY)&_ZN6S671C53v43Ev,
  (VTBL_ENTRY)&_ZN6S671C53v44Ev,
  (VTBL_ENTRY)&_ZN6S671C53v45Ev,
  (VTBL_ENTRY)&_ZN6S671C53v46Ev,
  (VTBL_ENTRY)&_ZN6S671C53v47Ev,
  (VTBL_ENTRY)&_ZN6S671C53v48Ev,
  (VTBL_ENTRY)&_ZN6S671C53v49Ev,
  (VTBL_ENTRY)&_ZN6S671C53v50Ev,
  (VTBL_ENTRY)&_ZN6S671C53v51Ev,
  (VTBL_ENTRY)&_ZN6S671C53v52Ev,
  (VTBL_ENTRY)&_ZN6S671C53v53Ev,
  (VTBL_ENTRY)&_ZN6S671C53v54Ev,
  (VTBL_ENTRY)&_ZN6S671C53v55Ev,
  (VTBL_ENTRY)&_ZN6S671C53v56Ev,
  (VTBL_ENTRY)&_ZN6S671C53v57Ev,
  (VTBL_ENTRY)&_ZN6S671C53v58Ev,
  (VTBL_ENTRY)&_ZN6S671C53v59Ev,
  (VTBL_ENTRY)&_ZN6S671C53v60Ev,
  (VTBL_ENTRY)&_ZN6S671C53v61Ev,
  (VTBL_ENTRY)&_ZN6S671C53v62Ev,
  (VTBL_ENTRY)&_ZN6S671C53v63Ev,
  (VTBL_ENTRY)&_ZN6S671C53v64Ev,
  (VTBL_ENTRY)&_ZN6S671C53v65Ev,
  (VTBL_ENTRY)&_ZN6S671C53v66Ev,
  (VTBL_ENTRY)&_ZN6S671C53v67Ev,
  (VTBL_ENTRY)&_ZN6S671C53v68Ev,
  (VTBL_ENTRY)&_ZN6S671C53v69Ev,
  (VTBL_ENTRY)&_ZN6S671C43v70Ev,
  (VTBL_ENTRY)&_ZN6S671C43v71Ev,
  (VTBL_ENTRY)&_ZN6S671C43v72Ev,
  (VTBL_ENTRY)&_ZN6S671C43v73Ev,
  (VTBL_ENTRY)&_ZN6S671C43v74Ev,
  (VTBL_ENTRY)&_ZN6S671C43v75Ev,
  (VTBL_ENTRY)&_ZN6S671C43v76Ev,
  (VTBL_ENTRY)&_ZN6S671C43v77Ev,
  (VTBL_ENTRY)&_ZN6S671C43v78Ev,
  (VTBL_ENTRY)&_ZN6S671C43v79Ev,
  (VTBL_ENTRY)&_ZN6S671C43v80Ev,
  (VTBL_ENTRY)&_ZN6S671C43v81Ev,
  (VTBL_ENTRY)&_ZN6S671C43v82Ev,
  (VTBL_ENTRY)&_ZN6S671C43v83Ev,
  (VTBL_ENTRY)&_ZN6S671C43v84Ev,
  (VTBL_ENTRY)&_ZN6S671C43v85Ev,
  (VTBL_ENTRY)&_ZN6S671C43v86Ev,
  (VTBL_ENTRY)&_ZN6S671C43v87Ev,
  (VTBL_ENTRY)&_ZN6S671C43v88Ev,
  (VTBL_ENTRY)&_ZN6S671C43v89Ev,
  (VTBL_ENTRY)&_ZN6S671C43v90Ev,
  (VTBL_ENTRY)&_ZN6S671C43v91Ev,
  (VTBL_ENTRY)&_ZN6S671C33v92Ev,
  (VTBL_ENTRY)&_ZN6S671C33v93Ev,
  (VTBL_ENTRY)&_ZN6S671C33v94Ev,
  (VTBL_ENTRY)&_ZN6S671C33v95Ev,
  (VTBL_ENTRY)&_ZN6S671C33v96Ev,
  (VTBL_ENTRY)&_ZN6S671C33v97Ev,
  (VTBL_ENTRY)&_ZN6S671C33v98Ev,
  (VTBL_ENTRY)&_ZN6S671C33v99Ev,
  (VTBL_ENTRY)&_ZN6S671C34v100Ev,
  (VTBL_ENTRY)&_ZN6S671C34v101Ev,
  (VTBL_ENTRY)&_ZN6S671C34v102Ev,
  (VTBL_ENTRY)&_ZN6S671C34v103Ev,
  (VTBL_ENTRY)&_ZN6S671C34v104Ev,
  (VTBL_ENTRY)&_ZN6S671C34v105Ev,
  (VTBL_ENTRY)&_ZN6S671C34v106Ev,
  (VTBL_ENTRY)&_ZN6S671C34v107Ev,
  (VTBL_ENTRY)&_ZN6S671C34v108Ev,
  (VTBL_ENTRY)&_ZN6S671C34v109Ev,
  (VTBL_ENTRY)&_ZN6S671C34v110Ev,
};
extern VTBL_ENTRY _ZTI6S671C3[];
extern  VTBL_ENTRY _ZTV6S671C3[];
Class_Descriptor cd_S671C3 = {  "S671C3", // class name
  bases_S671C3, 2,
  &(vtc_S671C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI6S671C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S671C3),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S671C2  : S671C3 {
  void *s671c2f0;
  virtual  ~S671C2(); // _ZN6S671C2D1Ev
  virtual void  v111(); // _ZN6S671C24v111Ev
  virtual void  v112(); // _ZN6S671C24v112Ev
  virtual void  v113(); // _ZN6S671C24v113Ev
  virtual void  v114(); // _ZN6S671C24v114Ev
  virtual void  v115(); // _ZN6S671C24v115Ev
  virtual void  v116(); // _ZN6S671C24v116Ev
  virtual void  v117(); // _ZN6S671C24v117Ev
  virtual void  v118(); // _ZN6S671C24v118Ev
  virtual void  v119(); // _ZN6S671C24v119Ev
  S671C2(); // tgen
};
//SIG(-1 S671C2) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 FC5} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S671C2 ::~S671C2(){ note_dtor("S671C2", this);}
void  S671C2 ::v111(){vfunc_called(this, "_ZN6S671C24v111Ev");}
void  S671C2 ::v112(){vfunc_called(this, "_ZN6S671C24v112Ev");}
void  S671C2 ::v113(){vfunc_called(this, "_ZN6S671C24v113Ev");}
void  S671C2 ::v114(){vfunc_called(this, "_ZN6S671C24v114Ev");}
void  S671C2 ::v115(){vfunc_called(this, "_ZN6S671C24v115Ev");}
void  S671C2 ::v116(){vfunc_called(this, "_ZN6S671C24v116Ev");}
void  S671C2 ::v117(){vfunc_called(this, "_ZN6S671C24v117Ev");}
void  S671C2 ::v118(){vfunc_called(this, "_ZN6S671C24v118Ev");}
void  S671C2 ::v119(){vfunc_called(this, "_ZN6S671C24v119Ev");}
S671C2 ::S671C2(){ note_ctor("S671C2", this);} // tgen

static void Test_S671C2()
{
  extern Class_Descriptor cd_S671C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S671C2, buf);
    S671C2 *dp, &lv = *(dp=new (buf) S671C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S671C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S671C2)");
    check_base_class_offset(lv, (S671C5*)(S671C4*)(S671C3*), 0, "S671C2");
    check_base_class_offset(lv, (S671C4*)(S671C3*), 0, "S671C2");
    check_base_class_offset(lv, (S671C3*), 0, "S671C2");
    check_field_offset(lv, s671c2f0, ABISELECT(200,140), "S671C2.s671c2f0");
    test_class_info(&lv, &cd_S671C2);
    dp->~S671C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS671C2(Test_S671C2, "S671C2", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN6S671C2C1Ev();
extern void _ZN6S671C2D1Ev();
Name_Map name_map_S671C2[] = {
  NSPAIR(_ZN6S671C2C1Ev),
  NSPAIR(_ZN6S671C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S671C5;
extern VTBL_ENTRY _ZTI6S671C5[];
extern  VTBL_ENTRY _ZTV6S671C5[];
extern Class_Descriptor cd_S671C4;
extern VTBL_ENTRY _ZTI6S671C4[];
extern  VTBL_ENTRY _ZTV6S671C4[];
extern Class_Descriptor cd_S671C3;
extern VTBL_ENTRY _ZTI6S671C3[];
extern  VTBL_ENTRY _ZTV6S671C3[];
static Base_Class bases_S671C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S671C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S671C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S671C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S671C2[];
extern void _ZN6S671C2D1Ev();
extern void _ZN6S671C2D0Ev();
extern void _ZN6S671C52v6Ev();
extern void _ZN6S671C52v7Ev();
extern void _ZN6S671C52v8Ev();
extern void _ZN6S671C52v9Ev();
extern void _ZN6S671C53v10Ev();
extern void _ZN6S671C53v11Ev();
extern void _ZN6S671C53v12Ev();
extern void _ZN6S671C53v13Ev();
extern void _ZN6S671C53v14Ev();
extern void _ZN6S671C53v15Ev();
extern void _ZN6S671C53v16Ev();
extern void _ZN6S671C53v17Ev();
extern void _ZN6S671C53v18Ev();
extern void _ZN6S671C53v19Ev();
extern void _ZN6S671C53v20Ev();
extern void _ZN6S671C53v21Ev();
extern void _ZN6S671C53v22Ev();
extern void _ZN6S671C53v23Ev();
extern void _ZN6S671C53v24Ev();
extern void _ZN6S671C53v25Ev();
extern void _ZN6S671C53v26Ev();
extern void _ZN6S671C53v27Ev();
extern void _ZN6S671C53v28Ev();
extern void _ZN6S671C53v29Ev();
extern void _ZN6S671C53v30Ev();
extern void _ZN6S671C53v31Ev();
extern void _ZN6S671C53v32Ev();
extern void _ZN6S671C53v33Ev();
extern void _ZN6S671C53v34Ev();
extern void _ZN6S671C53v35Ev();
extern void _ZN6S671C53v36Ev();
extern void _ZN6S671C53v37Ev();
extern void _ZN6S671C53v38Ev();
extern void _ZN6S671C53v39Ev();
extern void _ZN6S671C53v40Ev();
extern void _ZN6S671C53v41Ev();
extern void _ZN6S671C53v42Ev();
extern void _ZN6S671C53v43Ev();
extern void _ZN6S671C53v44Ev();
extern void _ZN6S671C53v45Ev();
extern void _ZN6S671C53v46Ev();
extern void _ZN6S671C53v47Ev();
extern void _ZN6S671C53v48Ev();
extern void _ZN6S671C53v49Ev();
extern void _ZN6S671C53v50Ev();
extern void _ZN6S671C53v51Ev();
extern void _ZN6S671C53v52Ev();
extern void _ZN6S671C53v53Ev();
extern void _ZN6S671C53v54Ev();
extern void _ZN6S671C53v55Ev();
extern void _ZN6S671C53v56Ev();
extern void _ZN6S671C53v57Ev();
extern void _ZN6S671C53v58Ev();
extern void _ZN6S671C53v59Ev();
extern void _ZN6S671C53v60Ev();
extern void _ZN6S671C53v61Ev();
extern void _ZN6S671C53v62Ev();
extern void _ZN6S671C53v63Ev();
extern void _ZN6S671C53v64Ev();
extern void _ZN6S671C53v65Ev();
extern void _ZN6S671C53v66Ev();
extern void _ZN6S671C53v67Ev();
extern void _ZN6S671C53v68Ev();
extern void _ZN6S671C53v69Ev();
extern void _ZN6S671C43v70Ev();
extern void _ZN6S671C43v71Ev();
extern void _ZN6S671C43v72Ev();
extern void _ZN6S671C43v73Ev();
extern void _ZN6S671C43v74Ev();
extern void _ZN6S671C43v75Ev();
extern void _ZN6S671C43v76Ev();
extern void _ZN6S671C43v77Ev();
extern void _ZN6S671C43v78Ev();
extern void _ZN6S671C43v79Ev();
extern void _ZN6S671C43v80Ev();
extern void _ZN6S671C43v81Ev();
extern void _ZN6S671C43v82Ev();
extern void _ZN6S671C43v83Ev();
extern void _ZN6S671C43v84Ev();
extern void _ZN6S671C43v85Ev();
extern void _ZN6S671C43v86Ev();
extern void _ZN6S671C43v87Ev();
extern void _ZN6S671C43v88Ev();
extern void _ZN6S671C43v89Ev();
extern void _ZN6S671C43v90Ev();
extern void _ZN6S671C43v91Ev();
extern void _ZN6S671C33v92Ev();
extern void _ZN6S671C33v93Ev();
extern void _ZN6S671C33v94Ev();
extern void _ZN6S671C33v95Ev();
extern void _ZN6S671C33v96Ev();
extern void _ZN6S671C33v97Ev();
extern void _ZN6S671C33v98Ev();
extern void _ZN6S671C33v99Ev();
extern void _ZN6S671C34v100Ev();
extern void _ZN6S671C34v101Ev();
extern void _ZN6S671C34v102Ev();
extern void _ZN6S671C34v103Ev();
extern void _ZN6S671C34v104Ev();
extern void _ZN6S671C34v105Ev();
extern void _ZN6S671C34v106Ev();
extern void _ZN6S671C34v107Ev();
extern void _ZN6S671C34v108Ev();
extern void _ZN6S671C34v109Ev();
extern void _ZN6S671C34v110Ev();
extern void _ZN6S671C24v111Ev();
extern void _ZN6S671C24v112Ev();
extern void _ZN6S671C24v113Ev();
extern void _ZN6S671C24v114Ev();
extern void _ZN6S671C24v115Ev();
extern void _ZN6S671C24v116Ev();
extern void _ZN6S671C24v117Ev();
extern void _ZN6S671C24v118Ev();
extern void _ZN6S671C24v119Ev();
static  VTBL_ENTRY vtc_S671C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S671C2[0]),
  (VTBL_ENTRY)&_ZN6S671C2D1Ev,
  (VTBL_ENTRY)&_ZN6S671C2D0Ev,
  (VTBL_ENTRY)&_ZN6S671C52v6Ev,
  (VTBL_ENTRY)&_ZN6S671C52v7Ev,
  (VTBL_ENTRY)&_ZN6S671C52v8Ev,
  (VTBL_ENTRY)&_ZN6S671C52v9Ev,
  (VTBL_ENTRY)&_ZN6S671C53v10Ev,
  (VTBL_ENTRY)&_ZN6S671C53v11Ev,
  (VTBL_ENTRY)&_ZN6S671C53v12Ev,
  (VTBL_ENTRY)&_ZN6S671C53v13Ev,
  (VTBL_ENTRY)&_ZN6S671C53v14Ev,
  (VTBL_ENTRY)&_ZN6S671C53v15Ev,
  (VTBL_ENTRY)&_ZN6S671C53v16Ev,
  (VTBL_ENTRY)&_ZN6S671C53v17Ev,
  (VTBL_ENTRY)&_ZN6S671C53v18Ev,
  (VTBL_ENTRY)&_ZN6S671C53v19Ev,
  (VTBL_ENTRY)&_ZN6S671C53v20Ev,
  (VTBL_ENTRY)&_ZN6S671C53v21Ev,
  (VTBL_ENTRY)&_ZN6S671C53v22Ev,
  (VTBL_ENTRY)&_ZN6S671C53v23Ev,
  (VTBL_ENTRY)&_ZN6S671C53v24Ev,
  (VTBL_ENTRY)&_ZN6S671C53v25Ev,
  (VTBL_ENTRY)&_ZN6S671C53v26Ev,
  (VTBL_ENTRY)&_ZN6S671C53v27Ev,
  (VTBL_ENTRY)&_ZN6S671C53v28Ev,
  (VTBL_ENTRY)&_ZN6S671C53v29Ev,
  (VTBL_ENTRY)&_ZN6S671C53v30Ev,
  (VTBL_ENTRY)&_ZN6S671C53v31Ev,
  (VTBL_ENTRY)&_ZN6S671C53v32Ev,
  (VTBL_ENTRY)&_ZN6S671C53v33Ev,
  (VTBL_ENTRY)&_ZN6S671C53v34Ev,
  (VTBL_ENTRY)&_ZN6S671C53v35Ev,
  (VTBL_ENTRY)&_ZN6S671C53v36Ev,
  (VTBL_ENTRY)&_ZN6S671C53v37Ev,
  (VTBL_ENTRY)&_ZN6S671C53v38Ev,
  (VTBL_ENTRY)&_ZN6S671C53v39Ev,
  (VTBL_ENTRY)&_ZN6S671C53v40Ev,
  (VTBL_ENTRY)&_ZN6S671C53v41Ev,
  (VTBL_ENTRY)&_ZN6S671C53v42Ev,
  (VTBL_ENTRY)&_ZN6S671C53v43Ev,
  (VTBL_ENTRY)&_ZN6S671C53v44Ev,
  (VTBL_ENTRY)&_ZN6S671C53v45Ev,
  (VTBL_ENTRY)&_ZN6S671C53v46Ev,
  (VTBL_ENTRY)&_ZN6S671C53v47Ev,
  (VTBL_ENTRY)&_ZN6S671C53v48Ev,
  (VTBL_ENTRY)&_ZN6S671C53v49Ev,
  (VTBL_ENTRY)&_ZN6S671C53v50Ev,
  (VTBL_ENTRY)&_ZN6S671C53v51Ev,
  (VTBL_ENTRY)&_ZN6S671C53v52Ev,
  (VTBL_ENTRY)&_ZN6S671C53v53Ev,
  (VTBL_ENTRY)&_ZN6S671C53v54Ev,
  (VTBL_ENTRY)&_ZN6S671C53v55Ev,
  (VTBL_ENTRY)&_ZN6S671C53v56Ev,
  (VTBL_ENTRY)&_ZN6S671C53v57Ev,
  (VTBL_ENTRY)&_ZN6S671C53v58Ev,
  (VTBL_ENTRY)&_ZN6S671C53v59Ev,
  (VTBL_ENTRY)&_ZN6S671C53v60Ev,
  (VTBL_ENTRY)&_ZN6S671C53v61Ev,
  (VTBL_ENTRY)&_ZN6S671C53v62Ev,
  (VTBL_ENTRY)&_ZN6S671C53v63Ev,
  (VTBL_ENTRY)&_ZN6S671C53v64Ev,
  (VTBL_ENTRY)&_ZN6S671C53v65Ev,
  (VTBL_ENTRY)&_ZN6S671C53v66Ev,
  (VTBL_ENTRY)&_ZN6S671C53v67Ev,
  (VTBL_ENTRY)&_ZN6S671C53v68Ev,
  (VTBL_ENTRY)&_ZN6S671C53v69Ev,
  (VTBL_ENTRY)&_ZN6S671C43v70Ev,
  (VTBL_ENTRY)&_ZN6S671C43v71Ev,
  (VTBL_ENTRY)&_ZN6S671C43v72Ev,
  (VTBL_ENTRY)&_ZN6S671C43v73Ev,
  (VTBL_ENTRY)&_ZN6S671C43v74Ev,
  (VTBL_ENTRY)&_ZN6S671C43v75Ev,
  (VTBL_ENTRY)&_ZN6S671C43v76Ev,
  (VTBL_ENTRY)&_ZN6S671C43v77Ev,
  (VTBL_ENTRY)&_ZN6S671C43v78Ev,
  (VTBL_ENTRY)&_ZN6S671C43v79Ev,
  (VTBL_ENTRY)&_ZN6S671C43v80Ev,
  (VTBL_ENTRY)&_ZN6S671C43v81Ev,
  (VTBL_ENTRY)&_ZN6S671C43v82Ev,
  (VTBL_ENTRY)&_ZN6S671C43v83Ev,
  (VTBL_ENTRY)&_ZN6S671C43v84Ev,
  (VTBL_ENTRY)&_ZN6S671C43v85Ev,
  (VTBL_ENTRY)&_ZN6S671C43v86Ev,
  (VTBL_ENTRY)&_ZN6S671C43v87Ev,
  (VTBL_ENTRY)&_ZN6S671C43v88Ev,
  (VTBL_ENTRY)&_ZN6S671C43v89Ev,
  (VTBL_ENTRY)&_ZN6S671C43v90Ev,
  (VTBL_ENTRY)&_ZN6S671C43v91Ev,
  (VTBL_ENTRY)&_ZN6S671C33v92Ev,
  (VTBL_ENTRY)&_ZN6S671C33v93Ev,
  (VTBL_ENTRY)&_ZN6S671C33v94Ev,
  (VTBL_ENTRY)&_ZN6S671C33v95Ev,
  (VTBL_ENTRY)&_ZN6S671C33v96Ev,
  (VTBL_ENTRY)&_ZN6S671C33v97Ev,
  (VTBL_ENTRY)&_ZN6S671C33v98Ev,
  (VTBL_ENTRY)&_ZN6S671C33v99Ev,
  (VTBL_ENTRY)&_ZN6S671C34v100Ev,
  (VTBL_ENTRY)&_ZN6S671C34v101Ev,
  (VTBL_ENTRY)&_ZN6S671C34v102Ev,
  (VTBL_ENTRY)&_ZN6S671C34v103Ev,
  (VTBL_ENTRY)&_ZN6S671C34v104Ev,
  (VTBL_ENTRY)&_ZN6S671C34v105Ev,
  (VTBL_ENTRY)&_ZN6S671C34v106Ev,
  (VTBL_ENTRY)&_ZN6S671C34v107Ev,
  (VTBL_ENTRY)&_ZN6S671C34v108Ev,
  (VTBL_ENTRY)&_ZN6S671C34v109Ev,
  (VTBL_ENTRY)&_ZN6S671C34v110Ev,
  (VTBL_ENTRY)&_ZN6S671C24v111Ev,
  (VTBL_ENTRY)&_ZN6S671C24v112Ev,
  (VTBL_ENTRY)&_ZN6S671C24v113Ev,
  (VTBL_ENTRY)&_ZN6S671C24v114Ev,
  (VTBL_ENTRY)&_ZN6S671C24v115Ev,
  (VTBL_ENTRY)&_ZN6S671C24v116Ev,
  (VTBL_ENTRY)&_ZN6S671C24v117Ev,
  (VTBL_ENTRY)&_ZN6S671C24v118Ev,
  (VTBL_ENTRY)&_ZN6S671C24v119Ev,
};
extern VTBL_ENTRY _ZTI6S671C2[];
extern  VTBL_ENTRY _ZTV6S671C2[];
Class_Descriptor cd_S671C2 = {  "S671C2", // class name
  bases_S671C2, 3,
  &(vtc_S671C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI6S671C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S671C2),118, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S671C1  : S671C2 {
  ::S672C14_nt s671c1f0;
  unsigned int s671c1f1:1;
  int s671c1f2;
  virtual  ~S671C1(); // _ZN6S671C1D1Ev
  virtual void  v1(); // _ZN6S671C12v1Ev
  virtual void  v2(); // _ZN6S671C12v2Ev
  virtual void  v3(); // _ZN6S671C12v3Ev
  virtual void  v4(); // _ZN6S671C12v4Ev
  virtual void  v5(); // _ZN6S671C12v5Ev
  S671C1(); // tgen
};
//SIG(1 S671C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 FC6} vd v111 v112 v113 v114 v115 v116 v117 v118 v119 Fp} vd v1 v2 v3 v4 v5 FC12{ BC13{ BC10}} Fi:1 Fi}


 S671C1 ::~S671C1(){ note_dtor("S671C1", this);}
void  S671C1 ::v1(){vfunc_called(this, "_ZN6S671C12v1Ev");}
void  S671C1 ::v2(){vfunc_called(this, "_ZN6S671C12v2Ev");}
void  S671C1 ::v3(){vfunc_called(this, "_ZN6S671C12v3Ev");}
void  S671C1 ::v4(){vfunc_called(this, "_ZN6S671C12v4Ev");}
void  S671C1 ::v5(){vfunc_called(this, "_ZN6S671C12v5Ev");}
S671C1 ::S671C1(){ note_ctor("S671C1", this);} // tgen

static void Test_S671C1()
{
  extern Class_Descriptor cd_S671C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S671C1, buf);
    S671C1 *dp, &lv = *(dp=new (buf) S671C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S671C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S671C1)");
    check_base_class_offset(lv, (S671C5*)(S671C4*)(S671C3*)(S671C2*), 0, "S671C1");
    check_base_class_offset(lv, (S671C4*)(S671C3*)(S671C2*), 0, "S671C1");
    check_base_class_offset(lv, (S671C3*)(S671C2*), 0, "S671C1");
    check_base_class_offset(lv, (S671C2*), 0, "S671C1");
    check_field_offset(lv, s671c1f0, ABISELECT(208,144), "S671C1.s671c1f0");
    set_bf_and_test(lv, s671c1f1, ABISELECT(224,156), 0, 1, 1, "S671C1");
    check_field_offset(lv, s671c1f2, ABISELECT(228,160), "S671C1.s671c1f2");
    test_class_info(&lv, &cd_S671C1);
    dp->~S671C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS671C1(Test_S671C1, "S671C1", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN6S671C1C1Ev();
extern void _ZN6S671C1D1Ev();
Name_Map name_map_S671C1[] = {
  NSPAIR(_ZN6S671C1C1Ev),
  NSPAIR(_ZN6S671C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S671C5;
extern VTBL_ENTRY _ZTI6S671C5[];
extern  VTBL_ENTRY _ZTV6S671C5[];
extern Class_Descriptor cd_S671C4;
extern VTBL_ENTRY _ZTI6S671C4[];
extern  VTBL_ENTRY _ZTV6S671C4[];
extern Class_Descriptor cd_S671C3;
extern VTBL_ENTRY _ZTI6S671C3[];
extern  VTBL_ENTRY _ZTV6S671C3[];
extern Class_Descriptor cd_S671C2;
extern VTBL_ENTRY _ZTI6S671C2[];
extern  VTBL_ENTRY _ZTV6S671C2[];
static Base_Class bases_S671C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S671C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S671C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S671C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S671C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S671C1[];
extern void _ZN6S671C1D1Ev();
extern void _ZN6S671C1D0Ev();
extern void _ZN6S671C52v6Ev();
extern void _ZN6S671C52v7Ev();
extern void _ZN6S671C52v8Ev();
extern void _ZN6S671C52v9Ev();
extern void _ZN6S671C53v10Ev();
extern void _ZN6S671C53v11Ev();
extern void _ZN6S671C53v12Ev();
extern void _ZN6S671C53v13Ev();
extern void _ZN6S671C53v14Ev();
extern void _ZN6S671C53v15Ev();
extern void _ZN6S671C53v16Ev();
extern void _ZN6S671C53v17Ev();
extern void _ZN6S671C53v18Ev();
extern void _ZN6S671C53v19Ev();
extern void _ZN6S671C53v20Ev();
extern void _ZN6S671C53v21Ev();
extern void _ZN6S671C53v22Ev();
extern void _ZN6S671C53v23Ev();
extern void _ZN6S671C53v24Ev();
extern void _ZN6S671C53v25Ev();
extern void _ZN6S671C53v26Ev();
extern void _ZN6S671C53v27Ev();
extern void _ZN6S671C53v28Ev();
extern void _ZN6S671C53v29Ev();
extern void _ZN6S671C53v30Ev();
extern void _ZN6S671C53v31Ev();
extern void _ZN6S671C53v32Ev();
extern void _ZN6S671C53v33Ev();
extern void _ZN6S671C53v34Ev();
extern void _ZN6S671C53v35Ev();
extern void _ZN6S671C53v36Ev();
extern void _ZN6S671C53v37Ev();
extern void _ZN6S671C53v38Ev();
extern void _ZN6S671C53v39Ev();
extern void _ZN6S671C53v40Ev();
extern void _ZN6S671C53v41Ev();
extern void _ZN6S671C53v42Ev();
extern void _ZN6S671C53v43Ev();
extern void _ZN6S671C53v44Ev();
extern void _ZN6S671C53v45Ev();
extern void _ZN6S671C53v46Ev();
extern void _ZN6S671C53v47Ev();
extern void _ZN6S671C53v48Ev();
extern void _ZN6S671C53v49Ev();
extern void _ZN6S671C53v50Ev();
extern void _ZN6S671C53v51Ev();
extern void _ZN6S671C53v52Ev();
extern void _ZN6S671C53v53Ev();
extern void _ZN6S671C53v54Ev();
extern void _ZN6S671C53v55Ev();
extern void _ZN6S671C53v56Ev();
extern void _ZN6S671C53v57Ev();
extern void _ZN6S671C53v58Ev();
extern void _ZN6S671C53v59Ev();
extern void _ZN6S671C53v60Ev();
extern void _ZN6S671C53v61Ev();
extern void _ZN6S671C53v62Ev();
extern void _ZN6S671C53v63Ev();
extern void _ZN6S671C53v64Ev();
extern void _ZN6S671C53v65Ev();
extern void _ZN6S671C53v66Ev();
extern void _ZN6S671C53v67Ev();
extern void _ZN6S671C53v68Ev();
extern void _ZN6S671C53v69Ev();
extern void _ZN6S671C43v70Ev();
extern void _ZN6S671C43v71Ev();
extern void _ZN6S671C43v72Ev();
extern void _ZN6S671C43v73Ev();
extern void _ZN6S671C43v74Ev();
extern void _ZN6S671C43v75Ev();
extern void _ZN6S671C43v76Ev();
extern void _ZN6S671C43v77Ev();
extern void _ZN6S671C43v78Ev();
extern void _ZN6S671C43v79Ev();
extern void _ZN6S671C43v80Ev();
extern void _ZN6S671C43v81Ev();
extern void _ZN6S671C43v82Ev();
extern void _ZN6S671C43v83Ev();
extern void _ZN6S671C43v84Ev();
extern void _ZN6S671C43v85Ev();
extern void _ZN6S671C43v86Ev();
extern void _ZN6S671C43v87Ev();
extern void _ZN6S671C43v88Ev();
extern void _ZN6S671C43v89Ev();
extern void _ZN6S671C43v90Ev();
extern void _ZN6S671C43v91Ev();
extern void _ZN6S671C33v92Ev();
extern void _ZN6S671C33v93Ev();
extern void _ZN6S671C33v94Ev();
extern void _ZN6S671C33v95Ev();
extern void _ZN6S671C33v96Ev();
extern void _ZN6S671C33v97Ev();
extern void _ZN6S671C33v98Ev();
extern void _ZN6S671C33v99Ev();
extern void _ZN6S671C34v100Ev();
extern void _ZN6S671C34v101Ev();
extern void _ZN6S671C34v102Ev();
extern void _ZN6S671C34v103Ev();
extern void _ZN6S671C34v104Ev();
extern void _ZN6S671C34v105Ev();
extern void _ZN6S671C34v106Ev();
extern void _ZN6S671C34v107Ev();
extern void _ZN6S671C34v108Ev();
extern void _ZN6S671C34v109Ev();
extern void _ZN6S671C34v110Ev();
extern void _ZN6S671C24v111Ev();
extern void _ZN6S671C24v112Ev();
extern void _ZN6S671C24v113Ev();
extern void _ZN6S671C24v114Ev();
extern void _ZN6S671C24v115Ev();
extern void _ZN6S671C24v116Ev();
extern void _ZN6S671C24v117Ev();
extern void _ZN6S671C24v118Ev();
extern void _ZN6S671C24v119Ev();
extern void _ZN6S671C12v1Ev();
extern void _ZN6S671C12v2Ev();
extern void _ZN6S671C12v3Ev();
extern void _ZN6S671C12v4Ev();
extern void _ZN6S671C12v5Ev();
static  VTBL_ENTRY vtc_S671C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S671C1[0]),
  (VTBL_ENTRY)&_ZN6S671C1D1Ev,
  (VTBL_ENTRY)&_ZN6S671C1D0Ev,
  (VTBL_ENTRY)&_ZN6S671C52v6Ev,
  (VTBL_ENTRY)&_ZN6S671C52v7Ev,
  (VTBL_ENTRY)&_ZN6S671C52v8Ev,
  (VTBL_ENTRY)&_ZN6S671C52v9Ev,
  (VTBL_ENTRY)&_ZN6S671C53v10Ev,
  (VTBL_ENTRY)&_ZN6S671C53v11Ev,
  (VTBL_ENTRY)&_ZN6S671C53v12Ev,
  (VTBL_ENTRY)&_ZN6S671C53v13Ev,
  (VTBL_ENTRY)&_ZN6S671C53v14Ev,
  (VTBL_ENTRY)&_ZN6S671C53v15Ev,
  (VTBL_ENTRY)&_ZN6S671C53v16Ev,
  (VTBL_ENTRY)&_ZN6S671C53v17Ev,
  (VTBL_ENTRY)&_ZN6S671C53v18Ev,
  (VTBL_ENTRY)&_ZN6S671C53v19Ev,
  (VTBL_ENTRY)&_ZN6S671C53v20Ev,
  (VTBL_ENTRY)&_ZN6S671C53v21Ev,
  (VTBL_ENTRY)&_ZN6S671C53v22Ev,
  (VTBL_ENTRY)&_ZN6S671C53v23Ev,
  (VTBL_ENTRY)&_ZN6S671C53v24Ev,
  (VTBL_ENTRY)&_ZN6S671C53v25Ev,
  (VTBL_ENTRY)&_ZN6S671C53v26Ev,
  (VTBL_ENTRY)&_ZN6S671C53v27Ev,
  (VTBL_ENTRY)&_ZN6S671C53v28Ev,
  (VTBL_ENTRY)&_ZN6S671C53v29Ev,
  (VTBL_ENTRY)&_ZN6S671C53v30Ev,
  (VTBL_ENTRY)&_ZN6S671C53v31Ev,
  (VTBL_ENTRY)&_ZN6S671C53v32Ev,
  (VTBL_ENTRY)&_ZN6S671C53v33Ev,
  (VTBL_ENTRY)&_ZN6S671C53v34Ev,
  (VTBL_ENTRY)&_ZN6S671C53v35Ev,
  (VTBL_ENTRY)&_ZN6S671C53v36Ev,
  (VTBL_ENTRY)&_ZN6S671C53v37Ev,
  (VTBL_ENTRY)&_ZN6S671C53v38Ev,
  (VTBL_ENTRY)&_ZN6S671C53v39Ev,
  (VTBL_ENTRY)&_ZN6S671C53v40Ev,
  (VTBL_ENTRY)&_ZN6S671C53v41Ev,
  (VTBL_ENTRY)&_ZN6S671C53v42Ev,
  (VTBL_ENTRY)&_ZN6S671C53v43Ev,
  (VTBL_ENTRY)&_ZN6S671C53v44Ev,
  (VTBL_ENTRY)&_ZN6S671C53v45Ev,
  (VTBL_ENTRY)&_ZN6S671C53v46Ev,
  (VTBL_ENTRY)&_ZN6S671C53v47Ev,
  (VTBL_ENTRY)&_ZN6S671C53v48Ev,
  (VTBL_ENTRY)&_ZN6S671C53v49Ev,
  (VTBL_ENTRY)&_ZN6S671C53v50Ev,
  (VTBL_ENTRY)&_ZN6S671C53v51Ev,
  (VTBL_ENTRY)&_ZN6S671C53v52Ev,
  (VTBL_ENTRY)&_ZN6S671C53v53Ev,
  (VTBL_ENTRY)&_ZN6S671C53v54Ev,
  (VTBL_ENTRY)&_ZN6S671C53v55Ev,
  (VTBL_ENTRY)&_ZN6S671C53v56Ev,
  (VTBL_ENTRY)&_ZN6S671C53v57Ev,
  (VTBL_ENTRY)&_ZN6S671C53v58Ev,
  (VTBL_ENTRY)&_ZN6S671C53v59Ev,
  (VTBL_ENTRY)&_ZN6S671C53v60Ev,
  (VTBL_ENTRY)&_ZN6S671C53v61Ev,
  (VTBL_ENTRY)&_ZN6S671C53v62Ev,
  (VTBL_ENTRY)&_ZN6S671C53v63Ev,
  (VTBL_ENTRY)&_ZN6S671C53v64Ev,
  (VTBL_ENTRY)&_ZN6S671C53v65Ev,
  (VTBL_ENTRY)&_ZN6S671C53v66Ev,
  (VTBL_ENTRY)&_ZN6S671C53v67Ev,
  (VTBL_ENTRY)&_ZN6S671C53v68Ev,
  (VTBL_ENTRY)&_ZN6S671C53v69Ev,
  (VTBL_ENTRY)&_ZN6S671C43v70Ev,
  (VTBL_ENTRY)&_ZN6S671C43v71Ev,
  (VTBL_ENTRY)&_ZN6S671C43v72Ev,
  (VTBL_ENTRY)&_ZN6S671C43v73Ev,
  (VTBL_ENTRY)&_ZN6S671C43v74Ev,
  (VTBL_ENTRY)&_ZN6S671C43v75Ev,
  (VTBL_ENTRY)&_ZN6S671C43v76Ev,
  (VTBL_ENTRY)&_ZN6S671C43v77Ev,
  (VTBL_ENTRY)&_ZN6S671C43v78Ev,
  (VTBL_ENTRY)&_ZN6S671C43v79Ev,
  (VTBL_ENTRY)&_ZN6S671C43v80Ev,
  (VTBL_ENTRY)&_ZN6S671C43v81Ev,
  (VTBL_ENTRY)&_ZN6S671C43v82Ev,
  (VTBL_ENTRY)&_ZN6S671C43v83Ev,
  (VTBL_ENTRY)&_ZN6S671C43v84Ev,
  (VTBL_ENTRY)&_ZN6S671C43v85Ev,
  (VTBL_ENTRY)&_ZN6S671C43v86Ev,
  (VTBL_ENTRY)&_ZN6S671C43v87Ev,
  (VTBL_ENTRY)&_ZN6S671C43v88Ev,
  (VTBL_ENTRY)&_ZN6S671C43v89Ev,
  (VTBL_ENTRY)&_ZN6S671C43v90Ev,
  (VTBL_ENTRY)&_ZN6S671C43v91Ev,
  (VTBL_ENTRY)&_ZN6S671C33v92Ev,
  (VTBL_ENTRY)&_ZN6S671C33v93Ev,
  (VTBL_ENTRY)&_ZN6S671C33v94Ev,
  (VTBL_ENTRY)&_ZN6S671C33v95Ev,
  (VTBL_ENTRY)&_ZN6S671C33v96Ev,
  (VTBL_ENTRY)&_ZN6S671C33v97Ev,
  (VTBL_ENTRY)&_ZN6S671C33v98Ev,
  (VTBL_ENTRY)&_ZN6S671C33v99Ev,
  (VTBL_ENTRY)&_ZN6S671C34v100Ev,
  (VTBL_ENTRY)&_ZN6S671C34v101Ev,
  (VTBL_ENTRY)&_ZN6S671C34v102Ev,
  (VTBL_ENTRY)&_ZN6S671C34v103Ev,
  (VTBL_ENTRY)&_ZN6S671C34v104Ev,
  (VTBL_ENTRY)&_ZN6S671C34v105Ev,
  (VTBL_ENTRY)&_ZN6S671C34v106Ev,
  (VTBL_ENTRY)&_ZN6S671C34v107Ev,
  (VTBL_ENTRY)&_ZN6S671C34v108Ev,
  (VTBL_ENTRY)&_ZN6S671C34v109Ev,
  (VTBL_ENTRY)&_ZN6S671C34v110Ev,
  (VTBL_ENTRY)&_ZN6S671C24v111Ev,
  (VTBL_ENTRY)&_ZN6S671C24v112Ev,
  (VTBL_ENTRY)&_ZN6S671C24v113Ev,
  (VTBL_ENTRY)&_ZN6S671C24v114Ev,
  (VTBL_ENTRY)&_ZN6S671C24v115Ev,
  (VTBL_ENTRY)&_ZN6S671C24v116Ev,
  (VTBL_ENTRY)&_ZN6S671C24v117Ev,
  (VTBL_ENTRY)&_ZN6S671C24v118Ev,
  (VTBL_ENTRY)&_ZN6S671C24v119Ev,
  (VTBL_ENTRY)&_ZN6S671C12v1Ev,
  (VTBL_ENTRY)&_ZN6S671C12v2Ev,
  (VTBL_ENTRY)&_ZN6S671C12v3Ev,
  (VTBL_ENTRY)&_ZN6S671C12v4Ev,
  (VTBL_ENTRY)&_ZN6S671C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S671C1[];
extern  VTBL_ENTRY _ZTV6S671C1[];
Class_Descriptor cd_S671C1 = {  "S671C1", // class name
  bases_S671C1, 4,
  &(vtc_S671C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI6S671C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S671C1),123, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1312C4  {
  int s1312c4f0;
  __tsi64 s1312c4f1;
  void *s1312c4f2[4];
  int s1312c4f3[2];
  void *s1312c4f4;
  ::S473C6_nt s1312c4f5;
  void *s1312c4f6[2];
  virtual  ~S1312C4(); // _ZN7S1312C4D1Ev
  virtual void  v13(); // _ZN7S1312C43v13Ev
  virtual void  v14(); // _ZN7S1312C43v14Ev
  virtual void  v15(); // _ZN7S1312C43v15Ev
  virtual void  v16(); // _ZN7S1312C43v16Ev
  virtual void  v17(); // _ZN7S1312C43v17Ev
  virtual void  v18(); // _ZN7S1312C43v18Ev
  virtual void  v19(); // _ZN7S1312C43v19Ev
  virtual void  v20(); // _ZN7S1312C43v20Ev
  virtual void  v21(); // _ZN7S1312C43v21Ev
  virtual void  v22(); // _ZN7S1312C43v22Ev
  virtual void  v23(); // _ZN7S1312C43v23Ev
  virtual void  v24(); // _ZN7S1312C43v24Ev
  virtual void  v25(); // _ZN7S1312C43v25Ev
  virtual void  v26(); // _ZN7S1312C43v26Ev
  virtual void  v27(); // _ZN7S1312C43v27Ev
  virtual void  v28(); // _ZN7S1312C43v28Ev
  virtual void  v29(); // _ZN7S1312C43v29Ev
  virtual void  v30(); // _ZN7S1312C43v30Ev
  virtual void  v31(); // _ZN7S1312C43v31Ev
  virtual void  v32(); // _ZN7S1312C43v32Ev
  virtual void  v33(); // _ZN7S1312C43v33Ev
  virtual void  v34(); // _ZN7S1312C43v34Ev
  virtual void  v35(); // _ZN7S1312C43v35Ev
  virtual void  v36(); // _ZN7S1312C43v36Ev
  virtual void  v37(); // _ZN7S1312C43v37Ev
  virtual void  v38(); // _ZN7S1312C43v38Ev
  virtual void  v39(); // _ZN7S1312C43v39Ev
  virtual void  v40(); // _ZN7S1312C43v40Ev
  virtual void  v41(); // _ZN7S1312C43v41Ev
  virtual void  v42(); // _ZN7S1312C43v42Ev
  virtual void  v43(); // _ZN7S1312C43v43Ev
  virtual void  v44(); // _ZN7S1312C43v44Ev
  virtual void  v45(); // _ZN7S1312C43v45Ev
  virtual void  v46(); // _ZN7S1312C43v46Ev
  virtual void  v47(); // _ZN7S1312C43v47Ev
  virtual void  v48(); // _ZN7S1312C43v48Ev
  virtual void  v49(); // _ZN7S1312C43v49Ev
  virtual void  v50(); // _ZN7S1312C43v50Ev
  virtual void  v51(); // _ZN7S1312C43v51Ev
  virtual void  v52(); // _ZN7S1312C43v52Ev
  virtual void  v53(); // _ZN7S1312C43v53Ev
  virtual void  v54(); // _ZN7S1312C43v54Ev
  virtual void  v55(); // _ZN7S1312C43v55Ev
  virtual void  v56(); // _ZN7S1312C43v56Ev
  virtual void  v57(); // _ZN7S1312C43v57Ev
  virtual void  v58(); // _ZN7S1312C43v58Ev
  virtual void  v59(); // _ZN7S1312C43v59Ev
  virtual void  v60(); // _ZN7S1312C43v60Ev
  virtual void  v61(); // _ZN7S1312C43v61Ev
  virtual void  v62(); // _ZN7S1312C43v62Ev
  virtual void  v63(); // _ZN7S1312C43v63Ev
  virtual void  v64(); // _ZN7S1312C43v64Ev
  virtual void  v65(); // _ZN7S1312C43v65Ev
  virtual void  v66(); // _ZN7S1312C43v66Ev
  virtual void  v67(); // _ZN7S1312C43v67Ev
  virtual void  v68(); // _ZN7S1312C43v68Ev
  virtual void  v69(); // _ZN7S1312C43v69Ev
  virtual void  v70(); // _ZN7S1312C43v70Ev
  virtual void  v71(); // _ZN7S1312C43v71Ev
  virtual void  v72(); // _ZN7S1312C43v72Ev
  virtual void  v73(); // _ZN7S1312C43v73Ev
  virtual void  v74(); // _ZN7S1312C43v74Ev
  virtual void  v75(); // _ZN7S1312C43v75Ev
  virtual void  v76(); // _ZN7S1312C43v76Ev
  S1312C4(); // tgen
};
//SIG(-1 S1312C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1312C4 ::~S1312C4(){ note_dtor("S1312C4", this);}
void  S1312C4 ::v13(){vfunc_called(this, "_ZN7S1312C43v13Ev");}
void  S1312C4 ::v14(){vfunc_called(this, "_ZN7S1312C43v14Ev");}
void  S1312C4 ::v15(){vfunc_called(this, "_ZN7S1312C43v15Ev");}
void  S1312C4 ::v16(){vfunc_called(this, "_ZN7S1312C43v16Ev");}
void  S1312C4 ::v17(){vfunc_called(this, "_ZN7S1312C43v17Ev");}
void  S1312C4 ::v18(){vfunc_called(this, "_ZN7S1312C43v18Ev");}
void  S1312C4 ::v19(){vfunc_called(this, "_ZN7S1312C43v19Ev");}
void  S1312C4 ::v20(){vfunc_called(this, "_ZN7S1312C43v20Ev");}
void  S1312C4 ::v21(){vfunc_called(this, "_ZN7S1312C43v21Ev");}
void  S1312C4 ::v22(){vfunc_called(this, "_ZN7S1312C43v22Ev");}
void  S1312C4 ::v23(){vfunc_called(this, "_ZN7S1312C43v23Ev");}
void  S1312C4 ::v24(){vfunc_called(this, "_ZN7S1312C43v24Ev");}
void  S1312C4 ::v25(){vfunc_called(this, "_ZN7S1312C43v25Ev");}
void  S1312C4 ::v26(){vfunc_called(this, "_ZN7S1312C43v26Ev");}
void  S1312C4 ::v27(){vfunc_called(this, "_ZN7S1312C43v27Ev");}
void  S1312C4 ::v28(){vfunc_called(this, "_ZN7S1312C43v28Ev");}
void  S1312C4 ::v29(){vfunc_called(this, "_ZN7S1312C43v29Ev");}
void  S1312C4 ::v30(){vfunc_called(this, "_ZN7S1312C43v30Ev");}
void  S1312C4 ::v31(){vfunc_called(this, "_ZN7S1312C43v31Ev");}
void  S1312C4 ::v32(){vfunc_called(this, "_ZN7S1312C43v32Ev");}
void  S1312C4 ::v33(){vfunc_called(this, "_ZN7S1312C43v33Ev");}
void  S1312C4 ::v34(){vfunc_called(this, "_ZN7S1312C43v34Ev");}
void  S1312C4 ::v35(){vfunc_called(this, "_ZN7S1312C43v35Ev");}
void  S1312C4 ::v36(){vfunc_called(this, "_ZN7S1312C43v36Ev");}
void  S1312C4 ::v37(){vfunc_called(this, "_ZN7S1312C43v37Ev");}
void  S1312C4 ::v38(){vfunc_called(this, "_ZN7S1312C43v38Ev");}
void  S1312C4 ::v39(){vfunc_called(this, "_ZN7S1312C43v39Ev");}
void  S1312C4 ::v40(){vfunc_called(this, "_ZN7S1312C43v40Ev");}
void  S1312C4 ::v41(){vfunc_called(this, "_ZN7S1312C43v41Ev");}
void  S1312C4 ::v42(){vfunc_called(this, "_ZN7S1312C43v42Ev");}
void  S1312C4 ::v43(){vfunc_called(this, "_ZN7S1312C43v43Ev");}
void  S1312C4 ::v44(){vfunc_called(this, "_ZN7S1312C43v44Ev");}
void  S1312C4 ::v45(){vfunc_called(this, "_ZN7S1312C43v45Ev");}
void  S1312C4 ::v46(){vfunc_called(this, "_ZN7S1312C43v46Ev");}
void  S1312C4 ::v47(){vfunc_called(this, "_ZN7S1312C43v47Ev");}
void  S1312C4 ::v48(){vfunc_called(this, "_ZN7S1312C43v48Ev");}
void  S1312C4 ::v49(){vfunc_called(this, "_ZN7S1312C43v49Ev");}
void  S1312C4 ::v50(){vfunc_called(this, "_ZN7S1312C43v50Ev");}
void  S1312C4 ::v51(){vfunc_called(this, "_ZN7S1312C43v51Ev");}
void  S1312C4 ::v52(){vfunc_called(this, "_ZN7S1312C43v52Ev");}
void  S1312C4 ::v53(){vfunc_called(this, "_ZN7S1312C43v53Ev");}
void  S1312C4 ::v54(){vfunc_called(this, "_ZN7S1312C43v54Ev");}
void  S1312C4 ::v55(){vfunc_called(this, "_ZN7S1312C43v55Ev");}
void  S1312C4 ::v56(){vfunc_called(this, "_ZN7S1312C43v56Ev");}
void  S1312C4 ::v57(){vfunc_called(this, "_ZN7S1312C43v57Ev");}
void  S1312C4 ::v58(){vfunc_called(this, "_ZN7S1312C43v58Ev");}
void  S1312C4 ::v59(){vfunc_called(this, "_ZN7S1312C43v59Ev");}
void  S1312C4 ::v60(){vfunc_called(this, "_ZN7S1312C43v60Ev");}
void  S1312C4 ::v61(){vfunc_called(this, "_ZN7S1312C43v61Ev");}
void  S1312C4 ::v62(){vfunc_called(this, "_ZN7S1312C43v62Ev");}
void  S1312C4 ::v63(){vfunc_called(this, "_ZN7S1312C43v63Ev");}
void  S1312C4 ::v64(){vfunc_called(this, "_ZN7S1312C43v64Ev");}
void  S1312C4 ::v65(){vfunc_called(this, "_ZN7S1312C43v65Ev");}
void  S1312C4 ::v66(){vfunc_called(this, "_ZN7S1312C43v66Ev");}
void  S1312C4 ::v67(){vfunc_called(this, "_ZN7S1312C43v67Ev");}
void  S1312C4 ::v68(){vfunc_called(this, "_ZN7S1312C43v68Ev");}
void  S1312C4 ::v69(){vfunc_called(this, "_ZN7S1312C43v69Ev");}
void  S1312C4 ::v70(){vfunc_called(this, "_ZN7S1312C43v70Ev");}
void  S1312C4 ::v71(){vfunc_called(this, "_ZN7S1312C43v71Ev");}
void  S1312C4 ::v72(){vfunc_called(this, "_ZN7S1312C43v72Ev");}
void  S1312C4 ::v73(){vfunc_called(this, "_ZN7S1312C43v73Ev");}
void  S1312C4 ::v74(){vfunc_called(this, "_ZN7S1312C43v74Ev");}
void  S1312C4 ::v75(){vfunc_called(this, "_ZN7S1312C43v75Ev");}
void  S1312C4 ::v76(){vfunc_called(this, "_ZN7S1312C43v76Ev");}
S1312C4 ::S1312C4(){ note_ctor("S1312C4", this);} // tgen

static void Test_S1312C4()
{
  extern Class_Descriptor cd_S1312C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1312C4, buf);
    S1312C4 *dp, &lv = *(dp=new (buf) S1312C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1312C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1312C4)");
    check_field_offset(lv, s1312c4f0, ABISELECT(8,4), "S1312C4.s1312c4f0");
    check_field_offset(lv, s1312c4f1, ABISELECT(16,8), "S1312C4.s1312c4f1");
    check_field_offset(lv, s1312c4f2, ABISELECT(24,16), "S1312C4.s1312c4f2");
    check_field_offset(lv, s1312c4f3, ABISELECT(56,32), "S1312C4.s1312c4f3");
    check_field_offset(lv, s1312c4f4, ABISELECT(64,40), "S1312C4.s1312c4f4");
    check_field_offset(lv, s1312c4f5, ABISELECT(72,44), "S1312C4.s1312c4f5");
    check_field_offset(lv, s1312c4f6, ABISELECT(80,52), "S1312C4.s1312c4f6");
    test_class_info(&lv, &cd_S1312C4);
    dp->~S1312C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1312C4(Test_S1312C4, "S1312C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1312C4C1Ev();
extern void _ZN7S1312C4D1Ev();
Name_Map name_map_S1312C4[] = {
  NSPAIR(_ZN7S1312C4C1Ev),
  NSPAIR(_ZN7S1312C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1312C4[];
extern void _ZN7S1312C4D1Ev();
extern void _ZN7S1312C4D0Ev();
extern void _ZN7S1312C43v13Ev();
extern void _ZN7S1312C43v14Ev();
extern void _ZN7S1312C43v15Ev();
extern void _ZN7S1312C43v16Ev();
extern void _ZN7S1312C43v17Ev();
extern void _ZN7S1312C43v18Ev();
extern void _ZN7S1312C43v19Ev();
extern void _ZN7S1312C43v20Ev();
extern void _ZN7S1312C43v21Ev();
extern void _ZN7S1312C43v22Ev();
extern void _ZN7S1312C43v23Ev();
extern void _ZN7S1312C43v24Ev();
extern void _ZN7S1312C43v25Ev();
extern void _ZN7S1312C43v26Ev();
extern void _ZN7S1312C43v27Ev();
extern void _ZN7S1312C43v28Ev();
extern void _ZN7S1312C43v29Ev();
extern void _ZN7S1312C43v30Ev();
extern void _ZN7S1312C43v31Ev();
extern void _ZN7S1312C43v32Ev();
extern void _ZN7S1312C43v33Ev();
extern void _ZN7S1312C43v34Ev();
extern void _ZN7S1312C43v35Ev();
extern void _ZN7S1312C43v36Ev();
extern void _ZN7S1312C43v37Ev();
extern void _ZN7S1312C43v38Ev();
extern void _ZN7S1312C43v39Ev();
extern void _ZN7S1312C43v40Ev();
extern void _ZN7S1312C43v41Ev();
extern void _ZN7S1312C43v42Ev();
extern void _ZN7S1312C43v43Ev();
extern void _ZN7S1312C43v44Ev();
extern void _ZN7S1312C43v45Ev();
extern void _ZN7S1312C43v46Ev();
extern void _ZN7S1312C43v47Ev();
extern void _ZN7S1312C43v48Ev();
extern void _ZN7S1312C43v49Ev();
extern void _ZN7S1312C43v50Ev();
extern void _ZN7S1312C43v51Ev();
extern void _ZN7S1312C43v52Ev();
extern void _ZN7S1312C43v53Ev();
extern void _ZN7S1312C43v54Ev();
extern void _ZN7S1312C43v55Ev();
extern void _ZN7S1312C43v56Ev();
extern void _ZN7S1312C43v57Ev();
extern void _ZN7S1312C43v58Ev();
extern void _ZN7S1312C43v59Ev();
extern void _ZN7S1312C43v60Ev();
extern void _ZN7S1312C43v61Ev();
extern void _ZN7S1312C43v62Ev();
extern void _ZN7S1312C43v63Ev();
extern void _ZN7S1312C43v64Ev();
extern void _ZN7S1312C43v65Ev();
extern void _ZN7S1312C43v66Ev();
extern void _ZN7S1312C43v67Ev();
extern void _ZN7S1312C43v68Ev();
extern void _ZN7S1312C43v69Ev();
extern void _ZN7S1312C43v70Ev();
extern void _ZN7S1312C43v71Ev();
extern void _ZN7S1312C43v72Ev();
extern void _ZN7S1312C43v73Ev();
extern void _ZN7S1312C43v74Ev();
extern void _ZN7S1312C43v75Ev();
extern void _ZN7S1312C43v76Ev();
static  VTBL_ENTRY vtc_S1312C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1312C4[0]),
  (VTBL_ENTRY)&_ZN7S1312C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1312C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v76Ev,
};
extern VTBL_ENTRY _ZTI7S1312C4[];
extern  VTBL_ENTRY _ZTV7S1312C4[];
Class_Descriptor cd_S1312C4 = {  "S1312C4", // class name
  0,0,//no base classes
  &(vtc_S1312C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1312C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1312C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1312C3  : S1312C4 {
  int s1312c3f0[2];
  void *s1312c3f1;
  int s1312c3f2[2];
  ::S473C7_nt s1312c3f3;
  ::S473C7_nt s1312c3f4;
  ::S21925C42 s1312c3f5;
  ::S473C7_nt s1312c3f6;
  unsigned int s1312c3f7:1;
  unsigned int s1312c3f8:1;
  unsigned int s1312c3f9:1;
  unsigned int s1312c3f10:1;
  unsigned int s1312c3f11:1;
  int s1312c3f12[2];
  virtual  ~S1312C3(); // _ZN7S1312C3D1Ev
  virtual void  v77(); // _ZN7S1312C33v77Ev
  virtual void  v78(); // _ZN7S1312C33v78Ev
  virtual void  v79(); // _ZN7S1312C33v79Ev
  virtual void  v80(); // _ZN7S1312C33v80Ev
  virtual void  v81(); // _ZN7S1312C33v81Ev
  virtual void  v82(); // _ZN7S1312C33v82Ev
  virtual void  v83(); // _ZN7S1312C33v83Ev
  virtual void  v84(); // _ZN7S1312C33v84Ev
  virtual void  v85(); // _ZN7S1312C33v85Ev
  virtual void  v86(); // _ZN7S1312C33v86Ev
  virtual void  v87(); // _ZN7S1312C33v87Ev
  virtual void  v88(); // _ZN7S1312C33v88Ev
  virtual void  v89(); // _ZN7S1312C33v89Ev
  virtual void  v90(); // _ZN7S1312C33v90Ev
  virtual void  v91(); // _ZN7S1312C33v91Ev
  virtual void  v92(); // _ZN7S1312C33v92Ev
  virtual void  v93(); // _ZN7S1312C33v93Ev
  virtual void  v94(); // _ZN7S1312C33v94Ev
  virtual void  v95(); // _ZN7S1312C33v95Ev
  virtual void  v96(); // _ZN7S1312C33v96Ev
  virtual void  v97(); // _ZN7S1312C33v97Ev
  virtual void  v98(); // _ZN7S1312C33v98Ev
  S1312C3(); // tgen
};
//SIG(-1 S1312C3) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1312C3 ::~S1312C3(){ note_dtor("S1312C3", this);}
void  S1312C3 ::v77(){vfunc_called(this, "_ZN7S1312C33v77Ev");}
void  S1312C3 ::v78(){vfunc_called(this, "_ZN7S1312C33v78Ev");}
void  S1312C3 ::v79(){vfunc_called(this, "_ZN7S1312C33v79Ev");}
void  S1312C3 ::v80(){vfunc_called(this, "_ZN7S1312C33v80Ev");}
void  S1312C3 ::v81(){vfunc_called(this, "_ZN7S1312C33v81Ev");}
void  S1312C3 ::v82(){vfunc_called(this, "_ZN7S1312C33v82Ev");}
void  S1312C3 ::v83(){vfunc_called(this, "_ZN7S1312C33v83Ev");}
void  S1312C3 ::v84(){vfunc_called(this, "_ZN7S1312C33v84Ev");}
void  S1312C3 ::v85(){vfunc_called(this, "_ZN7S1312C33v85Ev");}
void  S1312C3 ::v86(){vfunc_called(this, "_ZN7S1312C33v86Ev");}
void  S1312C3 ::v87(){vfunc_called(this, "_ZN7S1312C33v87Ev");}
void  S1312C3 ::v88(){vfunc_called(this, "_ZN7S1312C33v88Ev");}
void  S1312C3 ::v89(){vfunc_called(this, "_ZN7S1312C33v89Ev");}
void  S1312C3 ::v90(){vfunc_called(this, "_ZN7S1312C33v90Ev");}
void  S1312C3 ::v91(){vfunc_called(this, "_ZN7S1312C33v91Ev");}
void  S1312C3 ::v92(){vfunc_called(this, "_ZN7S1312C33v92Ev");}
void  S1312C3 ::v93(){vfunc_called(this, "_ZN7S1312C33v93Ev");}
void  S1312C3 ::v94(){vfunc_called(this, "_ZN7S1312C33v94Ev");}
void  S1312C3 ::v95(){vfunc_called(this, "_ZN7S1312C33v95Ev");}
void  S1312C3 ::v96(){vfunc_called(this, "_ZN7S1312C33v96Ev");}
void  S1312C3 ::v97(){vfunc_called(this, "_ZN7S1312C33v97Ev");}
void  S1312C3 ::v98(){vfunc_called(this, "_ZN7S1312C33v98Ev");}
S1312C3 ::S1312C3(){ note_ctor("S1312C3", this);} // tgen

static void Test_S1312C3()
{
  extern Class_Descriptor cd_S1312C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S1312C3, buf);
    S1312C3 *dp, &lv = *(dp=new (buf) S1312C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S1312C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1312C3)");
    check_base_class_offset(lv, (S1312C4*), 0, "S1312C3");
    check_field_offset(lv, s1312c3f0, ABISELECT(96,60), "S1312C3.s1312c3f0");
    check_field_offset(lv, s1312c3f1, ABISELECT(104,68), "S1312C3.s1312c3f1");
    check_field_offset(lv, s1312c3f2, ABISELECT(112,72), "S1312C3.s1312c3f2");
    check_field_offset(lv, s1312c3f3, ABISELECT(120,80), "S1312C3.s1312c3f3");
    check_field_offset(lv, s1312c3f4, ABISELECT(136,92), "S1312C3.s1312c3f4");
    check_field_offset(lv, s1312c3f5, ABISELECT(152,104), "S1312C3.s1312c3f5");
    check_field_offset(lv, s1312c3f6, ABISELECT(160,108), "S1312C3.s1312c3f6");
    set_bf_and_test(lv, s1312c3f7, ABISELECT(176,120), 0, 1, 1, "S1312C3");
    set_bf_and_test(lv, s1312c3f8, ABISELECT(176,120), 1, 1, 1, "S1312C3");
    set_bf_and_test(lv, s1312c3f9, ABISELECT(176,120), 2, 1, 1, "S1312C3");
    set_bf_and_test(lv, s1312c3f10, ABISELECT(176,120), 3, 1, 1, "S1312C3");
    set_bf_and_test(lv, s1312c3f11, ABISELECT(176,120), 4, 1, 1, "S1312C3");
    check_field_offset(lv, s1312c3f12, ABISELECT(180,124), "S1312C3.s1312c3f12");
    test_class_info(&lv, &cd_S1312C3);
    dp->~S1312C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1312C3(Test_S1312C3, "S1312C3", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN7S1312C3C1Ev();
extern void _ZN7S1312C3D1Ev();
Name_Map name_map_S1312C3[] = {
  NSPAIR(_ZN7S1312C3C1Ev),
  NSPAIR(_ZN7S1312C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1312C4;
extern VTBL_ENTRY _ZTI7S1312C4[];
extern  VTBL_ENTRY _ZTV7S1312C4[];
static Base_Class bases_S1312C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1312C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1312C3[];
extern void _ZN7S1312C3D1Ev();
extern void _ZN7S1312C3D0Ev();
extern void _ZN7S1312C43v13Ev();
extern void _ZN7S1312C43v14Ev();
extern void _ZN7S1312C43v15Ev();
extern void _ZN7S1312C43v16Ev();
extern void _ZN7S1312C43v17Ev();
extern void _ZN7S1312C43v18Ev();
extern void _ZN7S1312C43v19Ev();
extern void _ZN7S1312C43v20Ev();
extern void _ZN7S1312C43v21Ev();
extern void _ZN7S1312C43v22Ev();
extern void _ZN7S1312C43v23Ev();
extern void _ZN7S1312C43v24Ev();
extern void _ZN7S1312C43v25Ev();
extern void _ZN7S1312C43v26Ev();
extern void _ZN7S1312C43v27Ev();
extern void _ZN7S1312C43v28Ev();
extern void _ZN7S1312C43v29Ev();
extern void _ZN7S1312C43v30Ev();
extern void _ZN7S1312C43v31Ev();
extern void _ZN7S1312C43v32Ev();
extern void _ZN7S1312C43v33Ev();
extern void _ZN7S1312C43v34Ev();
extern void _ZN7S1312C43v35Ev();
extern void _ZN7S1312C43v36Ev();
extern void _ZN7S1312C43v37Ev();
extern void _ZN7S1312C43v38Ev();
extern void _ZN7S1312C43v39Ev();
extern void _ZN7S1312C43v40Ev();
extern void _ZN7S1312C43v41Ev();
extern void _ZN7S1312C43v42Ev();
extern void _ZN7S1312C43v43Ev();
extern void _ZN7S1312C43v44Ev();
extern void _ZN7S1312C43v45Ev();
extern void _ZN7S1312C43v46Ev();
extern void _ZN7S1312C43v47Ev();
extern void _ZN7S1312C43v48Ev();
extern void _ZN7S1312C43v49Ev();
extern void _ZN7S1312C43v50Ev();
extern void _ZN7S1312C43v51Ev();
extern void _ZN7S1312C43v52Ev();
extern void _ZN7S1312C43v53Ev();
extern void _ZN7S1312C43v54Ev();
extern void _ZN7S1312C43v55Ev();
extern void _ZN7S1312C43v56Ev();
extern void _ZN7S1312C43v57Ev();
extern void _ZN7S1312C43v58Ev();
extern void _ZN7S1312C43v59Ev();
extern void _ZN7S1312C43v60Ev();
extern void _ZN7S1312C43v61Ev();
extern void _ZN7S1312C43v62Ev();
extern void _ZN7S1312C43v63Ev();
extern void _ZN7S1312C43v64Ev();
extern void _ZN7S1312C43v65Ev();
extern void _ZN7S1312C43v66Ev();
extern void _ZN7S1312C43v67Ev();
extern void _ZN7S1312C43v68Ev();
extern void _ZN7S1312C43v69Ev();
extern void _ZN7S1312C43v70Ev();
extern void _ZN7S1312C43v71Ev();
extern void _ZN7S1312C43v72Ev();
extern void _ZN7S1312C43v73Ev();
extern void _ZN7S1312C43v74Ev();
extern void _ZN7S1312C43v75Ev();
extern void _ZN7S1312C43v76Ev();
extern void _ZN7S1312C33v77Ev();
extern void _ZN7S1312C33v78Ev();
extern void _ZN7S1312C33v79Ev();
extern void _ZN7S1312C33v80Ev();
extern void _ZN7S1312C33v81Ev();
extern void _ZN7S1312C33v82Ev();
extern void _ZN7S1312C33v83Ev();
extern void _ZN7S1312C33v84Ev();
extern void _ZN7S1312C33v85Ev();
extern void _ZN7S1312C33v86Ev();
extern void _ZN7S1312C33v87Ev();
extern void _ZN7S1312C33v88Ev();
extern void _ZN7S1312C33v89Ev();
extern void _ZN7S1312C33v90Ev();
extern void _ZN7S1312C33v91Ev();
extern void _ZN7S1312C33v92Ev();
extern void _ZN7S1312C33v93Ev();
extern void _ZN7S1312C33v94Ev();
extern void _ZN7S1312C33v95Ev();
extern void _ZN7S1312C33v96Ev();
extern void _ZN7S1312C33v97Ev();
extern void _ZN7S1312C33v98Ev();
static  VTBL_ENTRY vtc_S1312C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1312C3[0]),
  (VTBL_ENTRY)&_ZN7S1312C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1312C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v98Ev,
};
extern VTBL_ENTRY _ZTI7S1312C3[];
extern  VTBL_ENTRY _ZTV7S1312C3[];
Class_Descriptor cd_S1312C3 = {  "S1312C3", // class name
  bases_S1312C3, 1,
  &(vtc_S1312C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI7S1312C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1312C3),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1312C2  : S1312C3 {
  ::S473C6_nt s1312c2f0;
  virtual  ~S1312C2(); // _ZN7S1312C2D1Ev
  virtual void  v99(); // _ZN7S1312C23v99Ev
  virtual void  v100(); // _ZN7S1312C24v100Ev
  virtual void  v101(); // _ZN7S1312C24v101Ev
  virtual void  v102(); // _ZN7S1312C24v102Ev
  virtual void  v103(); // _ZN7S1312C24v103Ev
  virtual void  v104(); // _ZN7S1312C24v104Ev
  virtual void  v105(); // _ZN7S1312C24v105Ev
  virtual void  v106(); // _ZN7S1312C24v106Ev
  virtual void  v107(); // _ZN7S1312C24v107Ev
  virtual void  v108(); // _ZN7S1312C24v108Ev
  virtual void  v109(); // _ZN7S1312C24v109Ev
  virtual void  v110(); // _ZN7S1312C24v110Ev
  virtual void  v111(); // _ZN7S1312C24v111Ev
  virtual void  v112(); // _ZN7S1312C24v112Ev
  virtual void  v113(); // _ZN7S1312C24v113Ev
  virtual void  v114(); // _ZN7S1312C24v114Ev
  virtual void  v115(); // _ZN7S1312C24v115Ev
  virtual void  v116(); // _ZN7S1312C24v116Ev
  virtual void  v117(); // _ZN7S1312C24v117Ev
  S1312C2(); // tgen
};
//SIG(-1 S1312C2) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S1312C2 ::~S1312C2(){ note_dtor("S1312C2", this);}
void  S1312C2 ::v99(){vfunc_called(this, "_ZN7S1312C23v99Ev");}
void  S1312C2 ::v100(){vfunc_called(this, "_ZN7S1312C24v100Ev");}
void  S1312C2 ::v101(){vfunc_called(this, "_ZN7S1312C24v101Ev");}
void  S1312C2 ::v102(){vfunc_called(this, "_ZN7S1312C24v102Ev");}
void  S1312C2 ::v103(){vfunc_called(this, "_ZN7S1312C24v103Ev");}
void  S1312C2 ::v104(){vfunc_called(this, "_ZN7S1312C24v104Ev");}
void  S1312C2 ::v105(){vfunc_called(this, "_ZN7S1312C24v105Ev");}
void  S1312C2 ::v106(){vfunc_called(this, "_ZN7S1312C24v106Ev");}
void  S1312C2 ::v107(){vfunc_called(this, "_ZN7S1312C24v107Ev");}
void  S1312C2 ::v108(){vfunc_called(this, "_ZN7S1312C24v108Ev");}
void  S1312C2 ::v109(){vfunc_called(this, "_ZN7S1312C24v109Ev");}
void  S1312C2 ::v110(){vfunc_called(this, "_ZN7S1312C24v110Ev");}
void  S1312C2 ::v111(){vfunc_called(this, "_ZN7S1312C24v111Ev");}
void  S1312C2 ::v112(){vfunc_called(this, "_ZN7S1312C24v112Ev");}
void  S1312C2 ::v113(){vfunc_called(this, "_ZN7S1312C24v113Ev");}
void  S1312C2 ::v114(){vfunc_called(this, "_ZN7S1312C24v114Ev");}
void  S1312C2 ::v115(){vfunc_called(this, "_ZN7S1312C24v115Ev");}
void  S1312C2 ::v116(){vfunc_called(this, "_ZN7S1312C24v116Ev");}
void  S1312C2 ::v117(){vfunc_called(this, "_ZN7S1312C24v117Ev");}
S1312C2 ::S1312C2(){ note_ctor("S1312C2", this);} // tgen

static void Test_S1312C2()
{
  extern Class_Descriptor cd_S1312C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S1312C2, buf);
    S1312C2 *dp, &lv = *(dp=new (buf) S1312C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S1312C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1312C2)");
    check_base_class_offset(lv, (S1312C4*)(S1312C3*), 0, "S1312C2");
    check_base_class_offset(lv, (S1312C3*), 0, "S1312C2");
    check_field_offset(lv, s1312c2f0, ABISELECT(188,132), "S1312C2.s1312c2f0");
    test_class_info(&lv, &cd_S1312C2);
    dp->~S1312C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1312C2(Test_S1312C2, "S1312C2", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S1312C2C1Ev();
extern void _ZN7S1312C2D1Ev();
Name_Map name_map_S1312C2[] = {
  NSPAIR(_ZN7S1312C2C1Ev),
  NSPAIR(_ZN7S1312C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1312C4;
extern VTBL_ENTRY _ZTI7S1312C4[];
extern  VTBL_ENTRY _ZTV7S1312C4[];
extern Class_Descriptor cd_S1312C3;
extern VTBL_ENTRY _ZTI7S1312C3[];
extern  VTBL_ENTRY _ZTV7S1312C3[];
static Base_Class bases_S1312C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1312C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1312C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1312C2[];
extern void _ZN7S1312C2D1Ev();
extern void _ZN7S1312C2D0Ev();
extern void _ZN7S1312C43v13Ev();
extern void _ZN7S1312C43v14Ev();
extern void _ZN7S1312C43v15Ev();
extern void _ZN7S1312C43v16Ev();
extern void _ZN7S1312C43v17Ev();
extern void _ZN7S1312C43v18Ev();
extern void _ZN7S1312C43v19Ev();
extern void _ZN7S1312C43v20Ev();
extern void _ZN7S1312C43v21Ev();
extern void _ZN7S1312C43v22Ev();
extern void _ZN7S1312C43v23Ev();
extern void _ZN7S1312C43v24Ev();
extern void _ZN7S1312C43v25Ev();
extern void _ZN7S1312C43v26Ev();
extern void _ZN7S1312C43v27Ev();
extern void _ZN7S1312C43v28Ev();
extern void _ZN7S1312C43v29Ev();
extern void _ZN7S1312C43v30Ev();
extern void _ZN7S1312C43v31Ev();
extern void _ZN7S1312C43v32Ev();
extern void _ZN7S1312C43v33Ev();
extern void _ZN7S1312C43v34Ev();
extern void _ZN7S1312C43v35Ev();
extern void _ZN7S1312C43v36Ev();
extern void _ZN7S1312C43v37Ev();
extern void _ZN7S1312C43v38Ev();
extern void _ZN7S1312C43v39Ev();
extern void _ZN7S1312C43v40Ev();
extern void _ZN7S1312C43v41Ev();
extern void _ZN7S1312C43v42Ev();
extern void _ZN7S1312C43v43Ev();
extern void _ZN7S1312C43v44Ev();
extern void _ZN7S1312C43v45Ev();
extern void _ZN7S1312C43v46Ev();
extern void _ZN7S1312C43v47Ev();
extern void _ZN7S1312C43v48Ev();
extern void _ZN7S1312C43v49Ev();
extern void _ZN7S1312C43v50Ev();
extern void _ZN7S1312C43v51Ev();
extern void _ZN7S1312C43v52Ev();
extern void _ZN7S1312C43v53Ev();
extern void _ZN7S1312C43v54Ev();
extern void _ZN7S1312C43v55Ev();
extern void _ZN7S1312C43v56Ev();
extern void _ZN7S1312C43v57Ev();
extern void _ZN7S1312C43v58Ev();
extern void _ZN7S1312C43v59Ev();
extern void _ZN7S1312C43v60Ev();
extern void _ZN7S1312C43v61Ev();
extern void _ZN7S1312C43v62Ev();
extern void _ZN7S1312C43v63Ev();
extern void _ZN7S1312C43v64Ev();
extern void _ZN7S1312C43v65Ev();
extern void _ZN7S1312C43v66Ev();
extern void _ZN7S1312C43v67Ev();
extern void _ZN7S1312C43v68Ev();
extern void _ZN7S1312C43v69Ev();
extern void _ZN7S1312C43v70Ev();
extern void _ZN7S1312C43v71Ev();
extern void _ZN7S1312C43v72Ev();
extern void _ZN7S1312C43v73Ev();
extern void _ZN7S1312C43v74Ev();
extern void _ZN7S1312C43v75Ev();
extern void _ZN7S1312C43v76Ev();
extern void _ZN7S1312C33v77Ev();
extern void _ZN7S1312C33v78Ev();
extern void _ZN7S1312C33v79Ev();
extern void _ZN7S1312C33v80Ev();
extern void _ZN7S1312C33v81Ev();
extern void _ZN7S1312C33v82Ev();
extern void _ZN7S1312C33v83Ev();
extern void _ZN7S1312C33v84Ev();
extern void _ZN7S1312C33v85Ev();
extern void _ZN7S1312C33v86Ev();
extern void _ZN7S1312C33v87Ev();
extern void _ZN7S1312C33v88Ev();
extern void _ZN7S1312C33v89Ev();
extern void _ZN7S1312C33v90Ev();
extern void _ZN7S1312C33v91Ev();
extern void _ZN7S1312C33v92Ev();
extern void _ZN7S1312C33v93Ev();
extern void _ZN7S1312C33v94Ev();
extern void _ZN7S1312C33v95Ev();
extern void _ZN7S1312C33v96Ev();
extern void _ZN7S1312C33v97Ev();
extern void _ZN7S1312C33v98Ev();
extern void _ZN7S1312C23v99Ev();
extern void _ZN7S1312C24v100Ev();
extern void _ZN7S1312C24v101Ev();
extern void _ZN7S1312C24v102Ev();
extern void _ZN7S1312C24v103Ev();
extern void _ZN7S1312C24v104Ev();
extern void _ZN7S1312C24v105Ev();
extern void _ZN7S1312C24v106Ev();
extern void _ZN7S1312C24v107Ev();
extern void _ZN7S1312C24v108Ev();
extern void _ZN7S1312C24v109Ev();
extern void _ZN7S1312C24v110Ev();
extern void _ZN7S1312C24v111Ev();
extern void _ZN7S1312C24v112Ev();
extern void _ZN7S1312C24v113Ev();
extern void _ZN7S1312C24v114Ev();
extern void _ZN7S1312C24v115Ev();
extern void _ZN7S1312C24v116Ev();
extern void _ZN7S1312C24v117Ev();
static  VTBL_ENTRY vtc_S1312C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1312C2[0]),
  (VTBL_ENTRY)&_ZN7S1312C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1312C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1312C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v114Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v115Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v116Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v117Ev,
};
extern VTBL_ENTRY _ZTI7S1312C2[];
extern  VTBL_ENTRY _ZTV7S1312C2[];
Class_Descriptor cd_S1312C2 = {  "S1312C2", // class name
  bases_S1312C2, 2,
  &(vtc_S1312C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S1312C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1312C2),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1312C1  : S1312C2 {
  ::S672C14_nt s1312c1f0;
  int s1312c1f1[3];
  ::S473C7_nt s1312c1f2;
  void *s1312c1f3;
  virtual  ~S1312C1(); // _ZN7S1312C1D1Ev
  virtual void  v1(); // _ZN7S1312C12v1Ev
  virtual void  v2(); // _ZN7S1312C12v2Ev
  virtual void  v3(); // _ZN7S1312C12v3Ev
  virtual void  v4(); // _ZN7S1312C12v4Ev
  virtual void  v5(); // _ZN7S1312C12v5Ev
  virtual void  v6(); // _ZN7S1312C12v6Ev
  virtual void  v7(); // _ZN7S1312C12v7Ev
  virtual void  v8(); // _ZN7S1312C12v8Ev
  virtual void  v9(); // _ZN7S1312C12v9Ev
  virtual void  v10(); // _ZN7S1312C13v10Ev
  virtual void  v11(); // _ZN7S1312C13v11Ev
  virtual void  v12(); // _ZN7S1312C13v12Ev
  S1312C1(); // tgen
};
//SIG(1 S1312C1) C1{ BC2{ BC3{ BC4{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 FC5} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FC11{ BC12{ BC9}} Fi[3] FC6 Fp}


 S1312C1 ::~S1312C1(){ note_dtor("S1312C1", this);}
void  S1312C1 ::v1(){vfunc_called(this, "_ZN7S1312C12v1Ev");}
void  S1312C1 ::v2(){vfunc_called(this, "_ZN7S1312C12v2Ev");}
void  S1312C1 ::v3(){vfunc_called(this, "_ZN7S1312C12v3Ev");}
void  S1312C1 ::v4(){vfunc_called(this, "_ZN7S1312C12v4Ev");}
void  S1312C1 ::v5(){vfunc_called(this, "_ZN7S1312C12v5Ev");}
void  S1312C1 ::v6(){vfunc_called(this, "_ZN7S1312C12v6Ev");}
void  S1312C1 ::v7(){vfunc_called(this, "_ZN7S1312C12v7Ev");}
void  S1312C1 ::v8(){vfunc_called(this, "_ZN7S1312C12v8Ev");}
void  S1312C1 ::v9(){vfunc_called(this, "_ZN7S1312C12v9Ev");}
void  S1312C1 ::v10(){vfunc_called(this, "_ZN7S1312C13v10Ev");}
void  S1312C1 ::v11(){vfunc_called(this, "_ZN7S1312C13v11Ev");}
void  S1312C1 ::v12(){vfunc_called(this, "_ZN7S1312C13v12Ev");}
S1312C1 ::S1312C1(){ note_ctor("S1312C1", this);} // tgen

static void Test_S1312C1()
{
  extern Class_Descriptor cd_S1312C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,46)];
    init_test(&cd_S1312C1, buf);
    S1312C1 *dp, &lv = *(dp=new (buf) S1312C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,180), "sizeof(S1312C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1312C1)");
    check_base_class_offset(lv, (S1312C4*)(S1312C3*)(S1312C2*), 0, "S1312C1");
    check_base_class_offset(lv, (S1312C3*)(S1312C2*), 0, "S1312C1");
    check_base_class_offset(lv, (S1312C2*), 0, "S1312C1");
    check_field_offset(lv, s1312c1f0, ABISELECT(200,140), "S1312C1.s1312c1f0");
    check_field_offset(lv, s1312c1f1, ABISELECT(216,152), "S1312C1.s1312c1f1");
    check_field_offset(lv, s1312c1f2, ABISELECT(232,164), "S1312C1.s1312c1f2");
    check_field_offset(lv, s1312c1f3, ABISELECT(248,176), "S1312C1.s1312c1f3");
    test_class_info(&lv, &cd_S1312C1);
    dp->~S1312C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1312C1(Test_S1312C1, "S1312C1", ABISELECT(256,180));

#else // __cplusplus

extern void _ZN7S1312C1C1Ev();
extern void _ZN7S1312C1D1Ev();
Name_Map name_map_S1312C1[] = {
  NSPAIR(_ZN7S1312C1C1Ev),
  NSPAIR(_ZN7S1312C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1312C4;
extern VTBL_ENTRY _ZTI7S1312C4[];
extern  VTBL_ENTRY _ZTV7S1312C4[];
extern Class_Descriptor cd_S1312C3;
extern VTBL_ENTRY _ZTI7S1312C3[];
extern  VTBL_ENTRY _ZTV7S1312C3[];
extern Class_Descriptor cd_S1312C2;
extern VTBL_ENTRY _ZTI7S1312C2[];
extern  VTBL_ENTRY _ZTV7S1312C2[];
static Base_Class bases_S1312C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1312C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1312C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1312C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1312C1[];
extern void _ZN7S1312C1D1Ev();
extern void _ZN7S1312C1D0Ev();
extern void _ZN7S1312C43v13Ev();
extern void _ZN7S1312C43v14Ev();
extern void _ZN7S1312C43v15Ev();
extern void _ZN7S1312C43v16Ev();
extern void _ZN7S1312C43v17Ev();
extern void _ZN7S1312C43v18Ev();
extern void _ZN7S1312C43v19Ev();
extern void _ZN7S1312C43v20Ev();
extern void _ZN7S1312C43v21Ev();
extern void _ZN7S1312C43v22Ev();
extern void _ZN7S1312C43v23Ev();
extern void _ZN7S1312C43v24Ev();
extern void _ZN7S1312C43v25Ev();
extern void _ZN7S1312C43v26Ev();
extern void _ZN7S1312C43v27Ev();
extern void _ZN7S1312C43v28Ev();
extern void _ZN7S1312C43v29Ev();
extern void _ZN7S1312C43v30Ev();
extern void _ZN7S1312C43v31Ev();
extern void _ZN7S1312C43v32Ev();
extern void _ZN7S1312C43v33Ev();
extern void _ZN7S1312C43v34Ev();
extern void _ZN7S1312C43v35Ev();
extern void _ZN7S1312C43v36Ev();
extern void _ZN7S1312C43v37Ev();
extern void _ZN7S1312C43v38Ev();
extern void _ZN7S1312C43v39Ev();
extern void _ZN7S1312C43v40Ev();
extern void _ZN7S1312C43v41Ev();
extern void _ZN7S1312C43v42Ev();
extern void _ZN7S1312C43v43Ev();
extern void _ZN7S1312C43v44Ev();
extern void _ZN7S1312C43v45Ev();
extern void _ZN7S1312C43v46Ev();
extern void _ZN7S1312C43v47Ev();
extern void _ZN7S1312C43v48Ev();
extern void _ZN7S1312C43v49Ev();
extern void _ZN7S1312C43v50Ev();
extern void _ZN7S1312C43v51Ev();
extern void _ZN7S1312C43v52Ev();
extern void _ZN7S1312C43v53Ev();
extern void _ZN7S1312C43v54Ev();
extern void _ZN7S1312C43v55Ev();
extern void _ZN7S1312C43v56Ev();
extern void _ZN7S1312C43v57Ev();
extern void _ZN7S1312C43v58Ev();
extern void _ZN7S1312C43v59Ev();
extern void _ZN7S1312C43v60Ev();
extern void _ZN7S1312C43v61Ev();
extern void _ZN7S1312C43v62Ev();
extern void _ZN7S1312C43v63Ev();
extern void _ZN7S1312C43v64Ev();
extern void _ZN7S1312C43v65Ev();
extern void _ZN7S1312C43v66Ev();
extern void _ZN7S1312C43v67Ev();
extern void _ZN7S1312C43v68Ev();
extern void _ZN7S1312C43v69Ev();
extern void _ZN7S1312C43v70Ev();
extern void _ZN7S1312C43v71Ev();
extern void _ZN7S1312C43v72Ev();
extern void _ZN7S1312C43v73Ev();
extern void _ZN7S1312C43v74Ev();
extern void _ZN7S1312C43v75Ev();
extern void _ZN7S1312C43v76Ev();
extern void _ZN7S1312C33v77Ev();
extern void _ZN7S1312C33v78Ev();
extern void _ZN7S1312C33v79Ev();
extern void _ZN7S1312C33v80Ev();
extern void _ZN7S1312C33v81Ev();
extern void _ZN7S1312C33v82Ev();
extern void _ZN7S1312C33v83Ev();
extern void _ZN7S1312C33v84Ev();
extern void _ZN7S1312C33v85Ev();
extern void _ZN7S1312C33v86Ev();
extern void _ZN7S1312C33v87Ev();
extern void _ZN7S1312C33v88Ev();
extern void _ZN7S1312C33v89Ev();
extern void _ZN7S1312C33v90Ev();
extern void _ZN7S1312C33v91Ev();
extern void _ZN7S1312C33v92Ev();
extern void _ZN7S1312C33v93Ev();
extern void _ZN7S1312C33v94Ev();
extern void _ZN7S1312C33v95Ev();
extern void _ZN7S1312C33v96Ev();
extern void _ZN7S1312C33v97Ev();
extern void _ZN7S1312C33v98Ev();
extern void _ZN7S1312C23v99Ev();
extern void _ZN7S1312C24v100Ev();
extern void _ZN7S1312C24v101Ev();
extern void _ZN7S1312C24v102Ev();
extern void _ZN7S1312C24v103Ev();
extern void _ZN7S1312C24v104Ev();
extern void _ZN7S1312C24v105Ev();
extern void _ZN7S1312C24v106Ev();
extern void _ZN7S1312C24v107Ev();
extern void _ZN7S1312C24v108Ev();
extern void _ZN7S1312C24v109Ev();
extern void _ZN7S1312C24v110Ev();
extern void _ZN7S1312C24v111Ev();
extern void _ZN7S1312C24v112Ev();
extern void _ZN7S1312C24v113Ev();
extern void _ZN7S1312C24v114Ev();
extern void _ZN7S1312C24v115Ev();
extern void _ZN7S1312C24v116Ev();
extern void _ZN7S1312C24v117Ev();
extern void _ZN7S1312C12v1Ev();
extern void _ZN7S1312C12v2Ev();
extern void _ZN7S1312C12v3Ev();
extern void _ZN7S1312C12v4Ev();
extern void _ZN7S1312C12v5Ev();
extern void _ZN7S1312C12v6Ev();
extern void _ZN7S1312C12v7Ev();
extern void _ZN7S1312C12v8Ev();
extern void _ZN7S1312C12v9Ev();
extern void _ZN7S1312C13v10Ev();
extern void _ZN7S1312C13v11Ev();
extern void _ZN7S1312C13v12Ev();
static  VTBL_ENTRY vtc_S1312C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1312C1[0]),
  (VTBL_ENTRY)&_ZN7S1312C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1312C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1312C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1312C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1312C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v114Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v115Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v116Ev,
  (VTBL_ENTRY)&_ZN7S1312C24v117Ev,
  (VTBL_ENTRY)&_ZN7S1312C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1312C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1312C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1312C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1312C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1312C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1312C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1312C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1312C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1312C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1312C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1312C13v12Ev,
};
extern VTBL_ENTRY _ZTI7S1312C1[];
extern  VTBL_ENTRY _ZTV7S1312C1[];
Class_Descriptor cd_S1312C1 = {  "S1312C1", // class name
  bases_S1312C1, 3,
  &(vtc_S1312C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,180), // object size
  NSPAIRA(_ZTI7S1312C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1312C1),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S639C5  {
  int s639c5f0;
  __tsi64 s639c5f1;
  void *s639c5f2[4];
  int s639c5f3[2];
  void *s639c5f4;
  ::S473C6_nt s639c5f5;
  void *s639c5f6[2];
  virtual  ~S639C5(); // _ZN6S639C5D1Ev
  virtual void  v5(); // _ZN6S639C52v5Ev
  virtual void  v6(); // _ZN6S639C52v6Ev
  virtual void  v7(); // _ZN6S639C52v7Ev
  virtual void  v8(); // _ZN6S639C52v8Ev
  virtual void  v9(); // _ZN6S639C52v9Ev
  virtual void  v10(); // _ZN6S639C53v10Ev
  virtual void  v11(); // _ZN6S639C53v11Ev
  virtual void  v12(); // _ZN6S639C53v12Ev
  virtual void  v13(); // _ZN6S639C53v13Ev
  virtual void  v14(); // _ZN6S639C53v14Ev
  virtual void  v15(); // _ZN6S639C53v15Ev
  virtual void  v16(); // _ZN6S639C53v16Ev
  virtual void  v17(); // _ZN6S639C53v17Ev
  virtual void  v18(); // _ZN6S639C53v18Ev
  virtual void  v19(); // _ZN6S639C53v19Ev
  virtual void  v20(); // _ZN6S639C53v20Ev
  virtual void  v21(); // _ZN6S639C53v21Ev
  virtual void  v22(); // _ZN6S639C53v22Ev
  virtual void  v23(); // _ZN6S639C53v23Ev
  virtual void  v24(); // _ZN6S639C53v24Ev
  virtual void  v25(); // _ZN6S639C53v25Ev
  virtual void  v26(); // _ZN6S639C53v26Ev
  virtual void  v27(); // _ZN6S639C53v27Ev
  virtual void  v28(); // _ZN6S639C53v28Ev
  virtual void  v29(); // _ZN6S639C53v29Ev
  virtual void  v30(); // _ZN6S639C53v30Ev
  virtual void  v31(); // _ZN6S639C53v31Ev
  virtual void  v32(); // _ZN6S639C53v32Ev
  virtual void  v33(); // _ZN6S639C53v33Ev
  virtual void  v34(); // _ZN6S639C53v34Ev
  virtual void  v35(); // _ZN6S639C53v35Ev
  virtual void  v36(); // _ZN6S639C53v36Ev
  virtual void  v37(); // _ZN6S639C53v37Ev
  virtual void  v38(); // _ZN6S639C53v38Ev
  virtual void  v39(); // _ZN6S639C53v39Ev
  virtual void  v40(); // _ZN6S639C53v40Ev
  virtual void  v41(); // _ZN6S639C53v41Ev
  virtual void  v42(); // _ZN6S639C53v42Ev
  virtual void  v43(); // _ZN6S639C53v43Ev
  virtual void  v44(); // _ZN6S639C53v44Ev
  virtual void  v45(); // _ZN6S639C53v45Ev
  virtual void  v46(); // _ZN6S639C53v46Ev
  virtual void  v47(); // _ZN6S639C53v47Ev
  virtual void  v48(); // _ZN6S639C53v48Ev
  virtual void  v49(); // _ZN6S639C53v49Ev
  virtual void  v50(); // _ZN6S639C53v50Ev
  virtual void  v51(); // _ZN6S639C53v51Ev
  virtual void  v52(); // _ZN6S639C53v52Ev
  virtual void  v53(); // _ZN6S639C53v53Ev
  virtual void  v54(); // _ZN6S639C53v54Ev
  virtual void  v55(); // _ZN6S639C53v55Ev
  virtual void  v56(); // _ZN6S639C53v56Ev
  virtual void  v57(); // _ZN6S639C53v57Ev
  virtual void  v58(); // _ZN6S639C53v58Ev
  virtual void  v59(); // _ZN6S639C53v59Ev
  virtual void  v60(); // _ZN6S639C53v60Ev
  virtual void  v61(); // _ZN6S639C53v61Ev
  virtual void  v62(); // _ZN6S639C53v62Ev
  virtual void  v63(); // _ZN6S639C53v63Ev
  virtual void  v64(); // _ZN6S639C53v64Ev
  virtual void  v65(); // _ZN6S639C53v65Ev
  virtual void  v66(); // _ZN6S639C53v66Ev
  virtual void  v67(); // _ZN6S639C53v67Ev
  virtual void  v68(); // _ZN6S639C53v68Ev
  S639C5(); // tgen
};
//SIG(-1 S639C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S639C5 ::~S639C5(){ note_dtor("S639C5", this);}
void  S639C5 ::v5(){vfunc_called(this, "_ZN6S639C52v5Ev");}
void  S639C5 ::v6(){vfunc_called(this, "_ZN6S639C52v6Ev");}
void  S639C5 ::v7(){vfunc_called(this, "_ZN6S639C52v7Ev");}
void  S639C5 ::v8(){vfunc_called(this, "_ZN6S639C52v8Ev");}
void  S639C5 ::v9(){vfunc_called(this, "_ZN6S639C52v9Ev");}
void  S639C5 ::v10(){vfunc_called(this, "_ZN6S639C53v10Ev");}
void  S639C5 ::v11(){vfunc_called(this, "_ZN6S639C53v11Ev");}
void  S639C5 ::v12(){vfunc_called(this, "_ZN6S639C53v12Ev");}
void  S639C5 ::v13(){vfunc_called(this, "_ZN6S639C53v13Ev");}
void  S639C5 ::v14(){vfunc_called(this, "_ZN6S639C53v14Ev");}
void  S639C5 ::v15(){vfunc_called(this, "_ZN6S639C53v15Ev");}
void  S639C5 ::v16(){vfunc_called(this, "_ZN6S639C53v16Ev");}
void  S639C5 ::v17(){vfunc_called(this, "_ZN6S639C53v17Ev");}
void  S639C5 ::v18(){vfunc_called(this, "_ZN6S639C53v18Ev");}
void  S639C5 ::v19(){vfunc_called(this, "_ZN6S639C53v19Ev");}
void  S639C5 ::v20(){vfunc_called(this, "_ZN6S639C53v20Ev");}
void  S639C5 ::v21(){vfunc_called(this, "_ZN6S639C53v21Ev");}
void  S639C5 ::v22(){vfunc_called(this, "_ZN6S639C53v22Ev");}
void  S639C5 ::v23(){vfunc_called(this, "_ZN6S639C53v23Ev");}
void  S639C5 ::v24(){vfunc_called(this, "_ZN6S639C53v24Ev");}
void  S639C5 ::v25(){vfunc_called(this, "_ZN6S639C53v25Ev");}
void  S639C5 ::v26(){vfunc_called(this, "_ZN6S639C53v26Ev");}
void  S639C5 ::v27(){vfunc_called(this, "_ZN6S639C53v27Ev");}
void  S639C5 ::v28(){vfunc_called(this, "_ZN6S639C53v28Ev");}
void  S639C5 ::v29(){vfunc_called(this, "_ZN6S639C53v29Ev");}
void  S639C5 ::v30(){vfunc_called(this, "_ZN6S639C53v30Ev");}
void  S639C5 ::v31(){vfunc_called(this, "_ZN6S639C53v31Ev");}
void  S639C5 ::v32(){vfunc_called(this, "_ZN6S639C53v32Ev");}
void  S639C5 ::v33(){vfunc_called(this, "_ZN6S639C53v33Ev");}
void  S639C5 ::v34(){vfunc_called(this, "_ZN6S639C53v34Ev");}
void  S639C5 ::v35(){vfunc_called(this, "_ZN6S639C53v35Ev");}
void  S639C5 ::v36(){vfunc_called(this, "_ZN6S639C53v36Ev");}
void  S639C5 ::v37(){vfunc_called(this, "_ZN6S639C53v37Ev");}
void  S639C5 ::v38(){vfunc_called(this, "_ZN6S639C53v38Ev");}
void  S639C5 ::v39(){vfunc_called(this, "_ZN6S639C53v39Ev");}
void  S639C5 ::v40(){vfunc_called(this, "_ZN6S639C53v40Ev");}
void  S639C5 ::v41(){vfunc_called(this, "_ZN6S639C53v41Ev");}
void  S639C5 ::v42(){vfunc_called(this, "_ZN6S639C53v42Ev");}
void  S639C5 ::v43(){vfunc_called(this, "_ZN6S639C53v43Ev");}
void  S639C5 ::v44(){vfunc_called(this, "_ZN6S639C53v44Ev");}
void  S639C5 ::v45(){vfunc_called(this, "_ZN6S639C53v45Ev");}
void  S639C5 ::v46(){vfunc_called(this, "_ZN6S639C53v46Ev");}
void  S639C5 ::v47(){vfunc_called(this, "_ZN6S639C53v47Ev");}
void  S639C5 ::v48(){vfunc_called(this, "_ZN6S639C53v48Ev");}
void  S639C5 ::v49(){vfunc_called(this, "_ZN6S639C53v49Ev");}
void  S639C5 ::v50(){vfunc_called(this, "_ZN6S639C53v50Ev");}
void  S639C5 ::v51(){vfunc_called(this, "_ZN6S639C53v51Ev");}
void  S639C5 ::v52(){vfunc_called(this, "_ZN6S639C53v52Ev");}
void  S639C5 ::v53(){vfunc_called(this, "_ZN6S639C53v53Ev");}
void  S639C5 ::v54(){vfunc_called(this, "_ZN6S639C53v54Ev");}
void  S639C5 ::v55(){vfunc_called(this, "_ZN6S639C53v55Ev");}
void  S639C5 ::v56(){vfunc_called(this, "_ZN6S639C53v56Ev");}
void  S639C5 ::v57(){vfunc_called(this, "_ZN6S639C53v57Ev");}
void  S639C5 ::v58(){vfunc_called(this, "_ZN6S639C53v58Ev");}
void  S639C5 ::v59(){vfunc_called(this, "_ZN6S639C53v59Ev");}
void  S639C5 ::v60(){vfunc_called(this, "_ZN6S639C53v60Ev");}
void  S639C5 ::v61(){vfunc_called(this, "_ZN6S639C53v61Ev");}
void  S639C5 ::v62(){vfunc_called(this, "_ZN6S639C53v62Ev");}
void  S639C5 ::v63(){vfunc_called(this, "_ZN6S639C53v63Ev");}
void  S639C5 ::v64(){vfunc_called(this, "_ZN6S639C53v64Ev");}
void  S639C5 ::v65(){vfunc_called(this, "_ZN6S639C53v65Ev");}
void  S639C5 ::v66(){vfunc_called(this, "_ZN6S639C53v66Ev");}
void  S639C5 ::v67(){vfunc_called(this, "_ZN6S639C53v67Ev");}
void  S639C5 ::v68(){vfunc_called(this, "_ZN6S639C53v68Ev");}
S639C5 ::S639C5(){ note_ctor("S639C5", this);} // tgen

static void Test_S639C5()
{
  extern Class_Descriptor cd_S639C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S639C5, buf);
    S639C5 *dp, &lv = *(dp=new (buf) S639C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S639C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S639C5)");
    check_field_offset(lv, s639c5f0, ABISELECT(8,4), "S639C5.s639c5f0");
    check_field_offset(lv, s639c5f1, ABISELECT(16,8), "S639C5.s639c5f1");
    check_field_offset(lv, s639c5f2, ABISELECT(24,16), "S639C5.s639c5f2");
    check_field_offset(lv, s639c5f3, ABISELECT(56,32), "S639C5.s639c5f3");
    check_field_offset(lv, s639c5f4, ABISELECT(64,40), "S639C5.s639c5f4");
    check_field_offset(lv, s639c5f5, ABISELECT(72,44), "S639C5.s639c5f5");
    check_field_offset(lv, s639c5f6, ABISELECT(80,52), "S639C5.s639c5f6");
    test_class_info(&lv, &cd_S639C5);
    dp->~S639C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS639C5(Test_S639C5, "S639C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S639C5C1Ev();
extern void _ZN6S639C5D1Ev();
Name_Map name_map_S639C5[] = {
  NSPAIR(_ZN6S639C5C1Ev),
  NSPAIR(_ZN6S639C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S639C5[];
extern void _ZN6S639C5D1Ev();
extern void _ZN6S639C5D0Ev();
extern void _ZN6S639C52v5Ev();
extern void _ZN6S639C52v6Ev();
extern void _ZN6S639C52v7Ev();
extern void _ZN6S639C52v8Ev();
extern void _ZN6S639C52v9Ev();
extern void _ZN6S639C53v10Ev();
extern void _ZN6S639C53v11Ev();
extern void _ZN6S639C53v12Ev();
extern void _ZN6S639C53v13Ev();
extern void _ZN6S639C53v14Ev();
extern void _ZN6S639C53v15Ev();
extern void _ZN6S639C53v16Ev();
extern void _ZN6S639C53v17Ev();
extern void _ZN6S639C53v18Ev();
extern void _ZN6S639C53v19Ev();
extern void _ZN6S639C53v20Ev();
extern void _ZN6S639C53v21Ev();
extern void _ZN6S639C53v22Ev();
extern void _ZN6S639C53v23Ev();
extern void _ZN6S639C53v24Ev();
extern void _ZN6S639C53v25Ev();
extern void _ZN6S639C53v26Ev();
extern void _ZN6S639C53v27Ev();
extern void _ZN6S639C53v28Ev();
extern void _ZN6S639C53v29Ev();
extern void _ZN6S639C53v30Ev();
extern void _ZN6S639C53v31Ev();
extern void _ZN6S639C53v32Ev();
extern void _ZN6S639C53v33Ev();
extern void _ZN6S639C53v34Ev();
extern void _ZN6S639C53v35Ev();
extern void _ZN6S639C53v36Ev();
extern void _ZN6S639C53v37Ev();
extern void _ZN6S639C53v38Ev();
extern void _ZN6S639C53v39Ev();
extern void _ZN6S639C53v40Ev();
extern void _ZN6S639C53v41Ev();
extern void _ZN6S639C53v42Ev();
extern void _ZN6S639C53v43Ev();
extern void _ZN6S639C53v44Ev();
extern void _ZN6S639C53v45Ev();
extern void _ZN6S639C53v46Ev();
extern void _ZN6S639C53v47Ev();
extern void _ZN6S639C53v48Ev();
extern void _ZN6S639C53v49Ev();
extern void _ZN6S639C53v50Ev();
extern void _ZN6S639C53v51Ev();
extern void _ZN6S639C53v52Ev();
extern void _ZN6S639C53v53Ev();
extern void _ZN6S639C53v54Ev();
extern void _ZN6S639C53v55Ev();
extern void _ZN6S639C53v56Ev();
extern void _ZN6S639C53v57Ev();
extern void _ZN6S639C53v58Ev();
extern void _ZN6S639C53v59Ev();
extern void _ZN6S639C53v60Ev();
extern void _ZN6S639C53v61Ev();
extern void _ZN6S639C53v62Ev();
extern void _ZN6S639C53v63Ev();
extern void _ZN6S639C53v64Ev();
extern void _ZN6S639C53v65Ev();
extern void _ZN6S639C53v66Ev();
extern void _ZN6S639C53v67Ev();
extern void _ZN6S639C53v68Ev();
static  VTBL_ENTRY vtc_S639C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S639C5[0]),
  (VTBL_ENTRY)&_ZN6S639C5D1Ev,
  (VTBL_ENTRY)&_ZN6S639C5D0Ev,
  (VTBL_ENTRY)&_ZN6S639C52v5Ev,
  (VTBL_ENTRY)&_ZN6S639C52v6Ev,
  (VTBL_ENTRY)&_ZN6S639C52v7Ev,
  (VTBL_ENTRY)&_ZN6S639C52v8Ev,
  (VTBL_ENTRY)&_ZN6S639C52v9Ev,
  (VTBL_ENTRY)&_ZN6S639C53v10Ev,
  (VTBL_ENTRY)&_ZN6S639C53v11Ev,
  (VTBL_ENTRY)&_ZN6S639C53v12Ev,
  (VTBL_ENTRY)&_ZN6S639C53v13Ev,
  (VTBL_ENTRY)&_ZN6S639C53v14Ev,
  (VTBL_ENTRY)&_ZN6S639C53v15Ev,
  (VTBL_ENTRY)&_ZN6S639C53v16Ev,
  (VTBL_ENTRY)&_ZN6S639C53v17Ev,
  (VTBL_ENTRY)&_ZN6S639C53v18Ev,
  (VTBL_ENTRY)&_ZN6S639C53v19Ev,
  (VTBL_ENTRY)&_ZN6S639C53v20Ev,
  (VTBL_ENTRY)&_ZN6S639C53v21Ev,
  (VTBL_ENTRY)&_ZN6S639C53v22Ev,
  (VTBL_ENTRY)&_ZN6S639C53v23Ev,
  (VTBL_ENTRY)&_ZN6S639C53v24Ev,
  (VTBL_ENTRY)&_ZN6S639C53v25Ev,
  (VTBL_ENTRY)&_ZN6S639C53v26Ev,
  (VTBL_ENTRY)&_ZN6S639C53v27Ev,
  (VTBL_ENTRY)&_ZN6S639C53v28Ev,
  (VTBL_ENTRY)&_ZN6S639C53v29Ev,
  (VTBL_ENTRY)&_ZN6S639C53v30Ev,
  (VTBL_ENTRY)&_ZN6S639C53v31Ev,
  (VTBL_ENTRY)&_ZN6S639C53v32Ev,
  (VTBL_ENTRY)&_ZN6S639C53v33Ev,
  (VTBL_ENTRY)&_ZN6S639C53v34Ev,
  (VTBL_ENTRY)&_ZN6S639C53v35Ev,
  (VTBL_ENTRY)&_ZN6S639C53v36Ev,
  (VTBL_ENTRY)&_ZN6S639C53v37Ev,
  (VTBL_ENTRY)&_ZN6S639C53v38Ev,
  (VTBL_ENTRY)&_ZN6S639C53v39Ev,
  (VTBL_ENTRY)&_ZN6S639C53v40Ev,
  (VTBL_ENTRY)&_ZN6S639C53v41Ev,
  (VTBL_ENTRY)&_ZN6S639C53v42Ev,
  (VTBL_ENTRY)&_ZN6S639C53v43Ev,
  (VTBL_ENTRY)&_ZN6S639C53v44Ev,
  (VTBL_ENTRY)&_ZN6S639C53v45Ev,
  (VTBL_ENTRY)&_ZN6S639C53v46Ev,
  (VTBL_ENTRY)&_ZN6S639C53v47Ev,
  (VTBL_ENTRY)&_ZN6S639C53v48Ev,
  (VTBL_ENTRY)&_ZN6S639C53v49Ev,
  (VTBL_ENTRY)&_ZN6S639C53v50Ev,
  (VTBL_ENTRY)&_ZN6S639C53v51Ev,
  (VTBL_ENTRY)&_ZN6S639C53v52Ev,
  (VTBL_ENTRY)&_ZN6S639C53v53Ev,
  (VTBL_ENTRY)&_ZN6S639C53v54Ev,
  (VTBL_ENTRY)&_ZN6S639C53v55Ev,
  (VTBL_ENTRY)&_ZN6S639C53v56Ev,
  (VTBL_ENTRY)&_ZN6S639C53v57Ev,
  (VTBL_ENTRY)&_ZN6S639C53v58Ev,
  (VTBL_ENTRY)&_ZN6S639C53v59Ev,
  (VTBL_ENTRY)&_ZN6S639C53v60Ev,
  (VTBL_ENTRY)&_ZN6S639C53v61Ev,
  (VTBL_ENTRY)&_ZN6S639C53v62Ev,
  (VTBL_ENTRY)&_ZN6S639C53v63Ev,
  (VTBL_ENTRY)&_ZN6S639C53v64Ev,
  (VTBL_ENTRY)&_ZN6S639C53v65Ev,
  (VTBL_ENTRY)&_ZN6S639C53v66Ev,
  (VTBL_ENTRY)&_ZN6S639C53v67Ev,
  (VTBL_ENTRY)&_ZN6S639C53v68Ev,
};
extern VTBL_ENTRY _ZTI6S639C5[];
extern  VTBL_ENTRY _ZTV6S639C5[];
Class_Descriptor cd_S639C5 = {  "S639C5", // class name
  0,0,//no base classes
  &(vtc_S639C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S639C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S639C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S639C4  : S639C5 {
  int s639c4f0[2];
  void *s639c4f1;
  int s639c4f2[2];
  ::S473C7_nt s639c4f3;
  ::S473C7_nt s639c4f4;
  ::S21925C42 s639c4f5;
  ::S473C7_nt s639c4f6;
  unsigned int s639c4f7:1;
  unsigned int s639c4f8:1;
  unsigned int s639c4f9:1;
  unsigned int s639c4f10:1;
  unsigned int s639c4f11:1;
  int s639c4f12[2];
  virtual  ~S639C4(); // _ZN6S639C4D1Ev
  virtual void  v69(); // _ZN6S639C43v69Ev
  virtual void  v70(); // _ZN6S639C43v70Ev
  virtual void  v71(); // _ZN6S639C43v71Ev
  virtual void  v72(); // _ZN6S639C43v72Ev
  virtual void  v73(); // _ZN6S639C43v73Ev
  virtual void  v74(); // _ZN6S639C43v74Ev
  virtual void  v75(); // _ZN6S639C43v75Ev
  virtual void  v76(); // _ZN6S639C43v76Ev
  virtual void  v77(); // _ZN6S639C43v77Ev
  virtual void  v78(); // _ZN6S639C43v78Ev
  virtual void  v79(); // _ZN6S639C43v79Ev
  virtual void  v80(); // _ZN6S639C43v80Ev
  virtual void  v81(); // _ZN6S639C43v81Ev
  virtual void  v82(); // _ZN6S639C43v82Ev
  virtual void  v83(); // _ZN6S639C43v83Ev
  virtual void  v84(); // _ZN6S639C43v84Ev
  virtual void  v85(); // _ZN6S639C43v85Ev
  virtual void  v86(); // _ZN6S639C43v86Ev
  virtual void  v87(); // _ZN6S639C43v87Ev
  virtual void  v88(); // _ZN6S639C43v88Ev
  virtual void  v89(); // _ZN6S639C43v89Ev
  virtual void  v90(); // _ZN6S639C43v90Ev
  S639C4(); // tgen
};
//SIG(-1 S639C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S639C4 ::~S639C4(){ note_dtor("S639C4", this);}
void  S639C4 ::v69(){vfunc_called(this, "_ZN6S639C43v69Ev");}
void  S639C4 ::v70(){vfunc_called(this, "_ZN6S639C43v70Ev");}
void  S639C4 ::v71(){vfunc_called(this, "_ZN6S639C43v71Ev");}
void  S639C4 ::v72(){vfunc_called(this, "_ZN6S639C43v72Ev");}
void  S639C4 ::v73(){vfunc_called(this, "_ZN6S639C43v73Ev");}
void  S639C4 ::v74(){vfunc_called(this, "_ZN6S639C43v74Ev");}
void  S639C4 ::v75(){vfunc_called(this, "_ZN6S639C43v75Ev");}
void  S639C4 ::v76(){vfunc_called(this, "_ZN6S639C43v76Ev");}
void  S639C4 ::v77(){vfunc_called(this, "_ZN6S639C43v77Ev");}
void  S639C4 ::v78(){vfunc_called(this, "_ZN6S639C43v78Ev");}
void  S639C4 ::v79(){vfunc_called(this, "_ZN6S639C43v79Ev");}
void  S639C4 ::v80(){vfunc_called(this, "_ZN6S639C43v80Ev");}
void  S639C4 ::v81(){vfunc_called(this, "_ZN6S639C43v81Ev");}
void  S639C4 ::v82(){vfunc_called(this, "_ZN6S639C43v82Ev");}
void  S639C4 ::v83(){vfunc_called(this, "_ZN6S639C43v83Ev");}
void  S639C4 ::v84(){vfunc_called(this, "_ZN6S639C43v84Ev");}
void  S639C4 ::v85(){vfunc_called(this, "_ZN6S639C43v85Ev");}
void  S639C4 ::v86(){vfunc_called(this, "_ZN6S639C43v86Ev");}
void  S639C4 ::v87(){vfunc_called(this, "_ZN6S639C43v87Ev");}
void  S639C4 ::v88(){vfunc_called(this, "_ZN6S639C43v88Ev");}
void  S639C4 ::v89(){vfunc_called(this, "_ZN6S639C43v89Ev");}
void  S639C4 ::v90(){vfunc_called(this, "_ZN6S639C43v90Ev");}
S639C4 ::S639C4(){ note_ctor("S639C4", this);} // tgen

static void Test_S639C4()
{
  extern Class_Descriptor cd_S639C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S639C4, buf);
    S639C4 *dp, &lv = *(dp=new (buf) S639C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S639C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S639C4)");
    check_base_class_offset(lv, (S639C5*), 0, "S639C4");
    check_field_offset(lv, s639c4f0, ABISELECT(96,60), "S639C4.s639c4f0");
    check_field_offset(lv, s639c4f1, ABISELECT(104,68), "S639C4.s639c4f1");
    check_field_offset(lv, s639c4f2, ABISELECT(112,72), "S639C4.s639c4f2");
    check_field_offset(lv, s639c4f3, ABISELECT(120,80), "S639C4.s639c4f3");
    check_field_offset(lv, s639c4f4, ABISELECT(136,92), "S639C4.s639c4f4");
    check_field_offset(lv, s639c4f5, ABISELECT(152,104), "S639C4.s639c4f5");
    check_field_offset(lv, s639c4f6, ABISELECT(160,108), "S639C4.s639c4f6");
    set_bf_and_test(lv, s639c4f7, ABISELECT(176,120), 0, 1, 1, "S639C4");
    set_bf_and_test(lv, s639c4f8, ABISELECT(176,120), 1, 1, 1, "S639C4");
    set_bf_and_test(lv, s639c4f9, ABISELECT(176,120), 2, 1, 1, "S639C4");
    set_bf_and_test(lv, s639c4f10, ABISELECT(176,120), 3, 1, 1, "S639C4");
    set_bf_and_test(lv, s639c4f11, ABISELECT(176,120), 4, 1, 1, "S639C4");
    check_field_offset(lv, s639c4f12, ABISELECT(180,124), "S639C4.s639c4f12");
    test_class_info(&lv, &cd_S639C4);
    dp->~S639C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS639C4(Test_S639C4, "S639C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S639C4C1Ev();
extern void _ZN6S639C4D1Ev();
Name_Map name_map_S639C4[] = {
  NSPAIR(_ZN6S639C4C1Ev),
  NSPAIR(_ZN6S639C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S639C5;
extern VTBL_ENTRY _ZTI6S639C5[];
extern  VTBL_ENTRY _ZTV6S639C5[];
static Base_Class bases_S639C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S639C4[];
extern void _ZN6S639C4D1Ev();
extern void _ZN6S639C4D0Ev();
extern void _ZN6S639C52v5Ev();
extern void _ZN6S639C52v6Ev();
extern void _ZN6S639C52v7Ev();
extern void _ZN6S639C52v8Ev();
extern void _ZN6S639C52v9Ev();
extern void _ZN6S639C53v10Ev();
extern void _ZN6S639C53v11Ev();
extern void _ZN6S639C53v12Ev();
extern void _ZN6S639C53v13Ev();
extern void _ZN6S639C53v14Ev();
extern void _ZN6S639C53v15Ev();
extern void _ZN6S639C53v16Ev();
extern void _ZN6S639C53v17Ev();
extern void _ZN6S639C53v18Ev();
extern void _ZN6S639C53v19Ev();
extern void _ZN6S639C53v20Ev();
extern void _ZN6S639C53v21Ev();
extern void _ZN6S639C53v22Ev();
extern void _ZN6S639C53v23Ev();
extern void _ZN6S639C53v24Ev();
extern void _ZN6S639C53v25Ev();
extern void _ZN6S639C53v26Ev();
extern void _ZN6S639C53v27Ev();
extern void _ZN6S639C53v28Ev();
extern void _ZN6S639C53v29Ev();
extern void _ZN6S639C53v30Ev();
extern void _ZN6S639C53v31Ev();
extern void _ZN6S639C53v32Ev();
extern void _ZN6S639C53v33Ev();
extern void _ZN6S639C53v34Ev();
extern void _ZN6S639C53v35Ev();
extern void _ZN6S639C53v36Ev();
extern void _ZN6S639C53v37Ev();
extern void _ZN6S639C53v38Ev();
extern void _ZN6S639C53v39Ev();
extern void _ZN6S639C53v40Ev();
extern void _ZN6S639C53v41Ev();
extern void _ZN6S639C53v42Ev();
extern void _ZN6S639C53v43Ev();
extern void _ZN6S639C53v44Ev();
extern void _ZN6S639C53v45Ev();
extern void _ZN6S639C53v46Ev();
extern void _ZN6S639C53v47Ev();
extern void _ZN6S639C53v48Ev();
extern void _ZN6S639C53v49Ev();
extern void _ZN6S639C53v50Ev();
extern void _ZN6S639C53v51Ev();
extern void _ZN6S639C53v52Ev();
extern void _ZN6S639C53v53Ev();
extern void _ZN6S639C53v54Ev();
extern void _ZN6S639C53v55Ev();
extern void _ZN6S639C53v56Ev();
extern void _ZN6S639C53v57Ev();
extern void _ZN6S639C53v58Ev();
extern void _ZN6S639C53v59Ev();
extern void _ZN6S639C53v60Ev();
extern void _ZN6S639C53v61Ev();
extern void _ZN6S639C53v62Ev();
extern void _ZN6S639C53v63Ev();
extern void _ZN6S639C53v64Ev();
extern void _ZN6S639C53v65Ev();
extern void _ZN6S639C53v66Ev();
extern void _ZN6S639C53v67Ev();
extern void _ZN6S639C53v68Ev();
extern void _ZN6S639C43v69Ev();
extern void _ZN6S639C43v70Ev();
extern void _ZN6S639C43v71Ev();
extern void _ZN6S639C43v72Ev();
extern void _ZN6S639C43v73Ev();
extern void _ZN6S639C43v74Ev();
extern void _ZN6S639C43v75Ev();
extern void _ZN6S639C43v76Ev();
extern void _ZN6S639C43v77Ev();
extern void _ZN6S639C43v78Ev();
extern void _ZN6S639C43v79Ev();
extern void _ZN6S639C43v80Ev();
extern void _ZN6S639C43v81Ev();
extern void _ZN6S639C43v82Ev();
extern void _ZN6S639C43v83Ev();
extern void _ZN6S639C43v84Ev();
extern void _ZN6S639C43v85Ev();
extern void _ZN6S639C43v86Ev();
extern void _ZN6S639C43v87Ev();
extern void _ZN6S639C43v88Ev();
extern void _ZN6S639C43v89Ev();
extern void _ZN6S639C43v90Ev();
static  VTBL_ENTRY vtc_S639C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S639C4[0]),
  (VTBL_ENTRY)&_ZN6S639C4D1Ev,
  (VTBL_ENTRY)&_ZN6S639C4D0Ev,
  (VTBL_ENTRY)&_ZN6S639C52v5Ev,
  (VTBL_ENTRY)&_ZN6S639C52v6Ev,
  (VTBL_ENTRY)&_ZN6S639C52v7Ev,
  (VTBL_ENTRY)&_ZN6S639C52v8Ev,
  (VTBL_ENTRY)&_ZN6S639C52v9Ev,
  (VTBL_ENTRY)&_ZN6S639C53v10Ev,
  (VTBL_ENTRY)&_ZN6S639C53v11Ev,
  (VTBL_ENTRY)&_ZN6S639C53v12Ev,
  (VTBL_ENTRY)&_ZN6S639C53v13Ev,
  (VTBL_ENTRY)&_ZN6S639C53v14Ev,
  (VTBL_ENTRY)&_ZN6S639C53v15Ev,
  (VTBL_ENTRY)&_ZN6S639C53v16Ev,
  (VTBL_ENTRY)&_ZN6S639C53v17Ev,
  (VTBL_ENTRY)&_ZN6S639C53v18Ev,
  (VTBL_ENTRY)&_ZN6S639C53v19Ev,
  (VTBL_ENTRY)&_ZN6S639C53v20Ev,
  (VTBL_ENTRY)&_ZN6S639C53v21Ev,
  (VTBL_ENTRY)&_ZN6S639C53v22Ev,
  (VTBL_ENTRY)&_ZN6S639C53v23Ev,
  (VTBL_ENTRY)&_ZN6S639C53v24Ev,
  (VTBL_ENTRY)&_ZN6S639C53v25Ev,
  (VTBL_ENTRY)&_ZN6S639C53v26Ev,
  (VTBL_ENTRY)&_ZN6S639C53v27Ev,
  (VTBL_ENTRY)&_ZN6S639C53v28Ev,
  (VTBL_ENTRY)&_ZN6S639C53v29Ev,
  (VTBL_ENTRY)&_ZN6S639C53v30Ev,
  (VTBL_ENTRY)&_ZN6S639C53v31Ev,
  (VTBL_ENTRY)&_ZN6S639C53v32Ev,
  (VTBL_ENTRY)&_ZN6S639C53v33Ev,
  (VTBL_ENTRY)&_ZN6S639C53v34Ev,
  (VTBL_ENTRY)&_ZN6S639C53v35Ev,
  (VTBL_ENTRY)&_ZN6S639C53v36Ev,
  (VTBL_ENTRY)&_ZN6S639C53v37Ev,
  (VTBL_ENTRY)&_ZN6S639C53v38Ev,
  (VTBL_ENTRY)&_ZN6S639C53v39Ev,
  (VTBL_ENTRY)&_ZN6S639C53v40Ev,
  (VTBL_ENTRY)&_ZN6S639C53v41Ev,
  (VTBL_ENTRY)&_ZN6S639C53v42Ev,
  (VTBL_ENTRY)&_ZN6S639C53v43Ev,
  (VTBL_ENTRY)&_ZN6S639C53v44Ev,
  (VTBL_ENTRY)&_ZN6S639C53v45Ev,
  (VTBL_ENTRY)&_ZN6S639C53v46Ev,
  (VTBL_ENTRY)&_ZN6S639C53v47Ev,
  (VTBL_ENTRY)&_ZN6S639C53v48Ev,
  (VTBL_ENTRY)&_ZN6S639C53v49Ev,
  (VTBL_ENTRY)&_ZN6S639C53v50Ev,
  (VTBL_ENTRY)&_ZN6S639C53v51Ev,
  (VTBL_ENTRY)&_ZN6S639C53v52Ev,
  (VTBL_ENTRY)&_ZN6S639C53v53Ev,
  (VTBL_ENTRY)&_ZN6S639C53v54Ev,
  (VTBL_ENTRY)&_ZN6S639C53v55Ev,
  (VTBL_ENTRY)&_ZN6S639C53v56Ev,
  (VTBL_ENTRY)&_ZN6S639C53v57Ev,
  (VTBL_ENTRY)&_ZN6S639C53v58Ev,
  (VTBL_ENTRY)&_ZN6S639C53v59Ev,
  (VTBL_ENTRY)&_ZN6S639C53v60Ev,
  (VTBL_ENTRY)&_ZN6S639C53v61Ev,
  (VTBL_ENTRY)&_ZN6S639C53v62Ev,
  (VTBL_ENTRY)&_ZN6S639C53v63Ev,
  (VTBL_ENTRY)&_ZN6S639C53v64Ev,
  (VTBL_ENTRY)&_ZN6S639C53v65Ev,
  (VTBL_ENTRY)&_ZN6S639C53v66Ev,
  (VTBL_ENTRY)&_ZN6S639C53v67Ev,
  (VTBL_ENTRY)&_ZN6S639C53v68Ev,
  (VTBL_ENTRY)&_ZN6S639C43v69Ev,
  (VTBL_ENTRY)&_ZN6S639C43v70Ev,
  (VTBL_ENTRY)&_ZN6S639C43v71Ev,
  (VTBL_ENTRY)&_ZN6S639C43v72Ev,
  (VTBL_ENTRY)&_ZN6S639C43v73Ev,
  (VTBL_ENTRY)&_ZN6S639C43v74Ev,
  (VTBL_ENTRY)&_ZN6S639C43v75Ev,
  (VTBL_ENTRY)&_ZN6S639C43v76Ev,
  (VTBL_ENTRY)&_ZN6S639C43v77Ev,
  (VTBL_ENTRY)&_ZN6S639C43v78Ev,
  (VTBL_ENTRY)&_ZN6S639C43v79Ev,
  (VTBL_ENTRY)&_ZN6S639C43v80Ev,
  (VTBL_ENTRY)&_ZN6S639C43v81Ev,
  (VTBL_ENTRY)&_ZN6S639C43v82Ev,
  (VTBL_ENTRY)&_ZN6S639C43v83Ev,
  (VTBL_ENTRY)&_ZN6S639C43v84Ev,
  (VTBL_ENTRY)&_ZN6S639C43v85Ev,
  (VTBL_ENTRY)&_ZN6S639C43v86Ev,
  (VTBL_ENTRY)&_ZN6S639C43v87Ev,
  (VTBL_ENTRY)&_ZN6S639C43v88Ev,
  (VTBL_ENTRY)&_ZN6S639C43v89Ev,
  (VTBL_ENTRY)&_ZN6S639C43v90Ev,
};
extern VTBL_ENTRY _ZTI6S639C4[];
extern  VTBL_ENTRY _ZTV6S639C4[];
Class_Descriptor cd_S639C4 = {  "S639C4", // class name
  bases_S639C4, 1,
  &(vtc_S639C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S639C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S639C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S639C3  : S639C4 {
  ::S473C6_nt s639c3f0;
  virtual  ~S639C3(); // _ZN6S639C3D1Ev
  virtual void  v91(); // _ZN6S639C33v91Ev
  virtual void  v92(); // _ZN6S639C33v92Ev
  virtual void  v93(); // _ZN6S639C33v93Ev
  virtual void  v94(); // _ZN6S639C33v94Ev
  virtual void  v95(); // _ZN6S639C33v95Ev
  virtual void  v96(); // _ZN6S639C33v96Ev
  virtual void  v97(); // _ZN6S639C33v97Ev
  virtual void  v98(); // _ZN6S639C33v98Ev
  virtual void  v99(); // _ZN6S639C33v99Ev
  virtual void  v100(); // _ZN6S639C34v100Ev
  virtual void  v101(); // _ZN6S639C34v101Ev
  virtual void  v102(); // _ZN6S639C34v102Ev
  virtual void  v103(); // _ZN6S639C34v103Ev
  virtual void  v104(); // _ZN6S639C34v104Ev
  virtual void  v105(); // _ZN6S639C34v105Ev
  virtual void  v106(); // _ZN6S639C34v106Ev
  virtual void  v107(); // _ZN6S639C34v107Ev
  virtual void  v108(); // _ZN6S639C34v108Ev
  virtual void  v109(); // _ZN6S639C34v109Ev
  S639C3(); // tgen
};
//SIG(-1 S639C3) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S639C3 ::~S639C3(){ note_dtor("S639C3", this);}
void  S639C3 ::v91(){vfunc_called(this, "_ZN6S639C33v91Ev");}
void  S639C3 ::v92(){vfunc_called(this, "_ZN6S639C33v92Ev");}
void  S639C3 ::v93(){vfunc_called(this, "_ZN6S639C33v93Ev");}
void  S639C3 ::v94(){vfunc_called(this, "_ZN6S639C33v94Ev");}
void  S639C3 ::v95(){vfunc_called(this, "_ZN6S639C33v95Ev");}
void  S639C3 ::v96(){vfunc_called(this, "_ZN6S639C33v96Ev");}
void  S639C3 ::v97(){vfunc_called(this, "_ZN6S639C33v97Ev");}
void  S639C3 ::v98(){vfunc_called(this, "_ZN6S639C33v98Ev");}
void  S639C3 ::v99(){vfunc_called(this, "_ZN6S639C33v99Ev");}
void  S639C3 ::v100(){vfunc_called(this, "_ZN6S639C34v100Ev");}
void  S639C3 ::v101(){vfunc_called(this, "_ZN6S639C34v101Ev");}
void  S639C3 ::v102(){vfunc_called(this, "_ZN6S639C34v102Ev");}
void  S639C3 ::v103(){vfunc_called(this, "_ZN6S639C34v103Ev");}
void  S639C3 ::v104(){vfunc_called(this, "_ZN6S639C34v104Ev");}
void  S639C3 ::v105(){vfunc_called(this, "_ZN6S639C34v105Ev");}
void  S639C3 ::v106(){vfunc_called(this, "_ZN6S639C34v106Ev");}
void  S639C3 ::v107(){vfunc_called(this, "_ZN6S639C34v107Ev");}
void  S639C3 ::v108(){vfunc_called(this, "_ZN6S639C34v108Ev");}
void  S639C3 ::v109(){vfunc_called(this, "_ZN6S639C34v109Ev");}
S639C3 ::S639C3(){ note_ctor("S639C3", this);} // tgen

static void Test_S639C3()
{
  extern Class_Descriptor cd_S639C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S639C3, buf);
    S639C3 *dp, &lv = *(dp=new (buf) S639C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S639C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S639C3)");
    check_base_class_offset(lv, (S639C5*)(S639C4*), 0, "S639C3");
    check_base_class_offset(lv, (S639C4*), 0, "S639C3");
    check_field_offset(lv, s639c3f0, ABISELECT(188,132), "S639C3.s639c3f0");
    test_class_info(&lv, &cd_S639C3);
    dp->~S639C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS639C3(Test_S639C3, "S639C3", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN6S639C3C1Ev();
extern void _ZN6S639C3D1Ev();
Name_Map name_map_S639C3[] = {
  NSPAIR(_ZN6S639C3C1Ev),
  NSPAIR(_ZN6S639C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S639C5;
extern VTBL_ENTRY _ZTI6S639C5[];
extern  VTBL_ENTRY _ZTV6S639C5[];
extern Class_Descriptor cd_S639C4;
extern VTBL_ENTRY _ZTI6S639C4[];
extern  VTBL_ENTRY _ZTV6S639C4[];
static Base_Class bases_S639C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S639C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S639C3[];
extern void _ZN6S639C3D1Ev();
extern void _ZN6S639C3D0Ev();
extern void _ZN6S639C52v5Ev();
extern void _ZN6S639C52v6Ev();
extern void _ZN6S639C52v7Ev();
extern void _ZN6S639C52v8Ev();
extern void _ZN6S639C52v9Ev();
extern void _ZN6S639C53v10Ev();
extern void _ZN6S639C53v11Ev();
extern void _ZN6S639C53v12Ev();
extern void _ZN6S639C53v13Ev();
extern void _ZN6S639C53v14Ev();
extern void _ZN6S639C53v15Ev();
extern void _ZN6S639C53v16Ev();
extern void _ZN6S639C53v17Ev();
extern void _ZN6S639C53v18Ev();
extern void _ZN6S639C53v19Ev();
extern void _ZN6S639C53v20Ev();
extern void _ZN6S639C53v21Ev();
extern void _ZN6S639C53v22Ev();
extern void _ZN6S639C53v23Ev();
extern void _ZN6S639C53v24Ev();
extern void _ZN6S639C53v25Ev();
extern void _ZN6S639C53v26Ev();
extern void _ZN6S639C53v27Ev();
extern void _ZN6S639C53v28Ev();
extern void _ZN6S639C53v29Ev();
extern void _ZN6S639C53v30Ev();
extern void _ZN6S639C53v31Ev();
extern void _ZN6S639C53v32Ev();
extern void _ZN6S639C53v33Ev();
extern void _ZN6S639C53v34Ev();
extern void _ZN6S639C53v35Ev();
extern void _ZN6S639C53v36Ev();
extern void _ZN6S639C53v37Ev();
extern void _ZN6S639C53v38Ev();
extern void _ZN6S639C53v39Ev();
extern void _ZN6S639C53v40Ev();
extern void _ZN6S639C53v41Ev();
extern void _ZN6S639C53v42Ev();
extern void _ZN6S639C53v43Ev();
extern void _ZN6S639C53v44Ev();
extern void _ZN6S639C53v45Ev();
extern void _ZN6S639C53v46Ev();
extern void _ZN6S639C53v47Ev();
extern void _ZN6S639C53v48Ev();
extern void _ZN6S639C53v49Ev();
extern void _ZN6S639C53v50Ev();
extern void _ZN6S639C53v51Ev();
extern void _ZN6S639C53v52Ev();
extern void _ZN6S639C53v53Ev();
extern void _ZN6S639C53v54Ev();
extern void _ZN6S639C53v55Ev();
extern void _ZN6S639C53v56Ev();
extern void _ZN6S639C53v57Ev();
extern void _ZN6S639C53v58Ev();
extern void _ZN6S639C53v59Ev();
extern void _ZN6S639C53v60Ev();
extern void _ZN6S639C53v61Ev();
extern void _ZN6S639C53v62Ev();
extern void _ZN6S639C53v63Ev();
extern void _ZN6S639C53v64Ev();
extern void _ZN6S639C53v65Ev();
extern void _ZN6S639C53v66Ev();
extern void _ZN6S639C53v67Ev();
extern void _ZN6S639C53v68Ev();
extern void _ZN6S639C43v69Ev();
extern void _ZN6S639C43v70Ev();
extern void _ZN6S639C43v71Ev();
extern void _ZN6S639C43v72Ev();
extern void _ZN6S639C43v73Ev();
extern void _ZN6S639C43v74Ev();
extern void _ZN6S639C43v75Ev();
extern void _ZN6S639C43v76Ev();
extern void _ZN6S639C43v77Ev();
extern void _ZN6S639C43v78Ev();
extern void _ZN6S639C43v79Ev();
extern void _ZN6S639C43v80Ev();
extern void _ZN6S639C43v81Ev();
extern void _ZN6S639C43v82Ev();
extern void _ZN6S639C43v83Ev();
extern void _ZN6S639C43v84Ev();
extern void _ZN6S639C43v85Ev();
extern void _ZN6S639C43v86Ev();
extern void _ZN6S639C43v87Ev();
extern void _ZN6S639C43v88Ev();
extern void _ZN6S639C43v89Ev();
extern void _ZN6S639C43v90Ev();
extern void _ZN6S639C33v91Ev();
extern void _ZN6S639C33v92Ev();
extern void _ZN6S639C33v93Ev();
extern void _ZN6S639C33v94Ev();
extern void _ZN6S639C33v95Ev();
extern void _ZN6S639C33v96Ev();
extern void _ZN6S639C33v97Ev();
extern void _ZN6S639C33v98Ev();
extern void _ZN6S639C33v99Ev();
extern void _ZN6S639C34v100Ev();
extern void _ZN6S639C34v101Ev();
extern void _ZN6S639C34v102Ev();
extern void _ZN6S639C34v103Ev();
extern void _ZN6S639C34v104Ev();
extern void _ZN6S639C34v105Ev();
extern void _ZN6S639C34v106Ev();
extern void _ZN6S639C34v107Ev();
extern void _ZN6S639C34v108Ev();
extern void _ZN6S639C34v109Ev();
static  VTBL_ENTRY vtc_S639C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S639C3[0]),
  (VTBL_ENTRY)&_ZN6S639C3D1Ev,
  (VTBL_ENTRY)&_ZN6S639C3D0Ev,
  (VTBL_ENTRY)&_ZN6S639C52v5Ev,
  (VTBL_ENTRY)&_ZN6S639C52v6Ev,
  (VTBL_ENTRY)&_ZN6S639C52v7Ev,
  (VTBL_ENTRY)&_ZN6S639C52v8Ev,
  (VTBL_ENTRY)&_ZN6S639C52v9Ev,
  (VTBL_ENTRY)&_ZN6S639C53v10Ev,
  (VTBL_ENTRY)&_ZN6S639C53v11Ev,
  (VTBL_ENTRY)&_ZN6S639C53v12Ev,
  (VTBL_ENTRY)&_ZN6S639C53v13Ev,
  (VTBL_ENTRY)&_ZN6S639C53v14Ev,
  (VTBL_ENTRY)&_ZN6S639C53v15Ev,
  (VTBL_ENTRY)&_ZN6S639C53v16Ev,
  (VTBL_ENTRY)&_ZN6S639C53v17Ev,
  (VTBL_ENTRY)&_ZN6S639C53v18Ev,
  (VTBL_ENTRY)&_ZN6S639C53v19Ev,
  (VTBL_ENTRY)&_ZN6S639C53v20Ev,
  (VTBL_ENTRY)&_ZN6S639C53v21Ev,
  (VTBL_ENTRY)&_ZN6S639C53v22Ev,
  (VTBL_ENTRY)&_ZN6S639C53v23Ev,
  (VTBL_ENTRY)&_ZN6S639C53v24Ev,
  (VTBL_ENTRY)&_ZN6S639C53v25Ev,
  (VTBL_ENTRY)&_ZN6S639C53v26Ev,
  (VTBL_ENTRY)&_ZN6S639C53v27Ev,
  (VTBL_ENTRY)&_ZN6S639C53v28Ev,
  (VTBL_ENTRY)&_ZN6S639C53v29Ev,
  (VTBL_ENTRY)&_ZN6S639C53v30Ev,
  (VTBL_ENTRY)&_ZN6S639C53v31Ev,
  (VTBL_ENTRY)&_ZN6S639C53v32Ev,
  (VTBL_ENTRY)&_ZN6S639C53v33Ev,
  (VTBL_ENTRY)&_ZN6S639C53v34Ev,
  (VTBL_ENTRY)&_ZN6S639C53v35Ev,
  (VTBL_ENTRY)&_ZN6S639C53v36Ev,
  (VTBL_ENTRY)&_ZN6S639C53v37Ev,
  (VTBL_ENTRY)&_ZN6S639C53v38Ev,
  (VTBL_ENTRY)&_ZN6S639C53v39Ev,
  (VTBL_ENTRY)&_ZN6S639C53v40Ev,
  (VTBL_ENTRY)&_ZN6S639C53v41Ev,
  (VTBL_ENTRY)&_ZN6S639C53v42Ev,
  (VTBL_ENTRY)&_ZN6S639C53v43Ev,
  (VTBL_ENTRY)&_ZN6S639C53v44Ev,
  (VTBL_ENTRY)&_ZN6S639C53v45Ev,
  (VTBL_ENTRY)&_ZN6S639C53v46Ev,
  (VTBL_ENTRY)&_ZN6S639C53v47Ev,
  (VTBL_ENTRY)&_ZN6S639C53v48Ev,
  (VTBL_ENTRY)&_ZN6S639C53v49Ev,
  (VTBL_ENTRY)&_ZN6S639C53v50Ev,
  (VTBL_ENTRY)&_ZN6S639C53v51Ev,
  (VTBL_ENTRY)&_ZN6S639C53v52Ev,
  (VTBL_ENTRY)&_ZN6S639C53v53Ev,
  (VTBL_ENTRY)&_ZN6S639C53v54Ev,
  (VTBL_ENTRY)&_ZN6S639C53v55Ev,
  (VTBL_ENTRY)&_ZN6S639C53v56Ev,
  (VTBL_ENTRY)&_ZN6S639C53v57Ev,
  (VTBL_ENTRY)&_ZN6S639C53v58Ev,
  (VTBL_ENTRY)&_ZN6S639C53v59Ev,
  (VTBL_ENTRY)&_ZN6S639C53v60Ev,
  (VTBL_ENTRY)&_ZN6S639C53v61Ev,
  (VTBL_ENTRY)&_ZN6S639C53v62Ev,
  (VTBL_ENTRY)&_ZN6S639C53v63Ev,
  (VTBL_ENTRY)&_ZN6S639C53v64Ev,
  (VTBL_ENTRY)&_ZN6S639C53v65Ev,
  (VTBL_ENTRY)&_ZN6S639C53v66Ev,
  (VTBL_ENTRY)&_ZN6S639C53v67Ev,
  (VTBL_ENTRY)&_ZN6S639C53v68Ev,
  (VTBL_ENTRY)&_ZN6S639C43v69Ev,
  (VTBL_ENTRY)&_ZN6S639C43v70Ev,
  (VTBL_ENTRY)&_ZN6S639C43v71Ev,
  (VTBL_ENTRY)&_ZN6S639C43v72Ev,
  (VTBL_ENTRY)&_ZN6S639C43v73Ev,
  (VTBL_ENTRY)&_ZN6S639C43v74Ev,
  (VTBL_ENTRY)&_ZN6S639C43v75Ev,
  (VTBL_ENTRY)&_ZN6S639C43v76Ev,
  (VTBL_ENTRY)&_ZN6S639C43v77Ev,
  (VTBL_ENTRY)&_ZN6S639C43v78Ev,
  (VTBL_ENTRY)&_ZN6S639C43v79Ev,
  (VTBL_ENTRY)&_ZN6S639C43v80Ev,
  (VTBL_ENTRY)&_ZN6S639C43v81Ev,
  (VTBL_ENTRY)&_ZN6S639C43v82Ev,
  (VTBL_ENTRY)&_ZN6S639C43v83Ev,
  (VTBL_ENTRY)&_ZN6S639C43v84Ev,
  (VTBL_ENTRY)&_ZN6S639C43v85Ev,
  (VTBL_ENTRY)&_ZN6S639C43v86Ev,
  (VTBL_ENTRY)&_ZN6S639C43v87Ev,
  (VTBL_ENTRY)&_ZN6S639C43v88Ev,
  (VTBL_ENTRY)&_ZN6S639C43v89Ev,
  (VTBL_ENTRY)&_ZN6S639C43v90Ev,
  (VTBL_ENTRY)&_ZN6S639C33v91Ev,
  (VTBL_ENTRY)&_ZN6S639C33v92Ev,
  (VTBL_ENTRY)&_ZN6S639C33v93Ev,
  (VTBL_ENTRY)&_ZN6S639C33v94Ev,
  (VTBL_ENTRY)&_ZN6S639C33v95Ev,
  (VTBL_ENTRY)&_ZN6S639C33v96Ev,
  (VTBL_ENTRY)&_ZN6S639C33v97Ev,
  (VTBL_ENTRY)&_ZN6S639C33v98Ev,
  (VTBL_ENTRY)&_ZN6S639C33v99Ev,
  (VTBL_ENTRY)&_ZN6S639C34v100Ev,
  (VTBL_ENTRY)&_ZN6S639C34v101Ev,
  (VTBL_ENTRY)&_ZN6S639C34v102Ev,
  (VTBL_ENTRY)&_ZN6S639C34v103Ev,
  (VTBL_ENTRY)&_ZN6S639C34v104Ev,
  (VTBL_ENTRY)&_ZN6S639C34v105Ev,
  (VTBL_ENTRY)&_ZN6S639C34v106Ev,
  (VTBL_ENTRY)&_ZN6S639C34v107Ev,
  (VTBL_ENTRY)&_ZN6S639C34v108Ev,
  (VTBL_ENTRY)&_ZN6S639C34v109Ev,
};
extern VTBL_ENTRY _ZTI6S639C3[];
extern  VTBL_ENTRY _ZTV6S639C3[];
Class_Descriptor cd_S639C3 = {  "S639C3", // class name
  bases_S639C3, 2,
  &(vtc_S639C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI6S639C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S639C3),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S639C2  : S639C3 {
  void *s639c2f0;
  virtual  ~S639C2(); // _ZN6S639C2D1Ev
  virtual void  v110(); // _ZN6S639C24v110Ev
  virtual void  v111(); // _ZN6S639C24v111Ev
  virtual void  v112(); // _ZN6S639C24v112Ev
  virtual void  v113(); // _ZN6S639C24v113Ev
  virtual void  v114(); // _ZN6S639C24v114Ev
  virtual void  v115(); // _ZN6S639C24v115Ev
  virtual void  v116(); // _ZN6S639C24v116Ev
  virtual void  v117(); // _ZN6S639C24v117Ev
  virtual void  v118(); // _ZN6S639C24v118Ev
  S639C2(); // tgen
};
//SIG(-1 S639C2) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 FC5} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S639C2 ::~S639C2(){ note_dtor("S639C2", this);}
void  S639C2 ::v110(){vfunc_called(this, "_ZN6S639C24v110Ev");}
void  S639C2 ::v111(){vfunc_called(this, "_ZN6S639C24v111Ev");}
void  S639C2 ::v112(){vfunc_called(this, "_ZN6S639C24v112Ev");}
void  S639C2 ::v113(){vfunc_called(this, "_ZN6S639C24v113Ev");}
void  S639C2 ::v114(){vfunc_called(this, "_ZN6S639C24v114Ev");}
void  S639C2 ::v115(){vfunc_called(this, "_ZN6S639C24v115Ev");}
void  S639C2 ::v116(){vfunc_called(this, "_ZN6S639C24v116Ev");}
void  S639C2 ::v117(){vfunc_called(this, "_ZN6S639C24v117Ev");}
void  S639C2 ::v118(){vfunc_called(this, "_ZN6S639C24v118Ev");}
S639C2 ::S639C2(){ note_ctor("S639C2", this);} // tgen

static void Test_S639C2()
{
  extern Class_Descriptor cd_S639C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S639C2, buf);
    S639C2 *dp, &lv = *(dp=new (buf) S639C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S639C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S639C2)");
    check_base_class_offset(lv, (S639C5*)(S639C4*)(S639C3*), 0, "S639C2");
    check_base_class_offset(lv, (S639C4*)(S639C3*), 0, "S639C2");
    check_base_class_offset(lv, (S639C3*), 0, "S639C2");
    check_field_offset(lv, s639c2f0, ABISELECT(200,140), "S639C2.s639c2f0");
    test_class_info(&lv, &cd_S639C2);
    dp->~S639C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS639C2(Test_S639C2, "S639C2", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN6S639C2C1Ev();
extern void _ZN6S639C2D1Ev();
Name_Map name_map_S639C2[] = {
  NSPAIR(_ZN6S639C2C1Ev),
  NSPAIR(_ZN6S639C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S639C5;
extern VTBL_ENTRY _ZTI6S639C5[];
extern  VTBL_ENTRY _ZTV6S639C5[];
extern Class_Descriptor cd_S639C4;
extern VTBL_ENTRY _ZTI6S639C4[];
extern  VTBL_ENTRY _ZTV6S639C4[];
extern Class_Descriptor cd_S639C3;
extern VTBL_ENTRY _ZTI6S639C3[];
extern  VTBL_ENTRY _ZTV6S639C3[];
static Base_Class bases_S639C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S639C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S639C2[];
extern void _ZN6S639C2D1Ev();
extern void _ZN6S639C2D0Ev();
extern void _ZN6S639C52v5Ev();
extern void _ZN6S639C52v6Ev();
extern void _ZN6S639C52v7Ev();
extern void _ZN6S639C52v8Ev();
extern void _ZN6S639C52v9Ev();
extern void _ZN6S639C53v10Ev();
extern void _ZN6S639C53v11Ev();
extern void _ZN6S639C53v12Ev();
extern void _ZN6S639C53v13Ev();
extern void _ZN6S639C53v14Ev();
extern void _ZN6S639C53v15Ev();
extern void _ZN6S639C53v16Ev();
extern void _ZN6S639C53v17Ev();
extern void _ZN6S639C53v18Ev();
extern void _ZN6S639C53v19Ev();
extern void _ZN6S639C53v20Ev();
extern void _ZN6S639C53v21Ev();
extern void _ZN6S639C53v22Ev();
extern void _ZN6S639C53v23Ev();
extern void _ZN6S639C53v24Ev();
extern void _ZN6S639C53v25Ev();
extern void _ZN6S639C53v26Ev();
extern void _ZN6S639C53v27Ev();
extern void _ZN6S639C53v28Ev();
extern void _ZN6S639C53v29Ev();
extern void _ZN6S639C53v30Ev();
extern void _ZN6S639C53v31Ev();
extern void _ZN6S639C53v32Ev();
extern void _ZN6S639C53v33Ev();
extern void _ZN6S639C53v34Ev();
extern void _ZN6S639C53v35Ev();
extern void _ZN6S639C53v36Ev();
extern void _ZN6S639C53v37Ev();
extern void _ZN6S639C53v38Ev();
extern void _ZN6S639C53v39Ev();
extern void _ZN6S639C53v40Ev();
extern void _ZN6S639C53v41Ev();
extern void _ZN6S639C53v42Ev();
extern void _ZN6S639C53v43Ev();
extern void _ZN6S639C53v44Ev();
extern void _ZN6S639C53v45Ev();
extern void _ZN6S639C53v46Ev();
extern void _ZN6S639C53v47Ev();
extern void _ZN6S639C53v48Ev();
extern void _ZN6S639C53v49Ev();
extern void _ZN6S639C53v50Ev();
extern void _ZN6S639C53v51Ev();
extern void _ZN6S639C53v52Ev();
extern void _ZN6S639C53v53Ev();
extern void _ZN6S639C53v54Ev();
extern void _ZN6S639C53v55Ev();
extern void _ZN6S639C53v56Ev();
extern void _ZN6S639C53v57Ev();
extern void _ZN6S639C53v58Ev();
extern void _ZN6S639C53v59Ev();
extern void _ZN6S639C53v60Ev();
extern void _ZN6S639C53v61Ev();
extern void _ZN6S639C53v62Ev();
extern void _ZN6S639C53v63Ev();
extern void _ZN6S639C53v64Ev();
extern void _ZN6S639C53v65Ev();
extern void _ZN6S639C53v66Ev();
extern void _ZN6S639C53v67Ev();
extern void _ZN6S639C53v68Ev();
extern void _ZN6S639C43v69Ev();
extern void _ZN6S639C43v70Ev();
extern void _ZN6S639C43v71Ev();
extern void _ZN6S639C43v72Ev();
extern void _ZN6S639C43v73Ev();
extern void _ZN6S639C43v74Ev();
extern void _ZN6S639C43v75Ev();
extern void _ZN6S639C43v76Ev();
extern void _ZN6S639C43v77Ev();
extern void _ZN6S639C43v78Ev();
extern void _ZN6S639C43v79Ev();
extern void _ZN6S639C43v80Ev();
extern void _ZN6S639C43v81Ev();
extern void _ZN6S639C43v82Ev();
extern void _ZN6S639C43v83Ev();
extern void _ZN6S639C43v84Ev();
extern void _ZN6S639C43v85Ev();
extern void _ZN6S639C43v86Ev();
extern void _ZN6S639C43v87Ev();
extern void _ZN6S639C43v88Ev();
extern void _ZN6S639C43v89Ev();
extern void _ZN6S639C43v90Ev();
extern void _ZN6S639C33v91Ev();
extern void _ZN6S639C33v92Ev();
extern void _ZN6S639C33v93Ev();
extern void _ZN6S639C33v94Ev();
extern void _ZN6S639C33v95Ev();
extern void _ZN6S639C33v96Ev();
extern void _ZN6S639C33v97Ev();
extern void _ZN6S639C33v98Ev();
extern void _ZN6S639C33v99Ev();
extern void _ZN6S639C34v100Ev();
extern void _ZN6S639C34v101Ev();
extern void _ZN6S639C34v102Ev();
extern void _ZN6S639C34v103Ev();
extern void _ZN6S639C34v104Ev();
extern void _ZN6S639C34v105Ev();
extern void _ZN6S639C34v106Ev();
extern void _ZN6S639C34v107Ev();
extern void _ZN6S639C34v108Ev();
extern void _ZN6S639C34v109Ev();
extern void _ZN6S639C24v110Ev();
extern void _ZN6S639C24v111Ev();
extern void _ZN6S639C24v112Ev();
extern void _ZN6S639C24v113Ev();
extern void _ZN6S639C24v114Ev();
extern void _ZN6S639C24v115Ev();
extern void _ZN6S639C24v116Ev();
extern void _ZN6S639C24v117Ev();
extern void _ZN6S639C24v118Ev();
static  VTBL_ENTRY vtc_S639C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S639C2[0]),
  (VTBL_ENTRY)&_ZN6S639C2D1Ev,
  (VTBL_ENTRY)&_ZN6S639C2D0Ev,
  (VTBL_ENTRY)&_ZN6S639C52v5Ev,
  (VTBL_ENTRY)&_ZN6S639C52v6Ev,
  (VTBL_ENTRY)&_ZN6S639C52v7Ev,
  (VTBL_ENTRY)&_ZN6S639C52v8Ev,
  (VTBL_ENTRY)&_ZN6S639C52v9Ev,
  (VTBL_ENTRY)&_ZN6S639C53v10Ev,
  (VTBL_ENTRY)&_ZN6S639C53v11Ev,
  (VTBL_ENTRY)&_ZN6S639C53v12Ev,
  (VTBL_ENTRY)&_ZN6S639C53v13Ev,
  (VTBL_ENTRY)&_ZN6S639C53v14Ev,
  (VTBL_ENTRY)&_ZN6S639C53v15Ev,
  (VTBL_ENTRY)&_ZN6S639C53v16Ev,
  (VTBL_ENTRY)&_ZN6S639C53v17Ev,
  (VTBL_ENTRY)&_ZN6S639C53v18Ev,
  (VTBL_ENTRY)&_ZN6S639C53v19Ev,
  (VTBL_ENTRY)&_ZN6S639C53v20Ev,
  (VTBL_ENTRY)&_ZN6S639C53v21Ev,
  (VTBL_ENTRY)&_ZN6S639C53v22Ev,
  (VTBL_ENTRY)&_ZN6S639C53v23Ev,
  (VTBL_ENTRY)&_ZN6S639C53v24Ev,
  (VTBL_ENTRY)&_ZN6S639C53v25Ev,
  (VTBL_ENTRY)&_ZN6S639C53v26Ev,
  (VTBL_ENTRY)&_ZN6S639C53v27Ev,
  (VTBL_ENTRY)&_ZN6S639C53v28Ev,
  (VTBL_ENTRY)&_ZN6S639C53v29Ev,
  (VTBL_ENTRY)&_ZN6S639C53v30Ev,
  (VTBL_ENTRY)&_ZN6S639C53v31Ev,
  (VTBL_ENTRY)&_ZN6S639C53v32Ev,
  (VTBL_ENTRY)&_ZN6S639C53v33Ev,
  (VTBL_ENTRY)&_ZN6S639C53v34Ev,
  (VTBL_ENTRY)&_ZN6S639C53v35Ev,
  (VTBL_ENTRY)&_ZN6S639C53v36Ev,
  (VTBL_ENTRY)&_ZN6S639C53v37Ev,
  (VTBL_ENTRY)&_ZN6S639C53v38Ev,
  (VTBL_ENTRY)&_ZN6S639C53v39Ev,
  (VTBL_ENTRY)&_ZN6S639C53v40Ev,
  (VTBL_ENTRY)&_ZN6S639C53v41Ev,
  (VTBL_ENTRY)&_ZN6S639C53v42Ev,
  (VTBL_ENTRY)&_ZN6S639C53v43Ev,
  (VTBL_ENTRY)&_ZN6S639C53v44Ev,
  (VTBL_ENTRY)&_ZN6S639C53v45Ev,
  (VTBL_ENTRY)&_ZN6S639C53v46Ev,
  (VTBL_ENTRY)&_ZN6S639C53v47Ev,
  (VTBL_ENTRY)&_ZN6S639C53v48Ev,
  (VTBL_ENTRY)&_ZN6S639C53v49Ev,
  (VTBL_ENTRY)&_ZN6S639C53v50Ev,
  (VTBL_ENTRY)&_ZN6S639C53v51Ev,
  (VTBL_ENTRY)&_ZN6S639C53v52Ev,
  (VTBL_ENTRY)&_ZN6S639C53v53Ev,
  (VTBL_ENTRY)&_ZN6S639C53v54Ev,
  (VTBL_ENTRY)&_ZN6S639C53v55Ev,
  (VTBL_ENTRY)&_ZN6S639C53v56Ev,
  (VTBL_ENTRY)&_ZN6S639C53v57Ev,
  (VTBL_ENTRY)&_ZN6S639C53v58Ev,
  (VTBL_ENTRY)&_ZN6S639C53v59Ev,
  (VTBL_ENTRY)&_ZN6S639C53v60Ev,
  (VTBL_ENTRY)&_ZN6S639C53v61Ev,
  (VTBL_ENTRY)&_ZN6S639C53v62Ev,
  (VTBL_ENTRY)&_ZN6S639C53v63Ev,
  (VTBL_ENTRY)&_ZN6S639C53v64Ev,
  (VTBL_ENTRY)&_ZN6S639C53v65Ev,
  (VTBL_ENTRY)&_ZN6S639C53v66Ev,
  (VTBL_ENTRY)&_ZN6S639C53v67Ev,
  (VTBL_ENTRY)&_ZN6S639C53v68Ev,
  (VTBL_ENTRY)&_ZN6S639C43v69Ev,
  (VTBL_ENTRY)&_ZN6S639C43v70Ev,
  (VTBL_ENTRY)&_ZN6S639C43v71Ev,
  (VTBL_ENTRY)&_ZN6S639C43v72Ev,
  (VTBL_ENTRY)&_ZN6S639C43v73Ev,
  (VTBL_ENTRY)&_ZN6S639C43v74Ev,
  (VTBL_ENTRY)&_ZN6S639C43v75Ev,
  (VTBL_ENTRY)&_ZN6S639C43v76Ev,
  (VTBL_ENTRY)&_ZN6S639C43v77Ev,
  (VTBL_ENTRY)&_ZN6S639C43v78Ev,
  (VTBL_ENTRY)&_ZN6S639C43v79Ev,
  (VTBL_ENTRY)&_ZN6S639C43v80Ev,
  (VTBL_ENTRY)&_ZN6S639C43v81Ev,
  (VTBL_ENTRY)&_ZN6S639C43v82Ev,
  (VTBL_ENTRY)&_ZN6S639C43v83Ev,
  (VTBL_ENTRY)&_ZN6S639C43v84Ev,
  (VTBL_ENTRY)&_ZN6S639C43v85Ev,
  (VTBL_ENTRY)&_ZN6S639C43v86Ev,
  (VTBL_ENTRY)&_ZN6S639C43v87Ev,
  (VTBL_ENTRY)&_ZN6S639C43v88Ev,
  (VTBL_ENTRY)&_ZN6S639C43v89Ev,
  (VTBL_ENTRY)&_ZN6S639C43v90Ev,
  (VTBL_ENTRY)&_ZN6S639C33v91Ev,
  (VTBL_ENTRY)&_ZN6S639C33v92Ev,
  (VTBL_ENTRY)&_ZN6S639C33v93Ev,
  (VTBL_ENTRY)&_ZN6S639C33v94Ev,
  (VTBL_ENTRY)&_ZN6S639C33v95Ev,
  (VTBL_ENTRY)&_ZN6S639C33v96Ev,
  (VTBL_ENTRY)&_ZN6S639C33v97Ev,
  (VTBL_ENTRY)&_ZN6S639C33v98Ev,
  (VTBL_ENTRY)&_ZN6S639C33v99Ev,
  (VTBL_ENTRY)&_ZN6S639C34v100Ev,
  (VTBL_ENTRY)&_ZN6S639C34v101Ev,
  (VTBL_ENTRY)&_ZN6S639C34v102Ev,
  (VTBL_ENTRY)&_ZN6S639C34v103Ev,
  (VTBL_ENTRY)&_ZN6S639C34v104Ev,
  (VTBL_ENTRY)&_ZN6S639C34v105Ev,
  (VTBL_ENTRY)&_ZN6S639C34v106Ev,
  (VTBL_ENTRY)&_ZN6S639C34v107Ev,
  (VTBL_ENTRY)&_ZN6S639C34v108Ev,
  (VTBL_ENTRY)&_ZN6S639C34v109Ev,
  (VTBL_ENTRY)&_ZN6S639C24v110Ev,
  (VTBL_ENTRY)&_ZN6S639C24v111Ev,
  (VTBL_ENTRY)&_ZN6S639C24v112Ev,
  (VTBL_ENTRY)&_ZN6S639C24v113Ev,
  (VTBL_ENTRY)&_ZN6S639C24v114Ev,
  (VTBL_ENTRY)&_ZN6S639C24v115Ev,
  (VTBL_ENTRY)&_ZN6S639C24v116Ev,
  (VTBL_ENTRY)&_ZN6S639C24v117Ev,
  (VTBL_ENTRY)&_ZN6S639C24v118Ev,
};
extern VTBL_ENTRY _ZTI6S639C2[];
extern  VTBL_ENTRY _ZTV6S639C2[];
Class_Descriptor cd_S639C2 = {  "S639C2", // class name
  bases_S639C2, 3,
  &(vtc_S639C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI6S639C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S639C2),118, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S639C1  : S639C2 {
  ::S473C7_nt s639c1f0;
  virtual  ~S639C1(); // _ZN6S639C1D1Ev
  virtual void  v1(); // _ZN6S639C12v1Ev
  virtual void  v2(); // _ZN6S639C12v2Ev
  virtual void  v3(); // _ZN6S639C12v3Ev
  virtual void  v4(); // _ZN6S639C12v4Ev
  S639C1(); // tgen
};
//SIG(1 S639C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 FC6} vd v110 v111 v112 v113 v114 v115 v116 v117 v118 Fp} vd v1 v2 v3 v4 FC7}


 S639C1 ::~S639C1(){ note_dtor("S639C1", this);}
void  S639C1 ::v1(){vfunc_called(this, "_ZN6S639C12v1Ev");}
void  S639C1 ::v2(){vfunc_called(this, "_ZN6S639C12v2Ev");}
void  S639C1 ::v3(){vfunc_called(this, "_ZN6S639C12v3Ev");}
void  S639C1 ::v4(){vfunc_called(this, "_ZN6S639C12v4Ev");}
S639C1 ::S639C1(){ note_ctor("S639C1", this);} // tgen

static void Test_S639C1()
{
  extern Class_Descriptor cd_S639C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,40)];
    init_test(&cd_S639C1, buf);
    S639C1 *dp, &lv = *(dp=new (buf) S639C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,156), "sizeof(S639C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S639C1)");
    check_base_class_offset(lv, (S639C5*)(S639C4*)(S639C3*)(S639C2*), 0, "S639C1");
    check_base_class_offset(lv, (S639C4*)(S639C3*)(S639C2*), 0, "S639C1");
    check_base_class_offset(lv, (S639C3*)(S639C2*), 0, "S639C1");
    check_base_class_offset(lv, (S639C2*), 0, "S639C1");
    check_field_offset(lv, s639c1f0, ABISELECT(208,144), "S639C1.s639c1f0");
    test_class_info(&lv, &cd_S639C1);
    dp->~S639C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS639C1(Test_S639C1, "S639C1", ABISELECT(224,156));

#else // __cplusplus

extern void _ZN6S639C1C1Ev();
extern void _ZN6S639C1D1Ev();
Name_Map name_map_S639C1[] = {
  NSPAIR(_ZN6S639C1C1Ev),
  NSPAIR(_ZN6S639C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S639C5;
extern VTBL_ENTRY _ZTI6S639C5[];
extern  VTBL_ENTRY _ZTV6S639C5[];
extern Class_Descriptor cd_S639C4;
extern VTBL_ENTRY _ZTI6S639C4[];
extern  VTBL_ENTRY _ZTV6S639C4[];
extern Class_Descriptor cd_S639C3;
extern VTBL_ENTRY _ZTI6S639C3[];
extern  VTBL_ENTRY _ZTV6S639C3[];
extern Class_Descriptor cd_S639C2;
extern VTBL_ENTRY _ZTI6S639C2[];
extern  VTBL_ENTRY _ZTV6S639C2[];
static Base_Class bases_S639C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S639C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S639C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S639C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S639C1[];
extern void _ZN6S639C1D1Ev();
extern void _ZN6S639C1D0Ev();
extern void _ZN6S639C52v5Ev();
extern void _ZN6S639C52v6Ev();
extern void _ZN6S639C52v7Ev();
extern void _ZN6S639C52v8Ev();
extern void _ZN6S639C52v9Ev();
extern void _ZN6S639C53v10Ev();
extern void _ZN6S639C53v11Ev();
extern void _ZN6S639C53v12Ev();
extern void _ZN6S639C53v13Ev();
extern void _ZN6S639C53v14Ev();
extern void _ZN6S639C53v15Ev();
extern void _ZN6S639C53v16Ev();
extern void _ZN6S639C53v17Ev();
extern void _ZN6S639C53v18Ev();
extern void _ZN6S639C53v19Ev();
extern void _ZN6S639C53v20Ev();
extern void _ZN6S639C53v21Ev();
extern void _ZN6S639C53v22Ev();
extern void _ZN6S639C53v23Ev();
extern void _ZN6S639C53v24Ev();
extern void _ZN6S639C53v25Ev();
extern void _ZN6S639C53v26Ev();
extern void _ZN6S639C53v27Ev();
extern void _ZN6S639C53v28Ev();
extern void _ZN6S639C53v29Ev();
extern void _ZN6S639C53v30Ev();
extern void _ZN6S639C53v31Ev();
extern void _ZN6S639C53v32Ev();
extern void _ZN6S639C53v33Ev();
extern void _ZN6S639C53v34Ev();
extern void _ZN6S639C53v35Ev();
extern void _ZN6S639C53v36Ev();
extern void _ZN6S639C53v37Ev();
extern void _ZN6S639C53v38Ev();
extern void _ZN6S639C53v39Ev();
extern void _ZN6S639C53v40Ev();
extern void _ZN6S639C53v41Ev();
extern void _ZN6S639C53v42Ev();
extern void _ZN6S639C53v43Ev();
extern void _ZN6S639C53v44Ev();
extern void _ZN6S639C53v45Ev();
extern void _ZN6S639C53v46Ev();
extern void _ZN6S639C53v47Ev();
extern void _ZN6S639C53v48Ev();
extern void _ZN6S639C53v49Ev();
extern void _ZN6S639C53v50Ev();
extern void _ZN6S639C53v51Ev();
extern void _ZN6S639C53v52Ev();
extern void _ZN6S639C53v53Ev();
extern void _ZN6S639C53v54Ev();
extern void _ZN6S639C53v55Ev();
extern void _ZN6S639C53v56Ev();
extern void _ZN6S639C53v57Ev();
extern void _ZN6S639C53v58Ev();
extern void _ZN6S639C53v59Ev();
extern void _ZN6S639C53v60Ev();
extern void _ZN6S639C53v61Ev();
extern void _ZN6S639C53v62Ev();
extern void _ZN6S639C53v63Ev();
extern void _ZN6S639C53v64Ev();
extern void _ZN6S639C53v65Ev();
extern void _ZN6S639C53v66Ev();
extern void _ZN6S639C53v67Ev();
extern void _ZN6S639C53v68Ev();
extern void _ZN6S639C43v69Ev();
extern void _ZN6S639C43v70Ev();
extern void _ZN6S639C43v71Ev();
extern void _ZN6S639C43v72Ev();
extern void _ZN6S639C43v73Ev();
extern void _ZN6S639C43v74Ev();
extern void _ZN6S639C43v75Ev();
extern void _ZN6S639C43v76Ev();
extern void _ZN6S639C43v77Ev();
extern void _ZN6S639C43v78Ev();
extern void _ZN6S639C43v79Ev();
extern void _ZN6S639C43v80Ev();
extern void _ZN6S639C43v81Ev();
extern void _ZN6S639C43v82Ev();
extern void _ZN6S639C43v83Ev();
extern void _ZN6S639C43v84Ev();
extern void _ZN6S639C43v85Ev();
extern void _ZN6S639C43v86Ev();
extern void _ZN6S639C43v87Ev();
extern void _ZN6S639C43v88Ev();
extern void _ZN6S639C43v89Ev();
extern void _ZN6S639C43v90Ev();
extern void _ZN6S639C33v91Ev();
extern void _ZN6S639C33v92Ev();
extern void _ZN6S639C33v93Ev();
extern void _ZN6S639C33v94Ev();
extern void _ZN6S639C33v95Ev();
extern void _ZN6S639C33v96Ev();
extern void _ZN6S639C33v97Ev();
extern void _ZN6S639C33v98Ev();
extern void _ZN6S639C33v99Ev();
extern void _ZN6S639C34v100Ev();
extern void _ZN6S639C34v101Ev();
extern void _ZN6S639C34v102Ev();
extern void _ZN6S639C34v103Ev();
extern void _ZN6S639C34v104Ev();
extern void _ZN6S639C34v105Ev();
extern void _ZN6S639C34v106Ev();
extern void _ZN6S639C34v107Ev();
extern void _ZN6S639C34v108Ev();
extern void _ZN6S639C34v109Ev();
extern void _ZN6S639C24v110Ev();
extern void _ZN6S639C24v111Ev();
extern void _ZN6S639C24v112Ev();
extern void _ZN6S639C24v113Ev();
extern void _ZN6S639C24v114Ev();
extern void _ZN6S639C24v115Ev();
extern void _ZN6S639C24v116Ev();
extern void _ZN6S639C24v117Ev();
extern void _ZN6S639C24v118Ev();
extern void _ZN6S639C12v1Ev();
extern void _ZN6S639C12v2Ev();
extern void _ZN6S639C12v3Ev();
extern void _ZN6S639C12v4Ev();
static  VTBL_ENTRY vtc_S639C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S639C1[0]),
  (VTBL_ENTRY)&_ZN6S639C1D1Ev,
  (VTBL_ENTRY)&_ZN6S639C1D0Ev,
  (VTBL_ENTRY)&_ZN6S639C52v5Ev,
  (VTBL_ENTRY)&_ZN6S639C52v6Ev,
  (VTBL_ENTRY)&_ZN6S639C52v7Ev,
  (VTBL_ENTRY)&_ZN6S639C52v8Ev,
  (VTBL_ENTRY)&_ZN6S639C52v9Ev,
  (VTBL_ENTRY)&_ZN6S639C53v10Ev,
  (VTBL_ENTRY)&_ZN6S639C53v11Ev,
  (VTBL_ENTRY)&_ZN6S639C53v12Ev,
  (VTBL_ENTRY)&_ZN6S639C53v13Ev,
  (VTBL_ENTRY)&_ZN6S639C53v14Ev,
  (VTBL_ENTRY)&_ZN6S639C53v15Ev,
  (VTBL_ENTRY)&_ZN6S639C53v16Ev,
  (VTBL_ENTRY)&_ZN6S639C53v17Ev,
  (VTBL_ENTRY)&_ZN6S639C53v18Ev,
  (VTBL_ENTRY)&_ZN6S639C53v19Ev,
  (VTBL_ENTRY)&_ZN6S639C53v20Ev,
  (VTBL_ENTRY)&_ZN6S639C53v21Ev,
  (VTBL_ENTRY)&_ZN6S639C53v22Ev,
  (VTBL_ENTRY)&_ZN6S639C53v23Ev,
  (VTBL_ENTRY)&_ZN6S639C53v24Ev,
  (VTBL_ENTRY)&_ZN6S639C53v25Ev,
  (VTBL_ENTRY)&_ZN6S639C53v26Ev,
  (VTBL_ENTRY)&_ZN6S639C53v27Ev,
  (VTBL_ENTRY)&_ZN6S639C53v28Ev,
  (VTBL_ENTRY)&_ZN6S639C53v29Ev,
  (VTBL_ENTRY)&_ZN6S639C53v30Ev,
  (VTBL_ENTRY)&_ZN6S639C53v31Ev,
  (VTBL_ENTRY)&_ZN6S639C53v32Ev,
  (VTBL_ENTRY)&_ZN6S639C53v33Ev,
  (VTBL_ENTRY)&_ZN6S639C53v34Ev,
  (VTBL_ENTRY)&_ZN6S639C53v35Ev,
  (VTBL_ENTRY)&_ZN6S639C53v36Ev,
  (VTBL_ENTRY)&_ZN6S639C53v37Ev,
  (VTBL_ENTRY)&_ZN6S639C53v38Ev,
  (VTBL_ENTRY)&_ZN6S639C53v39Ev,
  (VTBL_ENTRY)&_ZN6S639C53v40Ev,
  (VTBL_ENTRY)&_ZN6S639C53v41Ev,
  (VTBL_ENTRY)&_ZN6S639C53v42Ev,
  (VTBL_ENTRY)&_ZN6S639C53v43Ev,
  (VTBL_ENTRY)&_ZN6S639C53v44Ev,
  (VTBL_ENTRY)&_ZN6S639C53v45Ev,
  (VTBL_ENTRY)&_ZN6S639C53v46Ev,
  (VTBL_ENTRY)&_ZN6S639C53v47Ev,
  (VTBL_ENTRY)&_ZN6S639C53v48Ev,
  (VTBL_ENTRY)&_ZN6S639C53v49Ev,
  (VTBL_ENTRY)&_ZN6S639C53v50Ev,
  (VTBL_ENTRY)&_ZN6S639C53v51Ev,
  (VTBL_ENTRY)&_ZN6S639C53v52Ev,
  (VTBL_ENTRY)&_ZN6S639C53v53Ev,
  (VTBL_ENTRY)&_ZN6S639C53v54Ev,
  (VTBL_ENTRY)&_ZN6S639C53v55Ev,
  (VTBL_ENTRY)&_ZN6S639C53v56Ev,
  (VTBL_ENTRY)&_ZN6S639C53v57Ev,
  (VTBL_ENTRY)&_ZN6S639C53v58Ev,
  (VTBL_ENTRY)&_ZN6S639C53v59Ev,
  (VTBL_ENTRY)&_ZN6S639C53v60Ev,
  (VTBL_ENTRY)&_ZN6S639C53v61Ev,
  (VTBL_ENTRY)&_ZN6S639C53v62Ev,
  (VTBL_ENTRY)&_ZN6S639C53v63Ev,
  (VTBL_ENTRY)&_ZN6S639C53v64Ev,
  (VTBL_ENTRY)&_ZN6S639C53v65Ev,
  (VTBL_ENTRY)&_ZN6S639C53v66Ev,
  (VTBL_ENTRY)&_ZN6S639C53v67Ev,
  (VTBL_ENTRY)&_ZN6S639C53v68Ev,
  (VTBL_ENTRY)&_ZN6S639C43v69Ev,
  (VTBL_ENTRY)&_ZN6S639C43v70Ev,
  (VTBL_ENTRY)&_ZN6S639C43v71Ev,
  (VTBL_ENTRY)&_ZN6S639C43v72Ev,
  (VTBL_ENTRY)&_ZN6S639C43v73Ev,
  (VTBL_ENTRY)&_ZN6S639C43v74Ev,
  (VTBL_ENTRY)&_ZN6S639C43v75Ev,
  (VTBL_ENTRY)&_ZN6S639C43v76Ev,
  (VTBL_ENTRY)&_ZN6S639C43v77Ev,
  (VTBL_ENTRY)&_ZN6S639C43v78Ev,
  (VTBL_ENTRY)&_ZN6S639C43v79Ev,
  (VTBL_ENTRY)&_ZN6S639C43v80Ev,
  (VTBL_ENTRY)&_ZN6S639C43v81Ev,
  (VTBL_ENTRY)&_ZN6S639C43v82Ev,
  (VTBL_ENTRY)&_ZN6S639C43v83Ev,
  (VTBL_ENTRY)&_ZN6S639C43v84Ev,
  (VTBL_ENTRY)&_ZN6S639C43v85Ev,
  (VTBL_ENTRY)&_ZN6S639C43v86Ev,
  (VTBL_ENTRY)&_ZN6S639C43v87Ev,
  (VTBL_ENTRY)&_ZN6S639C43v88Ev,
  (VTBL_ENTRY)&_ZN6S639C43v89Ev,
  (VTBL_ENTRY)&_ZN6S639C43v90Ev,
  (VTBL_ENTRY)&_ZN6S639C33v91Ev,
  (VTBL_ENTRY)&_ZN6S639C33v92Ev,
  (VTBL_ENTRY)&_ZN6S639C33v93Ev,
  (VTBL_ENTRY)&_ZN6S639C33v94Ev,
  (VTBL_ENTRY)&_ZN6S639C33v95Ev,
  (VTBL_ENTRY)&_ZN6S639C33v96Ev,
  (VTBL_ENTRY)&_ZN6S639C33v97Ev,
  (VTBL_ENTRY)&_ZN6S639C33v98Ev,
  (VTBL_ENTRY)&_ZN6S639C33v99Ev,
  (VTBL_ENTRY)&_ZN6S639C34v100Ev,
  (VTBL_ENTRY)&_ZN6S639C34v101Ev,
  (VTBL_ENTRY)&_ZN6S639C34v102Ev,
  (VTBL_ENTRY)&_ZN6S639C34v103Ev,
  (VTBL_ENTRY)&_ZN6S639C34v104Ev,
  (VTBL_ENTRY)&_ZN6S639C34v105Ev,
  (VTBL_ENTRY)&_ZN6S639C34v106Ev,
  (VTBL_ENTRY)&_ZN6S639C34v107Ev,
  (VTBL_ENTRY)&_ZN6S639C34v108Ev,
  (VTBL_ENTRY)&_ZN6S639C34v109Ev,
  (VTBL_ENTRY)&_ZN6S639C24v110Ev,
  (VTBL_ENTRY)&_ZN6S639C24v111Ev,
  (VTBL_ENTRY)&_ZN6S639C24v112Ev,
  (VTBL_ENTRY)&_ZN6S639C24v113Ev,
  (VTBL_ENTRY)&_ZN6S639C24v114Ev,
  (VTBL_ENTRY)&_ZN6S639C24v115Ev,
  (VTBL_ENTRY)&_ZN6S639C24v116Ev,
  (VTBL_ENTRY)&_ZN6S639C24v117Ev,
  (VTBL_ENTRY)&_ZN6S639C24v118Ev,
  (VTBL_ENTRY)&_ZN6S639C12v1Ev,
  (VTBL_ENTRY)&_ZN6S639C12v2Ev,
  (VTBL_ENTRY)&_ZN6S639C12v3Ev,
  (VTBL_ENTRY)&_ZN6S639C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S639C1[];
extern  VTBL_ENTRY _ZTV6S639C1[];
Class_Descriptor cd_S639C1 = {  "S639C1", // class name
  bases_S639C1, 4,
  &(vtc_S639C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,156), // object size
  NSPAIRA(_ZTI6S639C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S639C1),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S670C5  {
  int s670c5f0;
  __tsi64 s670c5f1;
  void *s670c5f2[4];
  int s670c5f3[2];
  void *s670c5f4;
  ::S473C6_nt s670c5f5;
  void *s670c5f6[2];
  virtual  ~S670C5(); // _ZN6S670C5D1Ev
  virtual void  v6(); // _ZN6S670C52v6Ev
  virtual void  v7(); // _ZN6S670C52v7Ev
  virtual void  v8(); // _ZN6S670C52v8Ev
  virtual void  v9(); // _ZN6S670C52v9Ev
  virtual void  v10(); // _ZN6S670C53v10Ev
  virtual void  v11(); // _ZN6S670C53v11Ev
  virtual void  v12(); // _ZN6S670C53v12Ev
  virtual void  v13(); // _ZN6S670C53v13Ev
  virtual void  v14(); // _ZN6S670C53v14Ev
  virtual void  v15(); // _ZN6S670C53v15Ev
  virtual void  v16(); // _ZN6S670C53v16Ev
  virtual void  v17(); // _ZN6S670C53v17Ev
  virtual void  v18(); // _ZN6S670C53v18Ev
  virtual void  v19(); // _ZN6S670C53v19Ev
  virtual void  v20(); // _ZN6S670C53v20Ev
  virtual void  v21(); // _ZN6S670C53v21Ev
  virtual void  v22(); // _ZN6S670C53v22Ev
  virtual void  v23(); // _ZN6S670C53v23Ev
  virtual void  v24(); // _ZN6S670C53v24Ev
  virtual void  v25(); // _ZN6S670C53v25Ev
  virtual void  v26(); // _ZN6S670C53v26Ev
  virtual void  v27(); // _ZN6S670C53v27Ev
  virtual void  v28(); // _ZN6S670C53v28Ev
  virtual void  v29(); // _ZN6S670C53v29Ev
  virtual void  v30(); // _ZN6S670C53v30Ev
  virtual void  v31(); // _ZN6S670C53v31Ev
  virtual void  v32(); // _ZN6S670C53v32Ev
  virtual void  v33(); // _ZN6S670C53v33Ev
  virtual void  v34(); // _ZN6S670C53v34Ev
  virtual void  v35(); // _ZN6S670C53v35Ev
  virtual void  v36(); // _ZN6S670C53v36Ev
  virtual void  v37(); // _ZN6S670C53v37Ev
  virtual void  v38(); // _ZN6S670C53v38Ev
  virtual void  v39(); // _ZN6S670C53v39Ev
  virtual void  v40(); // _ZN6S670C53v40Ev
  virtual void  v41(); // _ZN6S670C53v41Ev
  virtual void  v42(); // _ZN6S670C53v42Ev
  virtual void  v43(); // _ZN6S670C53v43Ev
  virtual void  v44(); // _ZN6S670C53v44Ev
  virtual void  v45(); // _ZN6S670C53v45Ev
  virtual void  v46(); // _ZN6S670C53v46Ev
  virtual void  v47(); // _ZN6S670C53v47Ev
  virtual void  v48(); // _ZN6S670C53v48Ev
  virtual void  v49(); // _ZN6S670C53v49Ev
  virtual void  v50(); // _ZN6S670C53v50Ev
  virtual void  v51(); // _ZN6S670C53v51Ev
  virtual void  v52(); // _ZN6S670C53v52Ev
  virtual void  v53(); // _ZN6S670C53v53Ev
  virtual void  v54(); // _ZN6S670C53v54Ev
  virtual void  v55(); // _ZN6S670C53v55Ev
  virtual void  v56(); // _ZN6S670C53v56Ev
  virtual void  v57(); // _ZN6S670C53v57Ev
  virtual void  v58(); // _ZN6S670C53v58Ev
  virtual void  v59(); // _ZN6S670C53v59Ev
  virtual void  v60(); // _ZN6S670C53v60Ev
  virtual void  v61(); // _ZN6S670C53v61Ev
  virtual void  v62(); // _ZN6S670C53v62Ev
  virtual void  v63(); // _ZN6S670C53v63Ev
  virtual void  v64(); // _ZN6S670C53v64Ev
  virtual void  v65(); // _ZN6S670C53v65Ev
  virtual void  v66(); // _ZN6S670C53v66Ev
  virtual void  v67(); // _ZN6S670C53v67Ev
  virtual void  v68(); // _ZN6S670C53v68Ev
  virtual void  v69(); // _ZN6S670C53v69Ev
  S670C5(); // tgen
};
//SIG(-1 S670C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S670C5 ::~S670C5(){ note_dtor("S670C5", this);}
void  S670C5 ::v6(){vfunc_called(this, "_ZN6S670C52v6Ev");}
void  S670C5 ::v7(){vfunc_called(this, "_ZN6S670C52v7Ev");}
void  S670C5 ::v8(){vfunc_called(this, "_ZN6S670C52v8Ev");}
void  S670C5 ::v9(){vfunc_called(this, "_ZN6S670C52v9Ev");}
void  S670C5 ::v10(){vfunc_called(this, "_ZN6S670C53v10Ev");}
void  S670C5 ::v11(){vfunc_called(this, "_ZN6S670C53v11Ev");}
void  S670C5 ::v12(){vfunc_called(this, "_ZN6S670C53v12Ev");}
void  S670C5 ::v13(){vfunc_called(this, "_ZN6S670C53v13Ev");}
void  S670C5 ::v14(){vfunc_called(this, "_ZN6S670C53v14Ev");}
void  S670C5 ::v15(){vfunc_called(this, "_ZN6S670C53v15Ev");}
void  S670C5 ::v16(){vfunc_called(this, "_ZN6S670C53v16Ev");}
void  S670C5 ::v17(){vfunc_called(this, "_ZN6S670C53v17Ev");}
void  S670C5 ::v18(){vfunc_called(this, "_ZN6S670C53v18Ev");}
void  S670C5 ::v19(){vfunc_called(this, "_ZN6S670C53v19Ev");}
void  S670C5 ::v20(){vfunc_called(this, "_ZN6S670C53v20Ev");}
void  S670C5 ::v21(){vfunc_called(this, "_ZN6S670C53v21Ev");}
void  S670C5 ::v22(){vfunc_called(this, "_ZN6S670C53v22Ev");}
void  S670C5 ::v23(){vfunc_called(this, "_ZN6S670C53v23Ev");}
void  S670C5 ::v24(){vfunc_called(this, "_ZN6S670C53v24Ev");}
void  S670C5 ::v25(){vfunc_called(this, "_ZN6S670C53v25Ev");}
void  S670C5 ::v26(){vfunc_called(this, "_ZN6S670C53v26Ev");}
void  S670C5 ::v27(){vfunc_called(this, "_ZN6S670C53v27Ev");}
void  S670C5 ::v28(){vfunc_called(this, "_ZN6S670C53v28Ev");}
void  S670C5 ::v29(){vfunc_called(this, "_ZN6S670C53v29Ev");}
void  S670C5 ::v30(){vfunc_called(this, "_ZN6S670C53v30Ev");}
void  S670C5 ::v31(){vfunc_called(this, "_ZN6S670C53v31Ev");}
void  S670C5 ::v32(){vfunc_called(this, "_ZN6S670C53v32Ev");}
void  S670C5 ::v33(){vfunc_called(this, "_ZN6S670C53v33Ev");}
void  S670C5 ::v34(){vfunc_called(this, "_ZN6S670C53v34Ev");}
void  S670C5 ::v35(){vfunc_called(this, "_ZN6S670C53v35Ev");}
void  S670C5 ::v36(){vfunc_called(this, "_ZN6S670C53v36Ev");}
void  S670C5 ::v37(){vfunc_called(this, "_ZN6S670C53v37Ev");}
void  S670C5 ::v38(){vfunc_called(this, "_ZN6S670C53v38Ev");}
void  S670C5 ::v39(){vfunc_called(this, "_ZN6S670C53v39Ev");}
void  S670C5 ::v40(){vfunc_called(this, "_ZN6S670C53v40Ev");}
void  S670C5 ::v41(){vfunc_called(this, "_ZN6S670C53v41Ev");}
void  S670C5 ::v42(){vfunc_called(this, "_ZN6S670C53v42Ev");}
void  S670C5 ::v43(){vfunc_called(this, "_ZN6S670C53v43Ev");}
void  S670C5 ::v44(){vfunc_called(this, "_ZN6S670C53v44Ev");}
void  S670C5 ::v45(){vfunc_called(this, "_ZN6S670C53v45Ev");}
void  S670C5 ::v46(){vfunc_called(this, "_ZN6S670C53v46Ev");}
void  S670C5 ::v47(){vfunc_called(this, "_ZN6S670C53v47Ev");}
void  S670C5 ::v48(){vfunc_called(this, "_ZN6S670C53v48Ev");}
void  S670C5 ::v49(){vfunc_called(this, "_ZN6S670C53v49Ev");}
void  S670C5 ::v50(){vfunc_called(this, "_ZN6S670C53v50Ev");}
void  S670C5 ::v51(){vfunc_called(this, "_ZN6S670C53v51Ev");}
void  S670C5 ::v52(){vfunc_called(this, "_ZN6S670C53v52Ev");}
void  S670C5 ::v53(){vfunc_called(this, "_ZN6S670C53v53Ev");}
void  S670C5 ::v54(){vfunc_called(this, "_ZN6S670C53v54Ev");}
void  S670C5 ::v55(){vfunc_called(this, "_ZN6S670C53v55Ev");}
void  S670C5 ::v56(){vfunc_called(this, "_ZN6S670C53v56Ev");}
void  S670C5 ::v57(){vfunc_called(this, "_ZN6S670C53v57Ev");}
void  S670C5 ::v58(){vfunc_called(this, "_ZN6S670C53v58Ev");}
void  S670C5 ::v59(){vfunc_called(this, "_ZN6S670C53v59Ev");}
void  S670C5 ::v60(){vfunc_called(this, "_ZN6S670C53v60Ev");}
void  S670C5 ::v61(){vfunc_called(this, "_ZN6S670C53v61Ev");}
void  S670C5 ::v62(){vfunc_called(this, "_ZN6S670C53v62Ev");}
void  S670C5 ::v63(){vfunc_called(this, "_ZN6S670C53v63Ev");}
void  S670C5 ::v64(){vfunc_called(this, "_ZN6S670C53v64Ev");}
void  S670C5 ::v65(){vfunc_called(this, "_ZN6S670C53v65Ev");}
void  S670C5 ::v66(){vfunc_called(this, "_ZN6S670C53v66Ev");}
void  S670C5 ::v67(){vfunc_called(this, "_ZN6S670C53v67Ev");}
void  S670C5 ::v68(){vfunc_called(this, "_ZN6S670C53v68Ev");}
void  S670C5 ::v69(){vfunc_called(this, "_ZN6S670C53v69Ev");}
S670C5 ::S670C5(){ note_ctor("S670C5", this);} // tgen

static void Test_S670C5()
{
  extern Class_Descriptor cd_S670C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S670C5, buf);
    S670C5 *dp, &lv = *(dp=new (buf) S670C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S670C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S670C5)");
    check_field_offset(lv, s670c5f0, ABISELECT(8,4), "S670C5.s670c5f0");
    check_field_offset(lv, s670c5f1, ABISELECT(16,8), "S670C5.s670c5f1");
    check_field_offset(lv, s670c5f2, ABISELECT(24,16), "S670C5.s670c5f2");
    check_field_offset(lv, s670c5f3, ABISELECT(56,32), "S670C5.s670c5f3");
    check_field_offset(lv, s670c5f4, ABISELECT(64,40), "S670C5.s670c5f4");
    check_field_offset(lv, s670c5f5, ABISELECT(72,44), "S670C5.s670c5f5");
    check_field_offset(lv, s670c5f6, ABISELECT(80,52), "S670C5.s670c5f6");
    test_class_info(&lv, &cd_S670C5);
    dp->~S670C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS670C5(Test_S670C5, "S670C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S670C5C1Ev();
extern void _ZN6S670C5D1Ev();
Name_Map name_map_S670C5[] = {
  NSPAIR(_ZN6S670C5C1Ev),
  NSPAIR(_ZN6S670C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S670C5[];
extern void _ZN6S670C5D1Ev();
extern void _ZN6S670C5D0Ev();
extern void _ZN6S670C52v6Ev();
extern void _ZN6S670C52v7Ev();
extern void _ZN6S670C52v8Ev();
extern void _ZN6S670C52v9Ev();
extern void _ZN6S670C53v10Ev();
extern void _ZN6S670C53v11Ev();
extern void _ZN6S670C53v12Ev();
extern void _ZN6S670C53v13Ev();
extern void _ZN6S670C53v14Ev();
extern void _ZN6S670C53v15Ev();
extern void _ZN6S670C53v16Ev();
extern void _ZN6S670C53v17Ev();
extern void _ZN6S670C53v18Ev();
extern void _ZN6S670C53v19Ev();
extern void _ZN6S670C53v20Ev();
extern void _ZN6S670C53v21Ev();
extern void _ZN6S670C53v22Ev();
extern void _ZN6S670C53v23Ev();
extern void _ZN6S670C53v24Ev();
extern void _ZN6S670C53v25Ev();
extern void _ZN6S670C53v26Ev();
extern void _ZN6S670C53v27Ev();
extern void _ZN6S670C53v28Ev();
extern void _ZN6S670C53v29Ev();
extern void _ZN6S670C53v30Ev();
extern void _ZN6S670C53v31Ev();
extern void _ZN6S670C53v32Ev();
extern void _ZN6S670C53v33Ev();
extern void _ZN6S670C53v34Ev();
extern void _ZN6S670C53v35Ev();
extern void _ZN6S670C53v36Ev();
extern void _ZN6S670C53v37Ev();
extern void _ZN6S670C53v38Ev();
extern void _ZN6S670C53v39Ev();
extern void _ZN6S670C53v40Ev();
extern void _ZN6S670C53v41Ev();
extern void _ZN6S670C53v42Ev();
extern void _ZN6S670C53v43Ev();
extern void _ZN6S670C53v44Ev();
extern void _ZN6S670C53v45Ev();
extern void _ZN6S670C53v46Ev();
extern void _ZN6S670C53v47Ev();
extern void _ZN6S670C53v48Ev();
extern void _ZN6S670C53v49Ev();
extern void _ZN6S670C53v50Ev();
extern void _ZN6S670C53v51Ev();
extern void _ZN6S670C53v52Ev();
extern void _ZN6S670C53v53Ev();
extern void _ZN6S670C53v54Ev();
extern void _ZN6S670C53v55Ev();
extern void _ZN6S670C53v56Ev();
extern void _ZN6S670C53v57Ev();
extern void _ZN6S670C53v58Ev();
extern void _ZN6S670C53v59Ev();
extern void _ZN6S670C53v60Ev();
extern void _ZN6S670C53v61Ev();
extern void _ZN6S670C53v62Ev();
extern void _ZN6S670C53v63Ev();
extern void _ZN6S670C53v64Ev();
extern void _ZN6S670C53v65Ev();
extern void _ZN6S670C53v66Ev();
extern void _ZN6S670C53v67Ev();
extern void _ZN6S670C53v68Ev();
extern void _ZN6S670C53v69Ev();
static  VTBL_ENTRY vtc_S670C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S670C5[0]),
  (VTBL_ENTRY)&_ZN6S670C5D1Ev,
  (VTBL_ENTRY)&_ZN6S670C5D0Ev,
  (VTBL_ENTRY)&_ZN6S670C52v6Ev,
  (VTBL_ENTRY)&_ZN6S670C52v7Ev,
  (VTBL_ENTRY)&_ZN6S670C52v8Ev,
  (VTBL_ENTRY)&_ZN6S670C52v9Ev,
  (VTBL_ENTRY)&_ZN6S670C53v10Ev,
  (VTBL_ENTRY)&_ZN6S670C53v11Ev,
  (VTBL_ENTRY)&_ZN6S670C53v12Ev,
  (VTBL_ENTRY)&_ZN6S670C53v13Ev,
  (VTBL_ENTRY)&_ZN6S670C53v14Ev,
  (VTBL_ENTRY)&_ZN6S670C53v15Ev,
  (VTBL_ENTRY)&_ZN6S670C53v16Ev,
  (VTBL_ENTRY)&_ZN6S670C53v17Ev,
  (VTBL_ENTRY)&_ZN6S670C53v18Ev,
  (VTBL_ENTRY)&_ZN6S670C53v19Ev,
  (VTBL_ENTRY)&_ZN6S670C53v20Ev,
  (VTBL_ENTRY)&_ZN6S670C53v21Ev,
  (VTBL_ENTRY)&_ZN6S670C53v22Ev,
  (VTBL_ENTRY)&_ZN6S670C53v23Ev,
  (VTBL_ENTRY)&_ZN6S670C53v24Ev,
  (VTBL_ENTRY)&_ZN6S670C53v25Ev,
  (VTBL_ENTRY)&_ZN6S670C53v26Ev,
  (VTBL_ENTRY)&_ZN6S670C53v27Ev,
  (VTBL_ENTRY)&_ZN6S670C53v28Ev,
  (VTBL_ENTRY)&_ZN6S670C53v29Ev,
  (VTBL_ENTRY)&_ZN6S670C53v30Ev,
  (VTBL_ENTRY)&_ZN6S670C53v31Ev,
  (VTBL_ENTRY)&_ZN6S670C53v32Ev,
  (VTBL_ENTRY)&_ZN6S670C53v33Ev,
  (VTBL_ENTRY)&_ZN6S670C53v34Ev,
  (VTBL_ENTRY)&_ZN6S670C53v35Ev,
  (VTBL_ENTRY)&_ZN6S670C53v36Ev,
  (VTBL_ENTRY)&_ZN6S670C53v37Ev,
  (VTBL_ENTRY)&_ZN6S670C53v38Ev,
  (VTBL_ENTRY)&_ZN6S670C53v39Ev,
  (VTBL_ENTRY)&_ZN6S670C53v40Ev,
  (VTBL_ENTRY)&_ZN6S670C53v41Ev,
  (VTBL_ENTRY)&_ZN6S670C53v42Ev,
  (VTBL_ENTRY)&_ZN6S670C53v43Ev,
  (VTBL_ENTRY)&_ZN6S670C53v44Ev,
  (VTBL_ENTRY)&_ZN6S670C53v45Ev,
  (VTBL_ENTRY)&_ZN6S670C53v46Ev,
  (VTBL_ENTRY)&_ZN6S670C53v47Ev,
  (VTBL_ENTRY)&_ZN6S670C53v48Ev,
  (VTBL_ENTRY)&_ZN6S670C53v49Ev,
  (VTBL_ENTRY)&_ZN6S670C53v50Ev,
  (VTBL_ENTRY)&_ZN6S670C53v51Ev,
  (VTBL_ENTRY)&_ZN6S670C53v52Ev,
  (VTBL_ENTRY)&_ZN6S670C53v53Ev,
  (VTBL_ENTRY)&_ZN6S670C53v54Ev,
  (VTBL_ENTRY)&_ZN6S670C53v55Ev,
  (VTBL_ENTRY)&_ZN6S670C53v56Ev,
  (VTBL_ENTRY)&_ZN6S670C53v57Ev,
  (VTBL_ENTRY)&_ZN6S670C53v58Ev,
  (VTBL_ENTRY)&_ZN6S670C53v59Ev,
  (VTBL_ENTRY)&_ZN6S670C53v60Ev,
  (VTBL_ENTRY)&_ZN6S670C53v61Ev,
  (VTBL_ENTRY)&_ZN6S670C53v62Ev,
  (VTBL_ENTRY)&_ZN6S670C53v63Ev,
  (VTBL_ENTRY)&_ZN6S670C53v64Ev,
  (VTBL_ENTRY)&_ZN6S670C53v65Ev,
  (VTBL_ENTRY)&_ZN6S670C53v66Ev,
  (VTBL_ENTRY)&_ZN6S670C53v67Ev,
  (VTBL_ENTRY)&_ZN6S670C53v68Ev,
  (VTBL_ENTRY)&_ZN6S670C53v69Ev,
};
extern VTBL_ENTRY _ZTI6S670C5[];
extern  VTBL_ENTRY _ZTV6S670C5[];
Class_Descriptor cd_S670C5 = {  "S670C5", // class name
  0,0,//no base classes
  &(vtc_S670C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S670C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S670C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S670C4  : S670C5 {
  int s670c4f0[2];
  void *s670c4f1;
  int s670c4f2[2];
  ::S473C7_nt s670c4f3;
  ::S473C7_nt s670c4f4;
  ::S21925C42 s670c4f5;
  ::S473C7_nt s670c4f6;
  unsigned int s670c4f7:1;
  unsigned int s670c4f8:1;
  unsigned int s670c4f9:1;
  unsigned int s670c4f10:1;
  unsigned int s670c4f11:1;
  int s670c4f12[2];
  virtual  ~S670C4(); // _ZN6S670C4D1Ev
  virtual void  v70(); // _ZN6S670C43v70Ev
  virtual void  v71(); // _ZN6S670C43v71Ev
  virtual void  v72(); // _ZN6S670C43v72Ev
  virtual void  v73(); // _ZN6S670C43v73Ev
  virtual void  v74(); // _ZN6S670C43v74Ev
  virtual void  v75(); // _ZN6S670C43v75Ev
  virtual void  v76(); // _ZN6S670C43v76Ev
  virtual void  v77(); // _ZN6S670C43v77Ev
  virtual void  v78(); // _ZN6S670C43v78Ev
  virtual void  v79(); // _ZN6S670C43v79Ev
  virtual void  v80(); // _ZN6S670C43v80Ev
  virtual void  v81(); // _ZN6S670C43v81Ev
  virtual void  v82(); // _ZN6S670C43v82Ev
  virtual void  v83(); // _ZN6S670C43v83Ev
  virtual void  v84(); // _ZN6S670C43v84Ev
  virtual void  v85(); // _ZN6S670C43v85Ev
  virtual void  v86(); // _ZN6S670C43v86Ev
  virtual void  v87(); // _ZN6S670C43v87Ev
  virtual void  v88(); // _ZN6S670C43v88Ev
  virtual void  v89(); // _ZN6S670C43v89Ev
  virtual void  v90(); // _ZN6S670C43v90Ev
  virtual void  v91(); // _ZN6S670C43v91Ev
  S670C4(); // tgen
};
//SIG(-1 S670C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S670C4 ::~S670C4(){ note_dtor("S670C4", this);}
void  S670C4 ::v70(){vfunc_called(this, "_ZN6S670C43v70Ev");}
void  S670C4 ::v71(){vfunc_called(this, "_ZN6S670C43v71Ev");}
void  S670C4 ::v72(){vfunc_called(this, "_ZN6S670C43v72Ev");}
void  S670C4 ::v73(){vfunc_called(this, "_ZN6S670C43v73Ev");}
void  S670C4 ::v74(){vfunc_called(this, "_ZN6S670C43v74Ev");}
void  S670C4 ::v75(){vfunc_called(this, "_ZN6S670C43v75Ev");}
void  S670C4 ::v76(){vfunc_called(this, "_ZN6S670C43v76Ev");}
void  S670C4 ::v77(){vfunc_called(this, "_ZN6S670C43v77Ev");}
void  S670C4 ::v78(){vfunc_called(this, "_ZN6S670C43v78Ev");}
void  S670C4 ::v79(){vfunc_called(this, "_ZN6S670C43v79Ev");}
void  S670C4 ::v80(){vfunc_called(this, "_ZN6S670C43v80Ev");}
void  S670C4 ::v81(){vfunc_called(this, "_ZN6S670C43v81Ev");}
void  S670C4 ::v82(){vfunc_called(this, "_ZN6S670C43v82Ev");}
void  S670C4 ::v83(){vfunc_called(this, "_ZN6S670C43v83Ev");}
void  S670C4 ::v84(){vfunc_called(this, "_ZN6S670C43v84Ev");}
void  S670C4 ::v85(){vfunc_called(this, "_ZN6S670C43v85Ev");}
void  S670C4 ::v86(){vfunc_called(this, "_ZN6S670C43v86Ev");}
void  S670C4 ::v87(){vfunc_called(this, "_ZN6S670C43v87Ev");}
void  S670C4 ::v88(){vfunc_called(this, "_ZN6S670C43v88Ev");}
void  S670C4 ::v89(){vfunc_called(this, "_ZN6S670C43v89Ev");}
void  S670C4 ::v90(){vfunc_called(this, "_ZN6S670C43v90Ev");}
void  S670C4 ::v91(){vfunc_called(this, "_ZN6S670C43v91Ev");}
S670C4 ::S670C4(){ note_ctor("S670C4", this);} // tgen

static void Test_S670C4()
{
  extern Class_Descriptor cd_S670C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S670C4, buf);
    S670C4 *dp, &lv = *(dp=new (buf) S670C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S670C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S670C4)");
    check_base_class_offset(lv, (S670C5*), 0, "S670C4");
    check_field_offset(lv, s670c4f0, ABISELECT(96,60), "S670C4.s670c4f0");
    check_field_offset(lv, s670c4f1, ABISELECT(104,68), "S670C4.s670c4f1");
    check_field_offset(lv, s670c4f2, ABISELECT(112,72), "S670C4.s670c4f2");
    check_field_offset(lv, s670c4f3, ABISELECT(120,80), "S670C4.s670c4f3");
    check_field_offset(lv, s670c4f4, ABISELECT(136,92), "S670C4.s670c4f4");
    check_field_offset(lv, s670c4f5, ABISELECT(152,104), "S670C4.s670c4f5");
    check_field_offset(lv, s670c4f6, ABISELECT(160,108), "S670C4.s670c4f6");
    set_bf_and_test(lv, s670c4f7, ABISELECT(176,120), 0, 1, 1, "S670C4");
    set_bf_and_test(lv, s670c4f8, ABISELECT(176,120), 1, 1, 1, "S670C4");
    set_bf_and_test(lv, s670c4f9, ABISELECT(176,120), 2, 1, 1, "S670C4");
    set_bf_and_test(lv, s670c4f10, ABISELECT(176,120), 3, 1, 1, "S670C4");
    set_bf_and_test(lv, s670c4f11, ABISELECT(176,120), 4, 1, 1, "S670C4");
    check_field_offset(lv, s670c4f12, ABISELECT(180,124), "S670C4.s670c4f12");
    test_class_info(&lv, &cd_S670C4);
    dp->~S670C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS670C4(Test_S670C4, "S670C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S670C4C1Ev();
extern void _ZN6S670C4D1Ev();
Name_Map name_map_S670C4[] = {
  NSPAIR(_ZN6S670C4C1Ev),
  NSPAIR(_ZN6S670C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S670C5;
extern VTBL_ENTRY _ZTI6S670C5[];
extern  VTBL_ENTRY _ZTV6S670C5[];
static Base_Class bases_S670C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S670C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S670C4[];
extern void _ZN6S670C4D1Ev();
extern void _ZN6S670C4D0Ev();
extern void _ZN6S670C52v6Ev();
extern void _ZN6S670C52v7Ev();
extern void _ZN6S670C52v8Ev();
extern void _ZN6S670C52v9Ev();
extern void _ZN6S670C53v10Ev();
extern void _ZN6S670C53v11Ev();
extern void _ZN6S670C53v12Ev();
extern void _ZN6S670C53v13Ev();
extern void _ZN6S670C53v14Ev();
extern void _ZN6S670C53v15Ev();
extern void _ZN6S670C53v16Ev();
extern void _ZN6S670C53v17Ev();
extern void _ZN6S670C53v18Ev();
extern void _ZN6S670C53v19Ev();
extern void _ZN6S670C53v20Ev();
extern void _ZN6S670C53v21Ev();
extern void _ZN6S670C53v22Ev();
extern void _ZN6S670C53v23Ev();
extern void _ZN6S670C53v24Ev();
extern void _ZN6S670C53v25Ev();
extern void _ZN6S670C53v26Ev();
extern void _ZN6S670C53v27Ev();
extern void _ZN6S670C53v28Ev();
extern void _ZN6S670C53v29Ev();
extern void _ZN6S670C53v30Ev();
extern void _ZN6S670C53v31Ev();
extern void _ZN6S670C53v32Ev();
extern void _ZN6S670C53v33Ev();
extern void _ZN6S670C53v34Ev();
extern void _ZN6S670C53v35Ev();
extern void _ZN6S670C53v36Ev();
extern void _ZN6S670C53v37Ev();
extern void _ZN6S670C53v38Ev();
extern void _ZN6S670C53v39Ev();
extern void _ZN6S670C53v40Ev();
extern void _ZN6S670C53v41Ev();
extern void _ZN6S670C53v42Ev();
extern void _ZN6S670C53v43Ev();
extern void _ZN6S670C53v44Ev();
extern void _ZN6S670C53v45Ev();
extern void _ZN6S670C53v46Ev();
extern void _ZN6S670C53v47Ev();
extern void _ZN6S670C53v48Ev();
extern void _ZN6S670C53v49Ev();
extern void _ZN6S670C53v50Ev();
extern void _ZN6S670C53v51Ev();
extern void _ZN6S670C53v52Ev();
extern void _ZN6S670C53v53Ev();
extern void _ZN6S670C53v54Ev();
extern void _ZN6S670C53v55Ev();
extern void _ZN6S670C53v56Ev();
extern void _ZN6S670C53v57Ev();
extern void _ZN6S670C53v58Ev();
extern void _ZN6S670C53v59Ev();
extern void _ZN6S670C53v60Ev();
extern void _ZN6S670C53v61Ev();
extern void _ZN6S670C53v62Ev();
extern void _ZN6S670C53v63Ev();
extern void _ZN6S670C53v64Ev();
extern void _ZN6S670C53v65Ev();
extern void _ZN6S670C53v66Ev();
extern void _ZN6S670C53v67Ev();
extern void _ZN6S670C53v68Ev();
extern void _ZN6S670C53v69Ev();
extern void _ZN6S670C43v70Ev();
extern void _ZN6S670C43v71Ev();
extern void _ZN6S670C43v72Ev();
extern void _ZN6S670C43v73Ev();
extern void _ZN6S670C43v74Ev();
extern void _ZN6S670C43v75Ev();
extern void _ZN6S670C43v76Ev();
extern void _ZN6S670C43v77Ev();
extern void _ZN6S670C43v78Ev();
extern void _ZN6S670C43v79Ev();
extern void _ZN6S670C43v80Ev();
extern void _ZN6S670C43v81Ev();
extern void _ZN6S670C43v82Ev();
extern void _ZN6S670C43v83Ev();
extern void _ZN6S670C43v84Ev();
extern void _ZN6S670C43v85Ev();
extern void _ZN6S670C43v86Ev();
extern void _ZN6S670C43v87Ev();
extern void _ZN6S670C43v88Ev();
extern void _ZN6S670C43v89Ev();
extern void _ZN6S670C43v90Ev();
extern void _ZN6S670C43v91Ev();
static  VTBL_ENTRY vtc_S670C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S670C4[0]),
  (VTBL_ENTRY)&_ZN6S670C4D1Ev,
  (VTBL_ENTRY)&_ZN6S670C4D0Ev,
  (VTBL_ENTRY)&_ZN6S670C52v6Ev,
  (VTBL_ENTRY)&_ZN6S670C52v7Ev,
  (VTBL_ENTRY)&_ZN6S670C52v8Ev,
  (VTBL_ENTRY)&_ZN6S670C52v9Ev,
  (VTBL_ENTRY)&_ZN6S670C53v10Ev,
  (VTBL_ENTRY)&_ZN6S670C53v11Ev,
  (VTBL_ENTRY)&_ZN6S670C53v12Ev,
  (VTBL_ENTRY)&_ZN6S670C53v13Ev,
  (VTBL_ENTRY)&_ZN6S670C53v14Ev,
  (VTBL_ENTRY)&_ZN6S670C53v15Ev,
  (VTBL_ENTRY)&_ZN6S670C53v16Ev,
  (VTBL_ENTRY)&_ZN6S670C53v17Ev,
  (VTBL_ENTRY)&_ZN6S670C53v18Ev,
  (VTBL_ENTRY)&_ZN6S670C53v19Ev,
  (VTBL_ENTRY)&_ZN6S670C53v20Ev,
  (VTBL_ENTRY)&_ZN6S670C53v21Ev,
  (VTBL_ENTRY)&_ZN6S670C53v22Ev,
  (VTBL_ENTRY)&_ZN6S670C53v23Ev,
  (VTBL_ENTRY)&_ZN6S670C53v24Ev,
  (VTBL_ENTRY)&_ZN6S670C53v25Ev,
  (VTBL_ENTRY)&_ZN6S670C53v26Ev,
  (VTBL_ENTRY)&_ZN6S670C53v27Ev,
  (VTBL_ENTRY)&_ZN6S670C53v28Ev,
  (VTBL_ENTRY)&_ZN6S670C53v29Ev,
  (VTBL_ENTRY)&_ZN6S670C53v30Ev,
  (VTBL_ENTRY)&_ZN6S670C53v31Ev,
  (VTBL_ENTRY)&_ZN6S670C53v32Ev,
  (VTBL_ENTRY)&_ZN6S670C53v33Ev,
  (VTBL_ENTRY)&_ZN6S670C53v34Ev,
  (VTBL_ENTRY)&_ZN6S670C53v35Ev,
  (VTBL_ENTRY)&_ZN6S670C53v36Ev,
  (VTBL_ENTRY)&_ZN6S670C53v37Ev,
  (VTBL_ENTRY)&_ZN6S670C53v38Ev,
  (VTBL_ENTRY)&_ZN6S670C53v39Ev,
  (VTBL_ENTRY)&_ZN6S670C53v40Ev,
  (VTBL_ENTRY)&_ZN6S670C53v41Ev,
  (VTBL_ENTRY)&_ZN6S670C53v42Ev,
  (VTBL_ENTRY)&_ZN6S670C53v43Ev,
  (VTBL_ENTRY)&_ZN6S670C53v44Ev,
  (VTBL_ENTRY)&_ZN6S670C53v45Ev,
  (VTBL_ENTRY)&_ZN6S670C53v46Ev,
  (VTBL_ENTRY)&_ZN6S670C53v47Ev,
  (VTBL_ENTRY)&_ZN6S670C53v48Ev,
  (VTBL_ENTRY)&_ZN6S670C53v49Ev,
  (VTBL_ENTRY)&_ZN6S670C53v50Ev,
  (VTBL_ENTRY)&_ZN6S670C53v51Ev,
  (VTBL_ENTRY)&_ZN6S670C53v52Ev,
  (VTBL_ENTRY)&_ZN6S670C53v53Ev,
  (VTBL_ENTRY)&_ZN6S670C53v54Ev,
  (VTBL_ENTRY)&_ZN6S670C53v55Ev,
  (VTBL_ENTRY)&_ZN6S670C53v56Ev,
  (VTBL_ENTRY)&_ZN6S670C53v57Ev,
  (VTBL_ENTRY)&_ZN6S670C53v58Ev,
  (VTBL_ENTRY)&_ZN6S670C53v59Ev,
  (VTBL_ENTRY)&_ZN6S670C53v60Ev,
  (VTBL_ENTRY)&_ZN6S670C53v61Ev,
  (VTBL_ENTRY)&_ZN6S670C53v62Ev,
  (VTBL_ENTRY)&_ZN6S670C53v63Ev,
  (VTBL_ENTRY)&_ZN6S670C53v64Ev,
  (VTBL_ENTRY)&_ZN6S670C53v65Ev,
  (VTBL_ENTRY)&_ZN6S670C53v66Ev,
  (VTBL_ENTRY)&_ZN6S670C53v67Ev,
  (VTBL_ENTRY)&_ZN6S670C53v68Ev,
  (VTBL_ENTRY)&_ZN6S670C53v69Ev,
  (VTBL_ENTRY)&_ZN6S670C43v70Ev,
  (VTBL_ENTRY)&_ZN6S670C43v71Ev,
  (VTBL_ENTRY)&_ZN6S670C43v72Ev,
  (VTBL_ENTRY)&_ZN6S670C43v73Ev,
  (VTBL_ENTRY)&_ZN6S670C43v74Ev,
  (VTBL_ENTRY)&_ZN6S670C43v75Ev,
  (VTBL_ENTRY)&_ZN6S670C43v76Ev,
  (VTBL_ENTRY)&_ZN6S670C43v77Ev,
  (VTBL_ENTRY)&_ZN6S670C43v78Ev,
  (VTBL_ENTRY)&_ZN6S670C43v79Ev,
  (VTBL_ENTRY)&_ZN6S670C43v80Ev,
  (VTBL_ENTRY)&_ZN6S670C43v81Ev,
  (VTBL_ENTRY)&_ZN6S670C43v82Ev,
  (VTBL_ENTRY)&_ZN6S670C43v83Ev,
  (VTBL_ENTRY)&_ZN6S670C43v84Ev,
  (VTBL_ENTRY)&_ZN6S670C43v85Ev,
  (VTBL_ENTRY)&_ZN6S670C43v86Ev,
  (VTBL_ENTRY)&_ZN6S670C43v87Ev,
  (VTBL_ENTRY)&_ZN6S670C43v88Ev,
  (VTBL_ENTRY)&_ZN6S670C43v89Ev,
  (VTBL_ENTRY)&_ZN6S670C43v90Ev,
  (VTBL_ENTRY)&_ZN6S670C43v91Ev,
};
extern VTBL_ENTRY _ZTI6S670C4[];
extern  VTBL_ENTRY _ZTV6S670C4[];
Class_Descriptor cd_S670C4 = {  "S670C4", // class name
  bases_S670C4, 1,
  &(vtc_S670C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S670C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S670C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S670C3  : S670C4 {
  ::S473C6_nt s670c3f0;
  virtual  ~S670C3(); // _ZN6S670C3D1Ev
  virtual void  v92(); // _ZN6S670C33v92Ev
  virtual void  v93(); // _ZN6S670C33v93Ev
  virtual void  v94(); // _ZN6S670C33v94Ev
  virtual void  v95(); // _ZN6S670C33v95Ev
  virtual void  v96(); // _ZN6S670C33v96Ev
  virtual void  v97(); // _ZN6S670C33v97Ev
  virtual void  v98(); // _ZN6S670C33v98Ev
  virtual void  v99(); // _ZN6S670C33v99Ev
  virtual void  v100(); // _ZN6S670C34v100Ev
  virtual void  v101(); // _ZN6S670C34v101Ev
  virtual void  v102(); // _ZN6S670C34v102Ev
  virtual void  v103(); // _ZN6S670C34v103Ev
  virtual void  v104(); // _ZN6S670C34v104Ev
  virtual void  v105(); // _ZN6S670C34v105Ev
  virtual void  v106(); // _ZN6S670C34v106Ev
  virtual void  v107(); // _ZN6S670C34v107Ev
  virtual void  v108(); // _ZN6S670C34v108Ev
  virtual void  v109(); // _ZN6S670C34v109Ev
  virtual void  v110(); // _ZN6S670C34v110Ev
  S670C3(); // tgen
};
//SIG(-1 S670C3) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S670C3 ::~S670C3(){ note_dtor("S670C3", this);}
void  S670C3 ::v92(){vfunc_called(this, "_ZN6S670C33v92Ev");}
void  S670C3 ::v93(){vfunc_called(this, "_ZN6S670C33v93Ev");}
void  S670C3 ::v94(){vfunc_called(this, "_ZN6S670C33v94Ev");}
void  S670C3 ::v95(){vfunc_called(this, "_ZN6S670C33v95Ev");}
void  S670C3 ::v96(){vfunc_called(this, "_ZN6S670C33v96Ev");}
void  S670C3 ::v97(){vfunc_called(this, "_ZN6S670C33v97Ev");}
void  S670C3 ::v98(){vfunc_called(this, "_ZN6S670C33v98Ev");}
void  S670C3 ::v99(){vfunc_called(this, "_ZN6S670C33v99Ev");}
void  S670C3 ::v100(){vfunc_called(this, "_ZN6S670C34v100Ev");}
void  S670C3 ::v101(){vfunc_called(this, "_ZN6S670C34v101Ev");}
void  S670C3 ::v102(){vfunc_called(this, "_ZN6S670C34v102Ev");}
void  S670C3 ::v103(){vfunc_called(this, "_ZN6S670C34v103Ev");}
void  S670C3 ::v104(){vfunc_called(this, "_ZN6S670C34v104Ev");}
void  S670C3 ::v105(){vfunc_called(this, "_ZN6S670C34v105Ev");}
void  S670C3 ::v106(){vfunc_called(this, "_ZN6S670C34v106Ev");}
void  S670C3 ::v107(){vfunc_called(this, "_ZN6S670C34v107Ev");}
void  S670C3 ::v108(){vfunc_called(this, "_ZN6S670C34v108Ev");}
void  S670C3 ::v109(){vfunc_called(this, "_ZN6S670C34v109Ev");}
void  S670C3 ::v110(){vfunc_called(this, "_ZN6S670C34v110Ev");}
S670C3 ::S670C3(){ note_ctor("S670C3", this);} // tgen

static void Test_S670C3()
{
  extern Class_Descriptor cd_S670C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S670C3, buf);
    S670C3 *dp, &lv = *(dp=new (buf) S670C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S670C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S670C3)");
    check_base_class_offset(lv, (S670C5*)(S670C4*), 0, "S670C3");
    check_base_class_offset(lv, (S670C4*), 0, "S670C3");
    check_field_offset(lv, s670c3f0, ABISELECT(188,132), "S670C3.s670c3f0");
    test_class_info(&lv, &cd_S670C3);
    dp->~S670C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS670C3(Test_S670C3, "S670C3", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN6S670C3C1Ev();
extern void _ZN6S670C3D1Ev();
Name_Map name_map_S670C3[] = {
  NSPAIR(_ZN6S670C3C1Ev),
  NSPAIR(_ZN6S670C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S670C5;
extern VTBL_ENTRY _ZTI6S670C5[];
extern  VTBL_ENTRY _ZTV6S670C5[];
extern Class_Descriptor cd_S670C4;
extern VTBL_ENTRY _ZTI6S670C4[];
extern  VTBL_ENTRY _ZTV6S670C4[];
static Base_Class bases_S670C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S670C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S670C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S670C3[];
extern void _ZN6S670C3D1Ev();
extern void _ZN6S670C3D0Ev();
extern void _ZN6S670C52v6Ev();
extern void _ZN6S670C52v7Ev();
extern void _ZN6S670C52v8Ev();
extern void _ZN6S670C52v9Ev();
extern void _ZN6S670C53v10Ev();
extern void _ZN6S670C53v11Ev();
extern void _ZN6S670C53v12Ev();
extern void _ZN6S670C53v13Ev();
extern void _ZN6S670C53v14Ev();
extern void _ZN6S670C53v15Ev();
extern void _ZN6S670C53v16Ev();
extern void _ZN6S670C53v17Ev();
extern void _ZN6S670C53v18Ev();
extern void _ZN6S670C53v19Ev();
extern void _ZN6S670C53v20Ev();
extern void _ZN6S670C53v21Ev();
extern void _ZN6S670C53v22Ev();
extern void _ZN6S670C53v23Ev();
extern void _ZN6S670C53v24Ev();
extern void _ZN6S670C53v25Ev();
extern void _ZN6S670C53v26Ev();
extern void _ZN6S670C53v27Ev();
extern void _ZN6S670C53v28Ev();
extern void _ZN6S670C53v29Ev();
extern void _ZN6S670C53v30Ev();
extern void _ZN6S670C53v31Ev();
extern void _ZN6S670C53v32Ev();
extern void _ZN6S670C53v33Ev();
extern void _ZN6S670C53v34Ev();
extern void _ZN6S670C53v35Ev();
extern void _ZN6S670C53v36Ev();
extern void _ZN6S670C53v37Ev();
extern void _ZN6S670C53v38Ev();
extern void _ZN6S670C53v39Ev();
extern void _ZN6S670C53v40Ev();
extern void _ZN6S670C53v41Ev();
extern void _ZN6S670C53v42Ev();
extern void _ZN6S670C53v43Ev();
extern void _ZN6S670C53v44Ev();
extern void _ZN6S670C53v45Ev();
extern void _ZN6S670C53v46Ev();
extern void _ZN6S670C53v47Ev();
extern void _ZN6S670C53v48Ev();
extern void _ZN6S670C53v49Ev();
extern void _ZN6S670C53v50Ev();
extern void _ZN6S670C53v51Ev();
extern void _ZN6S670C53v52Ev();
extern void _ZN6S670C53v53Ev();
extern void _ZN6S670C53v54Ev();
extern void _ZN6S670C53v55Ev();
extern void _ZN6S670C53v56Ev();
extern void _ZN6S670C53v57Ev();
extern void _ZN6S670C53v58Ev();
extern void _ZN6S670C53v59Ev();
extern void _ZN6S670C53v60Ev();
extern void _ZN6S670C53v61Ev();
extern void _ZN6S670C53v62Ev();
extern void _ZN6S670C53v63Ev();
extern void _ZN6S670C53v64Ev();
extern void _ZN6S670C53v65Ev();
extern void _ZN6S670C53v66Ev();
extern void _ZN6S670C53v67Ev();
extern void _ZN6S670C53v68Ev();
extern void _ZN6S670C53v69Ev();
extern void _ZN6S670C43v70Ev();
extern void _ZN6S670C43v71Ev();
extern void _ZN6S670C43v72Ev();
extern void _ZN6S670C43v73Ev();
extern void _ZN6S670C43v74Ev();
extern void _ZN6S670C43v75Ev();
extern void _ZN6S670C43v76Ev();
extern void _ZN6S670C43v77Ev();
extern void _ZN6S670C43v78Ev();
extern void _ZN6S670C43v79Ev();
extern void _ZN6S670C43v80Ev();
extern void _ZN6S670C43v81Ev();
extern void _ZN6S670C43v82Ev();
extern void _ZN6S670C43v83Ev();
extern void _ZN6S670C43v84Ev();
extern void _ZN6S670C43v85Ev();
extern void _ZN6S670C43v86Ev();
extern void _ZN6S670C43v87Ev();
extern void _ZN6S670C43v88Ev();
extern void _ZN6S670C43v89Ev();
extern void _ZN6S670C43v90Ev();
extern void _ZN6S670C43v91Ev();
extern void _ZN6S670C33v92Ev();
extern void _ZN6S670C33v93Ev();
extern void _ZN6S670C33v94Ev();
extern void _ZN6S670C33v95Ev();
extern void _ZN6S670C33v96Ev();
extern void _ZN6S670C33v97Ev();
extern void _ZN6S670C33v98Ev();
extern void _ZN6S670C33v99Ev();
extern void _ZN6S670C34v100Ev();
extern void _ZN6S670C34v101Ev();
extern void _ZN6S670C34v102Ev();
extern void _ZN6S670C34v103Ev();
extern void _ZN6S670C34v104Ev();
extern void _ZN6S670C34v105Ev();
extern void _ZN6S670C34v106Ev();
extern void _ZN6S670C34v107Ev();
extern void _ZN6S670C34v108Ev();
extern void _ZN6S670C34v109Ev();
extern void _ZN6S670C34v110Ev();
static  VTBL_ENTRY vtc_S670C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S670C3[0]),
  (VTBL_ENTRY)&_ZN6S670C3D1Ev,
  (VTBL_ENTRY)&_ZN6S670C3D0Ev,
  (VTBL_ENTRY)&_ZN6S670C52v6Ev,
  (VTBL_ENTRY)&_ZN6S670C52v7Ev,
  (VTBL_ENTRY)&_ZN6S670C52v8Ev,
  (VTBL_ENTRY)&_ZN6S670C52v9Ev,
  (VTBL_ENTRY)&_ZN6S670C53v10Ev,
  (VTBL_ENTRY)&_ZN6S670C53v11Ev,
  (VTBL_ENTRY)&_ZN6S670C53v12Ev,
  (VTBL_ENTRY)&_ZN6S670C53v13Ev,
  (VTBL_ENTRY)&_ZN6S670C53v14Ev,
  (VTBL_ENTRY)&_ZN6S670C53v15Ev,
  (VTBL_ENTRY)&_ZN6S670C53v16Ev,
  (VTBL_ENTRY)&_ZN6S670C53v17Ev,
  (VTBL_ENTRY)&_ZN6S670C53v18Ev,
  (VTBL_ENTRY)&_ZN6S670C53v19Ev,
  (VTBL_ENTRY)&_ZN6S670C53v20Ev,
  (VTBL_ENTRY)&_ZN6S670C53v21Ev,
  (VTBL_ENTRY)&_ZN6S670C53v22Ev,
  (VTBL_ENTRY)&_ZN6S670C53v23Ev,
  (VTBL_ENTRY)&_ZN6S670C53v24Ev,
  (VTBL_ENTRY)&_ZN6S670C53v25Ev,
  (VTBL_ENTRY)&_ZN6S670C53v26Ev,
  (VTBL_ENTRY)&_ZN6S670C53v27Ev,
  (VTBL_ENTRY)&_ZN6S670C53v28Ev,
  (VTBL_ENTRY)&_ZN6S670C53v29Ev,
  (VTBL_ENTRY)&_ZN6S670C53v30Ev,
  (VTBL_ENTRY)&_ZN6S670C53v31Ev,
  (VTBL_ENTRY)&_ZN6S670C53v32Ev,
  (VTBL_ENTRY)&_ZN6S670C53v33Ev,
  (VTBL_ENTRY)&_ZN6S670C53v34Ev,
  (VTBL_ENTRY)&_ZN6S670C53v35Ev,
  (VTBL_ENTRY)&_ZN6S670C53v36Ev,
  (VTBL_ENTRY)&_ZN6S670C53v37Ev,
  (VTBL_ENTRY)&_ZN6S670C53v38Ev,
  (VTBL_ENTRY)&_ZN6S670C53v39Ev,
  (VTBL_ENTRY)&_ZN6S670C53v40Ev,
  (VTBL_ENTRY)&_ZN6S670C53v41Ev,
  (VTBL_ENTRY)&_ZN6S670C53v42Ev,
  (VTBL_ENTRY)&_ZN6S670C53v43Ev,
  (VTBL_ENTRY)&_ZN6S670C53v44Ev,
  (VTBL_ENTRY)&_ZN6S670C53v45Ev,
  (VTBL_ENTRY)&_ZN6S670C53v46Ev,
  (VTBL_ENTRY)&_ZN6S670C53v47Ev,
  (VTBL_ENTRY)&_ZN6S670C53v48Ev,
  (VTBL_ENTRY)&_ZN6S670C53v49Ev,
  (VTBL_ENTRY)&_ZN6S670C53v50Ev,
  (VTBL_ENTRY)&_ZN6S670C53v51Ev,
  (VTBL_ENTRY)&_ZN6S670C53v52Ev,
  (VTBL_ENTRY)&_ZN6S670C53v53Ev,
  (VTBL_ENTRY)&_ZN6S670C53v54Ev,
  (VTBL_ENTRY)&_ZN6S670C53v55Ev,
  (VTBL_ENTRY)&_ZN6S670C53v56Ev,
  (VTBL_ENTRY)&_ZN6S670C53v57Ev,
  (VTBL_ENTRY)&_ZN6S670C53v58Ev,
  (VTBL_ENTRY)&_ZN6S670C53v59Ev,
  (VTBL_ENTRY)&_ZN6S670C53v60Ev,
  (VTBL_ENTRY)&_ZN6S670C53v61Ev,
  (VTBL_ENTRY)&_ZN6S670C53v62Ev,
  (VTBL_ENTRY)&_ZN6S670C53v63Ev,
  (VTBL_ENTRY)&_ZN6S670C53v64Ev,
  (VTBL_ENTRY)&_ZN6S670C53v65Ev,
  (VTBL_ENTRY)&_ZN6S670C53v66Ev,
  (VTBL_ENTRY)&_ZN6S670C53v67Ev,
  (VTBL_ENTRY)&_ZN6S670C53v68Ev,
  (VTBL_ENTRY)&_ZN6S670C53v69Ev,
  (VTBL_ENTRY)&_ZN6S670C43v70Ev,
  (VTBL_ENTRY)&_ZN6S670C43v71Ev,
  (VTBL_ENTRY)&_ZN6S670C43v72Ev,
  (VTBL_ENTRY)&_ZN6S670C43v73Ev,
  (VTBL_ENTRY)&_ZN6S670C43v74Ev,
  (VTBL_ENTRY)&_ZN6S670C43v75Ev,
  (VTBL_ENTRY)&_ZN6S670C43v76Ev,
  (VTBL_ENTRY)&_ZN6S670C43v77Ev,
  (VTBL_ENTRY)&_ZN6S670C43v78Ev,
  (VTBL_ENTRY)&_ZN6S670C43v79Ev,
  (VTBL_ENTRY)&_ZN6S670C43v80Ev,
  (VTBL_ENTRY)&_ZN6S670C43v81Ev,
  (VTBL_ENTRY)&_ZN6S670C43v82Ev,
  (VTBL_ENTRY)&_ZN6S670C43v83Ev,
  (VTBL_ENTRY)&_ZN6S670C43v84Ev,
  (VTBL_ENTRY)&_ZN6S670C43v85Ev,
  (VTBL_ENTRY)&_ZN6S670C43v86Ev,
  (VTBL_ENTRY)&_ZN6S670C43v87Ev,
  (VTBL_ENTRY)&_ZN6S670C43v88Ev,
  (VTBL_ENTRY)&_ZN6S670C43v89Ev,
  (VTBL_ENTRY)&_ZN6S670C43v90Ev,
  (VTBL_ENTRY)&_ZN6S670C43v91Ev,
  (VTBL_ENTRY)&_ZN6S670C33v92Ev,
  (VTBL_ENTRY)&_ZN6S670C33v93Ev,
  (VTBL_ENTRY)&_ZN6S670C33v94Ev,
  (VTBL_ENTRY)&_ZN6S670C33v95Ev,
  (VTBL_ENTRY)&_ZN6S670C33v96Ev,
  (VTBL_ENTRY)&_ZN6S670C33v97Ev,
  (VTBL_ENTRY)&_ZN6S670C33v98Ev,
  (VTBL_ENTRY)&_ZN6S670C33v99Ev,
  (VTBL_ENTRY)&_ZN6S670C34v100Ev,
  (VTBL_ENTRY)&_ZN6S670C34v101Ev,
  (VTBL_ENTRY)&_ZN6S670C34v102Ev,
  (VTBL_ENTRY)&_ZN6S670C34v103Ev,
  (VTBL_ENTRY)&_ZN6S670C34v104Ev,
  (VTBL_ENTRY)&_ZN6S670C34v105Ev,
  (VTBL_ENTRY)&_ZN6S670C34v106Ev,
  (VTBL_ENTRY)&_ZN6S670C34v107Ev,
  (VTBL_ENTRY)&_ZN6S670C34v108Ev,
  (VTBL_ENTRY)&_ZN6S670C34v109Ev,
  (VTBL_ENTRY)&_ZN6S670C34v110Ev,
};
extern VTBL_ENTRY _ZTI6S670C3[];
extern  VTBL_ENTRY _ZTV6S670C3[];
Class_Descriptor cd_S670C3 = {  "S670C3", // class name
  bases_S670C3, 2,
  &(vtc_S670C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI6S670C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S670C3),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S670C2  : S670C3 {
  int s670c2f0;
  virtual  ~S670C2(); // _ZN6S670C2D1Ev
  virtual void  v111(); // _ZN6S670C24v111Ev
  virtual void  v112(); // _ZN6S670C24v112Ev
  virtual void  v113(); // _ZN6S670C24v113Ev
  virtual void  v114(); // _ZN6S670C24v114Ev
  virtual void  v115(); // _ZN6S670C24v115Ev
  virtual void  v116(); // _ZN6S670C24v116Ev
  virtual void  v117(); // _ZN6S670C24v117Ev
  S670C2(); // tgen
};
//SIG(-1 S670C2) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 FC5} vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S670C2 ::~S670C2(){ note_dtor("S670C2", this);}
void  S670C2 ::v111(){vfunc_called(this, "_ZN6S670C24v111Ev");}
void  S670C2 ::v112(){vfunc_called(this, "_ZN6S670C24v112Ev");}
void  S670C2 ::v113(){vfunc_called(this, "_ZN6S670C24v113Ev");}
void  S670C2 ::v114(){vfunc_called(this, "_ZN6S670C24v114Ev");}
void  S670C2 ::v115(){vfunc_called(this, "_ZN6S670C24v115Ev");}
void  S670C2 ::v116(){vfunc_called(this, "_ZN6S670C24v116Ev");}
void  S670C2 ::v117(){vfunc_called(this, "_ZN6S670C24v117Ev");}
S670C2 ::S670C2(){ note_ctor("S670C2", this);} // tgen

static void Test_S670C2()
{
  extern Class_Descriptor cd_S670C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S670C2, buf);
    S670C2 *dp, &lv = *(dp=new (buf) S670C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S670C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S670C2)");
    check_base_class_offset(lv, (S670C5*)(S670C4*)(S670C3*), 0, "S670C2");
    check_base_class_offset(lv, (S670C4*)(S670C3*), 0, "S670C2");
    check_base_class_offset(lv, (S670C3*), 0, "S670C2");
    check_field_offset(lv, s670c2f0, ABISELECT(196,140), "S670C2.s670c2f0");
    test_class_info(&lv, &cd_S670C2);
    dp->~S670C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS670C2(Test_S670C2, "S670C2", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN6S670C2C1Ev();
extern void _ZN6S670C2D1Ev();
Name_Map name_map_S670C2[] = {
  NSPAIR(_ZN6S670C2C1Ev),
  NSPAIR(_ZN6S670C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S670C5;
extern VTBL_ENTRY _ZTI6S670C5[];
extern  VTBL_ENTRY _ZTV6S670C5[];
extern Class_Descriptor cd_S670C4;
extern VTBL_ENTRY _ZTI6S670C4[];
extern  VTBL_ENTRY _ZTV6S670C4[];
extern Class_Descriptor cd_S670C3;
extern VTBL_ENTRY _ZTI6S670C3[];
extern  VTBL_ENTRY _ZTV6S670C3[];
static Base_Class bases_S670C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S670C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S670C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S670C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S670C2[];
extern void _ZN6S670C2D1Ev();
extern void _ZN6S670C2D0Ev();
extern void _ZN6S670C52v6Ev();
extern void _ZN6S670C52v7Ev();
extern void _ZN6S670C52v8Ev();
extern void _ZN6S670C52v9Ev();
extern void _ZN6S670C53v10Ev();
extern void _ZN6S670C53v11Ev();
extern void _ZN6S670C53v12Ev();
extern void _ZN6S670C53v13Ev();
extern void _ZN6S670C53v14Ev();
extern void _ZN6S670C53v15Ev();
extern void _ZN6S670C53v16Ev();
extern void _ZN6S670C53v17Ev();
extern void _ZN6S670C53v18Ev();
extern void _ZN6S670C53v19Ev();
extern void _ZN6S670C53v20Ev();
extern void _ZN6S670C53v21Ev();
extern void _ZN6S670C53v22Ev();
extern void _ZN6S670C53v23Ev();
extern void _ZN6S670C53v24Ev();
extern void _ZN6S670C53v25Ev();
extern void _ZN6S670C53v26Ev();
extern void _ZN6S670C53v27Ev();
extern void _ZN6S670C53v28Ev();
extern void _ZN6S670C53v29Ev();
extern void _ZN6S670C53v30Ev();
extern void _ZN6S670C53v31Ev();
extern void _ZN6S670C53v32Ev();
extern void _ZN6S670C53v33Ev();
extern void _ZN6S670C53v34Ev();
extern void _ZN6S670C53v35Ev();
extern void _ZN6S670C53v36Ev();
extern void _ZN6S670C53v37Ev();
extern void _ZN6S670C53v38Ev();
extern void _ZN6S670C53v39Ev();
extern void _ZN6S670C53v40Ev();
extern void _ZN6S670C53v41Ev();
extern void _ZN6S670C53v42Ev();
extern void _ZN6S670C53v43Ev();
extern void _ZN6S670C53v44Ev();
extern void _ZN6S670C53v45Ev();
extern void _ZN6S670C53v46Ev();
extern void _ZN6S670C53v47Ev();
extern void _ZN6S670C53v48Ev();
extern void _ZN6S670C53v49Ev();
extern void _ZN6S670C53v50Ev();
extern void _ZN6S670C53v51Ev();
extern void _ZN6S670C53v52Ev();
extern void _ZN6S670C53v53Ev();
extern void _ZN6S670C53v54Ev();
extern void _ZN6S670C53v55Ev();
extern void _ZN6S670C53v56Ev();
extern void _ZN6S670C53v57Ev();
extern void _ZN6S670C53v58Ev();
extern void _ZN6S670C53v59Ev();
extern void _ZN6S670C53v60Ev();
extern void _ZN6S670C53v61Ev();
extern void _ZN6S670C53v62Ev();
extern void _ZN6S670C53v63Ev();
extern void _ZN6S670C53v64Ev();
extern void _ZN6S670C53v65Ev();
extern void _ZN6S670C53v66Ev();
extern void _ZN6S670C53v67Ev();
extern void _ZN6S670C53v68Ev();
extern void _ZN6S670C53v69Ev();
extern void _ZN6S670C43v70Ev();
extern void _ZN6S670C43v71Ev();
extern void _ZN6S670C43v72Ev();
extern void _ZN6S670C43v73Ev();
extern void _ZN6S670C43v74Ev();
extern void _ZN6S670C43v75Ev();
extern void _ZN6S670C43v76Ev();
extern void _ZN6S670C43v77Ev();
extern void _ZN6S670C43v78Ev();
extern void _ZN6S670C43v79Ev();
extern void _ZN6S670C43v80Ev();
extern void _ZN6S670C43v81Ev();
extern void _ZN6S670C43v82Ev();
extern void _ZN6S670C43v83Ev();
extern void _ZN6S670C43v84Ev();
extern void _ZN6S670C43v85Ev();
extern void _ZN6S670C43v86Ev();
extern void _ZN6S670C43v87Ev();
extern void _ZN6S670C43v88Ev();
extern void _ZN6S670C43v89Ev();
extern void _ZN6S670C43v90Ev();
extern void _ZN6S670C43v91Ev();
extern void _ZN6S670C33v92Ev();
extern void _ZN6S670C33v93Ev();
extern void _ZN6S670C33v94Ev();
extern void _ZN6S670C33v95Ev();
extern void _ZN6S670C33v96Ev();
extern void _ZN6S670C33v97Ev();
extern void _ZN6S670C33v98Ev();
extern void _ZN6S670C33v99Ev();
extern void _ZN6S670C34v100Ev();
extern void _ZN6S670C34v101Ev();
extern void _ZN6S670C34v102Ev();
extern void _ZN6S670C34v103Ev();
extern void _ZN6S670C34v104Ev();
extern void _ZN6S670C34v105Ev();
extern void _ZN6S670C34v106Ev();
extern void _ZN6S670C34v107Ev();
extern void _ZN6S670C34v108Ev();
extern void _ZN6S670C34v109Ev();
extern void _ZN6S670C34v110Ev();
extern void _ZN6S670C24v111Ev();
extern void _ZN6S670C24v112Ev();
extern void _ZN6S670C24v113Ev();
extern void _ZN6S670C24v114Ev();
extern void _ZN6S670C24v115Ev();
extern void _ZN6S670C24v116Ev();
extern void _ZN6S670C24v117Ev();
static  VTBL_ENTRY vtc_S670C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S670C2[0]),
  (VTBL_ENTRY)&_ZN6S670C2D1Ev,
  (VTBL_ENTRY)&_ZN6S670C2D0Ev,
  (VTBL_ENTRY)&_ZN6S670C52v6Ev,
  (VTBL_ENTRY)&_ZN6S670C52v7Ev,
  (VTBL_ENTRY)&_ZN6S670C52v8Ev,
  (VTBL_ENTRY)&_ZN6S670C52v9Ev,
  (VTBL_ENTRY)&_ZN6S670C53v10Ev,
  (VTBL_ENTRY)&_ZN6S670C53v11Ev,
  (VTBL_ENTRY)&_ZN6S670C53v12Ev,
  (VTBL_ENTRY)&_ZN6S670C53v13Ev,
  (VTBL_ENTRY)&_ZN6S670C53v14Ev,
  (VTBL_ENTRY)&_ZN6S670C53v15Ev,
  (VTBL_ENTRY)&_ZN6S670C53v16Ev,
  (VTBL_ENTRY)&_ZN6S670C53v17Ev,
  (VTBL_ENTRY)&_ZN6S670C53v18Ev,
  (VTBL_ENTRY)&_ZN6S670C53v19Ev,
  (VTBL_ENTRY)&_ZN6S670C53v20Ev,
  (VTBL_ENTRY)&_ZN6S670C53v21Ev,
  (VTBL_ENTRY)&_ZN6S670C53v22Ev,
  (VTBL_ENTRY)&_ZN6S670C53v23Ev,
  (VTBL_ENTRY)&_ZN6S670C53v24Ev,
  (VTBL_ENTRY)&_ZN6S670C53v25Ev,
  (VTBL_ENTRY)&_ZN6S670C53v26Ev,
  (VTBL_ENTRY)&_ZN6S670C53v27Ev,
  (VTBL_ENTRY)&_ZN6S670C53v28Ev,
  (VTBL_ENTRY)&_ZN6S670C53v29Ev,
  (VTBL_ENTRY)&_ZN6S670C53v30Ev,
  (VTBL_ENTRY)&_ZN6S670C53v31Ev,
  (VTBL_ENTRY)&_ZN6S670C53v32Ev,
  (VTBL_ENTRY)&_ZN6S670C53v33Ev,
  (VTBL_ENTRY)&_ZN6S670C53v34Ev,
  (VTBL_ENTRY)&_ZN6S670C53v35Ev,
  (VTBL_ENTRY)&_ZN6S670C53v36Ev,
  (VTBL_ENTRY)&_ZN6S670C53v37Ev,
  (VTBL_ENTRY)&_ZN6S670C53v38Ev,
  (VTBL_ENTRY)&_ZN6S670C53v39Ev,
  (VTBL_ENTRY)&_ZN6S670C53v40Ev,
  (VTBL_ENTRY)&_ZN6S670C53v41Ev,
  (VTBL_ENTRY)&_ZN6S670C53v42Ev,
  (VTBL_ENTRY)&_ZN6S670C53v43Ev,
  (VTBL_ENTRY)&_ZN6S670C53v44Ev,
  (VTBL_ENTRY)&_ZN6S670C53v45Ev,
  (VTBL_ENTRY)&_ZN6S670C53v46Ev,
  (VTBL_ENTRY)&_ZN6S670C53v47Ev,
  (VTBL_ENTRY)&_ZN6S670C53v48Ev,
  (VTBL_ENTRY)&_ZN6S670C53v49Ev,
  (VTBL_ENTRY)&_ZN6S670C53v50Ev,
  (VTBL_ENTRY)&_ZN6S670C53v51Ev,
  (VTBL_ENTRY)&_ZN6S670C53v52Ev,
  (VTBL_ENTRY)&_ZN6S670C53v53Ev,
  (VTBL_ENTRY)&_ZN6S670C53v54Ev,
  (VTBL_ENTRY)&_ZN6S670C53v55Ev,
  (VTBL_ENTRY)&_ZN6S670C53v56Ev,
  (VTBL_ENTRY)&_ZN6S670C53v57Ev,
  (VTBL_ENTRY)&_ZN6S670C53v58Ev,
  (VTBL_ENTRY)&_ZN6S670C53v59Ev,
  (VTBL_ENTRY)&_ZN6S670C53v60Ev,
  (VTBL_ENTRY)&_ZN6S670C53v61Ev,
  (VTBL_ENTRY)&_ZN6S670C53v62Ev,
  (VTBL_ENTRY)&_ZN6S670C53v63Ev,
  (VTBL_ENTRY)&_ZN6S670C53v64Ev,
  (VTBL_ENTRY)&_ZN6S670C53v65Ev,
  (VTBL_ENTRY)&_ZN6S670C53v66Ev,
  (VTBL_ENTRY)&_ZN6S670C53v67Ev,
  (VTBL_ENTRY)&_ZN6S670C53v68Ev,
  (VTBL_ENTRY)&_ZN6S670C53v69Ev,
  (VTBL_ENTRY)&_ZN6S670C43v70Ev,
  (VTBL_ENTRY)&_ZN6S670C43v71Ev,
  (VTBL_ENTRY)&_ZN6S670C43v72Ev,
  (VTBL_ENTRY)&_ZN6S670C43v73Ev,
  (VTBL_ENTRY)&_ZN6S670C43v74Ev,
  (VTBL_ENTRY)&_ZN6S670C43v75Ev,
  (VTBL_ENTRY)&_ZN6S670C43v76Ev,
  (VTBL_ENTRY)&_ZN6S670C43v77Ev,
  (VTBL_ENTRY)&_ZN6S670C43v78Ev,
  (VTBL_ENTRY)&_ZN6S670C43v79Ev,
  (VTBL_ENTRY)&_ZN6S670C43v80Ev,
  (VTBL_ENTRY)&_ZN6S670C43v81Ev,
  (VTBL_ENTRY)&_ZN6S670C43v82Ev,
  (VTBL_ENTRY)&_ZN6S670C43v83Ev,
  (VTBL_ENTRY)&_ZN6S670C43v84Ev,
  (VTBL_ENTRY)&_ZN6S670C43v85Ev,
  (VTBL_ENTRY)&_ZN6S670C43v86Ev,
  (VTBL_ENTRY)&_ZN6S670C43v87Ev,
  (VTBL_ENTRY)&_ZN6S670C43v88Ev,
  (VTBL_ENTRY)&_ZN6S670C43v89Ev,
  (VTBL_ENTRY)&_ZN6S670C43v90Ev,
  (VTBL_ENTRY)&_ZN6S670C43v91Ev,
  (VTBL_ENTRY)&_ZN6S670C33v92Ev,
  (VTBL_ENTRY)&_ZN6S670C33v93Ev,
  (VTBL_ENTRY)&_ZN6S670C33v94Ev,
  (VTBL_ENTRY)&_ZN6S670C33v95Ev,
  (VTBL_ENTRY)&_ZN6S670C33v96Ev,
  (VTBL_ENTRY)&_ZN6S670C33v97Ev,
  (VTBL_ENTRY)&_ZN6S670C33v98Ev,
  (VTBL_ENTRY)&_ZN6S670C33v99Ev,
  (VTBL_ENTRY)&_ZN6S670C34v100Ev,
  (VTBL_ENTRY)&_ZN6S670C34v101Ev,
  (VTBL_ENTRY)&_ZN6S670C34v102Ev,
  (VTBL_ENTRY)&_ZN6S670C34v103Ev,
  (VTBL_ENTRY)&_ZN6S670C34v104Ev,
  (VTBL_ENTRY)&_ZN6S670C34v105Ev,
  (VTBL_ENTRY)&_ZN6S670C34v106Ev,
  (VTBL_ENTRY)&_ZN6S670C34v107Ev,
  (VTBL_ENTRY)&_ZN6S670C34v108Ev,
  (VTBL_ENTRY)&_ZN6S670C34v109Ev,
  (VTBL_ENTRY)&_ZN6S670C34v110Ev,
  (VTBL_ENTRY)&_ZN6S670C24v111Ev,
  (VTBL_ENTRY)&_ZN6S670C24v112Ev,
  (VTBL_ENTRY)&_ZN6S670C24v113Ev,
  (VTBL_ENTRY)&_ZN6S670C24v114Ev,
  (VTBL_ENTRY)&_ZN6S670C24v115Ev,
  (VTBL_ENTRY)&_ZN6S670C24v116Ev,
  (VTBL_ENTRY)&_ZN6S670C24v117Ev,
};
extern VTBL_ENTRY _ZTI6S670C2[];
extern  VTBL_ENTRY _ZTV6S670C2[];
Class_Descriptor cd_S670C2 = {  "S670C2", // class name
  bases_S670C2, 3,
  &(vtc_S670C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI6S670C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S670C2),116, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S670C1  : S670C2 {
  int s670c1f0[2];
  virtual  ~S670C1(); // _ZN6S670C1D1Ev
  virtual void  v1(); // _ZN6S670C12v1Ev
  virtual void  v2(); // _ZN6S670C12v2Ev
  virtual void  v3(); // _ZN6S670C12v3Ev
  virtual void  v4(); // _ZN6S670C12v4Ev
  virtual void  v5(); // _ZN6S670C12v5Ev
  S670C1(); // tgen
};
//SIG(1 S670C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 FC6} vd v111 v112 v113 v114 v115 v116 v117 Fi} vd v1 v2 v3 v4 v5 Fi[2]}


 S670C1 ::~S670C1(){ note_dtor("S670C1", this);}
void  S670C1 ::v1(){vfunc_called(this, "_ZN6S670C12v1Ev");}
void  S670C1 ::v2(){vfunc_called(this, "_ZN6S670C12v2Ev");}
void  S670C1 ::v3(){vfunc_called(this, "_ZN6S670C12v3Ev");}
void  S670C1 ::v4(){vfunc_called(this, "_ZN6S670C12v4Ev");}
void  S670C1 ::v5(){vfunc_called(this, "_ZN6S670C12v5Ev");}
S670C1 ::S670C1(){ note_ctor("S670C1", this);} // tgen

static void Test_S670C1()
{
  extern Class_Descriptor cd_S670C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,39)];
    init_test(&cd_S670C1, buf);
    S670C1 *dp, &lv = *(dp=new (buf) S670C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,152), "sizeof(S670C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S670C1)");
    check_base_class_offset(lv, (S670C5*)(S670C4*)(S670C3*)(S670C2*), 0, "S670C1");
    check_base_class_offset(lv, (S670C4*)(S670C3*)(S670C2*), 0, "S670C1");
    check_base_class_offset(lv, (S670C3*)(S670C2*), 0, "S670C1");
    check_base_class_offset(lv, (S670C2*), 0, "S670C1");
    check_field_offset(lv, s670c1f0, ABISELECT(200,144), "S670C1.s670c1f0");
    test_class_info(&lv, &cd_S670C1);
    dp->~S670C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS670C1(Test_S670C1, "S670C1", ABISELECT(208,152));

#else // __cplusplus

extern void _ZN6S670C1C1Ev();
extern void _ZN6S670C1D1Ev();
Name_Map name_map_S670C1[] = {
  NSPAIR(_ZN6S670C1C1Ev),
  NSPAIR(_ZN6S670C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S670C5;
extern VTBL_ENTRY _ZTI6S670C5[];
extern  VTBL_ENTRY _ZTV6S670C5[];
extern Class_Descriptor cd_S670C4;
extern VTBL_ENTRY _ZTI6S670C4[];
extern  VTBL_ENTRY _ZTV6S670C4[];
extern Class_Descriptor cd_S670C3;
extern VTBL_ENTRY _ZTI6S670C3[];
extern  VTBL_ENTRY _ZTV6S670C3[];
extern Class_Descriptor cd_S670C2;
extern VTBL_ENTRY _ZTI6S670C2[];
extern  VTBL_ENTRY _ZTV6S670C2[];
static Base_Class bases_S670C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S670C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S670C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S670C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S670C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S670C1[];
extern void _ZN6S670C1D1Ev();
extern void _ZN6S670C1D0Ev();
extern void _ZN6S670C52v6Ev();
extern void _ZN6S670C52v7Ev();
extern void _ZN6S670C52v8Ev();
extern void _ZN6S670C52v9Ev();
extern void _ZN6S670C53v10Ev();
extern void _ZN6S670C53v11Ev();
extern void _ZN6S670C53v12Ev();
extern void _ZN6S670C53v13Ev();
extern void _ZN6S670C53v14Ev();
extern void _ZN6S670C53v15Ev();
extern void _ZN6S670C53v16Ev();
extern void _ZN6S670C53v17Ev();
extern void _ZN6S670C53v18Ev();
extern void _ZN6S670C53v19Ev();
extern void _ZN6S670C53v20Ev();
extern void _ZN6S670C53v21Ev();
extern void _ZN6S670C53v22Ev();
extern void _ZN6S670C53v23Ev();
extern void _ZN6S670C53v24Ev();
extern void _ZN6S670C53v25Ev();
extern void _ZN6S670C53v26Ev();
extern void _ZN6S670C53v27Ev();
extern void _ZN6S670C53v28Ev();
extern void _ZN6S670C53v29Ev();
extern void _ZN6S670C53v30Ev();
extern void _ZN6S670C53v31Ev();
extern void _ZN6S670C53v32Ev();
extern void _ZN6S670C53v33Ev();
extern void _ZN6S670C53v34Ev();
extern void _ZN6S670C53v35Ev();
extern void _ZN6S670C53v36Ev();
extern void _ZN6S670C53v37Ev();
extern void _ZN6S670C53v38Ev();
extern void _ZN6S670C53v39Ev();
extern void _ZN6S670C53v40Ev();
extern void _ZN6S670C53v41Ev();
extern void _ZN6S670C53v42Ev();
extern void _ZN6S670C53v43Ev();
extern void _ZN6S670C53v44Ev();
extern void _ZN6S670C53v45Ev();
extern void _ZN6S670C53v46Ev();
extern void _ZN6S670C53v47Ev();
extern void _ZN6S670C53v48Ev();
extern void _ZN6S670C53v49Ev();
extern void _ZN6S670C53v50Ev();
extern void _ZN6S670C53v51Ev();
extern void _ZN6S670C53v52Ev();
extern void _ZN6S670C53v53Ev();
extern void _ZN6S670C53v54Ev();
extern void _ZN6S670C53v55Ev();
extern void _ZN6S670C53v56Ev();
extern void _ZN6S670C53v57Ev();
extern void _ZN6S670C53v58Ev();
extern void _ZN6S670C53v59Ev();
extern void _ZN6S670C53v60Ev();
extern void _ZN6S670C53v61Ev();
extern void _ZN6S670C53v62Ev();
extern void _ZN6S670C53v63Ev();
extern void _ZN6S670C53v64Ev();
extern void _ZN6S670C53v65Ev();
extern void _ZN6S670C53v66Ev();
extern void _ZN6S670C53v67Ev();
extern void _ZN6S670C53v68Ev();
extern void _ZN6S670C53v69Ev();
extern void _ZN6S670C43v70Ev();
extern void _ZN6S670C43v71Ev();
extern void _ZN6S670C43v72Ev();
extern void _ZN6S670C43v73Ev();
extern void _ZN6S670C43v74Ev();
extern void _ZN6S670C43v75Ev();
extern void _ZN6S670C43v76Ev();
extern void _ZN6S670C43v77Ev();
extern void _ZN6S670C43v78Ev();
extern void _ZN6S670C43v79Ev();
extern void _ZN6S670C43v80Ev();
extern void _ZN6S670C43v81Ev();
extern void _ZN6S670C43v82Ev();
extern void _ZN6S670C43v83Ev();
extern void _ZN6S670C43v84Ev();
extern void _ZN6S670C43v85Ev();
extern void _ZN6S670C43v86Ev();
extern void _ZN6S670C43v87Ev();
extern void _ZN6S670C43v88Ev();
extern void _ZN6S670C43v89Ev();
extern void _ZN6S670C43v90Ev();
extern void _ZN6S670C43v91Ev();
extern void _ZN6S670C33v92Ev();
extern void _ZN6S670C33v93Ev();
extern void _ZN6S670C33v94Ev();
extern void _ZN6S670C33v95Ev();
extern void _ZN6S670C33v96Ev();
extern void _ZN6S670C33v97Ev();
extern void _ZN6S670C33v98Ev();
extern void _ZN6S670C33v99Ev();
extern void _ZN6S670C34v100Ev();
extern void _ZN6S670C34v101Ev();
extern void _ZN6S670C34v102Ev();
extern void _ZN6S670C34v103Ev();
extern void _ZN6S670C34v104Ev();
extern void _ZN6S670C34v105Ev();
extern void _ZN6S670C34v106Ev();
extern void _ZN6S670C34v107Ev();
extern void _ZN6S670C34v108Ev();
extern void _ZN6S670C34v109Ev();
extern void _ZN6S670C34v110Ev();
extern void _ZN6S670C24v111Ev();
extern void _ZN6S670C24v112Ev();
extern void _ZN6S670C24v113Ev();
extern void _ZN6S670C24v114Ev();
extern void _ZN6S670C24v115Ev();
extern void _ZN6S670C24v116Ev();
extern void _ZN6S670C24v117Ev();
extern void _ZN6S670C12v1Ev();
extern void _ZN6S670C12v2Ev();
extern void _ZN6S670C12v3Ev();
extern void _ZN6S670C12v4Ev();
extern void _ZN6S670C12v5Ev();
static  VTBL_ENTRY vtc_S670C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S670C1[0]),
  (VTBL_ENTRY)&_ZN6S670C1D1Ev,
  (VTBL_ENTRY)&_ZN6S670C1D0Ev,
  (VTBL_ENTRY)&_ZN6S670C52v6Ev,
  (VTBL_ENTRY)&_ZN6S670C52v7Ev,
  (VTBL_ENTRY)&_ZN6S670C52v8Ev,
  (VTBL_ENTRY)&_ZN6S670C52v9Ev,
  (VTBL_ENTRY)&_ZN6S670C53v10Ev,
  (VTBL_ENTRY)&_ZN6S670C53v11Ev,
  (VTBL_ENTRY)&_ZN6S670C53v12Ev,
  (VTBL_ENTRY)&_ZN6S670C53v13Ev,
  (VTBL_ENTRY)&_ZN6S670C53v14Ev,
  (VTBL_ENTRY)&_ZN6S670C53v15Ev,
  (VTBL_ENTRY)&_ZN6S670C53v16Ev,
  (VTBL_ENTRY)&_ZN6S670C53v17Ev,
  (VTBL_ENTRY)&_ZN6S670C53v18Ev,
  (VTBL_ENTRY)&_ZN6S670C53v19Ev,
  (VTBL_ENTRY)&_ZN6S670C53v20Ev,
  (VTBL_ENTRY)&_ZN6S670C53v21Ev,
  (VTBL_ENTRY)&_ZN6S670C53v22Ev,
  (VTBL_ENTRY)&_ZN6S670C53v23Ev,
  (VTBL_ENTRY)&_ZN6S670C53v24Ev,
  (VTBL_ENTRY)&_ZN6S670C53v25Ev,
  (VTBL_ENTRY)&_ZN6S670C53v26Ev,
  (VTBL_ENTRY)&_ZN6S670C53v27Ev,
  (VTBL_ENTRY)&_ZN6S670C53v28Ev,
  (VTBL_ENTRY)&_ZN6S670C53v29Ev,
  (VTBL_ENTRY)&_ZN6S670C53v30Ev,
  (VTBL_ENTRY)&_ZN6S670C53v31Ev,
  (VTBL_ENTRY)&_ZN6S670C53v32Ev,
  (VTBL_ENTRY)&_ZN6S670C53v33Ev,
  (VTBL_ENTRY)&_ZN6S670C53v34Ev,
  (VTBL_ENTRY)&_ZN6S670C53v35Ev,
  (VTBL_ENTRY)&_ZN6S670C53v36Ev,
  (VTBL_ENTRY)&_ZN6S670C53v37Ev,
  (VTBL_ENTRY)&_ZN6S670C53v38Ev,
  (VTBL_ENTRY)&_ZN6S670C53v39Ev,
  (VTBL_ENTRY)&_ZN6S670C53v40Ev,
  (VTBL_ENTRY)&_ZN6S670C53v41Ev,
  (VTBL_ENTRY)&_ZN6S670C53v42Ev,
  (VTBL_ENTRY)&_ZN6S670C53v43Ev,
  (VTBL_ENTRY)&_ZN6S670C53v44Ev,
  (VTBL_ENTRY)&_ZN6S670C53v45Ev,
  (VTBL_ENTRY)&_ZN6S670C53v46Ev,
  (VTBL_ENTRY)&_ZN6S670C53v47Ev,
  (VTBL_ENTRY)&_ZN6S670C53v48Ev,
  (VTBL_ENTRY)&_ZN6S670C53v49Ev,
  (VTBL_ENTRY)&_ZN6S670C53v50Ev,
  (VTBL_ENTRY)&_ZN6S670C53v51Ev,
  (VTBL_ENTRY)&_ZN6S670C53v52Ev,
  (VTBL_ENTRY)&_ZN6S670C53v53Ev,
  (VTBL_ENTRY)&_ZN6S670C53v54Ev,
  (VTBL_ENTRY)&_ZN6S670C53v55Ev,
  (VTBL_ENTRY)&_ZN6S670C53v56Ev,
  (VTBL_ENTRY)&_ZN6S670C53v57Ev,
  (VTBL_ENTRY)&_ZN6S670C53v58Ev,
  (VTBL_ENTRY)&_ZN6S670C53v59Ev,
  (VTBL_ENTRY)&_ZN6S670C53v60Ev,
  (VTBL_ENTRY)&_ZN6S670C53v61Ev,
  (VTBL_ENTRY)&_ZN6S670C53v62Ev,
  (VTBL_ENTRY)&_ZN6S670C53v63Ev,
  (VTBL_ENTRY)&_ZN6S670C53v64Ev,
  (VTBL_ENTRY)&_ZN6S670C53v65Ev,
  (VTBL_ENTRY)&_ZN6S670C53v66Ev,
  (VTBL_ENTRY)&_ZN6S670C53v67Ev,
  (VTBL_ENTRY)&_ZN6S670C53v68Ev,
  (VTBL_ENTRY)&_ZN6S670C53v69Ev,
  (VTBL_ENTRY)&_ZN6S670C43v70Ev,
  (VTBL_ENTRY)&_ZN6S670C43v71Ev,
  (VTBL_ENTRY)&_ZN6S670C43v72Ev,
  (VTBL_ENTRY)&_ZN6S670C43v73Ev,
  (VTBL_ENTRY)&_ZN6S670C43v74Ev,
  (VTBL_ENTRY)&_ZN6S670C43v75Ev,
  (VTBL_ENTRY)&_ZN6S670C43v76Ev,
  (VTBL_ENTRY)&_ZN6S670C43v77Ev,
  (VTBL_ENTRY)&_ZN6S670C43v78Ev,
  (VTBL_ENTRY)&_ZN6S670C43v79Ev,
  (VTBL_ENTRY)&_ZN6S670C43v80Ev,
  (VTBL_ENTRY)&_ZN6S670C43v81Ev,
  (VTBL_ENTRY)&_ZN6S670C43v82Ev,
  (VTBL_ENTRY)&_ZN6S670C43v83Ev,
  (VTBL_ENTRY)&_ZN6S670C43v84Ev,
  (VTBL_ENTRY)&_ZN6S670C43v85Ev,
  (VTBL_ENTRY)&_ZN6S670C43v86Ev,
  (VTBL_ENTRY)&_ZN6S670C43v87Ev,
  (VTBL_ENTRY)&_ZN6S670C43v88Ev,
  (VTBL_ENTRY)&_ZN6S670C43v89Ev,
  (VTBL_ENTRY)&_ZN6S670C43v90Ev,
  (VTBL_ENTRY)&_ZN6S670C43v91Ev,
  (VTBL_ENTRY)&_ZN6S670C33v92Ev,
  (VTBL_ENTRY)&_ZN6S670C33v93Ev,
  (VTBL_ENTRY)&_ZN6S670C33v94Ev,
  (VTBL_ENTRY)&_ZN6S670C33v95Ev,
  (VTBL_ENTRY)&_ZN6S670C33v96Ev,
  (VTBL_ENTRY)&_ZN6S670C33v97Ev,
  (VTBL_ENTRY)&_ZN6S670C33v98Ev,
  (VTBL_ENTRY)&_ZN6S670C33v99Ev,
  (VTBL_ENTRY)&_ZN6S670C34v100Ev,
  (VTBL_ENTRY)&_ZN6S670C34v101Ev,
  (VTBL_ENTRY)&_ZN6S670C34v102Ev,
  (VTBL_ENTRY)&_ZN6S670C34v103Ev,
  (VTBL_ENTRY)&_ZN6S670C34v104Ev,
  (VTBL_ENTRY)&_ZN6S670C34v105Ev,
  (VTBL_ENTRY)&_ZN6S670C34v106Ev,
  (VTBL_ENTRY)&_ZN6S670C34v107Ev,
  (VTBL_ENTRY)&_ZN6S670C34v108Ev,
  (VTBL_ENTRY)&_ZN6S670C34v109Ev,
  (VTBL_ENTRY)&_ZN6S670C34v110Ev,
  (VTBL_ENTRY)&_ZN6S670C24v111Ev,
  (VTBL_ENTRY)&_ZN6S670C24v112Ev,
  (VTBL_ENTRY)&_ZN6S670C24v113Ev,
  (VTBL_ENTRY)&_ZN6S670C24v114Ev,
  (VTBL_ENTRY)&_ZN6S670C24v115Ev,
  (VTBL_ENTRY)&_ZN6S670C24v116Ev,
  (VTBL_ENTRY)&_ZN6S670C24v117Ev,
  (VTBL_ENTRY)&_ZN6S670C12v1Ev,
  (VTBL_ENTRY)&_ZN6S670C12v2Ev,
  (VTBL_ENTRY)&_ZN6S670C12v3Ev,
  (VTBL_ENTRY)&_ZN6S670C12v4Ev,
  (VTBL_ENTRY)&_ZN6S670C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S670C1[];
extern  VTBL_ENTRY _ZTV6S670C1[];
Class_Descriptor cd_S670C1 = {  "S670C1", // class name
  bases_S670C1, 4,
  &(vtc_S670C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,152), // object size
  NSPAIRA(_ZTI6S670C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S670C1),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1437C4  {
  int s1437c4f0;
  __tsi64 s1437c4f1;
  void *s1437c4f2[4];
  int s1437c4f3[2];
  void *s1437c4f4;
  ::S473C6_nt s1437c4f5;
  void *s1437c4f6[2];
  virtual  ~S1437C4(); // _ZN7S1437C4D1Ev
  virtual void  v4(); // _ZN7S1437C42v4Ev
  virtual void  v5(); // _ZN7S1437C42v5Ev
  virtual void  v6(); // _ZN7S1437C42v6Ev
  virtual void  v7(); // _ZN7S1437C42v7Ev
  virtual void  v8(); // _ZN7S1437C42v8Ev
  virtual void  v9(); // _ZN7S1437C42v9Ev
  virtual void  v10(); // _ZN7S1437C43v10Ev
  virtual void  v11(); // _ZN7S1437C43v11Ev
  virtual void  v12(); // _ZN7S1437C43v12Ev
  virtual void  v13(); // _ZN7S1437C43v13Ev
  virtual void  v14(); // _ZN7S1437C43v14Ev
  virtual void  v15(); // _ZN7S1437C43v15Ev
  virtual void  v16(); // _ZN7S1437C43v16Ev
  virtual void  v17(); // _ZN7S1437C43v17Ev
  virtual void  v18(); // _ZN7S1437C43v18Ev
  virtual void  v19(); // _ZN7S1437C43v19Ev
  virtual void  v20(); // _ZN7S1437C43v20Ev
  virtual void  v21(); // _ZN7S1437C43v21Ev
  virtual void  v22(); // _ZN7S1437C43v22Ev
  virtual void  v23(); // _ZN7S1437C43v23Ev
  virtual void  v24(); // _ZN7S1437C43v24Ev
  virtual void  v25(); // _ZN7S1437C43v25Ev
  virtual void  v26(); // _ZN7S1437C43v26Ev
  virtual void  v27(); // _ZN7S1437C43v27Ev
  virtual void  v28(); // _ZN7S1437C43v28Ev
  virtual void  v29(); // _ZN7S1437C43v29Ev
  virtual void  v30(); // _ZN7S1437C43v30Ev
  virtual void  v31(); // _ZN7S1437C43v31Ev
  virtual void  v32(); // _ZN7S1437C43v32Ev
  virtual void  v33(); // _ZN7S1437C43v33Ev
  virtual void  v34(); // _ZN7S1437C43v34Ev
  virtual void  v35(); // _ZN7S1437C43v35Ev
  virtual void  v36(); // _ZN7S1437C43v36Ev
  virtual void  v37(); // _ZN7S1437C43v37Ev
  virtual void  v38(); // _ZN7S1437C43v38Ev
  virtual void  v39(); // _ZN7S1437C43v39Ev
  virtual void  v40(); // _ZN7S1437C43v40Ev
  virtual void  v41(); // _ZN7S1437C43v41Ev
  virtual void  v42(); // _ZN7S1437C43v42Ev
  virtual void  v43(); // _ZN7S1437C43v43Ev
  virtual void  v44(); // _ZN7S1437C43v44Ev
  virtual void  v45(); // _ZN7S1437C43v45Ev
  virtual void  v46(); // _ZN7S1437C43v46Ev
  virtual void  v47(); // _ZN7S1437C43v47Ev
  virtual void  v48(); // _ZN7S1437C43v48Ev
  virtual void  v49(); // _ZN7S1437C43v49Ev
  virtual void  v50(); // _ZN7S1437C43v50Ev
  virtual void  v51(); // _ZN7S1437C43v51Ev
  virtual void  v52(); // _ZN7S1437C43v52Ev
  virtual void  v53(); // _ZN7S1437C43v53Ev
  virtual void  v54(); // _ZN7S1437C43v54Ev
  virtual void  v55(); // _ZN7S1437C43v55Ev
  virtual void  v56(); // _ZN7S1437C43v56Ev
  virtual void  v57(); // _ZN7S1437C43v57Ev
  virtual void  v58(); // _ZN7S1437C43v58Ev
  virtual void  v59(); // _ZN7S1437C43v59Ev
  virtual void  v60(); // _ZN7S1437C43v60Ev
  virtual void  v61(); // _ZN7S1437C43v61Ev
  virtual void  v62(); // _ZN7S1437C43v62Ev
  virtual void  v63(); // _ZN7S1437C43v63Ev
  virtual void  v64(); // _ZN7S1437C43v64Ev
  virtual void  v65(); // _ZN7S1437C43v65Ev
  virtual void  v66(); // _ZN7S1437C43v66Ev
  virtual void  v67(); // _ZN7S1437C43v67Ev
  S1437C4(); // tgen
};
//SIG(-1 S1437C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1437C4 ::~S1437C4(){ note_dtor("S1437C4", this);}
void  S1437C4 ::v4(){vfunc_called(this, "_ZN7S1437C42v4Ev");}
void  S1437C4 ::v5(){vfunc_called(this, "_ZN7S1437C42v5Ev");}
void  S1437C4 ::v6(){vfunc_called(this, "_ZN7S1437C42v6Ev");}
void  S1437C4 ::v7(){vfunc_called(this, "_ZN7S1437C42v7Ev");}
void  S1437C4 ::v8(){vfunc_called(this, "_ZN7S1437C42v8Ev");}
void  S1437C4 ::v9(){vfunc_called(this, "_ZN7S1437C42v9Ev");}
void  S1437C4 ::v10(){vfunc_called(this, "_ZN7S1437C43v10Ev");}
void  S1437C4 ::v11(){vfunc_called(this, "_ZN7S1437C43v11Ev");}
void  S1437C4 ::v12(){vfunc_called(this, "_ZN7S1437C43v12Ev");}
void  S1437C4 ::v13(){vfunc_called(this, "_ZN7S1437C43v13Ev");}
void  S1437C4 ::v14(){vfunc_called(this, "_ZN7S1437C43v14Ev");}
void  S1437C4 ::v15(){vfunc_called(this, "_ZN7S1437C43v15Ev");}
void  S1437C4 ::v16(){vfunc_called(this, "_ZN7S1437C43v16Ev");}
void  S1437C4 ::v17(){vfunc_called(this, "_ZN7S1437C43v17Ev");}
void  S1437C4 ::v18(){vfunc_called(this, "_ZN7S1437C43v18Ev");}
void  S1437C4 ::v19(){vfunc_called(this, "_ZN7S1437C43v19Ev");}
void  S1437C4 ::v20(){vfunc_called(this, "_ZN7S1437C43v20Ev");}
void  S1437C4 ::v21(){vfunc_called(this, "_ZN7S1437C43v21Ev");}
void  S1437C4 ::v22(){vfunc_called(this, "_ZN7S1437C43v22Ev");}
void  S1437C4 ::v23(){vfunc_called(this, "_ZN7S1437C43v23Ev");}
void  S1437C4 ::v24(){vfunc_called(this, "_ZN7S1437C43v24Ev");}
void  S1437C4 ::v25(){vfunc_called(this, "_ZN7S1437C43v25Ev");}
void  S1437C4 ::v26(){vfunc_called(this, "_ZN7S1437C43v26Ev");}
void  S1437C4 ::v27(){vfunc_called(this, "_ZN7S1437C43v27Ev");}
void  S1437C4 ::v28(){vfunc_called(this, "_ZN7S1437C43v28Ev");}
void  S1437C4 ::v29(){vfunc_called(this, "_ZN7S1437C43v29Ev");}
void  S1437C4 ::v30(){vfunc_called(this, "_ZN7S1437C43v30Ev");}
void  S1437C4 ::v31(){vfunc_called(this, "_ZN7S1437C43v31Ev");}
void  S1437C4 ::v32(){vfunc_called(this, "_ZN7S1437C43v32Ev");}
void  S1437C4 ::v33(){vfunc_called(this, "_ZN7S1437C43v33Ev");}
void  S1437C4 ::v34(){vfunc_called(this, "_ZN7S1437C43v34Ev");}
void  S1437C4 ::v35(){vfunc_called(this, "_ZN7S1437C43v35Ev");}
void  S1437C4 ::v36(){vfunc_called(this, "_ZN7S1437C43v36Ev");}
void  S1437C4 ::v37(){vfunc_called(this, "_ZN7S1437C43v37Ev");}
void  S1437C4 ::v38(){vfunc_called(this, "_ZN7S1437C43v38Ev");}
void  S1437C4 ::v39(){vfunc_called(this, "_ZN7S1437C43v39Ev");}
void  S1437C4 ::v40(){vfunc_called(this, "_ZN7S1437C43v40Ev");}
void  S1437C4 ::v41(){vfunc_called(this, "_ZN7S1437C43v41Ev");}
void  S1437C4 ::v42(){vfunc_called(this, "_ZN7S1437C43v42Ev");}
void  S1437C4 ::v43(){vfunc_called(this, "_ZN7S1437C43v43Ev");}
void  S1437C4 ::v44(){vfunc_called(this, "_ZN7S1437C43v44Ev");}
void  S1437C4 ::v45(){vfunc_called(this, "_ZN7S1437C43v45Ev");}
void  S1437C4 ::v46(){vfunc_called(this, "_ZN7S1437C43v46Ev");}
void  S1437C4 ::v47(){vfunc_called(this, "_ZN7S1437C43v47Ev");}
void  S1437C4 ::v48(){vfunc_called(this, "_ZN7S1437C43v48Ev");}
void  S1437C4 ::v49(){vfunc_called(this, "_ZN7S1437C43v49Ev");}
void  S1437C4 ::v50(){vfunc_called(this, "_ZN7S1437C43v50Ev");}
void  S1437C4 ::v51(){vfunc_called(this, "_ZN7S1437C43v51Ev");}
void  S1437C4 ::v52(){vfunc_called(this, "_ZN7S1437C43v52Ev");}
void  S1437C4 ::v53(){vfunc_called(this, "_ZN7S1437C43v53Ev");}
void  S1437C4 ::v54(){vfunc_called(this, "_ZN7S1437C43v54Ev");}
void  S1437C4 ::v55(){vfunc_called(this, "_ZN7S1437C43v55Ev");}
void  S1437C4 ::v56(){vfunc_called(this, "_ZN7S1437C43v56Ev");}
void  S1437C4 ::v57(){vfunc_called(this, "_ZN7S1437C43v57Ev");}
void  S1437C4 ::v58(){vfunc_called(this, "_ZN7S1437C43v58Ev");}
void  S1437C4 ::v59(){vfunc_called(this, "_ZN7S1437C43v59Ev");}
void  S1437C4 ::v60(){vfunc_called(this, "_ZN7S1437C43v60Ev");}
void  S1437C4 ::v61(){vfunc_called(this, "_ZN7S1437C43v61Ev");}
void  S1437C4 ::v62(){vfunc_called(this, "_ZN7S1437C43v62Ev");}
void  S1437C4 ::v63(){vfunc_called(this, "_ZN7S1437C43v63Ev");}
void  S1437C4 ::v64(){vfunc_called(this, "_ZN7S1437C43v64Ev");}
void  S1437C4 ::v65(){vfunc_called(this, "_ZN7S1437C43v65Ev");}
void  S1437C4 ::v66(){vfunc_called(this, "_ZN7S1437C43v66Ev");}
void  S1437C4 ::v67(){vfunc_called(this, "_ZN7S1437C43v67Ev");}
S1437C4 ::S1437C4(){ note_ctor("S1437C4", this);} // tgen

static void Test_S1437C4()
{
  extern Class_Descriptor cd_S1437C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1437C4, buf);
    S1437C4 *dp, &lv = *(dp=new (buf) S1437C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1437C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1437C4)");
    check_field_offset(lv, s1437c4f0, ABISELECT(8,4), "S1437C4.s1437c4f0");
    check_field_offset(lv, s1437c4f1, ABISELECT(16,8), "S1437C4.s1437c4f1");
    check_field_offset(lv, s1437c4f2, ABISELECT(24,16), "S1437C4.s1437c4f2");
    check_field_offset(lv, s1437c4f3, ABISELECT(56,32), "S1437C4.s1437c4f3");
    check_field_offset(lv, s1437c4f4, ABISELECT(64,40), "S1437C4.s1437c4f4");
    check_field_offset(lv, s1437c4f5, ABISELECT(72,44), "S1437C4.s1437c4f5");
    check_field_offset(lv, s1437c4f6, ABISELECT(80,52), "S1437C4.s1437c4f6");
    test_class_info(&lv, &cd_S1437C4);
    dp->~S1437C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1437C4(Test_S1437C4, "S1437C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1437C4C1Ev();
extern void _ZN7S1437C4D1Ev();
Name_Map name_map_S1437C4[] = {
  NSPAIR(_ZN7S1437C4C1Ev),
  NSPAIR(_ZN7S1437C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1437C4[];
extern void _ZN7S1437C4D1Ev();
extern void _ZN7S1437C4D0Ev();
extern void _ZN7S1437C42v4Ev();
extern void _ZN7S1437C42v5Ev();
extern void _ZN7S1437C42v6Ev();
extern void _ZN7S1437C42v7Ev();
extern void _ZN7S1437C42v8Ev();
extern void _ZN7S1437C42v9Ev();
extern void _ZN7S1437C43v10Ev();
extern void _ZN7S1437C43v11Ev();
extern void _ZN7S1437C43v12Ev();
extern void _ZN7S1437C43v13Ev();
extern void _ZN7S1437C43v14Ev();
extern void _ZN7S1437C43v15Ev();
extern void _ZN7S1437C43v16Ev();
extern void _ZN7S1437C43v17Ev();
extern void _ZN7S1437C43v18Ev();
extern void _ZN7S1437C43v19Ev();
extern void _ZN7S1437C43v20Ev();
extern void _ZN7S1437C43v21Ev();
extern void _ZN7S1437C43v22Ev();
extern void _ZN7S1437C43v23Ev();
extern void _ZN7S1437C43v24Ev();
extern void _ZN7S1437C43v25Ev();
extern void _ZN7S1437C43v26Ev();
extern void _ZN7S1437C43v27Ev();
extern void _ZN7S1437C43v28Ev();
extern void _ZN7S1437C43v29Ev();
extern void _ZN7S1437C43v30Ev();
extern void _ZN7S1437C43v31Ev();
extern void _ZN7S1437C43v32Ev();
extern void _ZN7S1437C43v33Ev();
extern void _ZN7S1437C43v34Ev();
extern void _ZN7S1437C43v35Ev();
extern void _ZN7S1437C43v36Ev();
extern void _ZN7S1437C43v37Ev();
extern void _ZN7S1437C43v38Ev();
extern void _ZN7S1437C43v39Ev();
extern void _ZN7S1437C43v40Ev();
extern void _ZN7S1437C43v41Ev();
extern void _ZN7S1437C43v42Ev();
extern void _ZN7S1437C43v43Ev();
extern void _ZN7S1437C43v44Ev();
extern void _ZN7S1437C43v45Ev();
extern void _ZN7S1437C43v46Ev();
extern void _ZN7S1437C43v47Ev();
extern void _ZN7S1437C43v48Ev();
extern void _ZN7S1437C43v49Ev();
extern void _ZN7S1437C43v50Ev();
extern void _ZN7S1437C43v51Ev();
extern void _ZN7S1437C43v52Ev();
extern void _ZN7S1437C43v53Ev();
extern void _ZN7S1437C43v54Ev();
extern void _ZN7S1437C43v55Ev();
extern void _ZN7S1437C43v56Ev();
extern void _ZN7S1437C43v57Ev();
extern void _ZN7S1437C43v58Ev();
extern void _ZN7S1437C43v59Ev();
extern void _ZN7S1437C43v60Ev();
extern void _ZN7S1437C43v61Ev();
extern void _ZN7S1437C43v62Ev();
extern void _ZN7S1437C43v63Ev();
extern void _ZN7S1437C43v64Ev();
extern void _ZN7S1437C43v65Ev();
extern void _ZN7S1437C43v66Ev();
extern void _ZN7S1437C43v67Ev();
static  VTBL_ENTRY vtc_S1437C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1437C4[0]),
  (VTBL_ENTRY)&_ZN7S1437C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1437C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1437C4[];
extern  VTBL_ENTRY _ZTV7S1437C4[];
Class_Descriptor cd_S1437C4 = {  "S1437C4", // class name
  0,0,//no base classes
  &(vtc_S1437C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1437C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1437C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1437C3  : S1437C4 {
  int s1437c3f0[2];
  void *s1437c3f1;
  int s1437c3f2[2];
  ::S473C7_nt s1437c3f3;
  ::S473C7_nt s1437c3f4;
  ::S21925C42 s1437c3f5;
  ::S473C7_nt s1437c3f6;
  unsigned int s1437c3f7:1;
  unsigned int s1437c3f8:1;
  unsigned int s1437c3f9:1;
  unsigned int s1437c3f10:1;
  unsigned int s1437c3f11:1;
  int s1437c3f12[2];
  virtual  ~S1437C3(); // _ZN7S1437C3D1Ev
  virtual void  v68(); // _ZN7S1437C33v68Ev
  virtual void  v69(); // _ZN7S1437C33v69Ev
  virtual void  v70(); // _ZN7S1437C33v70Ev
  virtual void  v71(); // _ZN7S1437C33v71Ev
  virtual void  v72(); // _ZN7S1437C33v72Ev
  virtual void  v73(); // _ZN7S1437C33v73Ev
  virtual void  v74(); // _ZN7S1437C33v74Ev
  virtual void  v75(); // _ZN7S1437C33v75Ev
  virtual void  v76(); // _ZN7S1437C33v76Ev
  virtual void  v77(); // _ZN7S1437C33v77Ev
  virtual void  v78(); // _ZN7S1437C33v78Ev
  virtual void  v79(); // _ZN7S1437C33v79Ev
  virtual void  v80(); // _ZN7S1437C33v80Ev
  virtual void  v81(); // _ZN7S1437C33v81Ev
  virtual void  v82(); // _ZN7S1437C33v82Ev
  virtual void  v83(); // _ZN7S1437C33v83Ev
  virtual void  v84(); // _ZN7S1437C33v84Ev
  virtual void  v85(); // _ZN7S1437C33v85Ev
  virtual void  v86(); // _ZN7S1437C33v86Ev
  virtual void  v87(); // _ZN7S1437C33v87Ev
  virtual void  v88(); // _ZN7S1437C33v88Ev
  virtual void  v89(); // _ZN7S1437C33v89Ev
  S1437C3(); // tgen
};
//SIG(-1 S1437C3) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1437C3 ::~S1437C3(){ note_dtor("S1437C3", this);}
void  S1437C3 ::v68(){vfunc_called(this, "_ZN7S1437C33v68Ev");}
void  S1437C3 ::v69(){vfunc_called(this, "_ZN7S1437C33v69Ev");}
void  S1437C3 ::v70(){vfunc_called(this, "_ZN7S1437C33v70Ev");}
void  S1437C3 ::v71(){vfunc_called(this, "_ZN7S1437C33v71Ev");}
void  S1437C3 ::v72(){vfunc_called(this, "_ZN7S1437C33v72Ev");}
void  S1437C3 ::v73(){vfunc_called(this, "_ZN7S1437C33v73Ev");}
void  S1437C3 ::v74(){vfunc_called(this, "_ZN7S1437C33v74Ev");}
void  S1437C3 ::v75(){vfunc_called(this, "_ZN7S1437C33v75Ev");}
void  S1437C3 ::v76(){vfunc_called(this, "_ZN7S1437C33v76Ev");}
void  S1437C3 ::v77(){vfunc_called(this, "_ZN7S1437C33v77Ev");}
void  S1437C3 ::v78(){vfunc_called(this, "_ZN7S1437C33v78Ev");}
void  S1437C3 ::v79(){vfunc_called(this, "_ZN7S1437C33v79Ev");}
void  S1437C3 ::v80(){vfunc_called(this, "_ZN7S1437C33v80Ev");}
void  S1437C3 ::v81(){vfunc_called(this, "_ZN7S1437C33v81Ev");}
void  S1437C3 ::v82(){vfunc_called(this, "_ZN7S1437C33v82Ev");}
void  S1437C3 ::v83(){vfunc_called(this, "_ZN7S1437C33v83Ev");}
void  S1437C3 ::v84(){vfunc_called(this, "_ZN7S1437C33v84Ev");}
void  S1437C3 ::v85(){vfunc_called(this, "_ZN7S1437C33v85Ev");}
void  S1437C3 ::v86(){vfunc_called(this, "_ZN7S1437C33v86Ev");}
void  S1437C3 ::v87(){vfunc_called(this, "_ZN7S1437C33v87Ev");}
void  S1437C3 ::v88(){vfunc_called(this, "_ZN7S1437C33v88Ev");}
void  S1437C3 ::v89(){vfunc_called(this, "_ZN7S1437C33v89Ev");}
S1437C3 ::S1437C3(){ note_ctor("S1437C3", this);} // tgen

static void Test_S1437C3()
{
  extern Class_Descriptor cd_S1437C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S1437C3, buf);
    S1437C3 *dp, &lv = *(dp=new (buf) S1437C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S1437C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1437C3)");
    check_base_class_offset(lv, (S1437C4*), 0, "S1437C3");
    check_field_offset(lv, s1437c3f0, ABISELECT(96,60), "S1437C3.s1437c3f0");
    check_field_offset(lv, s1437c3f1, ABISELECT(104,68), "S1437C3.s1437c3f1");
    check_field_offset(lv, s1437c3f2, ABISELECT(112,72), "S1437C3.s1437c3f2");
    check_field_offset(lv, s1437c3f3, ABISELECT(120,80), "S1437C3.s1437c3f3");
    check_field_offset(lv, s1437c3f4, ABISELECT(136,92), "S1437C3.s1437c3f4");
    check_field_offset(lv, s1437c3f5, ABISELECT(152,104), "S1437C3.s1437c3f5");
    check_field_offset(lv, s1437c3f6, ABISELECT(160,108), "S1437C3.s1437c3f6");
    set_bf_and_test(lv, s1437c3f7, ABISELECT(176,120), 0, 1, 1, "S1437C3");
    set_bf_and_test(lv, s1437c3f8, ABISELECT(176,120), 1, 1, 1, "S1437C3");
    set_bf_and_test(lv, s1437c3f9, ABISELECT(176,120), 2, 1, 1, "S1437C3");
    set_bf_and_test(lv, s1437c3f10, ABISELECT(176,120), 3, 1, 1, "S1437C3");
    set_bf_and_test(lv, s1437c3f11, ABISELECT(176,120), 4, 1, 1, "S1437C3");
    check_field_offset(lv, s1437c3f12, ABISELECT(180,124), "S1437C3.s1437c3f12");
    test_class_info(&lv, &cd_S1437C3);
    dp->~S1437C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1437C3(Test_S1437C3, "S1437C3", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN7S1437C3C1Ev();
extern void _ZN7S1437C3D1Ev();
Name_Map name_map_S1437C3[] = {
  NSPAIR(_ZN7S1437C3C1Ev),
  NSPAIR(_ZN7S1437C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1437C4;
extern VTBL_ENTRY _ZTI7S1437C4[];
extern  VTBL_ENTRY _ZTV7S1437C4[];
static Base_Class bases_S1437C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1437C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1437C3[];
extern void _ZN7S1437C3D1Ev();
extern void _ZN7S1437C3D0Ev();
extern void _ZN7S1437C42v4Ev();
extern void _ZN7S1437C42v5Ev();
extern void _ZN7S1437C42v6Ev();
extern void _ZN7S1437C42v7Ev();
extern void _ZN7S1437C42v8Ev();
extern void _ZN7S1437C42v9Ev();
extern void _ZN7S1437C43v10Ev();
extern void _ZN7S1437C43v11Ev();
extern void _ZN7S1437C43v12Ev();
extern void _ZN7S1437C43v13Ev();
extern void _ZN7S1437C43v14Ev();
extern void _ZN7S1437C43v15Ev();
extern void _ZN7S1437C43v16Ev();
extern void _ZN7S1437C43v17Ev();
extern void _ZN7S1437C43v18Ev();
extern void _ZN7S1437C43v19Ev();
extern void _ZN7S1437C43v20Ev();
extern void _ZN7S1437C43v21Ev();
extern void _ZN7S1437C43v22Ev();
extern void _ZN7S1437C43v23Ev();
extern void _ZN7S1437C43v24Ev();
extern void _ZN7S1437C43v25Ev();
extern void _ZN7S1437C43v26Ev();
extern void _ZN7S1437C43v27Ev();
extern void _ZN7S1437C43v28Ev();
extern void _ZN7S1437C43v29Ev();
extern void _ZN7S1437C43v30Ev();
extern void _ZN7S1437C43v31Ev();
extern void _ZN7S1437C43v32Ev();
extern void _ZN7S1437C43v33Ev();
extern void _ZN7S1437C43v34Ev();
extern void _ZN7S1437C43v35Ev();
extern void _ZN7S1437C43v36Ev();
extern void _ZN7S1437C43v37Ev();
extern void _ZN7S1437C43v38Ev();
extern void _ZN7S1437C43v39Ev();
extern void _ZN7S1437C43v40Ev();
extern void _ZN7S1437C43v41Ev();
extern void _ZN7S1437C43v42Ev();
extern void _ZN7S1437C43v43Ev();
extern void _ZN7S1437C43v44Ev();
extern void _ZN7S1437C43v45Ev();
extern void _ZN7S1437C43v46Ev();
extern void _ZN7S1437C43v47Ev();
extern void _ZN7S1437C43v48Ev();
extern void _ZN7S1437C43v49Ev();
extern void _ZN7S1437C43v50Ev();
extern void _ZN7S1437C43v51Ev();
extern void _ZN7S1437C43v52Ev();
extern void _ZN7S1437C43v53Ev();
extern void _ZN7S1437C43v54Ev();
extern void _ZN7S1437C43v55Ev();
extern void _ZN7S1437C43v56Ev();
extern void _ZN7S1437C43v57Ev();
extern void _ZN7S1437C43v58Ev();
extern void _ZN7S1437C43v59Ev();
extern void _ZN7S1437C43v60Ev();
extern void _ZN7S1437C43v61Ev();
extern void _ZN7S1437C43v62Ev();
extern void _ZN7S1437C43v63Ev();
extern void _ZN7S1437C43v64Ev();
extern void _ZN7S1437C43v65Ev();
extern void _ZN7S1437C43v66Ev();
extern void _ZN7S1437C43v67Ev();
extern void _ZN7S1437C33v68Ev();
extern void _ZN7S1437C33v69Ev();
extern void _ZN7S1437C33v70Ev();
extern void _ZN7S1437C33v71Ev();
extern void _ZN7S1437C33v72Ev();
extern void _ZN7S1437C33v73Ev();
extern void _ZN7S1437C33v74Ev();
extern void _ZN7S1437C33v75Ev();
extern void _ZN7S1437C33v76Ev();
extern void _ZN7S1437C33v77Ev();
extern void _ZN7S1437C33v78Ev();
extern void _ZN7S1437C33v79Ev();
extern void _ZN7S1437C33v80Ev();
extern void _ZN7S1437C33v81Ev();
extern void _ZN7S1437C33v82Ev();
extern void _ZN7S1437C33v83Ev();
extern void _ZN7S1437C33v84Ev();
extern void _ZN7S1437C33v85Ev();
extern void _ZN7S1437C33v86Ev();
extern void _ZN7S1437C33v87Ev();
extern void _ZN7S1437C33v88Ev();
extern void _ZN7S1437C33v89Ev();
static  VTBL_ENTRY vtc_S1437C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1437C3[0]),
  (VTBL_ENTRY)&_ZN7S1437C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1437C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v89Ev,
};
extern VTBL_ENTRY _ZTI7S1437C3[];
extern  VTBL_ENTRY _ZTV7S1437C3[];
Class_Descriptor cd_S1437C3 = {  "S1437C3", // class name
  bases_S1437C3, 1,
  &(vtc_S1437C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI7S1437C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1437C3),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1437C2  : S1437C3 {
  ::S473C6_nt s1437c2f0;
  virtual  ~S1437C2(); // _ZN7S1437C2D1Ev
  virtual void  v90(); // _ZN7S1437C23v90Ev
  virtual void  v91(); // _ZN7S1437C23v91Ev
  virtual void  v92(); // _ZN7S1437C23v92Ev
  virtual void  v93(); // _ZN7S1437C23v93Ev
  virtual void  v94(); // _ZN7S1437C23v94Ev
  virtual void  v95(); // _ZN7S1437C23v95Ev
  virtual void  v96(); // _ZN7S1437C23v96Ev
  virtual void  v97(); // _ZN7S1437C23v97Ev
  virtual void  v98(); // _ZN7S1437C23v98Ev
  virtual void  v99(); // _ZN7S1437C23v99Ev
  virtual void  v100(); // _ZN7S1437C24v100Ev
  virtual void  v101(); // _ZN7S1437C24v101Ev
  virtual void  v102(); // _ZN7S1437C24v102Ev
  virtual void  v103(); // _ZN7S1437C24v103Ev
  virtual void  v104(); // _ZN7S1437C24v104Ev
  virtual void  v105(); // _ZN7S1437C24v105Ev
  virtual void  v106(); // _ZN7S1437C24v106Ev
  virtual void  v107(); // _ZN7S1437C24v107Ev
  virtual void  v108(); // _ZN7S1437C24v108Ev
  S1437C2(); // tgen
};
//SIG(-1 S1437C2) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S1437C2 ::~S1437C2(){ note_dtor("S1437C2", this);}
void  S1437C2 ::v90(){vfunc_called(this, "_ZN7S1437C23v90Ev");}
void  S1437C2 ::v91(){vfunc_called(this, "_ZN7S1437C23v91Ev");}
void  S1437C2 ::v92(){vfunc_called(this, "_ZN7S1437C23v92Ev");}
void  S1437C2 ::v93(){vfunc_called(this, "_ZN7S1437C23v93Ev");}
void  S1437C2 ::v94(){vfunc_called(this, "_ZN7S1437C23v94Ev");}
void  S1437C2 ::v95(){vfunc_called(this, "_ZN7S1437C23v95Ev");}
void  S1437C2 ::v96(){vfunc_called(this, "_ZN7S1437C23v96Ev");}
void  S1437C2 ::v97(){vfunc_called(this, "_ZN7S1437C23v97Ev");}
void  S1437C2 ::v98(){vfunc_called(this, "_ZN7S1437C23v98Ev");}
void  S1437C2 ::v99(){vfunc_called(this, "_ZN7S1437C23v99Ev");}
void  S1437C2 ::v100(){vfunc_called(this, "_ZN7S1437C24v100Ev");}
void  S1437C2 ::v101(){vfunc_called(this, "_ZN7S1437C24v101Ev");}
void  S1437C2 ::v102(){vfunc_called(this, "_ZN7S1437C24v102Ev");}
void  S1437C2 ::v103(){vfunc_called(this, "_ZN7S1437C24v103Ev");}
void  S1437C2 ::v104(){vfunc_called(this, "_ZN7S1437C24v104Ev");}
void  S1437C2 ::v105(){vfunc_called(this, "_ZN7S1437C24v105Ev");}
void  S1437C2 ::v106(){vfunc_called(this, "_ZN7S1437C24v106Ev");}
void  S1437C2 ::v107(){vfunc_called(this, "_ZN7S1437C24v107Ev");}
void  S1437C2 ::v108(){vfunc_called(this, "_ZN7S1437C24v108Ev");}
S1437C2 ::S1437C2(){ note_ctor("S1437C2", this);} // tgen

static void Test_S1437C2()
{
  extern Class_Descriptor cd_S1437C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S1437C2, buf);
    S1437C2 *dp, &lv = *(dp=new (buf) S1437C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S1437C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1437C2)");
    check_base_class_offset(lv, (S1437C4*)(S1437C3*), 0, "S1437C2");
    check_base_class_offset(lv, (S1437C3*), 0, "S1437C2");
    check_field_offset(lv, s1437c2f0, ABISELECT(188,132), "S1437C2.s1437c2f0");
    test_class_info(&lv, &cd_S1437C2);
    dp->~S1437C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1437C2(Test_S1437C2, "S1437C2", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S1437C2C1Ev();
extern void _ZN7S1437C2D1Ev();
Name_Map name_map_S1437C2[] = {
  NSPAIR(_ZN7S1437C2C1Ev),
  NSPAIR(_ZN7S1437C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1437C4;
extern VTBL_ENTRY _ZTI7S1437C4[];
extern  VTBL_ENTRY _ZTV7S1437C4[];
extern Class_Descriptor cd_S1437C3;
extern VTBL_ENTRY _ZTI7S1437C3[];
extern  VTBL_ENTRY _ZTV7S1437C3[];
static Base_Class bases_S1437C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1437C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1437C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1437C2[];
extern void _ZN7S1437C2D1Ev();
extern void _ZN7S1437C2D0Ev();
extern void _ZN7S1437C42v4Ev();
extern void _ZN7S1437C42v5Ev();
extern void _ZN7S1437C42v6Ev();
extern void _ZN7S1437C42v7Ev();
extern void _ZN7S1437C42v8Ev();
extern void _ZN7S1437C42v9Ev();
extern void _ZN7S1437C43v10Ev();
extern void _ZN7S1437C43v11Ev();
extern void _ZN7S1437C43v12Ev();
extern void _ZN7S1437C43v13Ev();
extern void _ZN7S1437C43v14Ev();
extern void _ZN7S1437C43v15Ev();
extern void _ZN7S1437C43v16Ev();
extern void _ZN7S1437C43v17Ev();
extern void _ZN7S1437C43v18Ev();
extern void _ZN7S1437C43v19Ev();
extern void _ZN7S1437C43v20Ev();
extern void _ZN7S1437C43v21Ev();
extern void _ZN7S1437C43v22Ev();
extern void _ZN7S1437C43v23Ev();
extern void _ZN7S1437C43v24Ev();
extern void _ZN7S1437C43v25Ev();
extern void _ZN7S1437C43v26Ev();
extern void _ZN7S1437C43v27Ev();
extern void _ZN7S1437C43v28Ev();
extern void _ZN7S1437C43v29Ev();
extern void _ZN7S1437C43v30Ev();
extern void _ZN7S1437C43v31Ev();
extern void _ZN7S1437C43v32Ev();
extern void _ZN7S1437C43v33Ev();
extern void _ZN7S1437C43v34Ev();
extern void _ZN7S1437C43v35Ev();
extern void _ZN7S1437C43v36Ev();
extern void _ZN7S1437C43v37Ev();
extern void _ZN7S1437C43v38Ev();
extern void _ZN7S1437C43v39Ev();
extern void _ZN7S1437C43v40Ev();
extern void _ZN7S1437C43v41Ev();
extern void _ZN7S1437C43v42Ev();
extern void _ZN7S1437C43v43Ev();
extern void _ZN7S1437C43v44Ev();
extern void _ZN7S1437C43v45Ev();
extern void _ZN7S1437C43v46Ev();
extern void _ZN7S1437C43v47Ev();
extern void _ZN7S1437C43v48Ev();
extern void _ZN7S1437C43v49Ev();
extern void _ZN7S1437C43v50Ev();
extern void _ZN7S1437C43v51Ev();
extern void _ZN7S1437C43v52Ev();
extern void _ZN7S1437C43v53Ev();
extern void _ZN7S1437C43v54Ev();
extern void _ZN7S1437C43v55Ev();
extern void _ZN7S1437C43v56Ev();
extern void _ZN7S1437C43v57Ev();
extern void _ZN7S1437C43v58Ev();
extern void _ZN7S1437C43v59Ev();
extern void _ZN7S1437C43v60Ev();
extern void _ZN7S1437C43v61Ev();
extern void _ZN7S1437C43v62Ev();
extern void _ZN7S1437C43v63Ev();
extern void _ZN7S1437C43v64Ev();
extern void _ZN7S1437C43v65Ev();
extern void _ZN7S1437C43v66Ev();
extern void _ZN7S1437C43v67Ev();
extern void _ZN7S1437C33v68Ev();
extern void _ZN7S1437C33v69Ev();
extern void _ZN7S1437C33v70Ev();
extern void _ZN7S1437C33v71Ev();
extern void _ZN7S1437C33v72Ev();
extern void _ZN7S1437C33v73Ev();
extern void _ZN7S1437C33v74Ev();
extern void _ZN7S1437C33v75Ev();
extern void _ZN7S1437C33v76Ev();
extern void _ZN7S1437C33v77Ev();
extern void _ZN7S1437C33v78Ev();
extern void _ZN7S1437C33v79Ev();
extern void _ZN7S1437C33v80Ev();
extern void _ZN7S1437C33v81Ev();
extern void _ZN7S1437C33v82Ev();
extern void _ZN7S1437C33v83Ev();
extern void _ZN7S1437C33v84Ev();
extern void _ZN7S1437C33v85Ev();
extern void _ZN7S1437C33v86Ev();
extern void _ZN7S1437C33v87Ev();
extern void _ZN7S1437C33v88Ev();
extern void _ZN7S1437C33v89Ev();
extern void _ZN7S1437C23v90Ev();
extern void _ZN7S1437C23v91Ev();
extern void _ZN7S1437C23v92Ev();
extern void _ZN7S1437C23v93Ev();
extern void _ZN7S1437C23v94Ev();
extern void _ZN7S1437C23v95Ev();
extern void _ZN7S1437C23v96Ev();
extern void _ZN7S1437C23v97Ev();
extern void _ZN7S1437C23v98Ev();
extern void _ZN7S1437C23v99Ev();
extern void _ZN7S1437C24v100Ev();
extern void _ZN7S1437C24v101Ev();
extern void _ZN7S1437C24v102Ev();
extern void _ZN7S1437C24v103Ev();
extern void _ZN7S1437C24v104Ev();
extern void _ZN7S1437C24v105Ev();
extern void _ZN7S1437C24v106Ev();
extern void _ZN7S1437C24v107Ev();
extern void _ZN7S1437C24v108Ev();
static  VTBL_ENTRY vtc_S1437C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1437C2[0]),
  (VTBL_ENTRY)&_ZN7S1437C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1437C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v108Ev,
};
extern VTBL_ENTRY _ZTI7S1437C2[];
extern  VTBL_ENTRY _ZTV7S1437C2[];
Class_Descriptor cd_S1437C2 = {  "S1437C2", // class name
  bases_S1437C2, 2,
  &(vtc_S1437C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S1437C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1437C2),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1437C1  : S1437C2 {
  int s1437c1f0[2];
  ::S672C14_nt s1437c1f1;
  void *s1437c1f2;
  ::S473C8_nt s1437c1f3;
  void *s1437c1f4;
  ::S473C8_nt s1437c1f5;
  int s1437c1f6[2];
  virtual  ~S1437C1(); // _ZN7S1437C1D1Ev
  virtual void  v1(); // _ZN7S1437C12v1Ev
  virtual void  v2(); // _ZN7S1437C12v2Ev
  virtual void  v3(); // _ZN7S1437C12v3Ev
  S1437C1(); // tgen
};
//SIG(1 S1437C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 FC5} vd v1 v2 v3 Fi[2] FC11{ BC12{ BC9}} Fp FC7 Fp FC7 Fi[2]}


 S1437C1 ::~S1437C1(){ note_dtor("S1437C1", this);}
void  S1437C1 ::v1(){vfunc_called(this, "_ZN7S1437C12v1Ev");}
void  S1437C1 ::v2(){vfunc_called(this, "_ZN7S1437C12v2Ev");}
void  S1437C1 ::v3(){vfunc_called(this, "_ZN7S1437C12v3Ev");}
S1437C1 ::S1437C1(){ note_ctor("S1437C1", this);} // tgen

static void Test_S1437C1()
{
  extern Class_Descriptor cd_S1437C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,51)];
    init_test(&cd_S1437C1, buf);
    S1437C1 *dp, &lv = *(dp=new (buf) S1437C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,200), "sizeof(S1437C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1437C1)");
    check_base_class_offset(lv, (S1437C4*)(S1437C3*)(S1437C2*), 0, "S1437C1");
    check_base_class_offset(lv, (S1437C3*)(S1437C2*), 0, "S1437C1");
    check_base_class_offset(lv, (S1437C2*), 0, "S1437C1");
    check_field_offset(lv, s1437c1f0, ABISELECT(196,140), "S1437C1.s1437c1f0");
    check_field_offset(lv, s1437c1f1, ABISELECT(208,148), "S1437C1.s1437c1f1");
    check_field_offset(lv, s1437c1f2, ABISELECT(224,160), "S1437C1.s1437c1f2");
    check_field_offset(lv, s1437c1f3, ABISELECT(232,164), "S1437C1.s1437c1f3");
    check_field_offset(lv, s1437c1f4, ABISELECT(248,176), "S1437C1.s1437c1f4");
    check_field_offset(lv, s1437c1f5, ABISELECT(256,180), "S1437C1.s1437c1f5");
    check_field_offset(lv, s1437c1f6, ABISELECT(272,192), "S1437C1.s1437c1f6");
    test_class_info(&lv, &cd_S1437C1);
    dp->~S1437C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1437C1(Test_S1437C1, "S1437C1", ABISELECT(280,200));

#else // __cplusplus

extern void _ZN7S1437C1C1Ev();
extern void _ZN7S1437C1D1Ev();
Name_Map name_map_S1437C1[] = {
  NSPAIR(_ZN7S1437C1C1Ev),
  NSPAIR(_ZN7S1437C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1437C4;
extern VTBL_ENTRY _ZTI7S1437C4[];
extern  VTBL_ENTRY _ZTV7S1437C4[];
extern Class_Descriptor cd_S1437C3;
extern VTBL_ENTRY _ZTI7S1437C3[];
extern  VTBL_ENTRY _ZTV7S1437C3[];
extern Class_Descriptor cd_S1437C2;
extern VTBL_ENTRY _ZTI7S1437C2[];
extern  VTBL_ENTRY _ZTV7S1437C2[];
static Base_Class bases_S1437C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1437C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1437C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1437C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1437C1[];
extern void _ZN7S1437C1D1Ev();
extern void _ZN7S1437C1D0Ev();
extern void _ZN7S1437C42v4Ev();
extern void _ZN7S1437C42v5Ev();
extern void _ZN7S1437C42v6Ev();
extern void _ZN7S1437C42v7Ev();
extern void _ZN7S1437C42v8Ev();
extern void _ZN7S1437C42v9Ev();
extern void _ZN7S1437C43v10Ev();
extern void _ZN7S1437C43v11Ev();
extern void _ZN7S1437C43v12Ev();
extern void _ZN7S1437C43v13Ev();
extern void _ZN7S1437C43v14Ev();
extern void _ZN7S1437C43v15Ev();
extern void _ZN7S1437C43v16Ev();
extern void _ZN7S1437C43v17Ev();
extern void _ZN7S1437C43v18Ev();
extern void _ZN7S1437C43v19Ev();
extern void _ZN7S1437C43v20Ev();
extern void _ZN7S1437C43v21Ev();
extern void _ZN7S1437C43v22Ev();
extern void _ZN7S1437C43v23Ev();
extern void _ZN7S1437C43v24Ev();
extern void _ZN7S1437C43v25Ev();
extern void _ZN7S1437C43v26Ev();
extern void _ZN7S1437C43v27Ev();
extern void _ZN7S1437C43v28Ev();
extern void _ZN7S1437C43v29Ev();
extern void _ZN7S1437C43v30Ev();
extern void _ZN7S1437C43v31Ev();
extern void _ZN7S1437C43v32Ev();
extern void _ZN7S1437C43v33Ev();
extern void _ZN7S1437C43v34Ev();
extern void _ZN7S1437C43v35Ev();
extern void _ZN7S1437C43v36Ev();
extern void _ZN7S1437C43v37Ev();
extern void _ZN7S1437C43v38Ev();
extern void _ZN7S1437C43v39Ev();
extern void _ZN7S1437C43v40Ev();
extern void _ZN7S1437C43v41Ev();
extern void _ZN7S1437C43v42Ev();
extern void _ZN7S1437C43v43Ev();
extern void _ZN7S1437C43v44Ev();
extern void _ZN7S1437C43v45Ev();
extern void _ZN7S1437C43v46Ev();
extern void _ZN7S1437C43v47Ev();
extern void _ZN7S1437C43v48Ev();
extern void _ZN7S1437C43v49Ev();
extern void _ZN7S1437C43v50Ev();
extern void _ZN7S1437C43v51Ev();
extern void _ZN7S1437C43v52Ev();
extern void _ZN7S1437C43v53Ev();
extern void _ZN7S1437C43v54Ev();
extern void _ZN7S1437C43v55Ev();
extern void _ZN7S1437C43v56Ev();
extern void _ZN7S1437C43v57Ev();
extern void _ZN7S1437C43v58Ev();
extern void _ZN7S1437C43v59Ev();
extern void _ZN7S1437C43v60Ev();
extern void _ZN7S1437C43v61Ev();
extern void _ZN7S1437C43v62Ev();
extern void _ZN7S1437C43v63Ev();
extern void _ZN7S1437C43v64Ev();
extern void _ZN7S1437C43v65Ev();
extern void _ZN7S1437C43v66Ev();
extern void _ZN7S1437C43v67Ev();
extern void _ZN7S1437C33v68Ev();
extern void _ZN7S1437C33v69Ev();
extern void _ZN7S1437C33v70Ev();
extern void _ZN7S1437C33v71Ev();
extern void _ZN7S1437C33v72Ev();
extern void _ZN7S1437C33v73Ev();
extern void _ZN7S1437C33v74Ev();
extern void _ZN7S1437C33v75Ev();
extern void _ZN7S1437C33v76Ev();
extern void _ZN7S1437C33v77Ev();
extern void _ZN7S1437C33v78Ev();
extern void _ZN7S1437C33v79Ev();
extern void _ZN7S1437C33v80Ev();
extern void _ZN7S1437C33v81Ev();
extern void _ZN7S1437C33v82Ev();
extern void _ZN7S1437C33v83Ev();
extern void _ZN7S1437C33v84Ev();
extern void _ZN7S1437C33v85Ev();
extern void _ZN7S1437C33v86Ev();
extern void _ZN7S1437C33v87Ev();
extern void _ZN7S1437C33v88Ev();
extern void _ZN7S1437C33v89Ev();
extern void _ZN7S1437C23v90Ev();
extern void _ZN7S1437C23v91Ev();
extern void _ZN7S1437C23v92Ev();
extern void _ZN7S1437C23v93Ev();
extern void _ZN7S1437C23v94Ev();
extern void _ZN7S1437C23v95Ev();
extern void _ZN7S1437C23v96Ev();
extern void _ZN7S1437C23v97Ev();
extern void _ZN7S1437C23v98Ev();
extern void _ZN7S1437C23v99Ev();
extern void _ZN7S1437C24v100Ev();
extern void _ZN7S1437C24v101Ev();
extern void _ZN7S1437C24v102Ev();
extern void _ZN7S1437C24v103Ev();
extern void _ZN7S1437C24v104Ev();
extern void _ZN7S1437C24v105Ev();
extern void _ZN7S1437C24v106Ev();
extern void _ZN7S1437C24v107Ev();
extern void _ZN7S1437C24v108Ev();
extern void _ZN7S1437C12v1Ev();
extern void _ZN7S1437C12v2Ev();
extern void _ZN7S1437C12v3Ev();
static  VTBL_ENTRY vtc_S1437C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1437C1[0]),
  (VTBL_ENTRY)&_ZN7S1437C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1437C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1437C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1437C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1437C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1437C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1437C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1437C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1437C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1437C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1437C1[];
extern  VTBL_ENTRY _ZTV7S1437C1[];
Class_Descriptor cd_S1437C1 = {  "S1437C1", // class name
  bases_S1437C1, 3,
  &(vtc_S1437C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,200), // object size
  NSPAIRA(_ZTI7S1437C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1437C1),112, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1579C4  {
  int s1579c4f0;
  __tsi64 s1579c4f1;
  void *s1579c4f2[4];
  int s1579c4f3[2];
  void *s1579c4f4;
  ::S473C6_nt s1579c4f5;
  void *s1579c4f6[2];
  virtual  ~S1579C4(); // _ZN7S1579C4D1Ev
  virtual void  v8(); // _ZN7S1579C42v8Ev
  virtual void  v9(); // _ZN7S1579C42v9Ev
  virtual void  v10(); // _ZN7S1579C43v10Ev
  virtual void  v11(); // _ZN7S1579C43v11Ev
  virtual void  v12(); // _ZN7S1579C43v12Ev
  virtual void  v13(); // _ZN7S1579C43v13Ev
  virtual void  v14(); // _ZN7S1579C43v14Ev
  virtual void  v15(); // _ZN7S1579C43v15Ev
  virtual void  v16(); // _ZN7S1579C43v16Ev
  virtual void  v17(); // _ZN7S1579C43v17Ev
  virtual void  v18(); // _ZN7S1579C43v18Ev
  virtual void  v19(); // _ZN7S1579C43v19Ev
  virtual void  v20(); // _ZN7S1579C43v20Ev
  virtual void  v21(); // _ZN7S1579C43v21Ev
  virtual void  v22(); // _ZN7S1579C43v22Ev
  virtual void  v23(); // _ZN7S1579C43v23Ev
  virtual void  v24(); // _ZN7S1579C43v24Ev
  virtual void  v25(); // _ZN7S1579C43v25Ev
  virtual void  v26(); // _ZN7S1579C43v26Ev
  virtual void  v27(); // _ZN7S1579C43v27Ev
  virtual void  v28(); // _ZN7S1579C43v28Ev
  virtual void  v29(); // _ZN7S1579C43v29Ev
  virtual void  v30(); // _ZN7S1579C43v30Ev
  virtual void  v31(); // _ZN7S1579C43v31Ev
  virtual void  v32(); // _ZN7S1579C43v32Ev
  virtual void  v33(); // _ZN7S1579C43v33Ev
  virtual void  v34(); // _ZN7S1579C43v34Ev
  virtual void  v35(); // _ZN7S1579C43v35Ev
  virtual void  v36(); // _ZN7S1579C43v36Ev
  virtual void  v37(); // _ZN7S1579C43v37Ev
  virtual void  v38(); // _ZN7S1579C43v38Ev
  virtual void  v39(); // _ZN7S1579C43v39Ev
  virtual void  v40(); // _ZN7S1579C43v40Ev
  virtual void  v41(); // _ZN7S1579C43v41Ev
  virtual void  v42(); // _ZN7S1579C43v42Ev
  virtual void  v43(); // _ZN7S1579C43v43Ev
  virtual void  v44(); // _ZN7S1579C43v44Ev
  virtual void  v45(); // _ZN7S1579C43v45Ev
  virtual void  v46(); // _ZN7S1579C43v46Ev
  virtual void  v47(); // _ZN7S1579C43v47Ev
  virtual void  v48(); // _ZN7S1579C43v48Ev
  virtual void  v49(); // _ZN7S1579C43v49Ev
  virtual void  v50(); // _ZN7S1579C43v50Ev
  virtual void  v51(); // _ZN7S1579C43v51Ev
  virtual void  v52(); // _ZN7S1579C43v52Ev
  virtual void  v53(); // _ZN7S1579C43v53Ev
  virtual void  v54(); // _ZN7S1579C43v54Ev
  virtual void  v55(); // _ZN7S1579C43v55Ev
  virtual void  v56(); // _ZN7S1579C43v56Ev
  virtual void  v57(); // _ZN7S1579C43v57Ev
  virtual void  v58(); // _ZN7S1579C43v58Ev
  virtual void  v59(); // _ZN7S1579C43v59Ev
  virtual void  v60(); // _ZN7S1579C43v60Ev
  virtual void  v61(); // _ZN7S1579C43v61Ev
  virtual void  v62(); // _ZN7S1579C43v62Ev
  virtual void  v63(); // _ZN7S1579C43v63Ev
  virtual void  v64(); // _ZN7S1579C43v64Ev
  virtual void  v65(); // _ZN7S1579C43v65Ev
  virtual void  v66(); // _ZN7S1579C43v66Ev
  virtual void  v67(); // _ZN7S1579C43v67Ev
  virtual void  v68(); // _ZN7S1579C43v68Ev
  virtual void  v69(); // _ZN7S1579C43v69Ev
  virtual void  v70(); // _ZN7S1579C43v70Ev
  virtual void  v71(); // _ZN7S1579C43v71Ev
  S1579C4(); // tgen
};
//SIG(-1 S1579C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1579C4 ::~S1579C4(){ note_dtor("S1579C4", this);}
void  S1579C4 ::v8(){vfunc_called(this, "_ZN7S1579C42v8Ev");}
void  S1579C4 ::v9(){vfunc_called(this, "_ZN7S1579C42v9Ev");}
void  S1579C4 ::v10(){vfunc_called(this, "_ZN7S1579C43v10Ev");}
void  S1579C4 ::v11(){vfunc_called(this, "_ZN7S1579C43v11Ev");}
void  S1579C4 ::v12(){vfunc_called(this, "_ZN7S1579C43v12Ev");}
void  S1579C4 ::v13(){vfunc_called(this, "_ZN7S1579C43v13Ev");}
void  S1579C4 ::v14(){vfunc_called(this, "_ZN7S1579C43v14Ev");}
void  S1579C4 ::v15(){vfunc_called(this, "_ZN7S1579C43v15Ev");}
void  S1579C4 ::v16(){vfunc_called(this, "_ZN7S1579C43v16Ev");}
void  S1579C4 ::v17(){vfunc_called(this, "_ZN7S1579C43v17Ev");}
void  S1579C4 ::v18(){vfunc_called(this, "_ZN7S1579C43v18Ev");}
void  S1579C4 ::v19(){vfunc_called(this, "_ZN7S1579C43v19Ev");}
void  S1579C4 ::v20(){vfunc_called(this, "_ZN7S1579C43v20Ev");}
void  S1579C4 ::v21(){vfunc_called(this, "_ZN7S1579C43v21Ev");}
void  S1579C4 ::v22(){vfunc_called(this, "_ZN7S1579C43v22Ev");}
void  S1579C4 ::v23(){vfunc_called(this, "_ZN7S1579C43v23Ev");}
void  S1579C4 ::v24(){vfunc_called(this, "_ZN7S1579C43v24Ev");}
void  S1579C4 ::v25(){vfunc_called(this, "_ZN7S1579C43v25Ev");}
void  S1579C4 ::v26(){vfunc_called(this, "_ZN7S1579C43v26Ev");}
void  S1579C4 ::v27(){vfunc_called(this, "_ZN7S1579C43v27Ev");}
void  S1579C4 ::v28(){vfunc_called(this, "_ZN7S1579C43v28Ev");}
void  S1579C4 ::v29(){vfunc_called(this, "_ZN7S1579C43v29Ev");}
void  S1579C4 ::v30(){vfunc_called(this, "_ZN7S1579C43v30Ev");}
void  S1579C4 ::v31(){vfunc_called(this, "_ZN7S1579C43v31Ev");}
void  S1579C4 ::v32(){vfunc_called(this, "_ZN7S1579C43v32Ev");}
void  S1579C4 ::v33(){vfunc_called(this, "_ZN7S1579C43v33Ev");}
void  S1579C4 ::v34(){vfunc_called(this, "_ZN7S1579C43v34Ev");}
void  S1579C4 ::v35(){vfunc_called(this, "_ZN7S1579C43v35Ev");}
void  S1579C4 ::v36(){vfunc_called(this, "_ZN7S1579C43v36Ev");}
void  S1579C4 ::v37(){vfunc_called(this, "_ZN7S1579C43v37Ev");}
void  S1579C4 ::v38(){vfunc_called(this, "_ZN7S1579C43v38Ev");}
void  S1579C4 ::v39(){vfunc_called(this, "_ZN7S1579C43v39Ev");}
void  S1579C4 ::v40(){vfunc_called(this, "_ZN7S1579C43v40Ev");}
void  S1579C4 ::v41(){vfunc_called(this, "_ZN7S1579C43v41Ev");}
void  S1579C4 ::v42(){vfunc_called(this, "_ZN7S1579C43v42Ev");}
void  S1579C4 ::v43(){vfunc_called(this, "_ZN7S1579C43v43Ev");}
void  S1579C4 ::v44(){vfunc_called(this, "_ZN7S1579C43v44Ev");}
void  S1579C4 ::v45(){vfunc_called(this, "_ZN7S1579C43v45Ev");}
void  S1579C4 ::v46(){vfunc_called(this, "_ZN7S1579C43v46Ev");}
void  S1579C4 ::v47(){vfunc_called(this, "_ZN7S1579C43v47Ev");}
void  S1579C4 ::v48(){vfunc_called(this, "_ZN7S1579C43v48Ev");}
void  S1579C4 ::v49(){vfunc_called(this, "_ZN7S1579C43v49Ev");}
void  S1579C4 ::v50(){vfunc_called(this, "_ZN7S1579C43v50Ev");}
void  S1579C4 ::v51(){vfunc_called(this, "_ZN7S1579C43v51Ev");}
void  S1579C4 ::v52(){vfunc_called(this, "_ZN7S1579C43v52Ev");}
void  S1579C4 ::v53(){vfunc_called(this, "_ZN7S1579C43v53Ev");}
void  S1579C4 ::v54(){vfunc_called(this, "_ZN7S1579C43v54Ev");}
void  S1579C4 ::v55(){vfunc_called(this, "_ZN7S1579C43v55Ev");}
void  S1579C4 ::v56(){vfunc_called(this, "_ZN7S1579C43v56Ev");}
void  S1579C4 ::v57(){vfunc_called(this, "_ZN7S1579C43v57Ev");}
void  S1579C4 ::v58(){vfunc_called(this, "_ZN7S1579C43v58Ev");}
void  S1579C4 ::v59(){vfunc_called(this, "_ZN7S1579C43v59Ev");}
void  S1579C4 ::v60(){vfunc_called(this, "_ZN7S1579C43v60Ev");}
void  S1579C4 ::v61(){vfunc_called(this, "_ZN7S1579C43v61Ev");}
void  S1579C4 ::v62(){vfunc_called(this, "_ZN7S1579C43v62Ev");}
void  S1579C4 ::v63(){vfunc_called(this, "_ZN7S1579C43v63Ev");}
void  S1579C4 ::v64(){vfunc_called(this, "_ZN7S1579C43v64Ev");}
void  S1579C4 ::v65(){vfunc_called(this, "_ZN7S1579C43v65Ev");}
void  S1579C4 ::v66(){vfunc_called(this, "_ZN7S1579C43v66Ev");}
void  S1579C4 ::v67(){vfunc_called(this, "_ZN7S1579C43v67Ev");}
void  S1579C4 ::v68(){vfunc_called(this, "_ZN7S1579C43v68Ev");}
void  S1579C4 ::v69(){vfunc_called(this, "_ZN7S1579C43v69Ev");}
void  S1579C4 ::v70(){vfunc_called(this, "_ZN7S1579C43v70Ev");}
void  S1579C4 ::v71(){vfunc_called(this, "_ZN7S1579C43v71Ev");}
S1579C4 ::S1579C4(){ note_ctor("S1579C4", this);} // tgen

static void Test_S1579C4()
{
  extern Class_Descriptor cd_S1579C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1579C4, buf);
    S1579C4 *dp, &lv = *(dp=new (buf) S1579C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1579C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1579C4)");
    check_field_offset(lv, s1579c4f0, ABISELECT(8,4), "S1579C4.s1579c4f0");
    check_field_offset(lv, s1579c4f1, ABISELECT(16,8), "S1579C4.s1579c4f1");
    check_field_offset(lv, s1579c4f2, ABISELECT(24,16), "S1579C4.s1579c4f2");
    check_field_offset(lv, s1579c4f3, ABISELECT(56,32), "S1579C4.s1579c4f3");
    check_field_offset(lv, s1579c4f4, ABISELECT(64,40), "S1579C4.s1579c4f4");
    check_field_offset(lv, s1579c4f5, ABISELECT(72,44), "S1579C4.s1579c4f5");
    check_field_offset(lv, s1579c4f6, ABISELECT(80,52), "S1579C4.s1579c4f6");
    test_class_info(&lv, &cd_S1579C4);
    dp->~S1579C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1579C4(Test_S1579C4, "S1579C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1579C4C1Ev();
extern void _ZN7S1579C4D1Ev();
Name_Map name_map_S1579C4[] = {
  NSPAIR(_ZN7S1579C4C1Ev),
  NSPAIR(_ZN7S1579C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1579C4[];
extern void _ZN7S1579C4D1Ev();
extern void _ZN7S1579C4D0Ev();
extern void _ZN7S1579C42v8Ev();
extern void _ZN7S1579C42v9Ev();
extern void _ZN7S1579C43v10Ev();
extern void _ZN7S1579C43v11Ev();
extern void _ZN7S1579C43v12Ev();
extern void _ZN7S1579C43v13Ev();
extern void _ZN7S1579C43v14Ev();
extern void _ZN7S1579C43v15Ev();
extern void _ZN7S1579C43v16Ev();
extern void _ZN7S1579C43v17Ev();
extern void _ZN7S1579C43v18Ev();
extern void _ZN7S1579C43v19Ev();
extern void _ZN7S1579C43v20Ev();
extern void _ZN7S1579C43v21Ev();
extern void _ZN7S1579C43v22Ev();
extern void _ZN7S1579C43v23Ev();
extern void _ZN7S1579C43v24Ev();
extern void _ZN7S1579C43v25Ev();
extern void _ZN7S1579C43v26Ev();
extern void _ZN7S1579C43v27Ev();
extern void _ZN7S1579C43v28Ev();
extern void _ZN7S1579C43v29Ev();
extern void _ZN7S1579C43v30Ev();
extern void _ZN7S1579C43v31Ev();
extern void _ZN7S1579C43v32Ev();
extern void _ZN7S1579C43v33Ev();
extern void _ZN7S1579C43v34Ev();
extern void _ZN7S1579C43v35Ev();
extern void _ZN7S1579C43v36Ev();
extern void _ZN7S1579C43v37Ev();
extern void _ZN7S1579C43v38Ev();
extern void _ZN7S1579C43v39Ev();
extern void _ZN7S1579C43v40Ev();
extern void _ZN7S1579C43v41Ev();
extern void _ZN7S1579C43v42Ev();
extern void _ZN7S1579C43v43Ev();
extern void _ZN7S1579C43v44Ev();
extern void _ZN7S1579C43v45Ev();
extern void _ZN7S1579C43v46Ev();
extern void _ZN7S1579C43v47Ev();
extern void _ZN7S1579C43v48Ev();
extern void _ZN7S1579C43v49Ev();
extern void _ZN7S1579C43v50Ev();
extern void _ZN7S1579C43v51Ev();
extern void _ZN7S1579C43v52Ev();
extern void _ZN7S1579C43v53Ev();
extern void _ZN7S1579C43v54Ev();
extern void _ZN7S1579C43v55Ev();
extern void _ZN7S1579C43v56Ev();
extern void _ZN7S1579C43v57Ev();
extern void _ZN7S1579C43v58Ev();
extern void _ZN7S1579C43v59Ev();
extern void _ZN7S1579C43v60Ev();
extern void _ZN7S1579C43v61Ev();
extern void _ZN7S1579C43v62Ev();
extern void _ZN7S1579C43v63Ev();
extern void _ZN7S1579C43v64Ev();
extern void _ZN7S1579C43v65Ev();
extern void _ZN7S1579C43v66Ev();
extern void _ZN7S1579C43v67Ev();
extern void _ZN7S1579C43v68Ev();
extern void _ZN7S1579C43v69Ev();
extern void _ZN7S1579C43v70Ev();
extern void _ZN7S1579C43v71Ev();
static  VTBL_ENTRY vtc_S1579C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1579C4[0]),
  (VTBL_ENTRY)&_ZN7S1579C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1579C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1579C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1579C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1579C4[];
extern  VTBL_ENTRY _ZTV7S1579C4[];
Class_Descriptor cd_S1579C4 = {  "S1579C4", // class name
  0,0,//no base classes
  &(vtc_S1579C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1579C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1579C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1579C3  : S1579C4 {
  int s1579c3f0[2];
  void *s1579c3f1;
  int s1579c3f2[2];
  ::S473C7_nt s1579c3f3;
  ::S473C7_nt s1579c3f4;
  ::S21925C42 s1579c3f5;
  ::S473C7_nt s1579c3f6;
  unsigned int s1579c3f7:1;
  unsigned int s1579c3f8:1;
  unsigned int s1579c3f9:1;
  unsigned int s1579c3f10:1;
  unsigned int s1579c3f11:1;
  int s1579c3f12[2];
  virtual  ~S1579C3(); // _ZN7S1579C3D1Ev
  virtual void  v72(); // _ZN7S1579C33v72Ev
  virtual void  v73(); // _ZN7S1579C33v73Ev
  virtual void  v74(); // _ZN7S1579C33v74Ev
  virtual void  v75(); // _ZN7S1579C33v75Ev
  virtual void  v76(); // _ZN7S1579C33v76Ev
  virtual void  v77(); // _ZN7S1579C33v77Ev
  virtual void  v78(); // _ZN7S1579C33v78Ev
  virtual void  v79(); // _ZN7S1579C33v79Ev
  virtual void  v80(); // _ZN7S1579C33v80Ev
  virtual void  v81(); // _ZN7S1579C33v81Ev
  virtual void  v82(); // _ZN7S1579C33v82Ev
  virtual void  v83(); // _ZN7S1579C33v83Ev
  virtual void  v84(); // _ZN7S1579C33v84Ev
  virtual void  v85(); // _ZN7S1579C33v85Ev
  virtual void  v86(); // _ZN7S1579C33v86Ev
  virtual void  v87(); // _ZN7S1579C33v87Ev
  virtual void  v88(); // _ZN7S1579C33v88Ev
  virtual void  v89(); // _ZN7S1579C33v89Ev
  virtual void  v90(); // _ZN7S1579C33v90Ev
  virtual void  v91(); // _ZN7S1579C33v91Ev
  virtual void  v92(); // _ZN7S1579C33v92Ev
  virtual void  v93(); // _ZN7S1579C33v93Ev
  S1579C3(); // tgen
};
//SIG(-1 S1579C3) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1579C3 ::~S1579C3(){ note_dtor("S1579C3", this);}
void  S1579C3 ::v72(){vfunc_called(this, "_ZN7S1579C33v72Ev");}
void  S1579C3 ::v73(){vfunc_called(this, "_ZN7S1579C33v73Ev");}
void  S1579C3 ::v74(){vfunc_called(this, "_ZN7S1579C33v74Ev");}
void  S1579C3 ::v75(){vfunc_called(this, "_ZN7S1579C33v75Ev");}
void  S1579C3 ::v76(){vfunc_called(this, "_ZN7S1579C33v76Ev");}
void  S1579C3 ::v77(){vfunc_called(this, "_ZN7S1579C33v77Ev");}
void  S1579C3 ::v78(){vfunc_called(this, "_ZN7S1579C33v78Ev");}
void  S1579C3 ::v79(){vfunc_called(this, "_ZN7S1579C33v79Ev");}
void  S1579C3 ::v80(){vfunc_called(this, "_ZN7S1579C33v80Ev");}
void  S1579C3 ::v81(){vfunc_called(this, "_ZN7S1579C33v81Ev");}
void  S1579C3 ::v82(){vfunc_called(this, "_ZN7S1579C33v82Ev");}
void  S1579C3 ::v83(){vfunc_called(this, "_ZN7S1579C33v83Ev");}
void  S1579C3 ::v84(){vfunc_called(this, "_ZN7S1579C33v84Ev");}
void  S1579C3 ::v85(){vfunc_called(this, "_ZN7S1579C33v85Ev");}
void  S1579C3 ::v86(){vfunc_called(this, "_ZN7S1579C33v86Ev");}
void  S1579C3 ::v87(){vfunc_called(this, "_ZN7S1579C33v87Ev");}
void  S1579C3 ::v88(){vfunc_called(this, "_ZN7S1579C33v88Ev");}
void  S1579C3 ::v89(){vfunc_called(this, "_ZN7S1579C33v89Ev");}
void  S1579C3 ::v90(){vfunc_called(this, "_ZN7S1579C33v90Ev");}
void  S1579C3 ::v91(){vfunc_called(this, "_ZN7S1579C33v91Ev");}
void  S1579C3 ::v92(){vfunc_called(this, "_ZN7S1579C33v92Ev");}
void  S1579C3 ::v93(){vfunc_called(this, "_ZN7S1579C33v93Ev");}
S1579C3 ::S1579C3(){ note_ctor("S1579C3", this);} // tgen

static void Test_S1579C3()
{
  extern Class_Descriptor cd_S1579C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S1579C3, buf);
    S1579C3 *dp, &lv = *(dp=new (buf) S1579C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S1579C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1579C3)");
    check_base_class_offset(lv, (S1579C4*), 0, "S1579C3");
    check_field_offset(lv, s1579c3f0, ABISELECT(96,60), "S1579C3.s1579c3f0");
    check_field_offset(lv, s1579c3f1, ABISELECT(104,68), "S1579C3.s1579c3f1");
    check_field_offset(lv, s1579c3f2, ABISELECT(112,72), "S1579C3.s1579c3f2");
    check_field_offset(lv, s1579c3f3, ABISELECT(120,80), "S1579C3.s1579c3f3");
    check_field_offset(lv, s1579c3f4, ABISELECT(136,92), "S1579C3.s1579c3f4");
    check_field_offset(lv, s1579c3f5, ABISELECT(152,104), "S1579C3.s1579c3f5");
    check_field_offset(lv, s1579c3f6, ABISELECT(160,108), "S1579C3.s1579c3f6");
    set_bf_and_test(lv, s1579c3f7, ABISELECT(176,120), 0, 1, 1, "S1579C3");
    set_bf_and_test(lv, s1579c3f8, ABISELECT(176,120), 1, 1, 1, "S1579C3");
    set_bf_and_test(lv, s1579c3f9, ABISELECT(176,120), 2, 1, 1, "S1579C3");
    set_bf_and_test(lv, s1579c3f10, ABISELECT(176,120), 3, 1, 1, "S1579C3");
    set_bf_and_test(lv, s1579c3f11, ABISELECT(176,120), 4, 1, 1, "S1579C3");
    check_field_offset(lv, s1579c3f12, ABISELECT(180,124), "S1579C3.s1579c3f12");
    test_class_info(&lv, &cd_S1579C3);
    dp->~S1579C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1579C3(Test_S1579C3, "S1579C3", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN7S1579C3C1Ev();
extern void _ZN7S1579C3D1Ev();
Name_Map name_map_S1579C3[] = {
  NSPAIR(_ZN7S1579C3C1Ev),
  NSPAIR(_ZN7S1579C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1579C4;
extern VTBL_ENTRY _ZTI7S1579C4[];
extern  VTBL_ENTRY _ZTV7S1579C4[];
static Base_Class bases_S1579C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1579C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1579C3[];
extern void _ZN7S1579C3D1Ev();
extern void _ZN7S1579C3D0Ev();
extern void _ZN7S1579C42v8Ev();
extern void _ZN7S1579C42v9Ev();
extern void _ZN7S1579C43v10Ev();
extern void _ZN7S1579C43v11Ev();
extern void _ZN7S1579C43v12Ev();
extern void _ZN7S1579C43v13Ev();
extern void _ZN7S1579C43v14Ev();
extern void _ZN7S1579C43v15Ev();
extern void _ZN7S1579C43v16Ev();
extern void _ZN7S1579C43v17Ev();
extern void _ZN7S1579C43v18Ev();
extern void _ZN7S1579C43v19Ev();
extern void _ZN7S1579C43v20Ev();
extern void _ZN7S1579C43v21Ev();
extern void _ZN7S1579C43v22Ev();
extern void _ZN7S1579C43v23Ev();
extern void _ZN7S1579C43v24Ev();
extern void _ZN7S1579C43v25Ev();
extern void _ZN7S1579C43v26Ev();
extern void _ZN7S1579C43v27Ev();
extern void _ZN7S1579C43v28Ev();
extern void _ZN7S1579C43v29Ev();
extern void _ZN7S1579C43v30Ev();
extern void _ZN7S1579C43v31Ev();
extern void _ZN7S1579C43v32Ev();
extern void _ZN7S1579C43v33Ev();
extern void _ZN7S1579C43v34Ev();
extern void _ZN7S1579C43v35Ev();
extern void _ZN7S1579C43v36Ev();
extern void _ZN7S1579C43v37Ev();
extern void _ZN7S1579C43v38Ev();
extern void _ZN7S1579C43v39Ev();
extern void _ZN7S1579C43v40Ev();
extern void _ZN7S1579C43v41Ev();
extern void _ZN7S1579C43v42Ev();
extern void _ZN7S1579C43v43Ev();
extern void _ZN7S1579C43v44Ev();
extern void _ZN7S1579C43v45Ev();
extern void _ZN7S1579C43v46Ev();
extern void _ZN7S1579C43v47Ev();
extern void _ZN7S1579C43v48Ev();
extern void _ZN7S1579C43v49Ev();
extern void _ZN7S1579C43v50Ev();
extern void _ZN7S1579C43v51Ev();
extern void _ZN7S1579C43v52Ev();
extern void _ZN7S1579C43v53Ev();
extern void _ZN7S1579C43v54Ev();
extern void _ZN7S1579C43v55Ev();
extern void _ZN7S1579C43v56Ev();
extern void _ZN7S1579C43v57Ev();
extern void _ZN7S1579C43v58Ev();
extern void _ZN7S1579C43v59Ev();
extern void _ZN7S1579C43v60Ev();
extern void _ZN7S1579C43v61Ev();
extern void _ZN7S1579C43v62Ev();
extern void _ZN7S1579C43v63Ev();
extern void _ZN7S1579C43v64Ev();
extern void _ZN7S1579C43v65Ev();
extern void _ZN7S1579C43v66Ev();
extern void _ZN7S1579C43v67Ev();
extern void _ZN7S1579C43v68Ev();
extern void _ZN7S1579C43v69Ev();
extern void _ZN7S1579C43v70Ev();
extern void _ZN7S1579C43v71Ev();
extern void _ZN7S1579C33v72Ev();
extern void _ZN7S1579C33v73Ev();
extern void _ZN7S1579C33v74Ev();
extern void _ZN7S1579C33v75Ev();
extern void _ZN7S1579C33v76Ev();
extern void _ZN7S1579C33v77Ev();
extern void _ZN7S1579C33v78Ev();
extern void _ZN7S1579C33v79Ev();
extern void _ZN7S1579C33v80Ev();
extern void _ZN7S1579C33v81Ev();
extern void _ZN7S1579C33v82Ev();
extern void _ZN7S1579C33v83Ev();
extern void _ZN7S1579C33v84Ev();
extern void _ZN7S1579C33v85Ev();
extern void _ZN7S1579C33v86Ev();
extern void _ZN7S1579C33v87Ev();
extern void _ZN7S1579C33v88Ev();
extern void _ZN7S1579C33v89Ev();
extern void _ZN7S1579C33v90Ev();
extern void _ZN7S1579C33v91Ev();
extern void _ZN7S1579C33v92Ev();
extern void _ZN7S1579C33v93Ev();
static  VTBL_ENTRY vtc_S1579C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1579C3[0]),
  (VTBL_ENTRY)&_ZN7S1579C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1579C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1579C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1579C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v93Ev,
};
extern VTBL_ENTRY _ZTI7S1579C3[];
extern  VTBL_ENTRY _ZTV7S1579C3[];
Class_Descriptor cd_S1579C3 = {  "S1579C3", // class name
  bases_S1579C3, 1,
  &(vtc_S1579C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI7S1579C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1579C3),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1579C2  : S1579C3 {
  ::S473C6_nt s1579c2f0;
  virtual  ~S1579C2(); // _ZN7S1579C2D1Ev
  virtual void  v94(); // _ZN7S1579C23v94Ev
  virtual void  v95(); // _ZN7S1579C23v95Ev
  virtual void  v96(); // _ZN7S1579C23v96Ev
  virtual void  v97(); // _ZN7S1579C23v97Ev
  virtual void  v98(); // _ZN7S1579C23v98Ev
  virtual void  v99(); // _ZN7S1579C23v99Ev
  virtual void  v100(); // _ZN7S1579C24v100Ev
  virtual void  v101(); // _ZN7S1579C24v101Ev
  virtual void  v102(); // _ZN7S1579C24v102Ev
  virtual void  v103(); // _ZN7S1579C24v103Ev
  virtual void  v104(); // _ZN7S1579C24v104Ev
  virtual void  v105(); // _ZN7S1579C24v105Ev
  virtual void  v106(); // _ZN7S1579C24v106Ev
  virtual void  v107(); // _ZN7S1579C24v107Ev
  virtual void  v108(); // _ZN7S1579C24v108Ev
  virtual void  v109(); // _ZN7S1579C24v109Ev
  virtual void  v110(); // _ZN7S1579C24v110Ev
  virtual void  v111(); // _ZN7S1579C24v111Ev
  virtual void  v112(); // _ZN7S1579C24v112Ev
  S1579C2(); // tgen
};
//SIG(-1 S1579C2) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S1579C2 ::~S1579C2(){ note_dtor("S1579C2", this);}
void  S1579C2 ::v94(){vfunc_called(this, "_ZN7S1579C23v94Ev");}
void  S1579C2 ::v95(){vfunc_called(this, "_ZN7S1579C23v95Ev");}
void  S1579C2 ::v96(){vfunc_called(this, "_ZN7S1579C23v96Ev");}
void  S1579C2 ::v97(){vfunc_called(this, "_ZN7S1579C23v97Ev");}
void  S1579C2 ::v98(){vfunc_called(this, "_ZN7S1579C23v98Ev");}
void  S1579C2 ::v99(){vfunc_called(this, "_ZN7S1579C23v99Ev");}
void  S1579C2 ::v100(){vfunc_called(this, "_ZN7S1579C24v100Ev");}
void  S1579C2 ::v101(){vfunc_called(this, "_ZN7S1579C24v101Ev");}
void  S1579C2 ::v102(){vfunc_called(this, "_ZN7S1579C24v102Ev");}
void  S1579C2 ::v103(){vfunc_called(this, "_ZN7S1579C24v103Ev");}
void  S1579C2 ::v104(){vfunc_called(this, "_ZN7S1579C24v104Ev");}
void  S1579C2 ::v105(){vfunc_called(this, "_ZN7S1579C24v105Ev");}
void  S1579C2 ::v106(){vfunc_called(this, "_ZN7S1579C24v106Ev");}
void  S1579C2 ::v107(){vfunc_called(this, "_ZN7S1579C24v107Ev");}
void  S1579C2 ::v108(){vfunc_called(this, "_ZN7S1579C24v108Ev");}
void  S1579C2 ::v109(){vfunc_called(this, "_ZN7S1579C24v109Ev");}
void  S1579C2 ::v110(){vfunc_called(this, "_ZN7S1579C24v110Ev");}
void  S1579C2 ::v111(){vfunc_called(this, "_ZN7S1579C24v111Ev");}
void  S1579C2 ::v112(){vfunc_called(this, "_ZN7S1579C24v112Ev");}
S1579C2 ::S1579C2(){ note_ctor("S1579C2", this);} // tgen

static void Test_S1579C2()
{
  extern Class_Descriptor cd_S1579C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S1579C2, buf);
    S1579C2 *dp, &lv = *(dp=new (buf) S1579C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S1579C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1579C2)");
    check_base_class_offset(lv, (S1579C4*)(S1579C3*), 0, "S1579C2");
    check_base_class_offset(lv, (S1579C3*), 0, "S1579C2");
    check_field_offset(lv, s1579c2f0, ABISELECT(188,132), "S1579C2.s1579c2f0");
    test_class_info(&lv, &cd_S1579C2);
    dp->~S1579C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1579C2(Test_S1579C2, "S1579C2", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S1579C2C1Ev();
extern void _ZN7S1579C2D1Ev();
Name_Map name_map_S1579C2[] = {
  NSPAIR(_ZN7S1579C2C1Ev),
  NSPAIR(_ZN7S1579C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1579C4;
extern VTBL_ENTRY _ZTI7S1579C4[];
extern  VTBL_ENTRY _ZTV7S1579C4[];
extern Class_Descriptor cd_S1579C3;
extern VTBL_ENTRY _ZTI7S1579C3[];
extern  VTBL_ENTRY _ZTV7S1579C3[];
static Base_Class bases_S1579C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1579C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1579C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1579C2[];
extern void _ZN7S1579C2D1Ev();
extern void _ZN7S1579C2D0Ev();
extern void _ZN7S1579C42v8Ev();
extern void _ZN7S1579C42v9Ev();
extern void _ZN7S1579C43v10Ev();
extern void _ZN7S1579C43v11Ev();
extern void _ZN7S1579C43v12Ev();
extern void _ZN7S1579C43v13Ev();
extern void _ZN7S1579C43v14Ev();
extern void _ZN7S1579C43v15Ev();
extern void _ZN7S1579C43v16Ev();
extern void _ZN7S1579C43v17Ev();
extern void _ZN7S1579C43v18Ev();
extern void _ZN7S1579C43v19Ev();
extern void _ZN7S1579C43v20Ev();
extern void _ZN7S1579C43v21Ev();
extern void _ZN7S1579C43v22Ev();
extern void _ZN7S1579C43v23Ev();
extern void _ZN7S1579C43v24Ev();
extern void _ZN7S1579C43v25Ev();
extern void _ZN7S1579C43v26Ev();
extern void _ZN7S1579C43v27Ev();
extern void _ZN7S1579C43v28Ev();
extern void _ZN7S1579C43v29Ev();
extern void _ZN7S1579C43v30Ev();
extern void _ZN7S1579C43v31Ev();
extern void _ZN7S1579C43v32Ev();
extern void _ZN7S1579C43v33Ev();
extern void _ZN7S1579C43v34Ev();
extern void _ZN7S1579C43v35Ev();
extern void _ZN7S1579C43v36Ev();
extern void _ZN7S1579C43v37Ev();
extern void _ZN7S1579C43v38Ev();
extern void _ZN7S1579C43v39Ev();
extern void _ZN7S1579C43v40Ev();
extern void _ZN7S1579C43v41Ev();
extern void _ZN7S1579C43v42Ev();
extern void _ZN7S1579C43v43Ev();
extern void _ZN7S1579C43v44Ev();
extern void _ZN7S1579C43v45Ev();
extern void _ZN7S1579C43v46Ev();
extern void _ZN7S1579C43v47Ev();
extern void _ZN7S1579C43v48Ev();
extern void _ZN7S1579C43v49Ev();
extern void _ZN7S1579C43v50Ev();
extern void _ZN7S1579C43v51Ev();
extern void _ZN7S1579C43v52Ev();
extern void _ZN7S1579C43v53Ev();
extern void _ZN7S1579C43v54Ev();
extern void _ZN7S1579C43v55Ev();
extern void _ZN7S1579C43v56Ev();
extern void _ZN7S1579C43v57Ev();
extern void _ZN7S1579C43v58Ev();
extern void _ZN7S1579C43v59Ev();
extern void _ZN7S1579C43v60Ev();
extern void _ZN7S1579C43v61Ev();
extern void _ZN7S1579C43v62Ev();
extern void _ZN7S1579C43v63Ev();
extern void _ZN7S1579C43v64Ev();
extern void _ZN7S1579C43v65Ev();
extern void _ZN7S1579C43v66Ev();
extern void _ZN7S1579C43v67Ev();
extern void _ZN7S1579C43v68Ev();
extern void _ZN7S1579C43v69Ev();
extern void _ZN7S1579C43v70Ev();
extern void _ZN7S1579C43v71Ev();
extern void _ZN7S1579C33v72Ev();
extern void _ZN7S1579C33v73Ev();
extern void _ZN7S1579C33v74Ev();
extern void _ZN7S1579C33v75Ev();
extern void _ZN7S1579C33v76Ev();
extern void _ZN7S1579C33v77Ev();
extern void _ZN7S1579C33v78Ev();
extern void _ZN7S1579C33v79Ev();
extern void _ZN7S1579C33v80Ev();
extern void _ZN7S1579C33v81Ev();
extern void _ZN7S1579C33v82Ev();
extern void _ZN7S1579C33v83Ev();
extern void _ZN7S1579C33v84Ev();
extern void _ZN7S1579C33v85Ev();
extern void _ZN7S1579C33v86Ev();
extern void _ZN7S1579C33v87Ev();
extern void _ZN7S1579C33v88Ev();
extern void _ZN7S1579C33v89Ev();
extern void _ZN7S1579C33v90Ev();
extern void _ZN7S1579C33v91Ev();
extern void _ZN7S1579C33v92Ev();
extern void _ZN7S1579C33v93Ev();
extern void _ZN7S1579C23v94Ev();
extern void _ZN7S1579C23v95Ev();
extern void _ZN7S1579C23v96Ev();
extern void _ZN7S1579C23v97Ev();
extern void _ZN7S1579C23v98Ev();
extern void _ZN7S1579C23v99Ev();
extern void _ZN7S1579C24v100Ev();
extern void _ZN7S1579C24v101Ev();
extern void _ZN7S1579C24v102Ev();
extern void _ZN7S1579C24v103Ev();
extern void _ZN7S1579C24v104Ev();
extern void _ZN7S1579C24v105Ev();
extern void _ZN7S1579C24v106Ev();
extern void _ZN7S1579C24v107Ev();
extern void _ZN7S1579C24v108Ev();
extern void _ZN7S1579C24v109Ev();
extern void _ZN7S1579C24v110Ev();
extern void _ZN7S1579C24v111Ev();
extern void _ZN7S1579C24v112Ev();
static  VTBL_ENTRY vtc_S1579C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1579C2[0]),
  (VTBL_ENTRY)&_ZN7S1579C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1579C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1579C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1579C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v112Ev,
};
extern VTBL_ENTRY _ZTI7S1579C2[];
extern  VTBL_ENTRY _ZTV7S1579C2[];
Class_Descriptor cd_S1579C2 = {  "S1579C2", // class name
  bases_S1579C2, 2,
  &(vtc_S1579C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S1579C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1579C2),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1579C11_nt  {
  int s1579c11f0[4];
  unsigned int s1579c11f1:1;
  void  mf1579c11(); // _ZN11S1579C11_nt9mf1579c11Ev
};
//SIG(-1 S1579C11_nt) C1{ m Fi[4] Fi:1}


void  S1579C11_nt ::mf1579c11(){}

//skip512 S1579C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1579C1  : S1579C2 {
  ::S1579C11_nt s1579c1f0;
  virtual  ~S1579C1(); // _ZN7S1579C1D1Ev
  virtual void  v1(); // _ZN7S1579C12v1Ev
  virtual void  v2(); // _ZN7S1579C12v2Ev
  virtual void  v3(); // _ZN7S1579C12v3Ev
  virtual void  v4(); // _ZN7S1579C12v4Ev
  virtual void  v5(); // _ZN7S1579C12v5Ev
  virtual void  v6(); // _ZN7S1579C12v6Ev
  virtual void  v7(); // _ZN7S1579C12v7Ev
  S1579C1(); // tgen
};
//SIG(1 S1579C1) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 FC5} vd v1 v2 v3 v4 v5 v6 v7 FC11{ m Fi[4] Fi:1}}


 S1579C1 ::~S1579C1(){ note_dtor("S1579C1", this);}
void  S1579C1 ::v1(){vfunc_called(this, "_ZN7S1579C12v1Ev");}
void  S1579C1 ::v2(){vfunc_called(this, "_ZN7S1579C12v2Ev");}
void  S1579C1 ::v3(){vfunc_called(this, "_ZN7S1579C12v3Ev");}
void  S1579C1 ::v4(){vfunc_called(this, "_ZN7S1579C12v4Ev");}
void  S1579C1 ::v5(){vfunc_called(this, "_ZN7S1579C12v5Ev");}
void  S1579C1 ::v6(){vfunc_called(this, "_ZN7S1579C12v6Ev");}
void  S1579C1 ::v7(){vfunc_called(this, "_ZN7S1579C12v7Ev");}
S1579C1 ::S1579C1(){ note_ctor("S1579C1", this);} // tgen

static void Test_S1579C1()
{
  extern Class_Descriptor cd_S1579C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,41)];
    init_test(&cd_S1579C1, buf);
    S1579C1 *dp, &lv = *(dp=new (buf) S1579C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,160), "sizeof(S1579C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1579C1)");
    check_base_class_offset(lv, (S1579C4*)(S1579C3*)(S1579C2*), 0, "S1579C1");
    check_base_class_offset(lv, (S1579C3*)(S1579C2*), 0, "S1579C1");
    check_base_class_offset(lv, (S1579C2*), 0, "S1579C1");
    check_field_offset(lv, s1579c1f0, ABISELECT(196,140), "S1579C1.s1579c1f0");
    test_class_info(&lv, &cd_S1579C1);
    dp->~S1579C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1579C1(Test_S1579C1, "S1579C1", ABISELECT(216,160));

#else // __cplusplus

extern void _ZN7S1579C1C1Ev();
extern void _ZN7S1579C1D1Ev();
Name_Map name_map_S1579C1[] = {
  NSPAIR(_ZN7S1579C1C1Ev),
  NSPAIR(_ZN7S1579C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1579C4;
extern VTBL_ENTRY _ZTI7S1579C4[];
extern  VTBL_ENTRY _ZTV7S1579C4[];
extern Class_Descriptor cd_S1579C3;
extern VTBL_ENTRY _ZTI7S1579C3[];
extern  VTBL_ENTRY _ZTV7S1579C3[];
extern Class_Descriptor cd_S1579C2;
extern VTBL_ENTRY _ZTI7S1579C2[];
extern  VTBL_ENTRY _ZTV7S1579C2[];
static Base_Class bases_S1579C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1579C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1579C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1579C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1579C1[];
extern void _ZN7S1579C1D1Ev();
extern void _ZN7S1579C1D0Ev();
extern void _ZN7S1579C42v8Ev();
extern void _ZN7S1579C42v9Ev();
extern void _ZN7S1579C43v10Ev();
extern void _ZN7S1579C43v11Ev();
extern void _ZN7S1579C43v12Ev();
extern void _ZN7S1579C43v13Ev();
extern void _ZN7S1579C43v14Ev();
extern void _ZN7S1579C43v15Ev();
extern void _ZN7S1579C43v16Ev();
extern void _ZN7S1579C43v17Ev();
extern void _ZN7S1579C43v18Ev();
extern void _ZN7S1579C43v19Ev();
extern void _ZN7S1579C43v20Ev();
extern void _ZN7S1579C43v21Ev();
extern void _ZN7S1579C43v22Ev();
extern void _ZN7S1579C43v23Ev();
extern void _ZN7S1579C43v24Ev();
extern void _ZN7S1579C43v25Ev();
extern void _ZN7S1579C43v26Ev();
extern void _ZN7S1579C43v27Ev();
extern void _ZN7S1579C43v28Ev();
extern void _ZN7S1579C43v29Ev();
extern void _ZN7S1579C43v30Ev();
extern void _ZN7S1579C43v31Ev();
extern void _ZN7S1579C43v32Ev();
extern void _ZN7S1579C43v33Ev();
extern void _ZN7S1579C43v34Ev();
extern void _ZN7S1579C43v35Ev();
extern void _ZN7S1579C43v36Ev();
extern void _ZN7S1579C43v37Ev();
extern void _ZN7S1579C43v38Ev();
extern void _ZN7S1579C43v39Ev();
extern void _ZN7S1579C43v40Ev();
extern void _ZN7S1579C43v41Ev();
extern void _ZN7S1579C43v42Ev();
extern void _ZN7S1579C43v43Ev();
extern void _ZN7S1579C43v44Ev();
extern void _ZN7S1579C43v45Ev();
extern void _ZN7S1579C43v46Ev();
extern void _ZN7S1579C43v47Ev();
extern void _ZN7S1579C43v48Ev();
extern void _ZN7S1579C43v49Ev();
extern void _ZN7S1579C43v50Ev();
extern void _ZN7S1579C43v51Ev();
extern void _ZN7S1579C43v52Ev();
extern void _ZN7S1579C43v53Ev();
extern void _ZN7S1579C43v54Ev();
extern void _ZN7S1579C43v55Ev();
extern void _ZN7S1579C43v56Ev();
extern void _ZN7S1579C43v57Ev();
extern void _ZN7S1579C43v58Ev();
extern void _ZN7S1579C43v59Ev();
extern void _ZN7S1579C43v60Ev();
extern void _ZN7S1579C43v61Ev();
extern void _ZN7S1579C43v62Ev();
extern void _ZN7S1579C43v63Ev();
extern void _ZN7S1579C43v64Ev();
extern void _ZN7S1579C43v65Ev();
extern void _ZN7S1579C43v66Ev();
extern void _ZN7S1579C43v67Ev();
extern void _ZN7S1579C43v68Ev();
extern void _ZN7S1579C43v69Ev();
extern void _ZN7S1579C43v70Ev();
extern void _ZN7S1579C43v71Ev();
extern void _ZN7S1579C33v72Ev();
extern void _ZN7S1579C33v73Ev();
extern void _ZN7S1579C33v74Ev();
extern void _ZN7S1579C33v75Ev();
extern void _ZN7S1579C33v76Ev();
extern void _ZN7S1579C33v77Ev();
extern void _ZN7S1579C33v78Ev();
extern void _ZN7S1579C33v79Ev();
extern void _ZN7S1579C33v80Ev();
extern void _ZN7S1579C33v81Ev();
extern void _ZN7S1579C33v82Ev();
extern void _ZN7S1579C33v83Ev();
extern void _ZN7S1579C33v84Ev();
extern void _ZN7S1579C33v85Ev();
extern void _ZN7S1579C33v86Ev();
extern void _ZN7S1579C33v87Ev();
extern void _ZN7S1579C33v88Ev();
extern void _ZN7S1579C33v89Ev();
extern void _ZN7S1579C33v90Ev();
extern void _ZN7S1579C33v91Ev();
extern void _ZN7S1579C33v92Ev();
extern void _ZN7S1579C33v93Ev();
extern void _ZN7S1579C23v94Ev();
extern void _ZN7S1579C23v95Ev();
extern void _ZN7S1579C23v96Ev();
extern void _ZN7S1579C23v97Ev();
extern void _ZN7S1579C23v98Ev();
extern void _ZN7S1579C23v99Ev();
extern void _ZN7S1579C24v100Ev();
extern void _ZN7S1579C24v101Ev();
extern void _ZN7S1579C24v102Ev();
extern void _ZN7S1579C24v103Ev();
extern void _ZN7S1579C24v104Ev();
extern void _ZN7S1579C24v105Ev();
extern void _ZN7S1579C24v106Ev();
extern void _ZN7S1579C24v107Ev();
extern void _ZN7S1579C24v108Ev();
extern void _ZN7S1579C24v109Ev();
extern void _ZN7S1579C24v110Ev();
extern void _ZN7S1579C24v111Ev();
extern void _ZN7S1579C24v112Ev();
extern void _ZN7S1579C12v1Ev();
extern void _ZN7S1579C12v2Ev();
extern void _ZN7S1579C12v3Ev();
extern void _ZN7S1579C12v4Ev();
extern void _ZN7S1579C12v5Ev();
extern void _ZN7S1579C12v6Ev();
extern void _ZN7S1579C12v7Ev();
static  VTBL_ENTRY vtc_S1579C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1579C1[0]),
  (VTBL_ENTRY)&_ZN7S1579C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1579C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1579C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1579C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1579C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1579C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1579C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1579C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1579C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1579C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1579C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1579C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1579C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1579C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1579C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1579C1[];
extern  VTBL_ENTRY _ZTV7S1579C1[];
Class_Descriptor cd_S1579C1 = {  "S1579C1", // class name
  bases_S1579C1, 3,
  &(vtc_S1579C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,160), // object size
  NSPAIRA(_ZTI7S1579C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1579C1),116, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1605C4  {
  int s1605c4f0;
  __tsi64 s1605c4f1;
  void *s1605c4f2[4];
  int s1605c4f3[2];
  void *s1605c4f4;
  ::S473C6_nt s1605c4f5;
  void *s1605c4f6[2];
  virtual  ~S1605C4(); // _ZN7S1605C4D1Ev
  virtual void  v9(); // _ZN7S1605C42v9Ev
  virtual void  v10(); // _ZN7S1605C43v10Ev
  virtual void  v11(); // _ZN7S1605C43v11Ev
  virtual void  v12(); // _ZN7S1605C43v12Ev
  virtual void  v13(); // _ZN7S1605C43v13Ev
  virtual void  v14(); // _ZN7S1605C43v14Ev
  virtual void  v15(); // _ZN7S1605C43v15Ev
  virtual void  v16(); // _ZN7S1605C43v16Ev
  virtual void  v17(); // _ZN7S1605C43v17Ev
  virtual void  v18(); // _ZN7S1605C43v18Ev
  virtual void  v19(); // _ZN7S1605C43v19Ev
  virtual void  v20(); // _ZN7S1605C43v20Ev
  virtual void  v21(); // _ZN7S1605C43v21Ev
  virtual void  v22(); // _ZN7S1605C43v22Ev
  virtual void  v23(); // _ZN7S1605C43v23Ev
  virtual void  v24(); // _ZN7S1605C43v24Ev
  virtual void  v25(); // _ZN7S1605C43v25Ev
  virtual void  v26(); // _ZN7S1605C43v26Ev
  virtual void  v27(); // _ZN7S1605C43v27Ev
  virtual void  v28(); // _ZN7S1605C43v28Ev
  virtual void  v29(); // _ZN7S1605C43v29Ev
  virtual void  v30(); // _ZN7S1605C43v30Ev
  virtual void  v31(); // _ZN7S1605C43v31Ev
  virtual void  v32(); // _ZN7S1605C43v32Ev
  virtual void  v33(); // _ZN7S1605C43v33Ev
  virtual void  v34(); // _ZN7S1605C43v34Ev
  virtual void  v35(); // _ZN7S1605C43v35Ev
  virtual void  v36(); // _ZN7S1605C43v36Ev
  virtual void  v37(); // _ZN7S1605C43v37Ev
  virtual void  v38(); // _ZN7S1605C43v38Ev
  virtual void  v39(); // _ZN7S1605C43v39Ev
  virtual void  v40(); // _ZN7S1605C43v40Ev
  virtual void  v41(); // _ZN7S1605C43v41Ev
  virtual void  v42(); // _ZN7S1605C43v42Ev
  virtual void  v43(); // _ZN7S1605C43v43Ev
  virtual void  v44(); // _ZN7S1605C43v44Ev
  virtual void  v45(); // _ZN7S1605C43v45Ev
  virtual void  v46(); // _ZN7S1605C43v46Ev
  virtual void  v47(); // _ZN7S1605C43v47Ev
  virtual void  v48(); // _ZN7S1605C43v48Ev
  virtual void  v49(); // _ZN7S1605C43v49Ev
  virtual void  v50(); // _ZN7S1605C43v50Ev
  virtual void  v51(); // _ZN7S1605C43v51Ev
  virtual void  v52(); // _ZN7S1605C43v52Ev
  virtual void  v53(); // _ZN7S1605C43v53Ev
  virtual void  v54(); // _ZN7S1605C43v54Ev
  virtual void  v55(); // _ZN7S1605C43v55Ev
  virtual void  v56(); // _ZN7S1605C43v56Ev
  virtual void  v57(); // _ZN7S1605C43v57Ev
  virtual void  v58(); // _ZN7S1605C43v58Ev
  virtual void  v59(); // _ZN7S1605C43v59Ev
  virtual void  v60(); // _ZN7S1605C43v60Ev
  virtual void  v61(); // _ZN7S1605C43v61Ev
  virtual void  v62(); // _ZN7S1605C43v62Ev
  virtual void  v63(); // _ZN7S1605C43v63Ev
  virtual void  v64(); // _ZN7S1605C43v64Ev
  virtual void  v65(); // _ZN7S1605C43v65Ev
  virtual void  v66(); // _ZN7S1605C43v66Ev
  virtual void  v67(); // _ZN7S1605C43v67Ev
  virtual void  v68(); // _ZN7S1605C43v68Ev
  virtual void  v69(); // _ZN7S1605C43v69Ev
  virtual void  v70(); // _ZN7S1605C43v70Ev
  virtual void  v71(); // _ZN7S1605C43v71Ev
  virtual void  v72(); // _ZN7S1605C43v72Ev
  S1605C4(); // tgen
};
//SIG(-1 S1605C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1605C4 ::~S1605C4(){ note_dtor("S1605C4", this);}
void  S1605C4 ::v9(){vfunc_called(this, "_ZN7S1605C42v9Ev");}
void  S1605C4 ::v10(){vfunc_called(this, "_ZN7S1605C43v10Ev");}
void  S1605C4 ::v11(){vfunc_called(this, "_ZN7S1605C43v11Ev");}
void  S1605C4 ::v12(){vfunc_called(this, "_ZN7S1605C43v12Ev");}
void  S1605C4 ::v13(){vfunc_called(this, "_ZN7S1605C43v13Ev");}
void  S1605C4 ::v14(){vfunc_called(this, "_ZN7S1605C43v14Ev");}
void  S1605C4 ::v15(){vfunc_called(this, "_ZN7S1605C43v15Ev");}
void  S1605C4 ::v16(){vfunc_called(this, "_ZN7S1605C43v16Ev");}
void  S1605C4 ::v17(){vfunc_called(this, "_ZN7S1605C43v17Ev");}
void  S1605C4 ::v18(){vfunc_called(this, "_ZN7S1605C43v18Ev");}
void  S1605C4 ::v19(){vfunc_called(this, "_ZN7S1605C43v19Ev");}
void  S1605C4 ::v20(){vfunc_called(this, "_ZN7S1605C43v20Ev");}
void  S1605C4 ::v21(){vfunc_called(this, "_ZN7S1605C43v21Ev");}
void  S1605C4 ::v22(){vfunc_called(this, "_ZN7S1605C43v22Ev");}
void  S1605C4 ::v23(){vfunc_called(this, "_ZN7S1605C43v23Ev");}
void  S1605C4 ::v24(){vfunc_called(this, "_ZN7S1605C43v24Ev");}
void  S1605C4 ::v25(){vfunc_called(this, "_ZN7S1605C43v25Ev");}
void  S1605C4 ::v26(){vfunc_called(this, "_ZN7S1605C43v26Ev");}
void  S1605C4 ::v27(){vfunc_called(this, "_ZN7S1605C43v27Ev");}
void  S1605C4 ::v28(){vfunc_called(this, "_ZN7S1605C43v28Ev");}
void  S1605C4 ::v29(){vfunc_called(this, "_ZN7S1605C43v29Ev");}
void  S1605C4 ::v30(){vfunc_called(this, "_ZN7S1605C43v30Ev");}
void  S1605C4 ::v31(){vfunc_called(this, "_ZN7S1605C43v31Ev");}
void  S1605C4 ::v32(){vfunc_called(this, "_ZN7S1605C43v32Ev");}
void  S1605C4 ::v33(){vfunc_called(this, "_ZN7S1605C43v33Ev");}
void  S1605C4 ::v34(){vfunc_called(this, "_ZN7S1605C43v34Ev");}
void  S1605C4 ::v35(){vfunc_called(this, "_ZN7S1605C43v35Ev");}
void  S1605C4 ::v36(){vfunc_called(this, "_ZN7S1605C43v36Ev");}
void  S1605C4 ::v37(){vfunc_called(this, "_ZN7S1605C43v37Ev");}
void  S1605C4 ::v38(){vfunc_called(this, "_ZN7S1605C43v38Ev");}
void  S1605C4 ::v39(){vfunc_called(this, "_ZN7S1605C43v39Ev");}
void  S1605C4 ::v40(){vfunc_called(this, "_ZN7S1605C43v40Ev");}
void  S1605C4 ::v41(){vfunc_called(this, "_ZN7S1605C43v41Ev");}
void  S1605C4 ::v42(){vfunc_called(this, "_ZN7S1605C43v42Ev");}
void  S1605C4 ::v43(){vfunc_called(this, "_ZN7S1605C43v43Ev");}
void  S1605C4 ::v44(){vfunc_called(this, "_ZN7S1605C43v44Ev");}
void  S1605C4 ::v45(){vfunc_called(this, "_ZN7S1605C43v45Ev");}
void  S1605C4 ::v46(){vfunc_called(this, "_ZN7S1605C43v46Ev");}
void  S1605C4 ::v47(){vfunc_called(this, "_ZN7S1605C43v47Ev");}
void  S1605C4 ::v48(){vfunc_called(this, "_ZN7S1605C43v48Ev");}
void  S1605C4 ::v49(){vfunc_called(this, "_ZN7S1605C43v49Ev");}
void  S1605C4 ::v50(){vfunc_called(this, "_ZN7S1605C43v50Ev");}
void  S1605C4 ::v51(){vfunc_called(this, "_ZN7S1605C43v51Ev");}
void  S1605C4 ::v52(){vfunc_called(this, "_ZN7S1605C43v52Ev");}
void  S1605C4 ::v53(){vfunc_called(this, "_ZN7S1605C43v53Ev");}
void  S1605C4 ::v54(){vfunc_called(this, "_ZN7S1605C43v54Ev");}
void  S1605C4 ::v55(){vfunc_called(this, "_ZN7S1605C43v55Ev");}
void  S1605C4 ::v56(){vfunc_called(this, "_ZN7S1605C43v56Ev");}
void  S1605C4 ::v57(){vfunc_called(this, "_ZN7S1605C43v57Ev");}
void  S1605C4 ::v58(){vfunc_called(this, "_ZN7S1605C43v58Ev");}
void  S1605C4 ::v59(){vfunc_called(this, "_ZN7S1605C43v59Ev");}
void  S1605C4 ::v60(){vfunc_called(this, "_ZN7S1605C43v60Ev");}
void  S1605C4 ::v61(){vfunc_called(this, "_ZN7S1605C43v61Ev");}
void  S1605C4 ::v62(){vfunc_called(this, "_ZN7S1605C43v62Ev");}
void  S1605C4 ::v63(){vfunc_called(this, "_ZN7S1605C43v63Ev");}
void  S1605C4 ::v64(){vfunc_called(this, "_ZN7S1605C43v64Ev");}
void  S1605C4 ::v65(){vfunc_called(this, "_ZN7S1605C43v65Ev");}
void  S1605C4 ::v66(){vfunc_called(this, "_ZN7S1605C43v66Ev");}
void  S1605C4 ::v67(){vfunc_called(this, "_ZN7S1605C43v67Ev");}
void  S1605C4 ::v68(){vfunc_called(this, "_ZN7S1605C43v68Ev");}
void  S1605C4 ::v69(){vfunc_called(this, "_ZN7S1605C43v69Ev");}
void  S1605C4 ::v70(){vfunc_called(this, "_ZN7S1605C43v70Ev");}
void  S1605C4 ::v71(){vfunc_called(this, "_ZN7S1605C43v71Ev");}
void  S1605C4 ::v72(){vfunc_called(this, "_ZN7S1605C43v72Ev");}
S1605C4 ::S1605C4(){ note_ctor("S1605C4", this);} // tgen

static void Test_S1605C4()
{
  extern Class_Descriptor cd_S1605C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1605C4, buf);
    S1605C4 *dp, &lv = *(dp=new (buf) S1605C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1605C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1605C4)");
    check_field_offset(lv, s1605c4f0, ABISELECT(8,4), "S1605C4.s1605c4f0");
    check_field_offset(lv, s1605c4f1, ABISELECT(16,8), "S1605C4.s1605c4f1");
    check_field_offset(lv, s1605c4f2, ABISELECT(24,16), "S1605C4.s1605c4f2");
    check_field_offset(lv, s1605c4f3, ABISELECT(56,32), "S1605C4.s1605c4f3");
    check_field_offset(lv, s1605c4f4, ABISELECT(64,40), "S1605C4.s1605c4f4");
    check_field_offset(lv, s1605c4f5, ABISELECT(72,44), "S1605C4.s1605c4f5");
    check_field_offset(lv, s1605c4f6, ABISELECT(80,52), "S1605C4.s1605c4f6");
    test_class_info(&lv, &cd_S1605C4);
    dp->~S1605C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1605C4(Test_S1605C4, "S1605C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1605C4C1Ev();
extern void _ZN7S1605C4D1Ev();
Name_Map name_map_S1605C4[] = {
  NSPAIR(_ZN7S1605C4C1Ev),
  NSPAIR(_ZN7S1605C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1605C4[];
extern void _ZN7S1605C4D1Ev();
extern void _ZN7S1605C4D0Ev();
extern void _ZN7S1605C42v9Ev();
extern void _ZN7S1605C43v10Ev();
extern void _ZN7S1605C43v11Ev();
extern void _ZN7S1605C43v12Ev();
extern void _ZN7S1605C43v13Ev();
extern void _ZN7S1605C43v14Ev();
extern void _ZN7S1605C43v15Ev();
extern void _ZN7S1605C43v16Ev();
extern void _ZN7S1605C43v17Ev();
extern void _ZN7S1605C43v18Ev();
extern void _ZN7S1605C43v19Ev();
extern void _ZN7S1605C43v20Ev();
extern void _ZN7S1605C43v21Ev();
extern void _ZN7S1605C43v22Ev();
extern void _ZN7S1605C43v23Ev();
extern void _ZN7S1605C43v24Ev();
extern void _ZN7S1605C43v25Ev();
extern void _ZN7S1605C43v26Ev();
extern void _ZN7S1605C43v27Ev();
extern void _ZN7S1605C43v28Ev();
extern void _ZN7S1605C43v29Ev();
extern void _ZN7S1605C43v30Ev();
extern void _ZN7S1605C43v31Ev();
extern void _ZN7S1605C43v32Ev();
extern void _ZN7S1605C43v33Ev();
extern void _ZN7S1605C43v34Ev();
extern void _ZN7S1605C43v35Ev();
extern void _ZN7S1605C43v36Ev();
extern void _ZN7S1605C43v37Ev();
extern void _ZN7S1605C43v38Ev();
extern void _ZN7S1605C43v39Ev();
extern void _ZN7S1605C43v40Ev();
extern void _ZN7S1605C43v41Ev();
extern void _ZN7S1605C43v42Ev();
extern void _ZN7S1605C43v43Ev();
extern void _ZN7S1605C43v44Ev();
extern void _ZN7S1605C43v45Ev();
extern void _ZN7S1605C43v46Ev();
extern void _ZN7S1605C43v47Ev();
extern void _ZN7S1605C43v48Ev();
extern void _ZN7S1605C43v49Ev();
extern void _ZN7S1605C43v50Ev();
extern void _ZN7S1605C43v51Ev();
extern void _ZN7S1605C43v52Ev();
extern void _ZN7S1605C43v53Ev();
extern void _ZN7S1605C43v54Ev();
extern void _ZN7S1605C43v55Ev();
extern void _ZN7S1605C43v56Ev();
extern void _ZN7S1605C43v57Ev();
extern void _ZN7S1605C43v58Ev();
extern void _ZN7S1605C43v59Ev();
extern void _ZN7S1605C43v60Ev();
extern void _ZN7S1605C43v61Ev();
extern void _ZN7S1605C43v62Ev();
extern void _ZN7S1605C43v63Ev();
extern void _ZN7S1605C43v64Ev();
extern void _ZN7S1605C43v65Ev();
extern void _ZN7S1605C43v66Ev();
extern void _ZN7S1605C43v67Ev();
extern void _ZN7S1605C43v68Ev();
extern void _ZN7S1605C43v69Ev();
extern void _ZN7S1605C43v70Ev();
extern void _ZN7S1605C43v71Ev();
extern void _ZN7S1605C43v72Ev();
static  VTBL_ENTRY vtc_S1605C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1605C4[0]),
  (VTBL_ENTRY)&_ZN7S1605C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1605C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1605C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v72Ev,
};
extern VTBL_ENTRY _ZTI7S1605C4[];
extern  VTBL_ENTRY _ZTV7S1605C4[];
Class_Descriptor cd_S1605C4 = {  "S1605C4", // class name
  0,0,//no base classes
  &(vtc_S1605C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1605C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1605C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1605C3  : S1605C4 {
  int s1605c3f0[2];
  void *s1605c3f1;
  int s1605c3f2[2];
  ::S473C7_nt s1605c3f3;
  ::S473C7_nt s1605c3f4;
  ::S21925C42 s1605c3f5;
  ::S473C7_nt s1605c3f6;
  unsigned int s1605c3f7:1;
  unsigned int s1605c3f8:1;
  unsigned int s1605c3f9:1;
  unsigned int s1605c3f10:1;
  unsigned int s1605c3f11:1;
  int s1605c3f12[2];
  virtual  ~S1605C3(); // _ZN7S1605C3D1Ev
  virtual void  v73(); // _ZN7S1605C33v73Ev
  virtual void  v74(); // _ZN7S1605C33v74Ev
  virtual void  v75(); // _ZN7S1605C33v75Ev
  virtual void  v76(); // _ZN7S1605C33v76Ev
  virtual void  v77(); // _ZN7S1605C33v77Ev
  virtual void  v78(); // _ZN7S1605C33v78Ev
  virtual void  v79(); // _ZN7S1605C33v79Ev
  virtual void  v80(); // _ZN7S1605C33v80Ev
  virtual void  v81(); // _ZN7S1605C33v81Ev
  virtual void  v82(); // _ZN7S1605C33v82Ev
  virtual void  v83(); // _ZN7S1605C33v83Ev
  virtual void  v84(); // _ZN7S1605C33v84Ev
  virtual void  v85(); // _ZN7S1605C33v85Ev
  virtual void  v86(); // _ZN7S1605C33v86Ev
  virtual void  v87(); // _ZN7S1605C33v87Ev
  virtual void  v88(); // _ZN7S1605C33v88Ev
  virtual void  v89(); // _ZN7S1605C33v89Ev
  virtual void  v90(); // _ZN7S1605C33v90Ev
  virtual void  v91(); // _ZN7S1605C33v91Ev
  virtual void  v92(); // _ZN7S1605C33v92Ev
  virtual void  v93(); // _ZN7S1605C33v93Ev
  virtual void  v94(); // _ZN7S1605C33v94Ev
  S1605C3(); // tgen
};
//SIG(-1 S1605C3) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1605C3 ::~S1605C3(){ note_dtor("S1605C3", this);}
void  S1605C3 ::v73(){vfunc_called(this, "_ZN7S1605C33v73Ev");}
void  S1605C3 ::v74(){vfunc_called(this, "_ZN7S1605C33v74Ev");}
void  S1605C3 ::v75(){vfunc_called(this, "_ZN7S1605C33v75Ev");}
void  S1605C3 ::v76(){vfunc_called(this, "_ZN7S1605C33v76Ev");}
void  S1605C3 ::v77(){vfunc_called(this, "_ZN7S1605C33v77Ev");}
void  S1605C3 ::v78(){vfunc_called(this, "_ZN7S1605C33v78Ev");}
void  S1605C3 ::v79(){vfunc_called(this, "_ZN7S1605C33v79Ev");}
void  S1605C3 ::v80(){vfunc_called(this, "_ZN7S1605C33v80Ev");}
void  S1605C3 ::v81(){vfunc_called(this, "_ZN7S1605C33v81Ev");}
void  S1605C3 ::v82(){vfunc_called(this, "_ZN7S1605C33v82Ev");}
void  S1605C3 ::v83(){vfunc_called(this, "_ZN7S1605C33v83Ev");}
void  S1605C3 ::v84(){vfunc_called(this, "_ZN7S1605C33v84Ev");}
void  S1605C3 ::v85(){vfunc_called(this, "_ZN7S1605C33v85Ev");}
void  S1605C3 ::v86(){vfunc_called(this, "_ZN7S1605C33v86Ev");}
void  S1605C3 ::v87(){vfunc_called(this, "_ZN7S1605C33v87Ev");}
void  S1605C3 ::v88(){vfunc_called(this, "_ZN7S1605C33v88Ev");}
void  S1605C3 ::v89(){vfunc_called(this, "_ZN7S1605C33v89Ev");}
void  S1605C3 ::v90(){vfunc_called(this, "_ZN7S1605C33v90Ev");}
void  S1605C3 ::v91(){vfunc_called(this, "_ZN7S1605C33v91Ev");}
void  S1605C3 ::v92(){vfunc_called(this, "_ZN7S1605C33v92Ev");}
void  S1605C3 ::v93(){vfunc_called(this, "_ZN7S1605C33v93Ev");}
void  S1605C3 ::v94(){vfunc_called(this, "_ZN7S1605C33v94Ev");}
S1605C3 ::S1605C3(){ note_ctor("S1605C3", this);} // tgen

static void Test_S1605C3()
{
  extern Class_Descriptor cd_S1605C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S1605C3, buf);
    S1605C3 *dp, &lv = *(dp=new (buf) S1605C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S1605C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1605C3)");
    check_base_class_offset(lv, (S1605C4*), 0, "S1605C3");
    check_field_offset(lv, s1605c3f0, ABISELECT(96,60), "S1605C3.s1605c3f0");
    check_field_offset(lv, s1605c3f1, ABISELECT(104,68), "S1605C3.s1605c3f1");
    check_field_offset(lv, s1605c3f2, ABISELECT(112,72), "S1605C3.s1605c3f2");
    check_field_offset(lv, s1605c3f3, ABISELECT(120,80), "S1605C3.s1605c3f3");
    check_field_offset(lv, s1605c3f4, ABISELECT(136,92), "S1605C3.s1605c3f4");
    check_field_offset(lv, s1605c3f5, ABISELECT(152,104), "S1605C3.s1605c3f5");
    check_field_offset(lv, s1605c3f6, ABISELECT(160,108), "S1605C3.s1605c3f6");
    set_bf_and_test(lv, s1605c3f7, ABISELECT(176,120), 0, 1, 1, "S1605C3");
    set_bf_and_test(lv, s1605c3f8, ABISELECT(176,120), 1, 1, 1, "S1605C3");
    set_bf_and_test(lv, s1605c3f9, ABISELECT(176,120), 2, 1, 1, "S1605C3");
    set_bf_and_test(lv, s1605c3f10, ABISELECT(176,120), 3, 1, 1, "S1605C3");
    set_bf_and_test(lv, s1605c3f11, ABISELECT(176,120), 4, 1, 1, "S1605C3");
    check_field_offset(lv, s1605c3f12, ABISELECT(180,124), "S1605C3.s1605c3f12");
    test_class_info(&lv, &cd_S1605C3);
    dp->~S1605C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1605C3(Test_S1605C3, "S1605C3", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN7S1605C3C1Ev();
extern void _ZN7S1605C3D1Ev();
Name_Map name_map_S1605C3[] = {
  NSPAIR(_ZN7S1605C3C1Ev),
  NSPAIR(_ZN7S1605C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1605C4;
extern VTBL_ENTRY _ZTI7S1605C4[];
extern  VTBL_ENTRY _ZTV7S1605C4[];
static Base_Class bases_S1605C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1605C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1605C3[];
extern void _ZN7S1605C3D1Ev();
extern void _ZN7S1605C3D0Ev();
extern void _ZN7S1605C42v9Ev();
extern void _ZN7S1605C43v10Ev();
extern void _ZN7S1605C43v11Ev();
extern void _ZN7S1605C43v12Ev();
extern void _ZN7S1605C43v13Ev();
extern void _ZN7S1605C43v14Ev();
extern void _ZN7S1605C43v15Ev();
extern void _ZN7S1605C43v16Ev();
extern void _ZN7S1605C43v17Ev();
extern void _ZN7S1605C43v18Ev();
extern void _ZN7S1605C43v19Ev();
extern void _ZN7S1605C43v20Ev();
extern void _ZN7S1605C43v21Ev();
extern void _ZN7S1605C43v22Ev();
extern void _ZN7S1605C43v23Ev();
extern void _ZN7S1605C43v24Ev();
extern void _ZN7S1605C43v25Ev();
extern void _ZN7S1605C43v26Ev();
extern void _ZN7S1605C43v27Ev();
extern void _ZN7S1605C43v28Ev();
extern void _ZN7S1605C43v29Ev();
extern void _ZN7S1605C43v30Ev();
extern void _ZN7S1605C43v31Ev();
extern void _ZN7S1605C43v32Ev();
extern void _ZN7S1605C43v33Ev();
extern void _ZN7S1605C43v34Ev();
extern void _ZN7S1605C43v35Ev();
extern void _ZN7S1605C43v36Ev();
extern void _ZN7S1605C43v37Ev();
extern void _ZN7S1605C43v38Ev();
extern void _ZN7S1605C43v39Ev();
extern void _ZN7S1605C43v40Ev();
extern void _ZN7S1605C43v41Ev();
extern void _ZN7S1605C43v42Ev();
extern void _ZN7S1605C43v43Ev();
extern void _ZN7S1605C43v44Ev();
extern void _ZN7S1605C43v45Ev();
extern void _ZN7S1605C43v46Ev();
extern void _ZN7S1605C43v47Ev();
extern void _ZN7S1605C43v48Ev();
extern void _ZN7S1605C43v49Ev();
extern void _ZN7S1605C43v50Ev();
extern void _ZN7S1605C43v51Ev();
extern void _ZN7S1605C43v52Ev();
extern void _ZN7S1605C43v53Ev();
extern void _ZN7S1605C43v54Ev();
extern void _ZN7S1605C43v55Ev();
extern void _ZN7S1605C43v56Ev();
extern void _ZN7S1605C43v57Ev();
extern void _ZN7S1605C43v58Ev();
extern void _ZN7S1605C43v59Ev();
extern void _ZN7S1605C43v60Ev();
extern void _ZN7S1605C43v61Ev();
extern void _ZN7S1605C43v62Ev();
extern void _ZN7S1605C43v63Ev();
extern void _ZN7S1605C43v64Ev();
extern void _ZN7S1605C43v65Ev();
extern void _ZN7S1605C43v66Ev();
extern void _ZN7S1605C43v67Ev();
extern void _ZN7S1605C43v68Ev();
extern void _ZN7S1605C43v69Ev();
extern void _ZN7S1605C43v70Ev();
extern void _ZN7S1605C43v71Ev();
extern void _ZN7S1605C43v72Ev();
extern void _ZN7S1605C33v73Ev();
extern void _ZN7S1605C33v74Ev();
extern void _ZN7S1605C33v75Ev();
extern void _ZN7S1605C33v76Ev();
extern void _ZN7S1605C33v77Ev();
extern void _ZN7S1605C33v78Ev();
extern void _ZN7S1605C33v79Ev();
extern void _ZN7S1605C33v80Ev();
extern void _ZN7S1605C33v81Ev();
extern void _ZN7S1605C33v82Ev();
extern void _ZN7S1605C33v83Ev();
extern void _ZN7S1605C33v84Ev();
extern void _ZN7S1605C33v85Ev();
extern void _ZN7S1605C33v86Ev();
extern void _ZN7S1605C33v87Ev();
extern void _ZN7S1605C33v88Ev();
extern void _ZN7S1605C33v89Ev();
extern void _ZN7S1605C33v90Ev();
extern void _ZN7S1605C33v91Ev();
extern void _ZN7S1605C33v92Ev();
extern void _ZN7S1605C33v93Ev();
extern void _ZN7S1605C33v94Ev();
static  VTBL_ENTRY vtc_S1605C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1605C3[0]),
  (VTBL_ENTRY)&_ZN7S1605C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1605C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1605C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v94Ev,
};
extern VTBL_ENTRY _ZTI7S1605C3[];
extern  VTBL_ENTRY _ZTV7S1605C3[];
Class_Descriptor cd_S1605C3 = {  "S1605C3", // class name
  bases_S1605C3, 1,
  &(vtc_S1605C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI7S1605C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1605C3),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1605C2  : S1605C3 {
  ::S473C6_nt s1605c2f0;
  virtual  ~S1605C2(); // _ZN7S1605C2D1Ev
  virtual void  v95(); // _ZN7S1605C23v95Ev
  virtual void  v96(); // _ZN7S1605C23v96Ev
  virtual void  v97(); // _ZN7S1605C23v97Ev
  virtual void  v98(); // _ZN7S1605C23v98Ev
  virtual void  v99(); // _ZN7S1605C23v99Ev
  virtual void  v100(); // _ZN7S1605C24v100Ev
  virtual void  v101(); // _ZN7S1605C24v101Ev
  virtual void  v102(); // _ZN7S1605C24v102Ev
  virtual void  v103(); // _ZN7S1605C24v103Ev
  virtual void  v104(); // _ZN7S1605C24v104Ev
  virtual void  v105(); // _ZN7S1605C24v105Ev
  virtual void  v106(); // _ZN7S1605C24v106Ev
  virtual void  v107(); // _ZN7S1605C24v107Ev
  virtual void  v108(); // _ZN7S1605C24v108Ev
  virtual void  v109(); // _ZN7S1605C24v109Ev
  virtual void  v110(); // _ZN7S1605C24v110Ev
  virtual void  v111(); // _ZN7S1605C24v111Ev
  virtual void  v112(); // _ZN7S1605C24v112Ev
  virtual void  v113(); // _ZN7S1605C24v113Ev
  S1605C2(); // tgen
};
//SIG(-1 S1605C2) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S1605C2 ::~S1605C2(){ note_dtor("S1605C2", this);}
void  S1605C2 ::v95(){vfunc_called(this, "_ZN7S1605C23v95Ev");}
void  S1605C2 ::v96(){vfunc_called(this, "_ZN7S1605C23v96Ev");}
void  S1605C2 ::v97(){vfunc_called(this, "_ZN7S1605C23v97Ev");}
void  S1605C2 ::v98(){vfunc_called(this, "_ZN7S1605C23v98Ev");}
void  S1605C2 ::v99(){vfunc_called(this, "_ZN7S1605C23v99Ev");}
void  S1605C2 ::v100(){vfunc_called(this, "_ZN7S1605C24v100Ev");}
void  S1605C2 ::v101(){vfunc_called(this, "_ZN7S1605C24v101Ev");}
void  S1605C2 ::v102(){vfunc_called(this, "_ZN7S1605C24v102Ev");}
void  S1605C2 ::v103(){vfunc_called(this, "_ZN7S1605C24v103Ev");}
void  S1605C2 ::v104(){vfunc_called(this, "_ZN7S1605C24v104Ev");}
void  S1605C2 ::v105(){vfunc_called(this, "_ZN7S1605C24v105Ev");}
void  S1605C2 ::v106(){vfunc_called(this, "_ZN7S1605C24v106Ev");}
void  S1605C2 ::v107(){vfunc_called(this, "_ZN7S1605C24v107Ev");}
void  S1605C2 ::v108(){vfunc_called(this, "_ZN7S1605C24v108Ev");}
void  S1605C2 ::v109(){vfunc_called(this, "_ZN7S1605C24v109Ev");}
void  S1605C2 ::v110(){vfunc_called(this, "_ZN7S1605C24v110Ev");}
void  S1605C2 ::v111(){vfunc_called(this, "_ZN7S1605C24v111Ev");}
void  S1605C2 ::v112(){vfunc_called(this, "_ZN7S1605C24v112Ev");}
void  S1605C2 ::v113(){vfunc_called(this, "_ZN7S1605C24v113Ev");}
S1605C2 ::S1605C2(){ note_ctor("S1605C2", this);} // tgen

static void Test_S1605C2()
{
  extern Class_Descriptor cd_S1605C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S1605C2, buf);
    S1605C2 *dp, &lv = *(dp=new (buf) S1605C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S1605C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1605C2)");
    check_base_class_offset(lv, (S1605C4*)(S1605C3*), 0, "S1605C2");
    check_base_class_offset(lv, (S1605C3*), 0, "S1605C2");
    check_field_offset(lv, s1605c2f0, ABISELECT(188,132), "S1605C2.s1605c2f0");
    test_class_info(&lv, &cd_S1605C2);
    dp->~S1605C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1605C2(Test_S1605C2, "S1605C2", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S1605C2C1Ev();
extern void _ZN7S1605C2D1Ev();
Name_Map name_map_S1605C2[] = {
  NSPAIR(_ZN7S1605C2C1Ev),
  NSPAIR(_ZN7S1605C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1605C4;
extern VTBL_ENTRY _ZTI7S1605C4[];
extern  VTBL_ENTRY _ZTV7S1605C4[];
extern Class_Descriptor cd_S1605C3;
extern VTBL_ENTRY _ZTI7S1605C3[];
extern  VTBL_ENTRY _ZTV7S1605C3[];
static Base_Class bases_S1605C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1605C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1605C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1605C2[];
extern void _ZN7S1605C2D1Ev();
extern void _ZN7S1605C2D0Ev();
extern void _ZN7S1605C42v9Ev();
extern void _ZN7S1605C43v10Ev();
extern void _ZN7S1605C43v11Ev();
extern void _ZN7S1605C43v12Ev();
extern void _ZN7S1605C43v13Ev();
extern void _ZN7S1605C43v14Ev();
extern void _ZN7S1605C43v15Ev();
extern void _ZN7S1605C43v16Ev();
extern void _ZN7S1605C43v17Ev();
extern void _ZN7S1605C43v18Ev();
extern void _ZN7S1605C43v19Ev();
extern void _ZN7S1605C43v20Ev();
extern void _ZN7S1605C43v21Ev();
extern void _ZN7S1605C43v22Ev();
extern void _ZN7S1605C43v23Ev();
extern void _ZN7S1605C43v24Ev();
extern void _ZN7S1605C43v25Ev();
extern void _ZN7S1605C43v26Ev();
extern void _ZN7S1605C43v27Ev();
extern void _ZN7S1605C43v28Ev();
extern void _ZN7S1605C43v29Ev();
extern void _ZN7S1605C43v30Ev();
extern void _ZN7S1605C43v31Ev();
extern void _ZN7S1605C43v32Ev();
extern void _ZN7S1605C43v33Ev();
extern void _ZN7S1605C43v34Ev();
extern void _ZN7S1605C43v35Ev();
extern void _ZN7S1605C43v36Ev();
extern void _ZN7S1605C43v37Ev();
extern void _ZN7S1605C43v38Ev();
extern void _ZN7S1605C43v39Ev();
extern void _ZN7S1605C43v40Ev();
extern void _ZN7S1605C43v41Ev();
extern void _ZN7S1605C43v42Ev();
extern void _ZN7S1605C43v43Ev();
extern void _ZN7S1605C43v44Ev();
extern void _ZN7S1605C43v45Ev();
extern void _ZN7S1605C43v46Ev();
extern void _ZN7S1605C43v47Ev();
extern void _ZN7S1605C43v48Ev();
extern void _ZN7S1605C43v49Ev();
extern void _ZN7S1605C43v50Ev();
extern void _ZN7S1605C43v51Ev();
extern void _ZN7S1605C43v52Ev();
extern void _ZN7S1605C43v53Ev();
extern void _ZN7S1605C43v54Ev();
extern void _ZN7S1605C43v55Ev();
extern void _ZN7S1605C43v56Ev();
extern void _ZN7S1605C43v57Ev();
extern void _ZN7S1605C43v58Ev();
extern void _ZN7S1605C43v59Ev();
extern void _ZN7S1605C43v60Ev();
extern void _ZN7S1605C43v61Ev();
extern void _ZN7S1605C43v62Ev();
extern void _ZN7S1605C43v63Ev();
extern void _ZN7S1605C43v64Ev();
extern void _ZN7S1605C43v65Ev();
extern void _ZN7S1605C43v66Ev();
extern void _ZN7S1605C43v67Ev();
extern void _ZN7S1605C43v68Ev();
extern void _ZN7S1605C43v69Ev();
extern void _ZN7S1605C43v70Ev();
extern void _ZN7S1605C43v71Ev();
extern void _ZN7S1605C43v72Ev();
extern void _ZN7S1605C33v73Ev();
extern void _ZN7S1605C33v74Ev();
extern void _ZN7S1605C33v75Ev();
extern void _ZN7S1605C33v76Ev();
extern void _ZN7S1605C33v77Ev();
extern void _ZN7S1605C33v78Ev();
extern void _ZN7S1605C33v79Ev();
extern void _ZN7S1605C33v80Ev();
extern void _ZN7S1605C33v81Ev();
extern void _ZN7S1605C33v82Ev();
extern void _ZN7S1605C33v83Ev();
extern void _ZN7S1605C33v84Ev();
extern void _ZN7S1605C33v85Ev();
extern void _ZN7S1605C33v86Ev();
extern void _ZN7S1605C33v87Ev();
extern void _ZN7S1605C33v88Ev();
extern void _ZN7S1605C33v89Ev();
extern void _ZN7S1605C33v90Ev();
extern void _ZN7S1605C33v91Ev();
extern void _ZN7S1605C33v92Ev();
extern void _ZN7S1605C33v93Ev();
extern void _ZN7S1605C33v94Ev();
extern void _ZN7S1605C23v95Ev();
extern void _ZN7S1605C23v96Ev();
extern void _ZN7S1605C23v97Ev();
extern void _ZN7S1605C23v98Ev();
extern void _ZN7S1605C23v99Ev();
extern void _ZN7S1605C24v100Ev();
extern void _ZN7S1605C24v101Ev();
extern void _ZN7S1605C24v102Ev();
extern void _ZN7S1605C24v103Ev();
extern void _ZN7S1605C24v104Ev();
extern void _ZN7S1605C24v105Ev();
extern void _ZN7S1605C24v106Ev();
extern void _ZN7S1605C24v107Ev();
extern void _ZN7S1605C24v108Ev();
extern void _ZN7S1605C24v109Ev();
extern void _ZN7S1605C24v110Ev();
extern void _ZN7S1605C24v111Ev();
extern void _ZN7S1605C24v112Ev();
extern void _ZN7S1605C24v113Ev();
static  VTBL_ENTRY vtc_S1605C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1605C2[0]),
  (VTBL_ENTRY)&_ZN7S1605C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1605C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1605C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1605C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1605C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1605C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1605C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1605C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v113Ev,
};
extern VTBL_ENTRY _ZTI7S1605C2[];
extern  VTBL_ENTRY _ZTV7S1605C2[];
Class_Descriptor cd_S1605C2 = {  "S1605C2", // class name
  bases_S1605C2, 2,
  &(vtc_S1605C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S1605C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1605C2),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1605C1  : S1605C2 {
  void *s1605c1f0;
  ::S473C6_nt s1605c1f1;
  unsigned int s1605c1f2:1;
  virtual  ~S1605C1(); // _ZN7S1605C1D1Ev
  virtual void  v1(); // _ZN7S1605C12v1Ev
  virtual void  v2(); // _ZN7S1605C12v2Ev
  virtual void  v3(); // _ZN7S1605C12v3Ev
  virtual void  v4(); // _ZN7S1605C12v4Ev
  virtual void  v5(); // _ZN7S1605C12v5Ev
  virtual void  v6(); // _ZN7S1605C12v6Ev
  virtual void  v7(); // _ZN7S1605C12v7Ev
  virtual void  v8(); // _ZN7S1605C12v8Ev
  S1605C1(); // tgen
};
//SIG(1 S1605C1) C1{ BC2{ BC3{ BC4{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 FC5} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp FC5 Fi:1}


 S1605C1 ::~S1605C1(){ note_dtor("S1605C1", this);}
void  S1605C1 ::v1(){vfunc_called(this, "_ZN7S1605C12v1Ev");}
void  S1605C1 ::v2(){vfunc_called(this, "_ZN7S1605C12v2Ev");}
void  S1605C1 ::v3(){vfunc_called(this, "_ZN7S1605C12v3Ev");}
void  S1605C1 ::v4(){vfunc_called(this, "_ZN7S1605C12v4Ev");}
void  S1605C1 ::v5(){vfunc_called(this, "_ZN7S1605C12v5Ev");}
void  S1605C1 ::v6(){vfunc_called(this, "_ZN7S1605C12v6Ev");}
void  S1605C1 ::v7(){vfunc_called(this, "_ZN7S1605C12v7Ev");}
void  S1605C1 ::v8(){vfunc_called(this, "_ZN7S1605C12v8Ev");}
S1605C1 ::S1605C1(){ note_ctor("S1605C1", this);} // tgen

static void Test_S1605C1()
{
  extern Class_Descriptor cd_S1605C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,40)];
    init_test(&cd_S1605C1, buf);
    S1605C1 *dp, &lv = *(dp=new (buf) S1605C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,156), "sizeof(S1605C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1605C1)");
    check_base_class_offset(lv, (S1605C4*)(S1605C3*)(S1605C2*), 0, "S1605C1");
    check_base_class_offset(lv, (S1605C3*)(S1605C2*), 0, "S1605C1");
    check_base_class_offset(lv, (S1605C2*), 0, "S1605C1");
    check_field_offset(lv, s1605c1f0, ABISELECT(200,140), "S1605C1.s1605c1f0");
    check_field_offset(lv, s1605c1f1, ABISELECT(208,144), "S1605C1.s1605c1f1");
    set_bf_and_test(lv, s1605c1f2, ABISELECT(216,152), 0, 1, 1, "S1605C1");
    test_class_info(&lv, &cd_S1605C1);
    dp->~S1605C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1605C1(Test_S1605C1, "S1605C1", ABISELECT(224,156));

#else // __cplusplus

extern void _ZN7S1605C1C1Ev();
extern void _ZN7S1605C1D1Ev();
Name_Map name_map_S1605C1[] = {
  NSPAIR(_ZN7S1605C1C1Ev),
  NSPAIR(_ZN7S1605C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1605C4;
extern VTBL_ENTRY _ZTI7S1605C4[];
extern  VTBL_ENTRY _ZTV7S1605C4[];
extern Class_Descriptor cd_S1605C3;
extern VTBL_ENTRY _ZTI7S1605C3[];
extern  VTBL_ENTRY _ZTV7S1605C3[];
extern Class_Descriptor cd_S1605C2;
extern VTBL_ENTRY _ZTI7S1605C2[];
extern  VTBL_ENTRY _ZTV7S1605C2[];
static Base_Class bases_S1605C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1605C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1605C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1605C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1605C1[];
extern void _ZN7S1605C1D1Ev();
extern void _ZN7S1605C1D0Ev();
extern void _ZN7S1605C42v9Ev();
extern void _ZN7S1605C43v10Ev();
extern void _ZN7S1605C43v11Ev();
extern void _ZN7S1605C43v12Ev();
extern void _ZN7S1605C43v13Ev();
extern void _ZN7S1605C43v14Ev();
extern void _ZN7S1605C43v15Ev();
extern void _ZN7S1605C43v16Ev();
extern void _ZN7S1605C43v17Ev();
extern void _ZN7S1605C43v18Ev();
extern void _ZN7S1605C43v19Ev();
extern void _ZN7S1605C43v20Ev();
extern void _ZN7S1605C43v21Ev();
extern void _ZN7S1605C43v22Ev();
extern void _ZN7S1605C43v23Ev();
extern void _ZN7S1605C43v24Ev();
extern void _ZN7S1605C43v25Ev();
extern void _ZN7S1605C43v26Ev();
extern void _ZN7S1605C43v27Ev();
extern void _ZN7S1605C43v28Ev();
extern void _ZN7S1605C43v29Ev();
extern void _ZN7S1605C43v30Ev();
extern void _ZN7S1605C43v31Ev();
extern void _ZN7S1605C43v32Ev();
extern void _ZN7S1605C43v33Ev();
extern void _ZN7S1605C43v34Ev();
extern void _ZN7S1605C43v35Ev();
extern void _ZN7S1605C43v36Ev();
extern void _ZN7S1605C43v37Ev();
extern void _ZN7S1605C43v38Ev();
extern void _ZN7S1605C43v39Ev();
extern void _ZN7S1605C43v40Ev();
extern void _ZN7S1605C43v41Ev();
extern void _ZN7S1605C43v42Ev();
extern void _ZN7S1605C43v43Ev();
extern void _ZN7S1605C43v44Ev();
extern void _ZN7S1605C43v45Ev();
extern void _ZN7S1605C43v46Ev();
extern void _ZN7S1605C43v47Ev();
extern void _ZN7S1605C43v48Ev();
extern void _ZN7S1605C43v49Ev();
extern void _ZN7S1605C43v50Ev();
extern void _ZN7S1605C43v51Ev();
extern void _ZN7S1605C43v52Ev();
extern void _ZN7S1605C43v53Ev();
extern void _ZN7S1605C43v54Ev();
extern void _ZN7S1605C43v55Ev();
extern void _ZN7S1605C43v56Ev();
extern void _ZN7S1605C43v57Ev();
extern void _ZN7S1605C43v58Ev();
extern void _ZN7S1605C43v59Ev();
extern void _ZN7S1605C43v60Ev();
extern void _ZN7S1605C43v61Ev();
extern void _ZN7S1605C43v62Ev();
extern void _ZN7S1605C43v63Ev();
extern void _ZN7S1605C43v64Ev();
extern void _ZN7S1605C43v65Ev();
extern void _ZN7S1605C43v66Ev();
extern void _ZN7S1605C43v67Ev();
extern void _ZN7S1605C43v68Ev();
extern void _ZN7S1605C43v69Ev();
extern void _ZN7S1605C43v70Ev();
extern void _ZN7S1605C43v71Ev();
extern void _ZN7S1605C43v72Ev();
extern void _ZN7S1605C33v73Ev();
extern void _ZN7S1605C33v74Ev();
extern void _ZN7S1605C33v75Ev();
extern void _ZN7S1605C33v76Ev();
extern void _ZN7S1605C33v77Ev();
extern void _ZN7S1605C33v78Ev();
extern void _ZN7S1605C33v79Ev();
extern void _ZN7S1605C33v80Ev();
extern void _ZN7S1605C33v81Ev();
extern void _ZN7S1605C33v82Ev();
extern void _ZN7S1605C33v83Ev();
extern void _ZN7S1605C33v84Ev();
extern void _ZN7S1605C33v85Ev();
extern void _ZN7S1605C33v86Ev();
extern void _ZN7S1605C33v87Ev();
extern void _ZN7S1605C33v88Ev();
extern void _ZN7S1605C33v89Ev();
extern void _ZN7S1605C33v90Ev();
extern void _ZN7S1605C33v91Ev();
extern void _ZN7S1605C33v92Ev();
extern void _ZN7S1605C33v93Ev();
extern void _ZN7S1605C33v94Ev();
extern void _ZN7S1605C23v95Ev();
extern void _ZN7S1605C23v96Ev();
extern void _ZN7S1605C23v97Ev();
extern void _ZN7S1605C23v98Ev();
extern void _ZN7S1605C23v99Ev();
extern void _ZN7S1605C24v100Ev();
extern void _ZN7S1605C24v101Ev();
extern void _ZN7S1605C24v102Ev();
extern void _ZN7S1605C24v103Ev();
extern void _ZN7S1605C24v104Ev();
extern void _ZN7S1605C24v105Ev();
extern void _ZN7S1605C24v106Ev();
extern void _ZN7S1605C24v107Ev();
extern void _ZN7S1605C24v108Ev();
extern void _ZN7S1605C24v109Ev();
extern void _ZN7S1605C24v110Ev();
extern void _ZN7S1605C24v111Ev();
extern void _ZN7S1605C24v112Ev();
extern void _ZN7S1605C24v113Ev();
extern void _ZN7S1605C12v1Ev();
extern void _ZN7S1605C12v2Ev();
extern void _ZN7S1605C12v3Ev();
extern void _ZN7S1605C12v4Ev();
extern void _ZN7S1605C12v5Ev();
extern void _ZN7S1605C12v6Ev();
extern void _ZN7S1605C12v7Ev();
extern void _ZN7S1605C12v8Ev();
static  VTBL_ENTRY vtc_S1605C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1605C1[0]),
  (VTBL_ENTRY)&_ZN7S1605C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1605C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1605C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1605C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1605C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1605C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1605C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1605C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1605C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1605C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1605C24v113Ev,
  (VTBL_ENTRY)&_ZN7S1605C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1605C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1605C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1605C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1605C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1605C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1605C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1605C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S1605C1[];
extern  VTBL_ENTRY _ZTV7S1605C1[];
Class_Descriptor cd_S1605C1 = {  "S1605C1", // class name
  bases_S1605C1, 3,
  &(vtc_S1605C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,156), // object size
  NSPAIRA(_ZTI7S1605C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1605C1),117, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1580C4  {
  int s1580c4f0;
  __tsi64 s1580c4f1;
  void *s1580c4f2[4];
  int s1580c4f3[2];
  void *s1580c4f4;
  ::S473C6_nt s1580c4f5;
  void *s1580c4f6[2];
  virtual  ~S1580C4(); // _ZN7S1580C4D1Ev
  virtual void  v8(); // _ZN7S1580C42v8Ev
  virtual void  v9(); // _ZN7S1580C42v9Ev
  virtual void  v10(); // _ZN7S1580C43v10Ev
  virtual void  v11(); // _ZN7S1580C43v11Ev
  virtual void  v12(); // _ZN7S1580C43v12Ev
  virtual void  v13(); // _ZN7S1580C43v13Ev
  virtual void  v14(); // _ZN7S1580C43v14Ev
  virtual void  v15(); // _ZN7S1580C43v15Ev
  virtual void  v16(); // _ZN7S1580C43v16Ev
  virtual void  v17(); // _ZN7S1580C43v17Ev
  virtual void  v18(); // _ZN7S1580C43v18Ev
  virtual void  v19(); // _ZN7S1580C43v19Ev
  virtual void  v20(); // _ZN7S1580C43v20Ev
  virtual void  v21(); // _ZN7S1580C43v21Ev
  virtual void  v22(); // _ZN7S1580C43v22Ev
  virtual void  v23(); // _ZN7S1580C43v23Ev
  virtual void  v24(); // _ZN7S1580C43v24Ev
  virtual void  v25(); // _ZN7S1580C43v25Ev
  virtual void  v26(); // _ZN7S1580C43v26Ev
  virtual void  v27(); // _ZN7S1580C43v27Ev
  virtual void  v28(); // _ZN7S1580C43v28Ev
  virtual void  v29(); // _ZN7S1580C43v29Ev
  virtual void  v30(); // _ZN7S1580C43v30Ev
  virtual void  v31(); // _ZN7S1580C43v31Ev
  virtual void  v32(); // _ZN7S1580C43v32Ev
  virtual void  v33(); // _ZN7S1580C43v33Ev
  virtual void  v34(); // _ZN7S1580C43v34Ev
  virtual void  v35(); // _ZN7S1580C43v35Ev
  virtual void  v36(); // _ZN7S1580C43v36Ev
  virtual void  v37(); // _ZN7S1580C43v37Ev
  virtual void  v38(); // _ZN7S1580C43v38Ev
  virtual void  v39(); // _ZN7S1580C43v39Ev
  virtual void  v40(); // _ZN7S1580C43v40Ev
  virtual void  v41(); // _ZN7S1580C43v41Ev
  virtual void  v42(); // _ZN7S1580C43v42Ev
  virtual void  v43(); // _ZN7S1580C43v43Ev
  virtual void  v44(); // _ZN7S1580C43v44Ev
  virtual void  v45(); // _ZN7S1580C43v45Ev
  virtual void  v46(); // _ZN7S1580C43v46Ev
  virtual void  v47(); // _ZN7S1580C43v47Ev
  virtual void  v48(); // _ZN7S1580C43v48Ev
  virtual void  v49(); // _ZN7S1580C43v49Ev
  virtual void  v50(); // _ZN7S1580C43v50Ev
  virtual void  v51(); // _ZN7S1580C43v51Ev
  virtual void  v52(); // _ZN7S1580C43v52Ev
  virtual void  v53(); // _ZN7S1580C43v53Ev
  virtual void  v54(); // _ZN7S1580C43v54Ev
  virtual void  v55(); // _ZN7S1580C43v55Ev
  virtual void  v56(); // _ZN7S1580C43v56Ev
  virtual void  v57(); // _ZN7S1580C43v57Ev
  virtual void  v58(); // _ZN7S1580C43v58Ev
  virtual void  v59(); // _ZN7S1580C43v59Ev
  virtual void  v60(); // _ZN7S1580C43v60Ev
  virtual void  v61(); // _ZN7S1580C43v61Ev
  virtual void  v62(); // _ZN7S1580C43v62Ev
  virtual void  v63(); // _ZN7S1580C43v63Ev
  virtual void  v64(); // _ZN7S1580C43v64Ev
  virtual void  v65(); // _ZN7S1580C43v65Ev
  virtual void  v66(); // _ZN7S1580C43v66Ev
  virtual void  v67(); // _ZN7S1580C43v67Ev
  virtual void  v68(); // _ZN7S1580C43v68Ev
  virtual void  v69(); // _ZN7S1580C43v69Ev
  virtual void  v70(); // _ZN7S1580C43v70Ev
  virtual void  v71(); // _ZN7S1580C43v71Ev
  S1580C4(); // tgen
};
//SIG(-1 S1580C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1580C4 ::~S1580C4(){ note_dtor("S1580C4", this);}
void  S1580C4 ::v8(){vfunc_called(this, "_ZN7S1580C42v8Ev");}
void  S1580C4 ::v9(){vfunc_called(this, "_ZN7S1580C42v9Ev");}
void  S1580C4 ::v10(){vfunc_called(this, "_ZN7S1580C43v10Ev");}
void  S1580C4 ::v11(){vfunc_called(this, "_ZN7S1580C43v11Ev");}
void  S1580C4 ::v12(){vfunc_called(this, "_ZN7S1580C43v12Ev");}
void  S1580C4 ::v13(){vfunc_called(this, "_ZN7S1580C43v13Ev");}
void  S1580C4 ::v14(){vfunc_called(this, "_ZN7S1580C43v14Ev");}
void  S1580C4 ::v15(){vfunc_called(this, "_ZN7S1580C43v15Ev");}
void  S1580C4 ::v16(){vfunc_called(this, "_ZN7S1580C43v16Ev");}
void  S1580C4 ::v17(){vfunc_called(this, "_ZN7S1580C43v17Ev");}
void  S1580C4 ::v18(){vfunc_called(this, "_ZN7S1580C43v18Ev");}
void  S1580C4 ::v19(){vfunc_called(this, "_ZN7S1580C43v19Ev");}
void  S1580C4 ::v20(){vfunc_called(this, "_ZN7S1580C43v20Ev");}
void  S1580C4 ::v21(){vfunc_called(this, "_ZN7S1580C43v21Ev");}
void  S1580C4 ::v22(){vfunc_called(this, "_ZN7S1580C43v22Ev");}
void  S1580C4 ::v23(){vfunc_called(this, "_ZN7S1580C43v23Ev");}
void  S1580C4 ::v24(){vfunc_called(this, "_ZN7S1580C43v24Ev");}
void  S1580C4 ::v25(){vfunc_called(this, "_ZN7S1580C43v25Ev");}
void  S1580C4 ::v26(){vfunc_called(this, "_ZN7S1580C43v26Ev");}
void  S1580C4 ::v27(){vfunc_called(this, "_ZN7S1580C43v27Ev");}
void  S1580C4 ::v28(){vfunc_called(this, "_ZN7S1580C43v28Ev");}
void  S1580C4 ::v29(){vfunc_called(this, "_ZN7S1580C43v29Ev");}
void  S1580C4 ::v30(){vfunc_called(this, "_ZN7S1580C43v30Ev");}
void  S1580C4 ::v31(){vfunc_called(this, "_ZN7S1580C43v31Ev");}
void  S1580C4 ::v32(){vfunc_called(this, "_ZN7S1580C43v32Ev");}
void  S1580C4 ::v33(){vfunc_called(this, "_ZN7S1580C43v33Ev");}
void  S1580C4 ::v34(){vfunc_called(this, "_ZN7S1580C43v34Ev");}
void  S1580C4 ::v35(){vfunc_called(this, "_ZN7S1580C43v35Ev");}
void  S1580C4 ::v36(){vfunc_called(this, "_ZN7S1580C43v36Ev");}
void  S1580C4 ::v37(){vfunc_called(this, "_ZN7S1580C43v37Ev");}
void  S1580C4 ::v38(){vfunc_called(this, "_ZN7S1580C43v38Ev");}
void  S1580C4 ::v39(){vfunc_called(this, "_ZN7S1580C43v39Ev");}
void  S1580C4 ::v40(){vfunc_called(this, "_ZN7S1580C43v40Ev");}
void  S1580C4 ::v41(){vfunc_called(this, "_ZN7S1580C43v41Ev");}
void  S1580C4 ::v42(){vfunc_called(this, "_ZN7S1580C43v42Ev");}
void  S1580C4 ::v43(){vfunc_called(this, "_ZN7S1580C43v43Ev");}
void  S1580C4 ::v44(){vfunc_called(this, "_ZN7S1580C43v44Ev");}
void  S1580C4 ::v45(){vfunc_called(this, "_ZN7S1580C43v45Ev");}
void  S1580C4 ::v46(){vfunc_called(this, "_ZN7S1580C43v46Ev");}
void  S1580C4 ::v47(){vfunc_called(this, "_ZN7S1580C43v47Ev");}
void  S1580C4 ::v48(){vfunc_called(this, "_ZN7S1580C43v48Ev");}
void  S1580C4 ::v49(){vfunc_called(this, "_ZN7S1580C43v49Ev");}
void  S1580C4 ::v50(){vfunc_called(this, "_ZN7S1580C43v50Ev");}
void  S1580C4 ::v51(){vfunc_called(this, "_ZN7S1580C43v51Ev");}
void  S1580C4 ::v52(){vfunc_called(this, "_ZN7S1580C43v52Ev");}
void  S1580C4 ::v53(){vfunc_called(this, "_ZN7S1580C43v53Ev");}
void  S1580C4 ::v54(){vfunc_called(this, "_ZN7S1580C43v54Ev");}
void  S1580C4 ::v55(){vfunc_called(this, "_ZN7S1580C43v55Ev");}
void  S1580C4 ::v56(){vfunc_called(this, "_ZN7S1580C43v56Ev");}
void  S1580C4 ::v57(){vfunc_called(this, "_ZN7S1580C43v57Ev");}
void  S1580C4 ::v58(){vfunc_called(this, "_ZN7S1580C43v58Ev");}
void  S1580C4 ::v59(){vfunc_called(this, "_ZN7S1580C43v59Ev");}
void  S1580C4 ::v60(){vfunc_called(this, "_ZN7S1580C43v60Ev");}
void  S1580C4 ::v61(){vfunc_called(this, "_ZN7S1580C43v61Ev");}
void  S1580C4 ::v62(){vfunc_called(this, "_ZN7S1580C43v62Ev");}
void  S1580C4 ::v63(){vfunc_called(this, "_ZN7S1580C43v63Ev");}
void  S1580C4 ::v64(){vfunc_called(this, "_ZN7S1580C43v64Ev");}
void  S1580C4 ::v65(){vfunc_called(this, "_ZN7S1580C43v65Ev");}
void  S1580C4 ::v66(){vfunc_called(this, "_ZN7S1580C43v66Ev");}
void  S1580C4 ::v67(){vfunc_called(this, "_ZN7S1580C43v67Ev");}
void  S1580C4 ::v68(){vfunc_called(this, "_ZN7S1580C43v68Ev");}
void  S1580C4 ::v69(){vfunc_called(this, "_ZN7S1580C43v69Ev");}
void  S1580C4 ::v70(){vfunc_called(this, "_ZN7S1580C43v70Ev");}
void  S1580C4 ::v71(){vfunc_called(this, "_ZN7S1580C43v71Ev");}
S1580C4 ::S1580C4(){ note_ctor("S1580C4", this);} // tgen

static void Test_S1580C4()
{
  extern Class_Descriptor cd_S1580C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1580C4, buf);
    S1580C4 *dp, &lv = *(dp=new (buf) S1580C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1580C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1580C4)");
    check_field_offset(lv, s1580c4f0, ABISELECT(8,4), "S1580C4.s1580c4f0");
    check_field_offset(lv, s1580c4f1, ABISELECT(16,8), "S1580C4.s1580c4f1");
    check_field_offset(lv, s1580c4f2, ABISELECT(24,16), "S1580C4.s1580c4f2");
    check_field_offset(lv, s1580c4f3, ABISELECT(56,32), "S1580C4.s1580c4f3");
    check_field_offset(lv, s1580c4f4, ABISELECT(64,40), "S1580C4.s1580c4f4");
    check_field_offset(lv, s1580c4f5, ABISELECT(72,44), "S1580C4.s1580c4f5");
    check_field_offset(lv, s1580c4f6, ABISELECT(80,52), "S1580C4.s1580c4f6");
    test_class_info(&lv, &cd_S1580C4);
    dp->~S1580C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1580C4(Test_S1580C4, "S1580C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1580C4C1Ev();
extern void _ZN7S1580C4D1Ev();
Name_Map name_map_S1580C4[] = {
  NSPAIR(_ZN7S1580C4C1Ev),
  NSPAIR(_ZN7S1580C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1580C4[];
extern void _ZN7S1580C4D1Ev();
extern void _ZN7S1580C4D0Ev();
extern void _ZN7S1580C42v8Ev();
extern void _ZN7S1580C42v9Ev();
extern void _ZN7S1580C43v10Ev();
extern void _ZN7S1580C43v11Ev();
extern void _ZN7S1580C43v12Ev();
extern void _ZN7S1580C43v13Ev();
extern void _ZN7S1580C43v14Ev();
extern void _ZN7S1580C43v15Ev();
extern void _ZN7S1580C43v16Ev();
extern void _ZN7S1580C43v17Ev();
extern void _ZN7S1580C43v18Ev();
extern void _ZN7S1580C43v19Ev();
extern void _ZN7S1580C43v20Ev();
extern void _ZN7S1580C43v21Ev();
extern void _ZN7S1580C43v22Ev();
extern void _ZN7S1580C43v23Ev();
extern void _ZN7S1580C43v24Ev();
extern void _ZN7S1580C43v25Ev();
extern void _ZN7S1580C43v26Ev();
extern void _ZN7S1580C43v27Ev();
extern void _ZN7S1580C43v28Ev();
extern void _ZN7S1580C43v29Ev();
extern void _ZN7S1580C43v30Ev();
extern void _ZN7S1580C43v31Ev();
extern void _ZN7S1580C43v32Ev();
extern void _ZN7S1580C43v33Ev();
extern void _ZN7S1580C43v34Ev();
extern void _ZN7S1580C43v35Ev();
extern void _ZN7S1580C43v36Ev();
extern void _ZN7S1580C43v37Ev();
extern void _ZN7S1580C43v38Ev();
extern void _ZN7S1580C43v39Ev();
extern void _ZN7S1580C43v40Ev();
extern void _ZN7S1580C43v41Ev();
extern void _ZN7S1580C43v42Ev();
extern void _ZN7S1580C43v43Ev();
extern void _ZN7S1580C43v44Ev();
extern void _ZN7S1580C43v45Ev();
extern void _ZN7S1580C43v46Ev();
extern void _ZN7S1580C43v47Ev();
extern void _ZN7S1580C43v48Ev();
extern void _ZN7S1580C43v49Ev();
extern void _ZN7S1580C43v50Ev();
extern void _ZN7S1580C43v51Ev();
extern void _ZN7S1580C43v52Ev();
extern void _ZN7S1580C43v53Ev();
extern void _ZN7S1580C43v54Ev();
extern void _ZN7S1580C43v55Ev();
extern void _ZN7S1580C43v56Ev();
extern void _ZN7S1580C43v57Ev();
extern void _ZN7S1580C43v58Ev();
extern void _ZN7S1580C43v59Ev();
extern void _ZN7S1580C43v60Ev();
extern void _ZN7S1580C43v61Ev();
extern void _ZN7S1580C43v62Ev();
extern void _ZN7S1580C43v63Ev();
extern void _ZN7S1580C43v64Ev();
extern void _ZN7S1580C43v65Ev();
extern void _ZN7S1580C43v66Ev();
extern void _ZN7S1580C43v67Ev();
extern void _ZN7S1580C43v68Ev();
extern void _ZN7S1580C43v69Ev();
extern void _ZN7S1580C43v70Ev();
extern void _ZN7S1580C43v71Ev();
static  VTBL_ENTRY vtc_S1580C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1580C4[0]),
  (VTBL_ENTRY)&_ZN7S1580C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1580C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1580C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1580C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1580C4[];
extern  VTBL_ENTRY _ZTV7S1580C4[];
Class_Descriptor cd_S1580C4 = {  "S1580C4", // class name
  0,0,//no base classes
  &(vtc_S1580C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1580C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1580C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1580C3  : S1580C4 {
  int s1580c3f0[2];
  void *s1580c3f1;
  int s1580c3f2[2];
  ::S473C7_nt s1580c3f3;
  ::S473C7_nt s1580c3f4;
  ::S21925C42 s1580c3f5;
  ::S473C7_nt s1580c3f6;
  unsigned int s1580c3f7:1;
  unsigned int s1580c3f8:1;
  unsigned int s1580c3f9:1;
  unsigned int s1580c3f10:1;
  unsigned int s1580c3f11:1;
  int s1580c3f12[2];
  virtual  ~S1580C3(); // _ZN7S1580C3D1Ev
  virtual void  v72(); // _ZN7S1580C33v72Ev
  virtual void  v73(); // _ZN7S1580C33v73Ev
  virtual void  v74(); // _ZN7S1580C33v74Ev
  virtual void  v75(); // _ZN7S1580C33v75Ev
  virtual void  v76(); // _ZN7S1580C33v76Ev
  virtual void  v77(); // _ZN7S1580C33v77Ev
  virtual void  v78(); // _ZN7S1580C33v78Ev
  virtual void  v79(); // _ZN7S1580C33v79Ev
  virtual void  v80(); // _ZN7S1580C33v80Ev
  virtual void  v81(); // _ZN7S1580C33v81Ev
  virtual void  v82(); // _ZN7S1580C33v82Ev
  virtual void  v83(); // _ZN7S1580C33v83Ev
  virtual void  v84(); // _ZN7S1580C33v84Ev
  virtual void  v85(); // _ZN7S1580C33v85Ev
  virtual void  v86(); // _ZN7S1580C33v86Ev
  virtual void  v87(); // _ZN7S1580C33v87Ev
  virtual void  v88(); // _ZN7S1580C33v88Ev
  virtual void  v89(); // _ZN7S1580C33v89Ev
  virtual void  v90(); // _ZN7S1580C33v90Ev
  virtual void  v91(); // _ZN7S1580C33v91Ev
  virtual void  v92(); // _ZN7S1580C33v92Ev
  virtual void  v93(); // _ZN7S1580C33v93Ev
  S1580C3(); // tgen
};
//SIG(-1 S1580C3) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1580C3 ::~S1580C3(){ note_dtor("S1580C3", this);}
void  S1580C3 ::v72(){vfunc_called(this, "_ZN7S1580C33v72Ev");}
void  S1580C3 ::v73(){vfunc_called(this, "_ZN7S1580C33v73Ev");}
void  S1580C3 ::v74(){vfunc_called(this, "_ZN7S1580C33v74Ev");}
void  S1580C3 ::v75(){vfunc_called(this, "_ZN7S1580C33v75Ev");}
void  S1580C3 ::v76(){vfunc_called(this, "_ZN7S1580C33v76Ev");}
void  S1580C3 ::v77(){vfunc_called(this, "_ZN7S1580C33v77Ev");}
void  S1580C3 ::v78(){vfunc_called(this, "_ZN7S1580C33v78Ev");}
void  S1580C3 ::v79(){vfunc_called(this, "_ZN7S1580C33v79Ev");}
void  S1580C3 ::v80(){vfunc_called(this, "_ZN7S1580C33v80Ev");}
void  S1580C3 ::v81(){vfunc_called(this, "_ZN7S1580C33v81Ev");}
void  S1580C3 ::v82(){vfunc_called(this, "_ZN7S1580C33v82Ev");}
void  S1580C3 ::v83(){vfunc_called(this, "_ZN7S1580C33v83Ev");}
void  S1580C3 ::v84(){vfunc_called(this, "_ZN7S1580C33v84Ev");}
void  S1580C3 ::v85(){vfunc_called(this, "_ZN7S1580C33v85Ev");}
void  S1580C3 ::v86(){vfunc_called(this, "_ZN7S1580C33v86Ev");}
void  S1580C3 ::v87(){vfunc_called(this, "_ZN7S1580C33v87Ev");}
void  S1580C3 ::v88(){vfunc_called(this, "_ZN7S1580C33v88Ev");}
void  S1580C3 ::v89(){vfunc_called(this, "_ZN7S1580C33v89Ev");}
void  S1580C3 ::v90(){vfunc_called(this, "_ZN7S1580C33v90Ev");}
void  S1580C3 ::v91(){vfunc_called(this, "_ZN7S1580C33v91Ev");}
void  S1580C3 ::v92(){vfunc_called(this, "_ZN7S1580C33v92Ev");}
void  S1580C3 ::v93(){vfunc_called(this, "_ZN7S1580C33v93Ev");}
S1580C3 ::S1580C3(){ note_ctor("S1580C3", this);} // tgen

static void Test_S1580C3()
{
  extern Class_Descriptor cd_S1580C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S1580C3, buf);
    S1580C3 *dp, &lv = *(dp=new (buf) S1580C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S1580C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1580C3)");
    check_base_class_offset(lv, (S1580C4*), 0, "S1580C3");
    check_field_offset(lv, s1580c3f0, ABISELECT(96,60), "S1580C3.s1580c3f0");
    check_field_offset(lv, s1580c3f1, ABISELECT(104,68), "S1580C3.s1580c3f1");
    check_field_offset(lv, s1580c3f2, ABISELECT(112,72), "S1580C3.s1580c3f2");
    check_field_offset(lv, s1580c3f3, ABISELECT(120,80), "S1580C3.s1580c3f3");
    check_field_offset(lv, s1580c3f4, ABISELECT(136,92), "S1580C3.s1580c3f4");
    check_field_offset(lv, s1580c3f5, ABISELECT(152,104), "S1580C3.s1580c3f5");
    check_field_offset(lv, s1580c3f6, ABISELECT(160,108), "S1580C3.s1580c3f6");
    set_bf_and_test(lv, s1580c3f7, ABISELECT(176,120), 0, 1, 1, "S1580C3");
    set_bf_and_test(lv, s1580c3f8, ABISELECT(176,120), 1, 1, 1, "S1580C3");
    set_bf_and_test(lv, s1580c3f9, ABISELECT(176,120), 2, 1, 1, "S1580C3");
    set_bf_and_test(lv, s1580c3f10, ABISELECT(176,120), 3, 1, 1, "S1580C3");
    set_bf_and_test(lv, s1580c3f11, ABISELECT(176,120), 4, 1, 1, "S1580C3");
    check_field_offset(lv, s1580c3f12, ABISELECT(180,124), "S1580C3.s1580c3f12");
    test_class_info(&lv, &cd_S1580C3);
    dp->~S1580C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1580C3(Test_S1580C3, "S1580C3", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN7S1580C3C1Ev();
extern void _ZN7S1580C3D1Ev();
Name_Map name_map_S1580C3[] = {
  NSPAIR(_ZN7S1580C3C1Ev),
  NSPAIR(_ZN7S1580C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1580C4;
extern VTBL_ENTRY _ZTI7S1580C4[];
extern  VTBL_ENTRY _ZTV7S1580C4[];
static Base_Class bases_S1580C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1580C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1580C3[];
extern void _ZN7S1580C3D1Ev();
extern void _ZN7S1580C3D0Ev();
extern void _ZN7S1580C42v8Ev();
extern void _ZN7S1580C42v9Ev();
extern void _ZN7S1580C43v10Ev();
extern void _ZN7S1580C43v11Ev();
extern void _ZN7S1580C43v12Ev();
extern void _ZN7S1580C43v13Ev();
extern void _ZN7S1580C43v14Ev();
extern void _ZN7S1580C43v15Ev();
extern void _ZN7S1580C43v16Ev();
extern void _ZN7S1580C43v17Ev();
extern void _ZN7S1580C43v18Ev();
extern void _ZN7S1580C43v19Ev();
extern void _ZN7S1580C43v20Ev();
extern void _ZN7S1580C43v21Ev();
extern void _ZN7S1580C43v22Ev();
extern void _ZN7S1580C43v23Ev();
extern void _ZN7S1580C43v24Ev();
extern void _ZN7S1580C43v25Ev();
extern void _ZN7S1580C43v26Ev();
extern void _ZN7S1580C43v27Ev();
extern void _ZN7S1580C43v28Ev();
extern void _ZN7S1580C43v29Ev();
extern void _ZN7S1580C43v30Ev();
extern void _ZN7S1580C43v31Ev();
extern void _ZN7S1580C43v32Ev();
extern void _ZN7S1580C43v33Ev();
extern void _ZN7S1580C43v34Ev();
extern void _ZN7S1580C43v35Ev();
extern void _ZN7S1580C43v36Ev();
extern void _ZN7S1580C43v37Ev();
extern void _ZN7S1580C43v38Ev();
extern void _ZN7S1580C43v39Ev();
extern void _ZN7S1580C43v40Ev();
extern void _ZN7S1580C43v41Ev();
extern void _ZN7S1580C43v42Ev();
extern void _ZN7S1580C43v43Ev();
extern void _ZN7S1580C43v44Ev();
extern void _ZN7S1580C43v45Ev();
extern void _ZN7S1580C43v46Ev();
extern void _ZN7S1580C43v47Ev();
extern void _ZN7S1580C43v48Ev();
extern void _ZN7S1580C43v49Ev();
extern void _ZN7S1580C43v50Ev();
extern void _ZN7S1580C43v51Ev();
extern void _ZN7S1580C43v52Ev();
extern void _ZN7S1580C43v53Ev();
extern void _ZN7S1580C43v54Ev();
extern void _ZN7S1580C43v55Ev();
extern void _ZN7S1580C43v56Ev();
extern void _ZN7S1580C43v57Ev();
extern void _ZN7S1580C43v58Ev();
extern void _ZN7S1580C43v59Ev();
extern void _ZN7S1580C43v60Ev();
extern void _ZN7S1580C43v61Ev();
extern void _ZN7S1580C43v62Ev();
extern void _ZN7S1580C43v63Ev();
extern void _ZN7S1580C43v64Ev();
extern void _ZN7S1580C43v65Ev();
extern void _ZN7S1580C43v66Ev();
extern void _ZN7S1580C43v67Ev();
extern void _ZN7S1580C43v68Ev();
extern void _ZN7S1580C43v69Ev();
extern void _ZN7S1580C43v70Ev();
extern void _ZN7S1580C43v71Ev();
extern void _ZN7S1580C33v72Ev();
extern void _ZN7S1580C33v73Ev();
extern void _ZN7S1580C33v74Ev();
extern void _ZN7S1580C33v75Ev();
extern void _ZN7S1580C33v76Ev();
extern void _ZN7S1580C33v77Ev();
extern void _ZN7S1580C33v78Ev();
extern void _ZN7S1580C33v79Ev();
extern void _ZN7S1580C33v80Ev();
extern void _ZN7S1580C33v81Ev();
extern void _ZN7S1580C33v82Ev();
extern void _ZN7S1580C33v83Ev();
extern void _ZN7S1580C33v84Ev();
extern void _ZN7S1580C33v85Ev();
extern void _ZN7S1580C33v86Ev();
extern void _ZN7S1580C33v87Ev();
extern void _ZN7S1580C33v88Ev();
extern void _ZN7S1580C33v89Ev();
extern void _ZN7S1580C33v90Ev();
extern void _ZN7S1580C33v91Ev();
extern void _ZN7S1580C33v92Ev();
extern void _ZN7S1580C33v93Ev();
static  VTBL_ENTRY vtc_S1580C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1580C3[0]),
  (VTBL_ENTRY)&_ZN7S1580C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1580C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1580C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1580C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v93Ev,
};
extern VTBL_ENTRY _ZTI7S1580C3[];
extern  VTBL_ENTRY _ZTV7S1580C3[];
Class_Descriptor cd_S1580C3 = {  "S1580C3", // class name
  bases_S1580C3, 1,
  &(vtc_S1580C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI7S1580C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1580C3),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1580C2  : S1580C3 {
  ::S473C6_nt s1580c2f0;
  virtual  ~S1580C2(); // _ZN7S1580C2D1Ev
  virtual void  v94(); // _ZN7S1580C23v94Ev
  virtual void  v95(); // _ZN7S1580C23v95Ev
  virtual void  v96(); // _ZN7S1580C23v96Ev
  virtual void  v97(); // _ZN7S1580C23v97Ev
  virtual void  v98(); // _ZN7S1580C23v98Ev
  virtual void  v99(); // _ZN7S1580C23v99Ev
  virtual void  v100(); // _ZN7S1580C24v100Ev
  virtual void  v101(); // _ZN7S1580C24v101Ev
  virtual void  v102(); // _ZN7S1580C24v102Ev
  virtual void  v103(); // _ZN7S1580C24v103Ev
  virtual void  v104(); // _ZN7S1580C24v104Ev
  virtual void  v105(); // _ZN7S1580C24v105Ev
  virtual void  v106(); // _ZN7S1580C24v106Ev
  virtual void  v107(); // _ZN7S1580C24v107Ev
  virtual void  v108(); // _ZN7S1580C24v108Ev
  virtual void  v109(); // _ZN7S1580C24v109Ev
  virtual void  v110(); // _ZN7S1580C24v110Ev
  virtual void  v111(); // _ZN7S1580C24v111Ev
  virtual void  v112(); // _ZN7S1580C24v112Ev
  S1580C2(); // tgen
};
//SIG(-1 S1580C2) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S1580C2 ::~S1580C2(){ note_dtor("S1580C2", this);}
void  S1580C2 ::v94(){vfunc_called(this, "_ZN7S1580C23v94Ev");}
void  S1580C2 ::v95(){vfunc_called(this, "_ZN7S1580C23v95Ev");}
void  S1580C2 ::v96(){vfunc_called(this, "_ZN7S1580C23v96Ev");}
void  S1580C2 ::v97(){vfunc_called(this, "_ZN7S1580C23v97Ev");}
void  S1580C2 ::v98(){vfunc_called(this, "_ZN7S1580C23v98Ev");}
void  S1580C2 ::v99(){vfunc_called(this, "_ZN7S1580C23v99Ev");}
void  S1580C2 ::v100(){vfunc_called(this, "_ZN7S1580C24v100Ev");}
void  S1580C2 ::v101(){vfunc_called(this, "_ZN7S1580C24v101Ev");}
void  S1580C2 ::v102(){vfunc_called(this, "_ZN7S1580C24v102Ev");}
void  S1580C2 ::v103(){vfunc_called(this, "_ZN7S1580C24v103Ev");}
void  S1580C2 ::v104(){vfunc_called(this, "_ZN7S1580C24v104Ev");}
void  S1580C2 ::v105(){vfunc_called(this, "_ZN7S1580C24v105Ev");}
void  S1580C2 ::v106(){vfunc_called(this, "_ZN7S1580C24v106Ev");}
void  S1580C2 ::v107(){vfunc_called(this, "_ZN7S1580C24v107Ev");}
void  S1580C2 ::v108(){vfunc_called(this, "_ZN7S1580C24v108Ev");}
void  S1580C2 ::v109(){vfunc_called(this, "_ZN7S1580C24v109Ev");}
void  S1580C2 ::v110(){vfunc_called(this, "_ZN7S1580C24v110Ev");}
void  S1580C2 ::v111(){vfunc_called(this, "_ZN7S1580C24v111Ev");}
void  S1580C2 ::v112(){vfunc_called(this, "_ZN7S1580C24v112Ev");}
S1580C2 ::S1580C2(){ note_ctor("S1580C2", this);} // tgen

static void Test_S1580C2()
{
  extern Class_Descriptor cd_S1580C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S1580C2, buf);
    S1580C2 *dp, &lv = *(dp=new (buf) S1580C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S1580C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1580C2)");
    check_base_class_offset(lv, (S1580C4*)(S1580C3*), 0, "S1580C2");
    check_base_class_offset(lv, (S1580C3*), 0, "S1580C2");
    check_field_offset(lv, s1580c2f0, ABISELECT(188,132), "S1580C2.s1580c2f0");
    test_class_info(&lv, &cd_S1580C2);
    dp->~S1580C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1580C2(Test_S1580C2, "S1580C2", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S1580C2C1Ev();
extern void _ZN7S1580C2D1Ev();
Name_Map name_map_S1580C2[] = {
  NSPAIR(_ZN7S1580C2C1Ev),
  NSPAIR(_ZN7S1580C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1580C4;
extern VTBL_ENTRY _ZTI7S1580C4[];
extern  VTBL_ENTRY _ZTV7S1580C4[];
extern Class_Descriptor cd_S1580C3;
extern VTBL_ENTRY _ZTI7S1580C3[];
extern  VTBL_ENTRY _ZTV7S1580C3[];
static Base_Class bases_S1580C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1580C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1580C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1580C2[];
extern void _ZN7S1580C2D1Ev();
extern void _ZN7S1580C2D0Ev();
extern void _ZN7S1580C42v8Ev();
extern void _ZN7S1580C42v9Ev();
extern void _ZN7S1580C43v10Ev();
extern void _ZN7S1580C43v11Ev();
extern void _ZN7S1580C43v12Ev();
extern void _ZN7S1580C43v13Ev();
extern void _ZN7S1580C43v14Ev();
extern void _ZN7S1580C43v15Ev();
extern void _ZN7S1580C43v16Ev();
extern void _ZN7S1580C43v17Ev();
extern void _ZN7S1580C43v18Ev();
extern void _ZN7S1580C43v19Ev();
extern void _ZN7S1580C43v20Ev();
extern void _ZN7S1580C43v21Ev();
extern void _ZN7S1580C43v22Ev();
extern void _ZN7S1580C43v23Ev();
extern void _ZN7S1580C43v24Ev();
extern void _ZN7S1580C43v25Ev();
extern void _ZN7S1580C43v26Ev();
extern void _ZN7S1580C43v27Ev();
extern void _ZN7S1580C43v28Ev();
extern void _ZN7S1580C43v29Ev();
extern void _ZN7S1580C43v30Ev();
extern void _ZN7S1580C43v31Ev();
extern void _ZN7S1580C43v32Ev();
extern void _ZN7S1580C43v33Ev();
extern void _ZN7S1580C43v34Ev();
extern void _ZN7S1580C43v35Ev();
extern void _ZN7S1580C43v36Ev();
extern void _ZN7S1580C43v37Ev();
extern void _ZN7S1580C43v38Ev();
extern void _ZN7S1580C43v39Ev();
extern void _ZN7S1580C43v40Ev();
extern void _ZN7S1580C43v41Ev();
extern void _ZN7S1580C43v42Ev();
extern void _ZN7S1580C43v43Ev();
extern void _ZN7S1580C43v44Ev();
extern void _ZN7S1580C43v45Ev();
extern void _ZN7S1580C43v46Ev();
extern void _ZN7S1580C43v47Ev();
extern void _ZN7S1580C43v48Ev();
extern void _ZN7S1580C43v49Ev();
extern void _ZN7S1580C43v50Ev();
extern void _ZN7S1580C43v51Ev();
extern void _ZN7S1580C43v52Ev();
extern void _ZN7S1580C43v53Ev();
extern void _ZN7S1580C43v54Ev();
extern void _ZN7S1580C43v55Ev();
extern void _ZN7S1580C43v56Ev();
extern void _ZN7S1580C43v57Ev();
extern void _ZN7S1580C43v58Ev();
extern void _ZN7S1580C43v59Ev();
extern void _ZN7S1580C43v60Ev();
extern void _ZN7S1580C43v61Ev();
extern void _ZN7S1580C43v62Ev();
extern void _ZN7S1580C43v63Ev();
extern void _ZN7S1580C43v64Ev();
extern void _ZN7S1580C43v65Ev();
extern void _ZN7S1580C43v66Ev();
extern void _ZN7S1580C43v67Ev();
extern void _ZN7S1580C43v68Ev();
extern void _ZN7S1580C43v69Ev();
extern void _ZN7S1580C43v70Ev();
extern void _ZN7S1580C43v71Ev();
extern void _ZN7S1580C33v72Ev();
extern void _ZN7S1580C33v73Ev();
extern void _ZN7S1580C33v74Ev();
extern void _ZN7S1580C33v75Ev();
extern void _ZN7S1580C33v76Ev();
extern void _ZN7S1580C33v77Ev();
extern void _ZN7S1580C33v78Ev();
extern void _ZN7S1580C33v79Ev();
extern void _ZN7S1580C33v80Ev();
extern void _ZN7S1580C33v81Ev();
extern void _ZN7S1580C33v82Ev();
extern void _ZN7S1580C33v83Ev();
extern void _ZN7S1580C33v84Ev();
extern void _ZN7S1580C33v85Ev();
extern void _ZN7S1580C33v86Ev();
extern void _ZN7S1580C33v87Ev();
extern void _ZN7S1580C33v88Ev();
extern void _ZN7S1580C33v89Ev();
extern void _ZN7S1580C33v90Ev();
extern void _ZN7S1580C33v91Ev();
extern void _ZN7S1580C33v92Ev();
extern void _ZN7S1580C33v93Ev();
extern void _ZN7S1580C23v94Ev();
extern void _ZN7S1580C23v95Ev();
extern void _ZN7S1580C23v96Ev();
extern void _ZN7S1580C23v97Ev();
extern void _ZN7S1580C23v98Ev();
extern void _ZN7S1580C23v99Ev();
extern void _ZN7S1580C24v100Ev();
extern void _ZN7S1580C24v101Ev();
extern void _ZN7S1580C24v102Ev();
extern void _ZN7S1580C24v103Ev();
extern void _ZN7S1580C24v104Ev();
extern void _ZN7S1580C24v105Ev();
extern void _ZN7S1580C24v106Ev();
extern void _ZN7S1580C24v107Ev();
extern void _ZN7S1580C24v108Ev();
extern void _ZN7S1580C24v109Ev();
extern void _ZN7S1580C24v110Ev();
extern void _ZN7S1580C24v111Ev();
extern void _ZN7S1580C24v112Ev();
static  VTBL_ENTRY vtc_S1580C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1580C2[0]),
  (VTBL_ENTRY)&_ZN7S1580C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1580C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1580C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1580C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v112Ev,
};
extern VTBL_ENTRY _ZTI7S1580C2[];
extern  VTBL_ENTRY _ZTV7S1580C2[];
Class_Descriptor cd_S1580C2 = {  "S1580C2", // class name
  bases_S1580C2, 2,
  &(vtc_S1580C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S1580C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1580C2),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1580C1  : S1580C2 {
  ::S473C6_nt s1580c1f0;
  virtual  ~S1580C1(); // _ZN7S1580C1D1Ev
  virtual void  v1(); // _ZN7S1580C12v1Ev
  virtual void  v2(); // _ZN7S1580C12v2Ev
  virtual void  v3(); // _ZN7S1580C12v3Ev
  virtual void  v4(); // _ZN7S1580C12v4Ev
  virtual void  v5(); // _ZN7S1580C12v5Ev
  virtual void  v6(); // _ZN7S1580C12v6Ev
  virtual void  v7(); // _ZN7S1580C12v7Ev
  S1580C1(); // tgen
};
//SIG(1 S1580C1) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 FC5} vd v1 v2 v3 v4 v5 v6 v7 FC5}


 S1580C1 ::~S1580C1(){ note_dtor("S1580C1", this);}
void  S1580C1 ::v1(){vfunc_called(this, "_ZN7S1580C12v1Ev");}
void  S1580C1 ::v2(){vfunc_called(this, "_ZN7S1580C12v2Ev");}
void  S1580C1 ::v3(){vfunc_called(this, "_ZN7S1580C12v3Ev");}
void  S1580C1 ::v4(){vfunc_called(this, "_ZN7S1580C12v4Ev");}
void  S1580C1 ::v5(){vfunc_called(this, "_ZN7S1580C12v5Ev");}
void  S1580C1 ::v6(){vfunc_called(this, "_ZN7S1580C12v6Ev");}
void  S1580C1 ::v7(){vfunc_called(this, "_ZN7S1580C12v7Ev");}
S1580C1 ::S1580C1(){ note_ctor("S1580C1", this);} // tgen

static void Test_S1580C1()
{
  extern Class_Descriptor cd_S1580C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1580C1, buf);
    S1580C1 *dp, &lv = *(dp=new (buf) S1580C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1580C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1580C1)");
    check_base_class_offset(lv, (S1580C4*)(S1580C3*)(S1580C2*), 0, "S1580C1");
    check_base_class_offset(lv, (S1580C3*)(S1580C2*), 0, "S1580C1");
    check_base_class_offset(lv, (S1580C2*), 0, "S1580C1");
    check_field_offset(lv, s1580c1f0, ABISELECT(196,140), "S1580C1.s1580c1f0");
    test_class_info(&lv, &cd_S1580C1);
    dp->~S1580C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1580C1(Test_S1580C1, "S1580C1", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1580C1C1Ev();
extern void _ZN7S1580C1D1Ev();
Name_Map name_map_S1580C1[] = {
  NSPAIR(_ZN7S1580C1C1Ev),
  NSPAIR(_ZN7S1580C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1580C4;
extern VTBL_ENTRY _ZTI7S1580C4[];
extern  VTBL_ENTRY _ZTV7S1580C4[];
extern Class_Descriptor cd_S1580C3;
extern VTBL_ENTRY _ZTI7S1580C3[];
extern  VTBL_ENTRY _ZTV7S1580C3[];
extern Class_Descriptor cd_S1580C2;
extern VTBL_ENTRY _ZTI7S1580C2[];
extern  VTBL_ENTRY _ZTV7S1580C2[];
static Base_Class bases_S1580C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1580C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1580C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1580C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1580C1[];
extern void _ZN7S1580C1D1Ev();
extern void _ZN7S1580C1D0Ev();
extern void _ZN7S1580C42v8Ev();
extern void _ZN7S1580C42v9Ev();
extern void _ZN7S1580C43v10Ev();
extern void _ZN7S1580C43v11Ev();
extern void _ZN7S1580C43v12Ev();
extern void _ZN7S1580C43v13Ev();
extern void _ZN7S1580C43v14Ev();
extern void _ZN7S1580C43v15Ev();
extern void _ZN7S1580C43v16Ev();
extern void _ZN7S1580C43v17Ev();
extern void _ZN7S1580C43v18Ev();
extern void _ZN7S1580C43v19Ev();
extern void _ZN7S1580C43v20Ev();
extern void _ZN7S1580C43v21Ev();
extern void _ZN7S1580C43v22Ev();
extern void _ZN7S1580C43v23Ev();
extern void _ZN7S1580C43v24Ev();
extern void _ZN7S1580C43v25Ev();
extern void _ZN7S1580C43v26Ev();
extern void _ZN7S1580C43v27Ev();
extern void _ZN7S1580C43v28Ev();
extern void _ZN7S1580C43v29Ev();
extern void _ZN7S1580C43v30Ev();
extern void _ZN7S1580C43v31Ev();
extern void _ZN7S1580C43v32Ev();
extern void _ZN7S1580C43v33Ev();
extern void _ZN7S1580C43v34Ev();
extern void _ZN7S1580C43v35Ev();
extern void _ZN7S1580C43v36Ev();
extern void _ZN7S1580C43v37Ev();
extern void _ZN7S1580C43v38Ev();
extern void _ZN7S1580C43v39Ev();
extern void _ZN7S1580C43v40Ev();
extern void _ZN7S1580C43v41Ev();
extern void _ZN7S1580C43v42Ev();
extern void _ZN7S1580C43v43Ev();
extern void _ZN7S1580C43v44Ev();
extern void _ZN7S1580C43v45Ev();
extern void _ZN7S1580C43v46Ev();
extern void _ZN7S1580C43v47Ev();
extern void _ZN7S1580C43v48Ev();
extern void _ZN7S1580C43v49Ev();
extern void _ZN7S1580C43v50Ev();
extern void _ZN7S1580C43v51Ev();
extern void _ZN7S1580C43v52Ev();
extern void _ZN7S1580C43v53Ev();
extern void _ZN7S1580C43v54Ev();
extern void _ZN7S1580C43v55Ev();
extern void _ZN7S1580C43v56Ev();
extern void _ZN7S1580C43v57Ev();
extern void _ZN7S1580C43v58Ev();
extern void _ZN7S1580C43v59Ev();
extern void _ZN7S1580C43v60Ev();
extern void _ZN7S1580C43v61Ev();
extern void _ZN7S1580C43v62Ev();
extern void _ZN7S1580C43v63Ev();
extern void _ZN7S1580C43v64Ev();
extern void _ZN7S1580C43v65Ev();
extern void _ZN7S1580C43v66Ev();
extern void _ZN7S1580C43v67Ev();
extern void _ZN7S1580C43v68Ev();
extern void _ZN7S1580C43v69Ev();
extern void _ZN7S1580C43v70Ev();
extern void _ZN7S1580C43v71Ev();
extern void _ZN7S1580C33v72Ev();
extern void _ZN7S1580C33v73Ev();
extern void _ZN7S1580C33v74Ev();
extern void _ZN7S1580C33v75Ev();
extern void _ZN7S1580C33v76Ev();
extern void _ZN7S1580C33v77Ev();
extern void _ZN7S1580C33v78Ev();
extern void _ZN7S1580C33v79Ev();
extern void _ZN7S1580C33v80Ev();
extern void _ZN7S1580C33v81Ev();
extern void _ZN7S1580C33v82Ev();
extern void _ZN7S1580C33v83Ev();
extern void _ZN7S1580C33v84Ev();
extern void _ZN7S1580C33v85Ev();
extern void _ZN7S1580C33v86Ev();
extern void _ZN7S1580C33v87Ev();
extern void _ZN7S1580C33v88Ev();
extern void _ZN7S1580C33v89Ev();
extern void _ZN7S1580C33v90Ev();
extern void _ZN7S1580C33v91Ev();
extern void _ZN7S1580C33v92Ev();
extern void _ZN7S1580C33v93Ev();
extern void _ZN7S1580C23v94Ev();
extern void _ZN7S1580C23v95Ev();
extern void _ZN7S1580C23v96Ev();
extern void _ZN7S1580C23v97Ev();
extern void _ZN7S1580C23v98Ev();
extern void _ZN7S1580C23v99Ev();
extern void _ZN7S1580C24v100Ev();
extern void _ZN7S1580C24v101Ev();
extern void _ZN7S1580C24v102Ev();
extern void _ZN7S1580C24v103Ev();
extern void _ZN7S1580C24v104Ev();
extern void _ZN7S1580C24v105Ev();
extern void _ZN7S1580C24v106Ev();
extern void _ZN7S1580C24v107Ev();
extern void _ZN7S1580C24v108Ev();
extern void _ZN7S1580C24v109Ev();
extern void _ZN7S1580C24v110Ev();
extern void _ZN7S1580C24v111Ev();
extern void _ZN7S1580C24v112Ev();
extern void _ZN7S1580C12v1Ev();
extern void _ZN7S1580C12v2Ev();
extern void _ZN7S1580C12v3Ev();
extern void _ZN7S1580C12v4Ev();
extern void _ZN7S1580C12v5Ev();
extern void _ZN7S1580C12v6Ev();
extern void _ZN7S1580C12v7Ev();
static  VTBL_ENTRY vtc_S1580C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1580C1[0]),
  (VTBL_ENTRY)&_ZN7S1580C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1580C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1580C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1580C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1580C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1580C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1580C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1580C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1580C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1580C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1580C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1580C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1580C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1580C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1580C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1580C1[];
extern  VTBL_ENTRY _ZTV7S1580C1[];
Class_Descriptor cd_S1580C1 = {  "S1580C1", // class name
  bases_S1580C1, 3,
  &(vtc_S1580C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1580C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1580C1),116, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1581C4  {
  int s1581c4f0;
  __tsi64 s1581c4f1;
  void *s1581c4f2[4];
  int s1581c4f3[2];
  void *s1581c4f4;
  ::S473C6_nt s1581c4f5;
  void *s1581c4f6[2];
  virtual  ~S1581C4(); // _ZN7S1581C4D1Ev
  virtual void  v8(); // _ZN7S1581C42v8Ev
  virtual void  v9(); // _ZN7S1581C42v9Ev
  virtual void  v10(); // _ZN7S1581C43v10Ev
  virtual void  v11(); // _ZN7S1581C43v11Ev
  virtual void  v12(); // _ZN7S1581C43v12Ev
  virtual void  v13(); // _ZN7S1581C43v13Ev
  virtual void  v14(); // _ZN7S1581C43v14Ev
  virtual void  v15(); // _ZN7S1581C43v15Ev
  virtual void  v16(); // _ZN7S1581C43v16Ev
  virtual void  v17(); // _ZN7S1581C43v17Ev
  virtual void  v18(); // _ZN7S1581C43v18Ev
  virtual void  v19(); // _ZN7S1581C43v19Ev
  virtual void  v20(); // _ZN7S1581C43v20Ev
  virtual void  v21(); // _ZN7S1581C43v21Ev
  virtual void  v22(); // _ZN7S1581C43v22Ev
  virtual void  v23(); // _ZN7S1581C43v23Ev
  virtual void  v24(); // _ZN7S1581C43v24Ev
  virtual void  v25(); // _ZN7S1581C43v25Ev
  virtual void  v26(); // _ZN7S1581C43v26Ev
  virtual void  v27(); // _ZN7S1581C43v27Ev
  virtual void  v28(); // _ZN7S1581C43v28Ev
  virtual void  v29(); // _ZN7S1581C43v29Ev
  virtual void  v30(); // _ZN7S1581C43v30Ev
  virtual void  v31(); // _ZN7S1581C43v31Ev
  virtual void  v32(); // _ZN7S1581C43v32Ev
  virtual void  v33(); // _ZN7S1581C43v33Ev
  virtual void  v34(); // _ZN7S1581C43v34Ev
  virtual void  v35(); // _ZN7S1581C43v35Ev
  virtual void  v36(); // _ZN7S1581C43v36Ev
  virtual void  v37(); // _ZN7S1581C43v37Ev
  virtual void  v38(); // _ZN7S1581C43v38Ev
  virtual void  v39(); // _ZN7S1581C43v39Ev
  virtual void  v40(); // _ZN7S1581C43v40Ev
  virtual void  v41(); // _ZN7S1581C43v41Ev
  virtual void  v42(); // _ZN7S1581C43v42Ev
  virtual void  v43(); // _ZN7S1581C43v43Ev
  virtual void  v44(); // _ZN7S1581C43v44Ev
  virtual void  v45(); // _ZN7S1581C43v45Ev
  virtual void  v46(); // _ZN7S1581C43v46Ev
  virtual void  v47(); // _ZN7S1581C43v47Ev
  virtual void  v48(); // _ZN7S1581C43v48Ev
  virtual void  v49(); // _ZN7S1581C43v49Ev
  virtual void  v50(); // _ZN7S1581C43v50Ev
  virtual void  v51(); // _ZN7S1581C43v51Ev
  virtual void  v52(); // _ZN7S1581C43v52Ev
  virtual void  v53(); // _ZN7S1581C43v53Ev
  virtual void  v54(); // _ZN7S1581C43v54Ev
  virtual void  v55(); // _ZN7S1581C43v55Ev
  virtual void  v56(); // _ZN7S1581C43v56Ev
  virtual void  v57(); // _ZN7S1581C43v57Ev
  virtual void  v58(); // _ZN7S1581C43v58Ev
  virtual void  v59(); // _ZN7S1581C43v59Ev
  virtual void  v60(); // _ZN7S1581C43v60Ev
  virtual void  v61(); // _ZN7S1581C43v61Ev
  virtual void  v62(); // _ZN7S1581C43v62Ev
  virtual void  v63(); // _ZN7S1581C43v63Ev
  virtual void  v64(); // _ZN7S1581C43v64Ev
  virtual void  v65(); // _ZN7S1581C43v65Ev
  virtual void  v66(); // _ZN7S1581C43v66Ev
  virtual void  v67(); // _ZN7S1581C43v67Ev
  virtual void  v68(); // _ZN7S1581C43v68Ev
  virtual void  v69(); // _ZN7S1581C43v69Ev
  virtual void  v70(); // _ZN7S1581C43v70Ev
  virtual void  v71(); // _ZN7S1581C43v71Ev
  S1581C4(); // tgen
};
//SIG(-1 S1581C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1581C4 ::~S1581C4(){ note_dtor("S1581C4", this);}
void  S1581C4 ::v8(){vfunc_called(this, "_ZN7S1581C42v8Ev");}
void  S1581C4 ::v9(){vfunc_called(this, "_ZN7S1581C42v9Ev");}
void  S1581C4 ::v10(){vfunc_called(this, "_ZN7S1581C43v10Ev");}
void  S1581C4 ::v11(){vfunc_called(this, "_ZN7S1581C43v11Ev");}
void  S1581C4 ::v12(){vfunc_called(this, "_ZN7S1581C43v12Ev");}
void  S1581C4 ::v13(){vfunc_called(this, "_ZN7S1581C43v13Ev");}
void  S1581C4 ::v14(){vfunc_called(this, "_ZN7S1581C43v14Ev");}
void  S1581C4 ::v15(){vfunc_called(this, "_ZN7S1581C43v15Ev");}
void  S1581C4 ::v16(){vfunc_called(this, "_ZN7S1581C43v16Ev");}
void  S1581C4 ::v17(){vfunc_called(this, "_ZN7S1581C43v17Ev");}
void  S1581C4 ::v18(){vfunc_called(this, "_ZN7S1581C43v18Ev");}
void  S1581C4 ::v19(){vfunc_called(this, "_ZN7S1581C43v19Ev");}
void  S1581C4 ::v20(){vfunc_called(this, "_ZN7S1581C43v20Ev");}
void  S1581C4 ::v21(){vfunc_called(this, "_ZN7S1581C43v21Ev");}
void  S1581C4 ::v22(){vfunc_called(this, "_ZN7S1581C43v22Ev");}
void  S1581C4 ::v23(){vfunc_called(this, "_ZN7S1581C43v23Ev");}
void  S1581C4 ::v24(){vfunc_called(this, "_ZN7S1581C43v24Ev");}
void  S1581C4 ::v25(){vfunc_called(this, "_ZN7S1581C43v25Ev");}
void  S1581C4 ::v26(){vfunc_called(this, "_ZN7S1581C43v26Ev");}
void  S1581C4 ::v27(){vfunc_called(this, "_ZN7S1581C43v27Ev");}
void  S1581C4 ::v28(){vfunc_called(this, "_ZN7S1581C43v28Ev");}
void  S1581C4 ::v29(){vfunc_called(this, "_ZN7S1581C43v29Ev");}
void  S1581C4 ::v30(){vfunc_called(this, "_ZN7S1581C43v30Ev");}
void  S1581C4 ::v31(){vfunc_called(this, "_ZN7S1581C43v31Ev");}
void  S1581C4 ::v32(){vfunc_called(this, "_ZN7S1581C43v32Ev");}
void  S1581C4 ::v33(){vfunc_called(this, "_ZN7S1581C43v33Ev");}
void  S1581C4 ::v34(){vfunc_called(this, "_ZN7S1581C43v34Ev");}
void  S1581C4 ::v35(){vfunc_called(this, "_ZN7S1581C43v35Ev");}
void  S1581C4 ::v36(){vfunc_called(this, "_ZN7S1581C43v36Ev");}
void  S1581C4 ::v37(){vfunc_called(this, "_ZN7S1581C43v37Ev");}
void  S1581C4 ::v38(){vfunc_called(this, "_ZN7S1581C43v38Ev");}
void  S1581C4 ::v39(){vfunc_called(this, "_ZN7S1581C43v39Ev");}
void  S1581C4 ::v40(){vfunc_called(this, "_ZN7S1581C43v40Ev");}
void  S1581C4 ::v41(){vfunc_called(this, "_ZN7S1581C43v41Ev");}
void  S1581C4 ::v42(){vfunc_called(this, "_ZN7S1581C43v42Ev");}
void  S1581C4 ::v43(){vfunc_called(this, "_ZN7S1581C43v43Ev");}
void  S1581C4 ::v44(){vfunc_called(this, "_ZN7S1581C43v44Ev");}
void  S1581C4 ::v45(){vfunc_called(this, "_ZN7S1581C43v45Ev");}
void  S1581C4 ::v46(){vfunc_called(this, "_ZN7S1581C43v46Ev");}
void  S1581C4 ::v47(){vfunc_called(this, "_ZN7S1581C43v47Ev");}
void  S1581C4 ::v48(){vfunc_called(this, "_ZN7S1581C43v48Ev");}
void  S1581C4 ::v49(){vfunc_called(this, "_ZN7S1581C43v49Ev");}
void  S1581C4 ::v50(){vfunc_called(this, "_ZN7S1581C43v50Ev");}
void  S1581C4 ::v51(){vfunc_called(this, "_ZN7S1581C43v51Ev");}
void  S1581C4 ::v52(){vfunc_called(this, "_ZN7S1581C43v52Ev");}
void  S1581C4 ::v53(){vfunc_called(this, "_ZN7S1581C43v53Ev");}
void  S1581C4 ::v54(){vfunc_called(this, "_ZN7S1581C43v54Ev");}
void  S1581C4 ::v55(){vfunc_called(this, "_ZN7S1581C43v55Ev");}
void  S1581C4 ::v56(){vfunc_called(this, "_ZN7S1581C43v56Ev");}
void  S1581C4 ::v57(){vfunc_called(this, "_ZN7S1581C43v57Ev");}
void  S1581C4 ::v58(){vfunc_called(this, "_ZN7S1581C43v58Ev");}
void  S1581C4 ::v59(){vfunc_called(this, "_ZN7S1581C43v59Ev");}
void  S1581C4 ::v60(){vfunc_called(this, "_ZN7S1581C43v60Ev");}
void  S1581C4 ::v61(){vfunc_called(this, "_ZN7S1581C43v61Ev");}
void  S1581C4 ::v62(){vfunc_called(this, "_ZN7S1581C43v62Ev");}
void  S1581C4 ::v63(){vfunc_called(this, "_ZN7S1581C43v63Ev");}
void  S1581C4 ::v64(){vfunc_called(this, "_ZN7S1581C43v64Ev");}
void  S1581C4 ::v65(){vfunc_called(this, "_ZN7S1581C43v65Ev");}
void  S1581C4 ::v66(){vfunc_called(this, "_ZN7S1581C43v66Ev");}
void  S1581C4 ::v67(){vfunc_called(this, "_ZN7S1581C43v67Ev");}
void  S1581C4 ::v68(){vfunc_called(this, "_ZN7S1581C43v68Ev");}
void  S1581C4 ::v69(){vfunc_called(this, "_ZN7S1581C43v69Ev");}
void  S1581C4 ::v70(){vfunc_called(this, "_ZN7S1581C43v70Ev");}
void  S1581C4 ::v71(){vfunc_called(this, "_ZN7S1581C43v71Ev");}
S1581C4 ::S1581C4(){ note_ctor("S1581C4", this);} // tgen

static void Test_S1581C4()
{
  extern Class_Descriptor cd_S1581C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1581C4, buf);
    S1581C4 *dp, &lv = *(dp=new (buf) S1581C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1581C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1581C4)");
    check_field_offset(lv, s1581c4f0, ABISELECT(8,4), "S1581C4.s1581c4f0");
    check_field_offset(lv, s1581c4f1, ABISELECT(16,8), "S1581C4.s1581c4f1");
    check_field_offset(lv, s1581c4f2, ABISELECT(24,16), "S1581C4.s1581c4f2");
    check_field_offset(lv, s1581c4f3, ABISELECT(56,32), "S1581C4.s1581c4f3");
    check_field_offset(lv, s1581c4f4, ABISELECT(64,40), "S1581C4.s1581c4f4");
    check_field_offset(lv, s1581c4f5, ABISELECT(72,44), "S1581C4.s1581c4f5");
    check_field_offset(lv, s1581c4f6, ABISELECT(80,52), "S1581C4.s1581c4f6");
    test_class_info(&lv, &cd_S1581C4);
    dp->~S1581C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1581C4(Test_S1581C4, "S1581C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1581C4C1Ev();
extern void _ZN7S1581C4D1Ev();
Name_Map name_map_S1581C4[] = {
  NSPAIR(_ZN7S1581C4C1Ev),
  NSPAIR(_ZN7S1581C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1581C4[];
extern void _ZN7S1581C4D1Ev();
extern void _ZN7S1581C4D0Ev();
extern void _ZN7S1581C42v8Ev();
extern void _ZN7S1581C42v9Ev();
extern void _ZN7S1581C43v10Ev();
extern void _ZN7S1581C43v11Ev();
extern void _ZN7S1581C43v12Ev();
extern void _ZN7S1581C43v13Ev();
extern void _ZN7S1581C43v14Ev();
extern void _ZN7S1581C43v15Ev();
extern void _ZN7S1581C43v16Ev();
extern void _ZN7S1581C43v17Ev();
extern void _ZN7S1581C43v18Ev();
extern void _ZN7S1581C43v19Ev();
extern void _ZN7S1581C43v20Ev();
extern void _ZN7S1581C43v21Ev();
extern void _ZN7S1581C43v22Ev();
extern void _ZN7S1581C43v23Ev();
extern void _ZN7S1581C43v24Ev();
extern void _ZN7S1581C43v25Ev();
extern void _ZN7S1581C43v26Ev();
extern void _ZN7S1581C43v27Ev();
extern void _ZN7S1581C43v28Ev();
extern void _ZN7S1581C43v29Ev();
extern void _ZN7S1581C43v30Ev();
extern void _ZN7S1581C43v31Ev();
extern void _ZN7S1581C43v32Ev();
extern void _ZN7S1581C43v33Ev();
extern void _ZN7S1581C43v34Ev();
extern void _ZN7S1581C43v35Ev();
extern void _ZN7S1581C43v36Ev();
extern void _ZN7S1581C43v37Ev();
extern void _ZN7S1581C43v38Ev();
extern void _ZN7S1581C43v39Ev();
extern void _ZN7S1581C43v40Ev();
extern void _ZN7S1581C43v41Ev();
extern void _ZN7S1581C43v42Ev();
extern void _ZN7S1581C43v43Ev();
extern void _ZN7S1581C43v44Ev();
extern void _ZN7S1581C43v45Ev();
extern void _ZN7S1581C43v46Ev();
extern void _ZN7S1581C43v47Ev();
extern void _ZN7S1581C43v48Ev();
extern void _ZN7S1581C43v49Ev();
extern void _ZN7S1581C43v50Ev();
extern void _ZN7S1581C43v51Ev();
extern void _ZN7S1581C43v52Ev();
extern void _ZN7S1581C43v53Ev();
extern void _ZN7S1581C43v54Ev();
extern void _ZN7S1581C43v55Ev();
extern void _ZN7S1581C43v56Ev();
extern void _ZN7S1581C43v57Ev();
extern void _ZN7S1581C43v58Ev();
extern void _ZN7S1581C43v59Ev();
extern void _ZN7S1581C43v60Ev();
extern void _ZN7S1581C43v61Ev();
extern void _ZN7S1581C43v62Ev();
extern void _ZN7S1581C43v63Ev();
extern void _ZN7S1581C43v64Ev();
extern void _ZN7S1581C43v65Ev();
extern void _ZN7S1581C43v66Ev();
extern void _ZN7S1581C43v67Ev();
extern void _ZN7S1581C43v68Ev();
extern void _ZN7S1581C43v69Ev();
extern void _ZN7S1581C43v70Ev();
extern void _ZN7S1581C43v71Ev();
static  VTBL_ENTRY vtc_S1581C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1581C4[0]),
  (VTBL_ENTRY)&_ZN7S1581C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1581C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1581C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1581C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1581C4[];
extern  VTBL_ENTRY _ZTV7S1581C4[];
Class_Descriptor cd_S1581C4 = {  "S1581C4", // class name
  0,0,//no base classes
  &(vtc_S1581C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1581C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1581C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1581C3  : S1581C4 {
  int s1581c3f0[2];
  void *s1581c3f1;
  int s1581c3f2[2];
  ::S473C7_nt s1581c3f3;
  ::S473C7_nt s1581c3f4;
  ::S21925C42 s1581c3f5;
  ::S473C7_nt s1581c3f6;
  unsigned int s1581c3f7:1;
  unsigned int s1581c3f8:1;
  unsigned int s1581c3f9:1;
  unsigned int s1581c3f10:1;
  unsigned int s1581c3f11:1;
  int s1581c3f12[2];
  virtual  ~S1581C3(); // _ZN7S1581C3D1Ev
  virtual void  v72(); // _ZN7S1581C33v72Ev
  virtual void  v73(); // _ZN7S1581C33v73Ev
  virtual void  v74(); // _ZN7S1581C33v74Ev
  virtual void  v75(); // _ZN7S1581C33v75Ev
  virtual void  v76(); // _ZN7S1581C33v76Ev
  virtual void  v77(); // _ZN7S1581C33v77Ev
  virtual void  v78(); // _ZN7S1581C33v78Ev
  virtual void  v79(); // _ZN7S1581C33v79Ev
  virtual void  v80(); // _ZN7S1581C33v80Ev
  virtual void  v81(); // _ZN7S1581C33v81Ev
  virtual void  v82(); // _ZN7S1581C33v82Ev
  virtual void  v83(); // _ZN7S1581C33v83Ev
  virtual void  v84(); // _ZN7S1581C33v84Ev
  virtual void  v85(); // _ZN7S1581C33v85Ev
  virtual void  v86(); // _ZN7S1581C33v86Ev
  virtual void  v87(); // _ZN7S1581C33v87Ev
  virtual void  v88(); // _ZN7S1581C33v88Ev
  virtual void  v89(); // _ZN7S1581C33v89Ev
  virtual void  v90(); // _ZN7S1581C33v90Ev
  virtual void  v91(); // _ZN7S1581C33v91Ev
  virtual void  v92(); // _ZN7S1581C33v92Ev
  virtual void  v93(); // _ZN7S1581C33v93Ev
  S1581C3(); // tgen
};
//SIG(-1 S1581C3) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1581C3 ::~S1581C3(){ note_dtor("S1581C3", this);}
void  S1581C3 ::v72(){vfunc_called(this, "_ZN7S1581C33v72Ev");}
void  S1581C3 ::v73(){vfunc_called(this, "_ZN7S1581C33v73Ev");}
void  S1581C3 ::v74(){vfunc_called(this, "_ZN7S1581C33v74Ev");}
void  S1581C3 ::v75(){vfunc_called(this, "_ZN7S1581C33v75Ev");}
void  S1581C3 ::v76(){vfunc_called(this, "_ZN7S1581C33v76Ev");}
void  S1581C3 ::v77(){vfunc_called(this, "_ZN7S1581C33v77Ev");}
void  S1581C3 ::v78(){vfunc_called(this, "_ZN7S1581C33v78Ev");}
void  S1581C3 ::v79(){vfunc_called(this, "_ZN7S1581C33v79Ev");}
void  S1581C3 ::v80(){vfunc_called(this, "_ZN7S1581C33v80Ev");}
void  S1581C3 ::v81(){vfunc_called(this, "_ZN7S1581C33v81Ev");}
void  S1581C3 ::v82(){vfunc_called(this, "_ZN7S1581C33v82Ev");}
void  S1581C3 ::v83(){vfunc_called(this, "_ZN7S1581C33v83Ev");}
void  S1581C3 ::v84(){vfunc_called(this, "_ZN7S1581C33v84Ev");}
void  S1581C3 ::v85(){vfunc_called(this, "_ZN7S1581C33v85Ev");}
void  S1581C3 ::v86(){vfunc_called(this, "_ZN7S1581C33v86Ev");}
void  S1581C3 ::v87(){vfunc_called(this, "_ZN7S1581C33v87Ev");}
void  S1581C3 ::v88(){vfunc_called(this, "_ZN7S1581C33v88Ev");}
void  S1581C3 ::v89(){vfunc_called(this, "_ZN7S1581C33v89Ev");}
void  S1581C3 ::v90(){vfunc_called(this, "_ZN7S1581C33v90Ev");}
void  S1581C3 ::v91(){vfunc_called(this, "_ZN7S1581C33v91Ev");}
void  S1581C3 ::v92(){vfunc_called(this, "_ZN7S1581C33v92Ev");}
void  S1581C3 ::v93(){vfunc_called(this, "_ZN7S1581C33v93Ev");}
S1581C3 ::S1581C3(){ note_ctor("S1581C3", this);} // tgen

static void Test_S1581C3()
{
  extern Class_Descriptor cd_S1581C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S1581C3, buf);
    S1581C3 *dp, &lv = *(dp=new (buf) S1581C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S1581C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1581C3)");
    check_base_class_offset(lv, (S1581C4*), 0, "S1581C3");
    check_field_offset(lv, s1581c3f0, ABISELECT(96,60), "S1581C3.s1581c3f0");
    check_field_offset(lv, s1581c3f1, ABISELECT(104,68), "S1581C3.s1581c3f1");
    check_field_offset(lv, s1581c3f2, ABISELECT(112,72), "S1581C3.s1581c3f2");
    check_field_offset(lv, s1581c3f3, ABISELECT(120,80), "S1581C3.s1581c3f3");
    check_field_offset(lv, s1581c3f4, ABISELECT(136,92), "S1581C3.s1581c3f4");
    check_field_offset(lv, s1581c3f5, ABISELECT(152,104), "S1581C3.s1581c3f5");
    check_field_offset(lv, s1581c3f6, ABISELECT(160,108), "S1581C3.s1581c3f6");
    set_bf_and_test(lv, s1581c3f7, ABISELECT(176,120), 0, 1, 1, "S1581C3");
    set_bf_and_test(lv, s1581c3f8, ABISELECT(176,120), 1, 1, 1, "S1581C3");
    set_bf_and_test(lv, s1581c3f9, ABISELECT(176,120), 2, 1, 1, "S1581C3");
    set_bf_and_test(lv, s1581c3f10, ABISELECT(176,120), 3, 1, 1, "S1581C3");
    set_bf_and_test(lv, s1581c3f11, ABISELECT(176,120), 4, 1, 1, "S1581C3");
    check_field_offset(lv, s1581c3f12, ABISELECT(180,124), "S1581C3.s1581c3f12");
    test_class_info(&lv, &cd_S1581C3);
    dp->~S1581C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1581C3(Test_S1581C3, "S1581C3", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN7S1581C3C1Ev();
extern void _ZN7S1581C3D1Ev();
Name_Map name_map_S1581C3[] = {
  NSPAIR(_ZN7S1581C3C1Ev),
  NSPAIR(_ZN7S1581C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1581C4;
extern VTBL_ENTRY _ZTI7S1581C4[];
extern  VTBL_ENTRY _ZTV7S1581C4[];
static Base_Class bases_S1581C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1581C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1581C3[];
extern void _ZN7S1581C3D1Ev();
extern void _ZN7S1581C3D0Ev();
extern void _ZN7S1581C42v8Ev();
extern void _ZN7S1581C42v9Ev();
extern void _ZN7S1581C43v10Ev();
extern void _ZN7S1581C43v11Ev();
extern void _ZN7S1581C43v12Ev();
extern void _ZN7S1581C43v13Ev();
extern void _ZN7S1581C43v14Ev();
extern void _ZN7S1581C43v15Ev();
extern void _ZN7S1581C43v16Ev();
extern void _ZN7S1581C43v17Ev();
extern void _ZN7S1581C43v18Ev();
extern void _ZN7S1581C43v19Ev();
extern void _ZN7S1581C43v20Ev();
extern void _ZN7S1581C43v21Ev();
extern void _ZN7S1581C43v22Ev();
extern void _ZN7S1581C43v23Ev();
extern void _ZN7S1581C43v24Ev();
extern void _ZN7S1581C43v25Ev();
extern void _ZN7S1581C43v26Ev();
extern void _ZN7S1581C43v27Ev();
extern void _ZN7S1581C43v28Ev();
extern void _ZN7S1581C43v29Ev();
extern void _ZN7S1581C43v30Ev();
extern void _ZN7S1581C43v31Ev();
extern void _ZN7S1581C43v32Ev();
extern void _ZN7S1581C43v33Ev();
extern void _ZN7S1581C43v34Ev();
extern void _ZN7S1581C43v35Ev();
extern void _ZN7S1581C43v36Ev();
extern void _ZN7S1581C43v37Ev();
extern void _ZN7S1581C43v38Ev();
extern void _ZN7S1581C43v39Ev();
extern void _ZN7S1581C43v40Ev();
extern void _ZN7S1581C43v41Ev();
extern void _ZN7S1581C43v42Ev();
extern void _ZN7S1581C43v43Ev();
extern void _ZN7S1581C43v44Ev();
extern void _ZN7S1581C43v45Ev();
extern void _ZN7S1581C43v46Ev();
extern void _ZN7S1581C43v47Ev();
extern void _ZN7S1581C43v48Ev();
extern void _ZN7S1581C43v49Ev();
extern void _ZN7S1581C43v50Ev();
extern void _ZN7S1581C43v51Ev();
extern void _ZN7S1581C43v52Ev();
extern void _ZN7S1581C43v53Ev();
extern void _ZN7S1581C43v54Ev();
extern void _ZN7S1581C43v55Ev();
extern void _ZN7S1581C43v56Ev();
extern void _ZN7S1581C43v57Ev();
extern void _ZN7S1581C43v58Ev();
extern void _ZN7S1581C43v59Ev();
extern void _ZN7S1581C43v60Ev();
extern void _ZN7S1581C43v61Ev();
extern void _ZN7S1581C43v62Ev();
extern void _ZN7S1581C43v63Ev();
extern void _ZN7S1581C43v64Ev();
extern void _ZN7S1581C43v65Ev();
extern void _ZN7S1581C43v66Ev();
extern void _ZN7S1581C43v67Ev();
extern void _ZN7S1581C43v68Ev();
extern void _ZN7S1581C43v69Ev();
extern void _ZN7S1581C43v70Ev();
extern void _ZN7S1581C43v71Ev();
extern void _ZN7S1581C33v72Ev();
extern void _ZN7S1581C33v73Ev();
extern void _ZN7S1581C33v74Ev();
extern void _ZN7S1581C33v75Ev();
extern void _ZN7S1581C33v76Ev();
extern void _ZN7S1581C33v77Ev();
extern void _ZN7S1581C33v78Ev();
extern void _ZN7S1581C33v79Ev();
extern void _ZN7S1581C33v80Ev();
extern void _ZN7S1581C33v81Ev();
extern void _ZN7S1581C33v82Ev();
extern void _ZN7S1581C33v83Ev();
extern void _ZN7S1581C33v84Ev();
extern void _ZN7S1581C33v85Ev();
extern void _ZN7S1581C33v86Ev();
extern void _ZN7S1581C33v87Ev();
extern void _ZN7S1581C33v88Ev();
extern void _ZN7S1581C33v89Ev();
extern void _ZN7S1581C33v90Ev();
extern void _ZN7S1581C33v91Ev();
extern void _ZN7S1581C33v92Ev();
extern void _ZN7S1581C33v93Ev();
static  VTBL_ENTRY vtc_S1581C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1581C3[0]),
  (VTBL_ENTRY)&_ZN7S1581C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1581C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1581C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1581C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v93Ev,
};
extern VTBL_ENTRY _ZTI7S1581C3[];
extern  VTBL_ENTRY _ZTV7S1581C3[];
Class_Descriptor cd_S1581C3 = {  "S1581C3", // class name
  bases_S1581C3, 1,
  &(vtc_S1581C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI7S1581C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1581C3),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1581C2  : S1581C3 {
  ::S473C6_nt s1581c2f0;
  virtual  ~S1581C2(); // _ZN7S1581C2D1Ev
  virtual void  v94(); // _ZN7S1581C23v94Ev
  virtual void  v95(); // _ZN7S1581C23v95Ev
  virtual void  v96(); // _ZN7S1581C23v96Ev
  virtual void  v97(); // _ZN7S1581C23v97Ev
  virtual void  v98(); // _ZN7S1581C23v98Ev
  virtual void  v99(); // _ZN7S1581C23v99Ev
  virtual void  v100(); // _ZN7S1581C24v100Ev
  virtual void  v101(); // _ZN7S1581C24v101Ev
  virtual void  v102(); // _ZN7S1581C24v102Ev
  virtual void  v103(); // _ZN7S1581C24v103Ev
  virtual void  v104(); // _ZN7S1581C24v104Ev
  virtual void  v105(); // _ZN7S1581C24v105Ev
  virtual void  v106(); // _ZN7S1581C24v106Ev
  virtual void  v107(); // _ZN7S1581C24v107Ev
  virtual void  v108(); // _ZN7S1581C24v108Ev
  virtual void  v109(); // _ZN7S1581C24v109Ev
  virtual void  v110(); // _ZN7S1581C24v110Ev
  virtual void  v111(); // _ZN7S1581C24v111Ev
  virtual void  v112(); // _ZN7S1581C24v112Ev
  S1581C2(); // tgen
};
//SIG(-1 S1581C2) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S1581C2 ::~S1581C2(){ note_dtor("S1581C2", this);}
void  S1581C2 ::v94(){vfunc_called(this, "_ZN7S1581C23v94Ev");}
void  S1581C2 ::v95(){vfunc_called(this, "_ZN7S1581C23v95Ev");}
void  S1581C2 ::v96(){vfunc_called(this, "_ZN7S1581C23v96Ev");}
void  S1581C2 ::v97(){vfunc_called(this, "_ZN7S1581C23v97Ev");}
void  S1581C2 ::v98(){vfunc_called(this, "_ZN7S1581C23v98Ev");}
void  S1581C2 ::v99(){vfunc_called(this, "_ZN7S1581C23v99Ev");}
void  S1581C2 ::v100(){vfunc_called(this, "_ZN7S1581C24v100Ev");}
void  S1581C2 ::v101(){vfunc_called(this, "_ZN7S1581C24v101Ev");}
void  S1581C2 ::v102(){vfunc_called(this, "_ZN7S1581C24v102Ev");}
void  S1581C2 ::v103(){vfunc_called(this, "_ZN7S1581C24v103Ev");}
void  S1581C2 ::v104(){vfunc_called(this, "_ZN7S1581C24v104Ev");}
void  S1581C2 ::v105(){vfunc_called(this, "_ZN7S1581C24v105Ev");}
void  S1581C2 ::v106(){vfunc_called(this, "_ZN7S1581C24v106Ev");}
void  S1581C2 ::v107(){vfunc_called(this, "_ZN7S1581C24v107Ev");}
void  S1581C2 ::v108(){vfunc_called(this, "_ZN7S1581C24v108Ev");}
void  S1581C2 ::v109(){vfunc_called(this, "_ZN7S1581C24v109Ev");}
void  S1581C2 ::v110(){vfunc_called(this, "_ZN7S1581C24v110Ev");}
void  S1581C2 ::v111(){vfunc_called(this, "_ZN7S1581C24v111Ev");}
void  S1581C2 ::v112(){vfunc_called(this, "_ZN7S1581C24v112Ev");}
S1581C2 ::S1581C2(){ note_ctor("S1581C2", this);} // tgen

static void Test_S1581C2()
{
  extern Class_Descriptor cd_S1581C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S1581C2, buf);
    S1581C2 *dp, &lv = *(dp=new (buf) S1581C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S1581C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1581C2)");
    check_base_class_offset(lv, (S1581C4*)(S1581C3*), 0, "S1581C2");
    check_base_class_offset(lv, (S1581C3*), 0, "S1581C2");
    check_field_offset(lv, s1581c2f0, ABISELECT(188,132), "S1581C2.s1581c2f0");
    test_class_info(&lv, &cd_S1581C2);
    dp->~S1581C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1581C2(Test_S1581C2, "S1581C2", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S1581C2C1Ev();
extern void _ZN7S1581C2D1Ev();
Name_Map name_map_S1581C2[] = {
  NSPAIR(_ZN7S1581C2C1Ev),
  NSPAIR(_ZN7S1581C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1581C4;
extern VTBL_ENTRY _ZTI7S1581C4[];
extern  VTBL_ENTRY _ZTV7S1581C4[];
extern Class_Descriptor cd_S1581C3;
extern VTBL_ENTRY _ZTI7S1581C3[];
extern  VTBL_ENTRY _ZTV7S1581C3[];
static Base_Class bases_S1581C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1581C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1581C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1581C2[];
extern void _ZN7S1581C2D1Ev();
extern void _ZN7S1581C2D0Ev();
extern void _ZN7S1581C42v8Ev();
extern void _ZN7S1581C42v9Ev();
extern void _ZN7S1581C43v10Ev();
extern void _ZN7S1581C43v11Ev();
extern void _ZN7S1581C43v12Ev();
extern void _ZN7S1581C43v13Ev();
extern void _ZN7S1581C43v14Ev();
extern void _ZN7S1581C43v15Ev();
extern void _ZN7S1581C43v16Ev();
extern void _ZN7S1581C43v17Ev();
extern void _ZN7S1581C43v18Ev();
extern void _ZN7S1581C43v19Ev();
extern void _ZN7S1581C43v20Ev();
extern void _ZN7S1581C43v21Ev();
extern void _ZN7S1581C43v22Ev();
extern void _ZN7S1581C43v23Ev();
extern void _ZN7S1581C43v24Ev();
extern void _ZN7S1581C43v25Ev();
extern void _ZN7S1581C43v26Ev();
extern void _ZN7S1581C43v27Ev();
extern void _ZN7S1581C43v28Ev();
extern void _ZN7S1581C43v29Ev();
extern void _ZN7S1581C43v30Ev();
extern void _ZN7S1581C43v31Ev();
extern void _ZN7S1581C43v32Ev();
extern void _ZN7S1581C43v33Ev();
extern void _ZN7S1581C43v34Ev();
extern void _ZN7S1581C43v35Ev();
extern void _ZN7S1581C43v36Ev();
extern void _ZN7S1581C43v37Ev();
extern void _ZN7S1581C43v38Ev();
extern void _ZN7S1581C43v39Ev();
extern void _ZN7S1581C43v40Ev();
extern void _ZN7S1581C43v41Ev();
extern void _ZN7S1581C43v42Ev();
extern void _ZN7S1581C43v43Ev();
extern void _ZN7S1581C43v44Ev();
extern void _ZN7S1581C43v45Ev();
extern void _ZN7S1581C43v46Ev();
extern void _ZN7S1581C43v47Ev();
extern void _ZN7S1581C43v48Ev();
extern void _ZN7S1581C43v49Ev();
extern void _ZN7S1581C43v50Ev();
extern void _ZN7S1581C43v51Ev();
extern void _ZN7S1581C43v52Ev();
extern void _ZN7S1581C43v53Ev();
extern void _ZN7S1581C43v54Ev();
extern void _ZN7S1581C43v55Ev();
extern void _ZN7S1581C43v56Ev();
extern void _ZN7S1581C43v57Ev();
extern void _ZN7S1581C43v58Ev();
extern void _ZN7S1581C43v59Ev();
extern void _ZN7S1581C43v60Ev();
extern void _ZN7S1581C43v61Ev();
extern void _ZN7S1581C43v62Ev();
extern void _ZN7S1581C43v63Ev();
extern void _ZN7S1581C43v64Ev();
extern void _ZN7S1581C43v65Ev();
extern void _ZN7S1581C43v66Ev();
extern void _ZN7S1581C43v67Ev();
extern void _ZN7S1581C43v68Ev();
extern void _ZN7S1581C43v69Ev();
extern void _ZN7S1581C43v70Ev();
extern void _ZN7S1581C43v71Ev();
extern void _ZN7S1581C33v72Ev();
extern void _ZN7S1581C33v73Ev();
extern void _ZN7S1581C33v74Ev();
extern void _ZN7S1581C33v75Ev();
extern void _ZN7S1581C33v76Ev();
extern void _ZN7S1581C33v77Ev();
extern void _ZN7S1581C33v78Ev();
extern void _ZN7S1581C33v79Ev();
extern void _ZN7S1581C33v80Ev();
extern void _ZN7S1581C33v81Ev();
extern void _ZN7S1581C33v82Ev();
extern void _ZN7S1581C33v83Ev();
extern void _ZN7S1581C33v84Ev();
extern void _ZN7S1581C33v85Ev();
extern void _ZN7S1581C33v86Ev();
extern void _ZN7S1581C33v87Ev();
extern void _ZN7S1581C33v88Ev();
extern void _ZN7S1581C33v89Ev();
extern void _ZN7S1581C33v90Ev();
extern void _ZN7S1581C33v91Ev();
extern void _ZN7S1581C33v92Ev();
extern void _ZN7S1581C33v93Ev();
extern void _ZN7S1581C23v94Ev();
extern void _ZN7S1581C23v95Ev();
extern void _ZN7S1581C23v96Ev();
extern void _ZN7S1581C23v97Ev();
extern void _ZN7S1581C23v98Ev();
extern void _ZN7S1581C23v99Ev();
extern void _ZN7S1581C24v100Ev();
extern void _ZN7S1581C24v101Ev();
extern void _ZN7S1581C24v102Ev();
extern void _ZN7S1581C24v103Ev();
extern void _ZN7S1581C24v104Ev();
extern void _ZN7S1581C24v105Ev();
extern void _ZN7S1581C24v106Ev();
extern void _ZN7S1581C24v107Ev();
extern void _ZN7S1581C24v108Ev();
extern void _ZN7S1581C24v109Ev();
extern void _ZN7S1581C24v110Ev();
extern void _ZN7S1581C24v111Ev();
extern void _ZN7S1581C24v112Ev();
static  VTBL_ENTRY vtc_S1581C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1581C2[0]),
  (VTBL_ENTRY)&_ZN7S1581C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1581C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1581C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1581C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v112Ev,
};
extern VTBL_ENTRY _ZTI7S1581C2[];
extern  VTBL_ENTRY _ZTV7S1581C2[];
Class_Descriptor cd_S1581C2 = {  "S1581C2", // class name
  bases_S1581C2, 2,
  &(vtc_S1581C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S1581C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1581C2),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1581C1  : S1581C2 {
  ::S473C7_nt s1581c1f0;
  virtual  ~S1581C1(); // _ZN7S1581C1D1Ev
  virtual void  v1(); // _ZN7S1581C12v1Ev
  virtual void  v2(); // _ZN7S1581C12v2Ev
  virtual void  v3(); // _ZN7S1581C12v3Ev
  virtual void  v4(); // _ZN7S1581C12v4Ev
  virtual void  v5(); // _ZN7S1581C12v5Ev
  virtual void  v6(); // _ZN7S1581C12v6Ev
  virtual void  v7(); // _ZN7S1581C12v7Ev
  S1581C1(); // tgen
};
//SIG(1 S1581C1) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 FC5} vd v1 v2 v3 v4 v5 v6 v7 FC6}


 S1581C1 ::~S1581C1(){ note_dtor("S1581C1", this);}
void  S1581C1 ::v1(){vfunc_called(this, "_ZN7S1581C12v1Ev");}
void  S1581C1 ::v2(){vfunc_called(this, "_ZN7S1581C12v2Ev");}
void  S1581C1 ::v3(){vfunc_called(this, "_ZN7S1581C12v3Ev");}
void  S1581C1 ::v4(){vfunc_called(this, "_ZN7S1581C12v4Ev");}
void  S1581C1 ::v5(){vfunc_called(this, "_ZN7S1581C12v5Ev");}
void  S1581C1 ::v6(){vfunc_called(this, "_ZN7S1581C12v6Ev");}
void  S1581C1 ::v7(){vfunc_called(this, "_ZN7S1581C12v7Ev");}
S1581C1 ::S1581C1(){ note_ctor("S1581C1", this);} // tgen

static void Test_S1581C1()
{
  extern Class_Descriptor cd_S1581C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,39)];
    init_test(&cd_S1581C1, buf);
    S1581C1 *dp, &lv = *(dp=new (buf) S1581C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,152), "sizeof(S1581C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1581C1)");
    check_base_class_offset(lv, (S1581C4*)(S1581C3*)(S1581C2*), 0, "S1581C1");
    check_base_class_offset(lv, (S1581C3*)(S1581C2*), 0, "S1581C1");
    check_base_class_offset(lv, (S1581C2*), 0, "S1581C1");
    check_field_offset(lv, s1581c1f0, ABISELECT(200,140), "S1581C1.s1581c1f0");
    test_class_info(&lv, &cd_S1581C1);
    dp->~S1581C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1581C1(Test_S1581C1, "S1581C1", ABISELECT(216,152));

#else // __cplusplus

extern void _ZN7S1581C1C1Ev();
extern void _ZN7S1581C1D1Ev();
Name_Map name_map_S1581C1[] = {
  NSPAIR(_ZN7S1581C1C1Ev),
  NSPAIR(_ZN7S1581C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1581C4;
extern VTBL_ENTRY _ZTI7S1581C4[];
extern  VTBL_ENTRY _ZTV7S1581C4[];
extern Class_Descriptor cd_S1581C3;
extern VTBL_ENTRY _ZTI7S1581C3[];
extern  VTBL_ENTRY _ZTV7S1581C3[];
extern Class_Descriptor cd_S1581C2;
extern VTBL_ENTRY _ZTI7S1581C2[];
extern  VTBL_ENTRY _ZTV7S1581C2[];
static Base_Class bases_S1581C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1581C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1581C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1581C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1581C1[];
extern void _ZN7S1581C1D1Ev();
extern void _ZN7S1581C1D0Ev();
extern void _ZN7S1581C42v8Ev();
extern void _ZN7S1581C42v9Ev();
extern void _ZN7S1581C43v10Ev();
extern void _ZN7S1581C43v11Ev();
extern void _ZN7S1581C43v12Ev();
extern void _ZN7S1581C43v13Ev();
extern void _ZN7S1581C43v14Ev();
extern void _ZN7S1581C43v15Ev();
extern void _ZN7S1581C43v16Ev();
extern void _ZN7S1581C43v17Ev();
extern void _ZN7S1581C43v18Ev();
extern void _ZN7S1581C43v19Ev();
extern void _ZN7S1581C43v20Ev();
extern void _ZN7S1581C43v21Ev();
extern void _ZN7S1581C43v22Ev();
extern void _ZN7S1581C43v23Ev();
extern void _ZN7S1581C43v24Ev();
extern void _ZN7S1581C43v25Ev();
extern void _ZN7S1581C43v26Ev();
extern void _ZN7S1581C43v27Ev();
extern void _ZN7S1581C43v28Ev();
extern void _ZN7S1581C43v29Ev();
extern void _ZN7S1581C43v30Ev();
extern void _ZN7S1581C43v31Ev();
extern void _ZN7S1581C43v32Ev();
extern void _ZN7S1581C43v33Ev();
extern void _ZN7S1581C43v34Ev();
extern void _ZN7S1581C43v35Ev();
extern void _ZN7S1581C43v36Ev();
extern void _ZN7S1581C43v37Ev();
extern void _ZN7S1581C43v38Ev();
extern void _ZN7S1581C43v39Ev();
extern void _ZN7S1581C43v40Ev();
extern void _ZN7S1581C43v41Ev();
extern void _ZN7S1581C43v42Ev();
extern void _ZN7S1581C43v43Ev();
extern void _ZN7S1581C43v44Ev();
extern void _ZN7S1581C43v45Ev();
extern void _ZN7S1581C43v46Ev();
extern void _ZN7S1581C43v47Ev();
extern void _ZN7S1581C43v48Ev();
extern void _ZN7S1581C43v49Ev();
extern void _ZN7S1581C43v50Ev();
extern void _ZN7S1581C43v51Ev();
extern void _ZN7S1581C43v52Ev();
extern void _ZN7S1581C43v53Ev();
extern void _ZN7S1581C43v54Ev();
extern void _ZN7S1581C43v55Ev();
extern void _ZN7S1581C43v56Ev();
extern void _ZN7S1581C43v57Ev();
extern void _ZN7S1581C43v58Ev();
extern void _ZN7S1581C43v59Ev();
extern void _ZN7S1581C43v60Ev();
extern void _ZN7S1581C43v61Ev();
extern void _ZN7S1581C43v62Ev();
extern void _ZN7S1581C43v63Ev();
extern void _ZN7S1581C43v64Ev();
extern void _ZN7S1581C43v65Ev();
extern void _ZN7S1581C43v66Ev();
extern void _ZN7S1581C43v67Ev();
extern void _ZN7S1581C43v68Ev();
extern void _ZN7S1581C43v69Ev();
extern void _ZN7S1581C43v70Ev();
extern void _ZN7S1581C43v71Ev();
extern void _ZN7S1581C33v72Ev();
extern void _ZN7S1581C33v73Ev();
extern void _ZN7S1581C33v74Ev();
extern void _ZN7S1581C33v75Ev();
extern void _ZN7S1581C33v76Ev();
extern void _ZN7S1581C33v77Ev();
extern void _ZN7S1581C33v78Ev();
extern void _ZN7S1581C33v79Ev();
extern void _ZN7S1581C33v80Ev();
extern void _ZN7S1581C33v81Ev();
extern void _ZN7S1581C33v82Ev();
extern void _ZN7S1581C33v83Ev();
extern void _ZN7S1581C33v84Ev();
extern void _ZN7S1581C33v85Ev();
extern void _ZN7S1581C33v86Ev();
extern void _ZN7S1581C33v87Ev();
extern void _ZN7S1581C33v88Ev();
extern void _ZN7S1581C33v89Ev();
extern void _ZN7S1581C33v90Ev();
extern void _ZN7S1581C33v91Ev();
extern void _ZN7S1581C33v92Ev();
extern void _ZN7S1581C33v93Ev();
extern void _ZN7S1581C23v94Ev();
extern void _ZN7S1581C23v95Ev();
extern void _ZN7S1581C23v96Ev();
extern void _ZN7S1581C23v97Ev();
extern void _ZN7S1581C23v98Ev();
extern void _ZN7S1581C23v99Ev();
extern void _ZN7S1581C24v100Ev();
extern void _ZN7S1581C24v101Ev();
extern void _ZN7S1581C24v102Ev();
extern void _ZN7S1581C24v103Ev();
extern void _ZN7S1581C24v104Ev();
extern void _ZN7S1581C24v105Ev();
extern void _ZN7S1581C24v106Ev();
extern void _ZN7S1581C24v107Ev();
extern void _ZN7S1581C24v108Ev();
extern void _ZN7S1581C24v109Ev();
extern void _ZN7S1581C24v110Ev();
extern void _ZN7S1581C24v111Ev();
extern void _ZN7S1581C24v112Ev();
extern void _ZN7S1581C12v1Ev();
extern void _ZN7S1581C12v2Ev();
extern void _ZN7S1581C12v3Ev();
extern void _ZN7S1581C12v4Ev();
extern void _ZN7S1581C12v5Ev();
extern void _ZN7S1581C12v6Ev();
extern void _ZN7S1581C12v7Ev();
static  VTBL_ENTRY vtc_S1581C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1581C1[0]),
  (VTBL_ENTRY)&_ZN7S1581C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1581C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1581C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1581C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1581C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1581C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1581C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1581C24v112Ev,
  (VTBL_ENTRY)&_ZN7S1581C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1581C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1581C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1581C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1581C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1581C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1581C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1581C1[];
extern  VTBL_ENTRY _ZTV7S1581C1[];
Class_Descriptor cd_S1581C1 = {  "S1581C1", // class name
  bases_S1581C1, 3,
  &(vtc_S1581C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,152), // object size
  NSPAIRA(_ZTI7S1581C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1581C1),116, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1552C4  {
  int s1552c4f0;
  __tsi64 s1552c4f1;
  void *s1552c4f2[4];
  int s1552c4f3[2];
  void *s1552c4f4;
  ::S473C6_nt s1552c4f5;
  void *s1552c4f6[2];
  virtual  ~S1552C4(); // _ZN7S1552C4D1Ev
  virtual void  v7(); // _ZN7S1552C42v7Ev
  virtual void  v8(); // _ZN7S1552C42v8Ev
  virtual void  v9(); // _ZN7S1552C42v9Ev
  virtual void  v10(); // _ZN7S1552C43v10Ev
  virtual void  v11(); // _ZN7S1552C43v11Ev
  virtual void  v12(); // _ZN7S1552C43v12Ev
  virtual void  v13(); // _ZN7S1552C43v13Ev
  virtual void  v14(); // _ZN7S1552C43v14Ev
  virtual void  v15(); // _ZN7S1552C43v15Ev
  virtual void  v16(); // _ZN7S1552C43v16Ev
  virtual void  v17(); // _ZN7S1552C43v17Ev
  virtual void  v18(); // _ZN7S1552C43v18Ev
  virtual void  v19(); // _ZN7S1552C43v19Ev
  virtual void  v20(); // _ZN7S1552C43v20Ev
  virtual void  v21(); // _ZN7S1552C43v21Ev
  virtual void  v22(); // _ZN7S1552C43v22Ev
  virtual void  v23(); // _ZN7S1552C43v23Ev
  virtual void  v24(); // _ZN7S1552C43v24Ev
  virtual void  v25(); // _ZN7S1552C43v25Ev
  virtual void  v26(); // _ZN7S1552C43v26Ev
  virtual void  v27(); // _ZN7S1552C43v27Ev
  virtual void  v28(); // _ZN7S1552C43v28Ev
  virtual void  v29(); // _ZN7S1552C43v29Ev
  virtual void  v30(); // _ZN7S1552C43v30Ev
  virtual void  v31(); // _ZN7S1552C43v31Ev
  virtual void  v32(); // _ZN7S1552C43v32Ev
  virtual void  v33(); // _ZN7S1552C43v33Ev
  virtual void  v34(); // _ZN7S1552C43v34Ev
  virtual void  v35(); // _ZN7S1552C43v35Ev
  virtual void  v36(); // _ZN7S1552C43v36Ev
  virtual void  v37(); // _ZN7S1552C43v37Ev
  virtual void  v38(); // _ZN7S1552C43v38Ev
  virtual void  v39(); // _ZN7S1552C43v39Ev
  virtual void  v40(); // _ZN7S1552C43v40Ev
  virtual void  v41(); // _ZN7S1552C43v41Ev
  virtual void  v42(); // _ZN7S1552C43v42Ev
  virtual void  v43(); // _ZN7S1552C43v43Ev
  virtual void  v44(); // _ZN7S1552C43v44Ev
  virtual void  v45(); // _ZN7S1552C43v45Ev
  virtual void  v46(); // _ZN7S1552C43v46Ev
  virtual void  v47(); // _ZN7S1552C43v47Ev
  virtual void  v48(); // _ZN7S1552C43v48Ev
  virtual void  v49(); // _ZN7S1552C43v49Ev
  virtual void  v50(); // _ZN7S1552C43v50Ev
  virtual void  v51(); // _ZN7S1552C43v51Ev
  virtual void  v52(); // _ZN7S1552C43v52Ev
  virtual void  v53(); // _ZN7S1552C43v53Ev
  virtual void  v54(); // _ZN7S1552C43v54Ev
  virtual void  v55(); // _ZN7S1552C43v55Ev
  virtual void  v56(); // _ZN7S1552C43v56Ev
  virtual void  v57(); // _ZN7S1552C43v57Ev
  virtual void  v58(); // _ZN7S1552C43v58Ev
  virtual void  v59(); // _ZN7S1552C43v59Ev
  virtual void  v60(); // _ZN7S1552C43v60Ev
  virtual void  v61(); // _ZN7S1552C43v61Ev
  virtual void  v62(); // _ZN7S1552C43v62Ev
  virtual void  v63(); // _ZN7S1552C43v63Ev
  virtual void  v64(); // _ZN7S1552C43v64Ev
  virtual void  v65(); // _ZN7S1552C43v65Ev
  virtual void  v66(); // _ZN7S1552C43v66Ev
  virtual void  v67(); // _ZN7S1552C43v67Ev
  virtual void  v68(); // _ZN7S1552C43v68Ev
  virtual void  v69(); // _ZN7S1552C43v69Ev
  virtual void  v70(); // _ZN7S1552C43v70Ev
  S1552C4(); // tgen
};
//SIG(-1 S1552C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1552C4 ::~S1552C4(){ note_dtor("S1552C4", this);}
void  S1552C4 ::v7(){vfunc_called(this, "_ZN7S1552C42v7Ev");}
void  S1552C4 ::v8(){vfunc_called(this, "_ZN7S1552C42v8Ev");}
void  S1552C4 ::v9(){vfunc_called(this, "_ZN7S1552C42v9Ev");}
void  S1552C4 ::v10(){vfunc_called(this, "_ZN7S1552C43v10Ev");}
void  S1552C4 ::v11(){vfunc_called(this, "_ZN7S1552C43v11Ev");}
void  S1552C4 ::v12(){vfunc_called(this, "_ZN7S1552C43v12Ev");}
void  S1552C4 ::v13(){vfunc_called(this, "_ZN7S1552C43v13Ev");}
void  S1552C4 ::v14(){vfunc_called(this, "_ZN7S1552C43v14Ev");}
void  S1552C4 ::v15(){vfunc_called(this, "_ZN7S1552C43v15Ev");}
void  S1552C4 ::v16(){vfunc_called(this, "_ZN7S1552C43v16Ev");}
void  S1552C4 ::v17(){vfunc_called(this, "_ZN7S1552C43v17Ev");}
void  S1552C4 ::v18(){vfunc_called(this, "_ZN7S1552C43v18Ev");}
void  S1552C4 ::v19(){vfunc_called(this, "_ZN7S1552C43v19Ev");}
void  S1552C4 ::v20(){vfunc_called(this, "_ZN7S1552C43v20Ev");}
void  S1552C4 ::v21(){vfunc_called(this, "_ZN7S1552C43v21Ev");}
void  S1552C4 ::v22(){vfunc_called(this, "_ZN7S1552C43v22Ev");}
void  S1552C4 ::v23(){vfunc_called(this, "_ZN7S1552C43v23Ev");}
void  S1552C4 ::v24(){vfunc_called(this, "_ZN7S1552C43v24Ev");}
void  S1552C4 ::v25(){vfunc_called(this, "_ZN7S1552C43v25Ev");}
void  S1552C4 ::v26(){vfunc_called(this, "_ZN7S1552C43v26Ev");}
void  S1552C4 ::v27(){vfunc_called(this, "_ZN7S1552C43v27Ev");}
void  S1552C4 ::v28(){vfunc_called(this, "_ZN7S1552C43v28Ev");}
void  S1552C4 ::v29(){vfunc_called(this, "_ZN7S1552C43v29Ev");}
void  S1552C4 ::v30(){vfunc_called(this, "_ZN7S1552C43v30Ev");}
void  S1552C4 ::v31(){vfunc_called(this, "_ZN7S1552C43v31Ev");}
void  S1552C4 ::v32(){vfunc_called(this, "_ZN7S1552C43v32Ev");}
void  S1552C4 ::v33(){vfunc_called(this, "_ZN7S1552C43v33Ev");}
void  S1552C4 ::v34(){vfunc_called(this, "_ZN7S1552C43v34Ev");}
void  S1552C4 ::v35(){vfunc_called(this, "_ZN7S1552C43v35Ev");}
void  S1552C4 ::v36(){vfunc_called(this, "_ZN7S1552C43v36Ev");}
void  S1552C4 ::v37(){vfunc_called(this, "_ZN7S1552C43v37Ev");}
void  S1552C4 ::v38(){vfunc_called(this, "_ZN7S1552C43v38Ev");}
void  S1552C4 ::v39(){vfunc_called(this, "_ZN7S1552C43v39Ev");}
void  S1552C4 ::v40(){vfunc_called(this, "_ZN7S1552C43v40Ev");}
void  S1552C4 ::v41(){vfunc_called(this, "_ZN7S1552C43v41Ev");}
void  S1552C4 ::v42(){vfunc_called(this, "_ZN7S1552C43v42Ev");}
void  S1552C4 ::v43(){vfunc_called(this, "_ZN7S1552C43v43Ev");}
void  S1552C4 ::v44(){vfunc_called(this, "_ZN7S1552C43v44Ev");}
void  S1552C4 ::v45(){vfunc_called(this, "_ZN7S1552C43v45Ev");}
void  S1552C4 ::v46(){vfunc_called(this, "_ZN7S1552C43v46Ev");}
void  S1552C4 ::v47(){vfunc_called(this, "_ZN7S1552C43v47Ev");}
void  S1552C4 ::v48(){vfunc_called(this, "_ZN7S1552C43v48Ev");}
void  S1552C4 ::v49(){vfunc_called(this, "_ZN7S1552C43v49Ev");}
void  S1552C4 ::v50(){vfunc_called(this, "_ZN7S1552C43v50Ev");}
void  S1552C4 ::v51(){vfunc_called(this, "_ZN7S1552C43v51Ev");}
void  S1552C4 ::v52(){vfunc_called(this, "_ZN7S1552C43v52Ev");}
void  S1552C4 ::v53(){vfunc_called(this, "_ZN7S1552C43v53Ev");}
void  S1552C4 ::v54(){vfunc_called(this, "_ZN7S1552C43v54Ev");}
void  S1552C4 ::v55(){vfunc_called(this, "_ZN7S1552C43v55Ev");}
void  S1552C4 ::v56(){vfunc_called(this, "_ZN7S1552C43v56Ev");}
void  S1552C4 ::v57(){vfunc_called(this, "_ZN7S1552C43v57Ev");}
void  S1552C4 ::v58(){vfunc_called(this, "_ZN7S1552C43v58Ev");}
void  S1552C4 ::v59(){vfunc_called(this, "_ZN7S1552C43v59Ev");}
void  S1552C4 ::v60(){vfunc_called(this, "_ZN7S1552C43v60Ev");}
void  S1552C4 ::v61(){vfunc_called(this, "_ZN7S1552C43v61Ev");}
void  S1552C4 ::v62(){vfunc_called(this, "_ZN7S1552C43v62Ev");}
void  S1552C4 ::v63(){vfunc_called(this, "_ZN7S1552C43v63Ev");}
void  S1552C4 ::v64(){vfunc_called(this, "_ZN7S1552C43v64Ev");}
void  S1552C4 ::v65(){vfunc_called(this, "_ZN7S1552C43v65Ev");}
void  S1552C4 ::v66(){vfunc_called(this, "_ZN7S1552C43v66Ev");}
void  S1552C4 ::v67(){vfunc_called(this, "_ZN7S1552C43v67Ev");}
void  S1552C4 ::v68(){vfunc_called(this, "_ZN7S1552C43v68Ev");}
void  S1552C4 ::v69(){vfunc_called(this, "_ZN7S1552C43v69Ev");}
void  S1552C4 ::v70(){vfunc_called(this, "_ZN7S1552C43v70Ev");}
S1552C4 ::S1552C4(){ note_ctor("S1552C4", this);} // tgen

static void Test_S1552C4()
{
  extern Class_Descriptor cd_S1552C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1552C4, buf);
    S1552C4 *dp, &lv = *(dp=new (buf) S1552C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1552C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1552C4)");
    check_field_offset(lv, s1552c4f0, ABISELECT(8,4), "S1552C4.s1552c4f0");
    check_field_offset(lv, s1552c4f1, ABISELECT(16,8), "S1552C4.s1552c4f1");
    check_field_offset(lv, s1552c4f2, ABISELECT(24,16), "S1552C4.s1552c4f2");
    check_field_offset(lv, s1552c4f3, ABISELECT(56,32), "S1552C4.s1552c4f3");
    check_field_offset(lv, s1552c4f4, ABISELECT(64,40), "S1552C4.s1552c4f4");
    check_field_offset(lv, s1552c4f5, ABISELECT(72,44), "S1552C4.s1552c4f5");
    check_field_offset(lv, s1552c4f6, ABISELECT(80,52), "S1552C4.s1552c4f6");
    test_class_info(&lv, &cd_S1552C4);
    dp->~S1552C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1552C4(Test_S1552C4, "S1552C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1552C4C1Ev();
extern void _ZN7S1552C4D1Ev();
Name_Map name_map_S1552C4[] = {
  NSPAIR(_ZN7S1552C4C1Ev),
  NSPAIR(_ZN7S1552C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1552C4[];
extern void _ZN7S1552C4D1Ev();
extern void _ZN7S1552C4D0Ev();
extern void _ZN7S1552C42v7Ev();
extern void _ZN7S1552C42v8Ev();
extern void _ZN7S1552C42v9Ev();
extern void _ZN7S1552C43v10Ev();
extern void _ZN7S1552C43v11Ev();
extern void _ZN7S1552C43v12Ev();
extern void _ZN7S1552C43v13Ev();
extern void _ZN7S1552C43v14Ev();
extern void _ZN7S1552C43v15Ev();
extern void _ZN7S1552C43v16Ev();
extern void _ZN7S1552C43v17Ev();
extern void _ZN7S1552C43v18Ev();
extern void _ZN7S1552C43v19Ev();
extern void _ZN7S1552C43v20Ev();
extern void _ZN7S1552C43v21Ev();
extern void _ZN7S1552C43v22Ev();
extern void _ZN7S1552C43v23Ev();
extern void _ZN7S1552C43v24Ev();
extern void _ZN7S1552C43v25Ev();
extern void _ZN7S1552C43v26Ev();
extern void _ZN7S1552C43v27Ev();
extern void _ZN7S1552C43v28Ev();
extern void _ZN7S1552C43v29Ev();
extern void _ZN7S1552C43v30Ev();
extern void _ZN7S1552C43v31Ev();
extern void _ZN7S1552C43v32Ev();
extern void _ZN7S1552C43v33Ev();
extern void _ZN7S1552C43v34Ev();
extern void _ZN7S1552C43v35Ev();
extern void _ZN7S1552C43v36Ev();
extern void _ZN7S1552C43v37Ev();
extern void _ZN7S1552C43v38Ev();
extern void _ZN7S1552C43v39Ev();
extern void _ZN7S1552C43v40Ev();
extern void _ZN7S1552C43v41Ev();
extern void _ZN7S1552C43v42Ev();
extern void _ZN7S1552C43v43Ev();
extern void _ZN7S1552C43v44Ev();
extern void _ZN7S1552C43v45Ev();
extern void _ZN7S1552C43v46Ev();
extern void _ZN7S1552C43v47Ev();
extern void _ZN7S1552C43v48Ev();
extern void _ZN7S1552C43v49Ev();
extern void _ZN7S1552C43v50Ev();
extern void _ZN7S1552C43v51Ev();
extern void _ZN7S1552C43v52Ev();
extern void _ZN7S1552C43v53Ev();
extern void _ZN7S1552C43v54Ev();
extern void _ZN7S1552C43v55Ev();
extern void _ZN7S1552C43v56Ev();
extern void _ZN7S1552C43v57Ev();
extern void _ZN7S1552C43v58Ev();
extern void _ZN7S1552C43v59Ev();
extern void _ZN7S1552C43v60Ev();
extern void _ZN7S1552C43v61Ev();
extern void _ZN7S1552C43v62Ev();
extern void _ZN7S1552C43v63Ev();
extern void _ZN7S1552C43v64Ev();
extern void _ZN7S1552C43v65Ev();
extern void _ZN7S1552C43v66Ev();
extern void _ZN7S1552C43v67Ev();
extern void _ZN7S1552C43v68Ev();
extern void _ZN7S1552C43v69Ev();
extern void _ZN7S1552C43v70Ev();
static  VTBL_ENTRY vtc_S1552C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1552C4[0]),
  (VTBL_ENTRY)&_ZN7S1552C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1552C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v70Ev,
};
extern VTBL_ENTRY _ZTI7S1552C4[];
extern  VTBL_ENTRY _ZTV7S1552C4[];
Class_Descriptor cd_S1552C4 = {  "S1552C4", // class name
  0,0,//no base classes
  &(vtc_S1552C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1552C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1552C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1552C3  : S1552C4 {
  int s1552c3f0[2];
  void *s1552c3f1;
  int s1552c3f2[2];
  ::S473C7_nt s1552c3f3;
  ::S473C7_nt s1552c3f4;
  ::S21925C42 s1552c3f5;
  ::S473C7_nt s1552c3f6;
  unsigned int s1552c3f7:1;
  unsigned int s1552c3f8:1;
  unsigned int s1552c3f9:1;
  unsigned int s1552c3f10:1;
  unsigned int s1552c3f11:1;
  int s1552c3f12[2];
  virtual  ~S1552C3(); // _ZN7S1552C3D1Ev
  virtual void  v71(); // _ZN7S1552C33v71Ev
  virtual void  v72(); // _ZN7S1552C33v72Ev
  virtual void  v73(); // _ZN7S1552C33v73Ev
  virtual void  v74(); // _ZN7S1552C33v74Ev
  virtual void  v75(); // _ZN7S1552C33v75Ev
  virtual void  v76(); // _ZN7S1552C33v76Ev
  virtual void  v77(); // _ZN7S1552C33v77Ev
  virtual void  v78(); // _ZN7S1552C33v78Ev
  virtual void  v79(); // _ZN7S1552C33v79Ev
  virtual void  v80(); // _ZN7S1552C33v80Ev
  virtual void  v81(); // _ZN7S1552C33v81Ev
  virtual void  v82(); // _ZN7S1552C33v82Ev
  virtual void  v83(); // _ZN7S1552C33v83Ev
  virtual void  v84(); // _ZN7S1552C33v84Ev
  virtual void  v85(); // _ZN7S1552C33v85Ev
  virtual void  v86(); // _ZN7S1552C33v86Ev
  virtual void  v87(); // _ZN7S1552C33v87Ev
  virtual void  v88(); // _ZN7S1552C33v88Ev
  virtual void  v89(); // _ZN7S1552C33v89Ev
  virtual void  v90(); // _ZN7S1552C33v90Ev
  virtual void  v91(); // _ZN7S1552C33v91Ev
  virtual void  v92(); // _ZN7S1552C33v92Ev
  S1552C3(); // tgen
};
//SIG(-1 S1552C3) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1552C3 ::~S1552C3(){ note_dtor("S1552C3", this);}
void  S1552C3 ::v71(){vfunc_called(this, "_ZN7S1552C33v71Ev");}
void  S1552C3 ::v72(){vfunc_called(this, "_ZN7S1552C33v72Ev");}
void  S1552C3 ::v73(){vfunc_called(this, "_ZN7S1552C33v73Ev");}
void  S1552C3 ::v74(){vfunc_called(this, "_ZN7S1552C33v74Ev");}
void  S1552C3 ::v75(){vfunc_called(this, "_ZN7S1552C33v75Ev");}
void  S1552C3 ::v76(){vfunc_called(this, "_ZN7S1552C33v76Ev");}
void  S1552C3 ::v77(){vfunc_called(this, "_ZN7S1552C33v77Ev");}
void  S1552C3 ::v78(){vfunc_called(this, "_ZN7S1552C33v78Ev");}
void  S1552C3 ::v79(){vfunc_called(this, "_ZN7S1552C33v79Ev");}
void  S1552C3 ::v80(){vfunc_called(this, "_ZN7S1552C33v80Ev");}
void  S1552C3 ::v81(){vfunc_called(this, "_ZN7S1552C33v81Ev");}
void  S1552C3 ::v82(){vfunc_called(this, "_ZN7S1552C33v82Ev");}
void  S1552C3 ::v83(){vfunc_called(this, "_ZN7S1552C33v83Ev");}
void  S1552C3 ::v84(){vfunc_called(this, "_ZN7S1552C33v84Ev");}
void  S1552C3 ::v85(){vfunc_called(this, "_ZN7S1552C33v85Ev");}
void  S1552C3 ::v86(){vfunc_called(this, "_ZN7S1552C33v86Ev");}
void  S1552C3 ::v87(){vfunc_called(this, "_ZN7S1552C33v87Ev");}
void  S1552C3 ::v88(){vfunc_called(this, "_ZN7S1552C33v88Ev");}
void  S1552C3 ::v89(){vfunc_called(this, "_ZN7S1552C33v89Ev");}
void  S1552C3 ::v90(){vfunc_called(this, "_ZN7S1552C33v90Ev");}
void  S1552C3 ::v91(){vfunc_called(this, "_ZN7S1552C33v91Ev");}
void  S1552C3 ::v92(){vfunc_called(this, "_ZN7S1552C33v92Ev");}
S1552C3 ::S1552C3(){ note_ctor("S1552C3", this);} // tgen

static void Test_S1552C3()
{
  extern Class_Descriptor cd_S1552C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S1552C3, buf);
    S1552C3 *dp, &lv = *(dp=new (buf) S1552C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S1552C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1552C3)");
    check_base_class_offset(lv, (S1552C4*), 0, "S1552C3");
    check_field_offset(lv, s1552c3f0, ABISELECT(96,60), "S1552C3.s1552c3f0");
    check_field_offset(lv, s1552c3f1, ABISELECT(104,68), "S1552C3.s1552c3f1");
    check_field_offset(lv, s1552c3f2, ABISELECT(112,72), "S1552C3.s1552c3f2");
    check_field_offset(lv, s1552c3f3, ABISELECT(120,80), "S1552C3.s1552c3f3");
    check_field_offset(lv, s1552c3f4, ABISELECT(136,92), "S1552C3.s1552c3f4");
    check_field_offset(lv, s1552c3f5, ABISELECT(152,104), "S1552C3.s1552c3f5");
    check_field_offset(lv, s1552c3f6, ABISELECT(160,108), "S1552C3.s1552c3f6");
    set_bf_and_test(lv, s1552c3f7, ABISELECT(176,120), 0, 1, 1, "S1552C3");
    set_bf_and_test(lv, s1552c3f8, ABISELECT(176,120), 1, 1, 1, "S1552C3");
    set_bf_and_test(lv, s1552c3f9, ABISELECT(176,120), 2, 1, 1, "S1552C3");
    set_bf_and_test(lv, s1552c3f10, ABISELECT(176,120), 3, 1, 1, "S1552C3");
    set_bf_and_test(lv, s1552c3f11, ABISELECT(176,120), 4, 1, 1, "S1552C3");
    check_field_offset(lv, s1552c3f12, ABISELECT(180,124), "S1552C3.s1552c3f12");
    test_class_info(&lv, &cd_S1552C3);
    dp->~S1552C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1552C3(Test_S1552C3, "S1552C3", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN7S1552C3C1Ev();
extern void _ZN7S1552C3D1Ev();
Name_Map name_map_S1552C3[] = {
  NSPAIR(_ZN7S1552C3C1Ev),
  NSPAIR(_ZN7S1552C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1552C4;
extern VTBL_ENTRY _ZTI7S1552C4[];
extern  VTBL_ENTRY _ZTV7S1552C4[];
static Base_Class bases_S1552C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1552C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1552C3[];
extern void _ZN7S1552C3D1Ev();
extern void _ZN7S1552C3D0Ev();
extern void _ZN7S1552C42v7Ev();
extern void _ZN7S1552C42v8Ev();
extern void _ZN7S1552C42v9Ev();
extern void _ZN7S1552C43v10Ev();
extern void _ZN7S1552C43v11Ev();
extern void _ZN7S1552C43v12Ev();
extern void _ZN7S1552C43v13Ev();
extern void _ZN7S1552C43v14Ev();
extern void _ZN7S1552C43v15Ev();
extern void _ZN7S1552C43v16Ev();
extern void _ZN7S1552C43v17Ev();
extern void _ZN7S1552C43v18Ev();
extern void _ZN7S1552C43v19Ev();
extern void _ZN7S1552C43v20Ev();
extern void _ZN7S1552C43v21Ev();
extern void _ZN7S1552C43v22Ev();
extern void _ZN7S1552C43v23Ev();
extern void _ZN7S1552C43v24Ev();
extern void _ZN7S1552C43v25Ev();
extern void _ZN7S1552C43v26Ev();
extern void _ZN7S1552C43v27Ev();
extern void _ZN7S1552C43v28Ev();
extern void _ZN7S1552C43v29Ev();
extern void _ZN7S1552C43v30Ev();
extern void _ZN7S1552C43v31Ev();
extern void _ZN7S1552C43v32Ev();
extern void _ZN7S1552C43v33Ev();
extern void _ZN7S1552C43v34Ev();
extern void _ZN7S1552C43v35Ev();
extern void _ZN7S1552C43v36Ev();
extern void _ZN7S1552C43v37Ev();
extern void _ZN7S1552C43v38Ev();
extern void _ZN7S1552C43v39Ev();
extern void _ZN7S1552C43v40Ev();
extern void _ZN7S1552C43v41Ev();
extern void _ZN7S1552C43v42Ev();
extern void _ZN7S1552C43v43Ev();
extern void _ZN7S1552C43v44Ev();
extern void _ZN7S1552C43v45Ev();
extern void _ZN7S1552C43v46Ev();
extern void _ZN7S1552C43v47Ev();
extern void _ZN7S1552C43v48Ev();
extern void _ZN7S1552C43v49Ev();
extern void _ZN7S1552C43v50Ev();
extern void _ZN7S1552C43v51Ev();
extern void _ZN7S1552C43v52Ev();
extern void _ZN7S1552C43v53Ev();
extern void _ZN7S1552C43v54Ev();
extern void _ZN7S1552C43v55Ev();
extern void _ZN7S1552C43v56Ev();
extern void _ZN7S1552C43v57Ev();
extern void _ZN7S1552C43v58Ev();
extern void _ZN7S1552C43v59Ev();
extern void _ZN7S1552C43v60Ev();
extern void _ZN7S1552C43v61Ev();
extern void _ZN7S1552C43v62Ev();
extern void _ZN7S1552C43v63Ev();
extern void _ZN7S1552C43v64Ev();
extern void _ZN7S1552C43v65Ev();
extern void _ZN7S1552C43v66Ev();
extern void _ZN7S1552C43v67Ev();
extern void _ZN7S1552C43v68Ev();
extern void _ZN7S1552C43v69Ev();
extern void _ZN7S1552C43v70Ev();
extern void _ZN7S1552C33v71Ev();
extern void _ZN7S1552C33v72Ev();
extern void _ZN7S1552C33v73Ev();
extern void _ZN7S1552C33v74Ev();
extern void _ZN7S1552C33v75Ev();
extern void _ZN7S1552C33v76Ev();
extern void _ZN7S1552C33v77Ev();
extern void _ZN7S1552C33v78Ev();
extern void _ZN7S1552C33v79Ev();
extern void _ZN7S1552C33v80Ev();
extern void _ZN7S1552C33v81Ev();
extern void _ZN7S1552C33v82Ev();
extern void _ZN7S1552C33v83Ev();
extern void _ZN7S1552C33v84Ev();
extern void _ZN7S1552C33v85Ev();
extern void _ZN7S1552C33v86Ev();
extern void _ZN7S1552C33v87Ev();
extern void _ZN7S1552C33v88Ev();
extern void _ZN7S1552C33v89Ev();
extern void _ZN7S1552C33v90Ev();
extern void _ZN7S1552C33v91Ev();
extern void _ZN7S1552C33v92Ev();
static  VTBL_ENTRY vtc_S1552C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1552C3[0]),
  (VTBL_ENTRY)&_ZN7S1552C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1552C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v92Ev,
};
extern VTBL_ENTRY _ZTI7S1552C3[];
extern  VTBL_ENTRY _ZTV7S1552C3[];
Class_Descriptor cd_S1552C3 = {  "S1552C3", // class name
  bases_S1552C3, 1,
  &(vtc_S1552C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI7S1552C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1552C3),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1552C2  : S1552C3 {
  ::S473C6_nt s1552c2f0;
  virtual  ~S1552C2(); // _ZN7S1552C2D1Ev
  virtual void  v93(); // _ZN7S1552C23v93Ev
  virtual void  v94(); // _ZN7S1552C23v94Ev
  virtual void  v95(); // _ZN7S1552C23v95Ev
  virtual void  v96(); // _ZN7S1552C23v96Ev
  virtual void  v97(); // _ZN7S1552C23v97Ev
  virtual void  v98(); // _ZN7S1552C23v98Ev
  virtual void  v99(); // _ZN7S1552C23v99Ev
  virtual void  v100(); // _ZN7S1552C24v100Ev
  virtual void  v101(); // _ZN7S1552C24v101Ev
  virtual void  v102(); // _ZN7S1552C24v102Ev
  virtual void  v103(); // _ZN7S1552C24v103Ev
  virtual void  v104(); // _ZN7S1552C24v104Ev
  virtual void  v105(); // _ZN7S1552C24v105Ev
  virtual void  v106(); // _ZN7S1552C24v106Ev
  virtual void  v107(); // _ZN7S1552C24v107Ev
  virtual void  v108(); // _ZN7S1552C24v108Ev
  virtual void  v109(); // _ZN7S1552C24v109Ev
  virtual void  v110(); // _ZN7S1552C24v110Ev
  virtual void  v111(); // _ZN7S1552C24v111Ev
  S1552C2(); // tgen
};
//SIG(-1 S1552C2) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S1552C2 ::~S1552C2(){ note_dtor("S1552C2", this);}
void  S1552C2 ::v93(){vfunc_called(this, "_ZN7S1552C23v93Ev");}
void  S1552C2 ::v94(){vfunc_called(this, "_ZN7S1552C23v94Ev");}
void  S1552C2 ::v95(){vfunc_called(this, "_ZN7S1552C23v95Ev");}
void  S1552C2 ::v96(){vfunc_called(this, "_ZN7S1552C23v96Ev");}
void  S1552C2 ::v97(){vfunc_called(this, "_ZN7S1552C23v97Ev");}
void  S1552C2 ::v98(){vfunc_called(this, "_ZN7S1552C23v98Ev");}
void  S1552C2 ::v99(){vfunc_called(this, "_ZN7S1552C23v99Ev");}
void  S1552C2 ::v100(){vfunc_called(this, "_ZN7S1552C24v100Ev");}
void  S1552C2 ::v101(){vfunc_called(this, "_ZN7S1552C24v101Ev");}
void  S1552C2 ::v102(){vfunc_called(this, "_ZN7S1552C24v102Ev");}
void  S1552C2 ::v103(){vfunc_called(this, "_ZN7S1552C24v103Ev");}
void  S1552C2 ::v104(){vfunc_called(this, "_ZN7S1552C24v104Ev");}
void  S1552C2 ::v105(){vfunc_called(this, "_ZN7S1552C24v105Ev");}
void  S1552C2 ::v106(){vfunc_called(this, "_ZN7S1552C24v106Ev");}
void  S1552C2 ::v107(){vfunc_called(this, "_ZN7S1552C24v107Ev");}
void  S1552C2 ::v108(){vfunc_called(this, "_ZN7S1552C24v108Ev");}
void  S1552C2 ::v109(){vfunc_called(this, "_ZN7S1552C24v109Ev");}
void  S1552C2 ::v110(){vfunc_called(this, "_ZN7S1552C24v110Ev");}
void  S1552C2 ::v111(){vfunc_called(this, "_ZN7S1552C24v111Ev");}
S1552C2 ::S1552C2(){ note_ctor("S1552C2", this);} // tgen

static void Test_S1552C2()
{
  extern Class_Descriptor cd_S1552C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S1552C2, buf);
    S1552C2 *dp, &lv = *(dp=new (buf) S1552C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S1552C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1552C2)");
    check_base_class_offset(lv, (S1552C4*)(S1552C3*), 0, "S1552C2");
    check_base_class_offset(lv, (S1552C3*), 0, "S1552C2");
    check_field_offset(lv, s1552c2f0, ABISELECT(188,132), "S1552C2.s1552c2f0");
    test_class_info(&lv, &cd_S1552C2);
    dp->~S1552C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1552C2(Test_S1552C2, "S1552C2", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S1552C2C1Ev();
extern void _ZN7S1552C2D1Ev();
Name_Map name_map_S1552C2[] = {
  NSPAIR(_ZN7S1552C2C1Ev),
  NSPAIR(_ZN7S1552C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1552C4;
extern VTBL_ENTRY _ZTI7S1552C4[];
extern  VTBL_ENTRY _ZTV7S1552C4[];
extern Class_Descriptor cd_S1552C3;
extern VTBL_ENTRY _ZTI7S1552C3[];
extern  VTBL_ENTRY _ZTV7S1552C3[];
static Base_Class bases_S1552C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1552C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1552C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1552C2[];
extern void _ZN7S1552C2D1Ev();
extern void _ZN7S1552C2D0Ev();
extern void _ZN7S1552C42v7Ev();
extern void _ZN7S1552C42v8Ev();
extern void _ZN7S1552C42v9Ev();
extern void _ZN7S1552C43v10Ev();
extern void _ZN7S1552C43v11Ev();
extern void _ZN7S1552C43v12Ev();
extern void _ZN7S1552C43v13Ev();
extern void _ZN7S1552C43v14Ev();
extern void _ZN7S1552C43v15Ev();
extern void _ZN7S1552C43v16Ev();
extern void _ZN7S1552C43v17Ev();
extern void _ZN7S1552C43v18Ev();
extern void _ZN7S1552C43v19Ev();
extern void _ZN7S1552C43v20Ev();
extern void _ZN7S1552C43v21Ev();
extern void _ZN7S1552C43v22Ev();
extern void _ZN7S1552C43v23Ev();
extern void _ZN7S1552C43v24Ev();
extern void _ZN7S1552C43v25Ev();
extern void _ZN7S1552C43v26Ev();
extern void _ZN7S1552C43v27Ev();
extern void _ZN7S1552C43v28Ev();
extern void _ZN7S1552C43v29Ev();
extern void _ZN7S1552C43v30Ev();
extern void _ZN7S1552C43v31Ev();
extern void _ZN7S1552C43v32Ev();
extern void _ZN7S1552C43v33Ev();
extern void _ZN7S1552C43v34Ev();
extern void _ZN7S1552C43v35Ev();
extern void _ZN7S1552C43v36Ev();
extern void _ZN7S1552C43v37Ev();
extern void _ZN7S1552C43v38Ev();
extern void _ZN7S1552C43v39Ev();
extern void _ZN7S1552C43v40Ev();
extern void _ZN7S1552C43v41Ev();
extern void _ZN7S1552C43v42Ev();
extern void _ZN7S1552C43v43Ev();
extern void _ZN7S1552C43v44Ev();
extern void _ZN7S1552C43v45Ev();
extern void _ZN7S1552C43v46Ev();
extern void _ZN7S1552C43v47Ev();
extern void _ZN7S1552C43v48Ev();
extern void _ZN7S1552C43v49Ev();
extern void _ZN7S1552C43v50Ev();
extern void _ZN7S1552C43v51Ev();
extern void _ZN7S1552C43v52Ev();
extern void _ZN7S1552C43v53Ev();
extern void _ZN7S1552C43v54Ev();
extern void _ZN7S1552C43v55Ev();
extern void _ZN7S1552C43v56Ev();
extern void _ZN7S1552C43v57Ev();
extern void _ZN7S1552C43v58Ev();
extern void _ZN7S1552C43v59Ev();
extern void _ZN7S1552C43v60Ev();
extern void _ZN7S1552C43v61Ev();
extern void _ZN7S1552C43v62Ev();
extern void _ZN7S1552C43v63Ev();
extern void _ZN7S1552C43v64Ev();
extern void _ZN7S1552C43v65Ev();
extern void _ZN7S1552C43v66Ev();
extern void _ZN7S1552C43v67Ev();
extern void _ZN7S1552C43v68Ev();
extern void _ZN7S1552C43v69Ev();
extern void _ZN7S1552C43v70Ev();
extern void _ZN7S1552C33v71Ev();
extern void _ZN7S1552C33v72Ev();
extern void _ZN7S1552C33v73Ev();
extern void _ZN7S1552C33v74Ev();
extern void _ZN7S1552C33v75Ev();
extern void _ZN7S1552C33v76Ev();
extern void _ZN7S1552C33v77Ev();
extern void _ZN7S1552C33v78Ev();
extern void _ZN7S1552C33v79Ev();
extern void _ZN7S1552C33v80Ev();
extern void _ZN7S1552C33v81Ev();
extern void _ZN7S1552C33v82Ev();
extern void _ZN7S1552C33v83Ev();
extern void _ZN7S1552C33v84Ev();
extern void _ZN7S1552C33v85Ev();
extern void _ZN7S1552C33v86Ev();
extern void _ZN7S1552C33v87Ev();
extern void _ZN7S1552C33v88Ev();
extern void _ZN7S1552C33v89Ev();
extern void _ZN7S1552C33v90Ev();
extern void _ZN7S1552C33v91Ev();
extern void _ZN7S1552C33v92Ev();
extern void _ZN7S1552C23v93Ev();
extern void _ZN7S1552C23v94Ev();
extern void _ZN7S1552C23v95Ev();
extern void _ZN7S1552C23v96Ev();
extern void _ZN7S1552C23v97Ev();
extern void _ZN7S1552C23v98Ev();
extern void _ZN7S1552C23v99Ev();
extern void _ZN7S1552C24v100Ev();
extern void _ZN7S1552C24v101Ev();
extern void _ZN7S1552C24v102Ev();
extern void _ZN7S1552C24v103Ev();
extern void _ZN7S1552C24v104Ev();
extern void _ZN7S1552C24v105Ev();
extern void _ZN7S1552C24v106Ev();
extern void _ZN7S1552C24v107Ev();
extern void _ZN7S1552C24v108Ev();
extern void _ZN7S1552C24v109Ev();
extern void _ZN7S1552C24v110Ev();
extern void _ZN7S1552C24v111Ev();
static  VTBL_ENTRY vtc_S1552C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1552C2[0]),
  (VTBL_ENTRY)&_ZN7S1552C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1552C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v111Ev,
};
extern VTBL_ENTRY _ZTI7S1552C2[];
extern  VTBL_ENTRY _ZTV7S1552C2[];
Class_Descriptor cd_S1552C2 = {  "S1552C2", // class name
  bases_S1552C2, 2,
  &(vtc_S1552C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S1552C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1552C2),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1552C1  : S1552C2 {
  void *s1552c1f0;
  ::S473C7_nt s1552c1f1;
  virtual  ~S1552C1(); // _ZN7S1552C1D1Ev
  virtual void  v1(); // _ZN7S1552C12v1Ev
  virtual void  v2(); // _ZN7S1552C12v2Ev
  virtual void  v3(); // _ZN7S1552C12v3Ev
  virtual void  v4(); // _ZN7S1552C12v4Ev
  virtual void  v5(); // _ZN7S1552C12v5Ev
  virtual void  v6(); // _ZN7S1552C12v6Ev
  S1552C1(); // tgen
};
//SIG(1 S1552C1) C1{ BC2{ BC3{ BC4{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 FC5} vd v1 v2 v3 v4 v5 v6 Fp FC6}


 S1552C1 ::~S1552C1(){ note_dtor("S1552C1", this);}
void  S1552C1 ::v1(){vfunc_called(this, "_ZN7S1552C12v1Ev");}
void  S1552C1 ::v2(){vfunc_called(this, "_ZN7S1552C12v2Ev");}
void  S1552C1 ::v3(){vfunc_called(this, "_ZN7S1552C12v3Ev");}
void  S1552C1 ::v4(){vfunc_called(this, "_ZN7S1552C12v4Ev");}
void  S1552C1 ::v5(){vfunc_called(this, "_ZN7S1552C12v5Ev");}
void  S1552C1 ::v6(){vfunc_called(this, "_ZN7S1552C12v6Ev");}
S1552C1 ::S1552C1(){ note_ctor("S1552C1", this);} // tgen

static void Test_S1552C1()
{
  extern Class_Descriptor cd_S1552C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,40)];
    init_test(&cd_S1552C1, buf);
    S1552C1 *dp, &lv = *(dp=new (buf) S1552C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,156), "sizeof(S1552C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1552C1)");
    check_base_class_offset(lv, (S1552C4*)(S1552C3*)(S1552C2*), 0, "S1552C1");
    check_base_class_offset(lv, (S1552C3*)(S1552C2*), 0, "S1552C1");
    check_base_class_offset(lv, (S1552C2*), 0, "S1552C1");
    check_field_offset(lv, s1552c1f0, ABISELECT(200,140), "S1552C1.s1552c1f0");
    check_field_offset(lv, s1552c1f1, ABISELECT(208,144), "S1552C1.s1552c1f1");
    test_class_info(&lv, &cd_S1552C1);
    dp->~S1552C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1552C1(Test_S1552C1, "S1552C1", ABISELECT(224,156));

#else // __cplusplus

extern void _ZN7S1552C1C1Ev();
extern void _ZN7S1552C1D1Ev();
Name_Map name_map_S1552C1[] = {
  NSPAIR(_ZN7S1552C1C1Ev),
  NSPAIR(_ZN7S1552C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1552C4;
extern VTBL_ENTRY _ZTI7S1552C4[];
extern  VTBL_ENTRY _ZTV7S1552C4[];
extern Class_Descriptor cd_S1552C3;
extern VTBL_ENTRY _ZTI7S1552C3[];
extern  VTBL_ENTRY _ZTV7S1552C3[];
extern Class_Descriptor cd_S1552C2;
extern VTBL_ENTRY _ZTI7S1552C2[];
extern  VTBL_ENTRY _ZTV7S1552C2[];
static Base_Class bases_S1552C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1552C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1552C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1552C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1552C1[];
extern void _ZN7S1552C1D1Ev();
extern void _ZN7S1552C1D0Ev();
extern void _ZN7S1552C42v7Ev();
extern void _ZN7S1552C42v8Ev();
extern void _ZN7S1552C42v9Ev();
extern void _ZN7S1552C43v10Ev();
extern void _ZN7S1552C43v11Ev();
extern void _ZN7S1552C43v12Ev();
extern void _ZN7S1552C43v13Ev();
extern void _ZN7S1552C43v14Ev();
extern void _ZN7S1552C43v15Ev();
extern void _ZN7S1552C43v16Ev();
extern void _ZN7S1552C43v17Ev();
extern void _ZN7S1552C43v18Ev();
extern void _ZN7S1552C43v19Ev();
extern void _ZN7S1552C43v20Ev();
extern void _ZN7S1552C43v21Ev();
extern void _ZN7S1552C43v22Ev();
extern void _ZN7S1552C43v23Ev();
extern void _ZN7S1552C43v24Ev();
extern void _ZN7S1552C43v25Ev();
extern void _ZN7S1552C43v26Ev();
extern void _ZN7S1552C43v27Ev();
extern void _ZN7S1552C43v28Ev();
extern void _ZN7S1552C43v29Ev();
extern void _ZN7S1552C43v30Ev();
extern void _ZN7S1552C43v31Ev();
extern void _ZN7S1552C43v32Ev();
extern void _ZN7S1552C43v33Ev();
extern void _ZN7S1552C43v34Ev();
extern void _ZN7S1552C43v35Ev();
extern void _ZN7S1552C43v36Ev();
extern void _ZN7S1552C43v37Ev();
extern void _ZN7S1552C43v38Ev();
extern void _ZN7S1552C43v39Ev();
extern void _ZN7S1552C43v40Ev();
extern void _ZN7S1552C43v41Ev();
extern void _ZN7S1552C43v42Ev();
extern void _ZN7S1552C43v43Ev();
extern void _ZN7S1552C43v44Ev();
extern void _ZN7S1552C43v45Ev();
extern void _ZN7S1552C43v46Ev();
extern void _ZN7S1552C43v47Ev();
extern void _ZN7S1552C43v48Ev();
extern void _ZN7S1552C43v49Ev();
extern void _ZN7S1552C43v50Ev();
extern void _ZN7S1552C43v51Ev();
extern void _ZN7S1552C43v52Ev();
extern void _ZN7S1552C43v53Ev();
extern void _ZN7S1552C43v54Ev();
extern void _ZN7S1552C43v55Ev();
extern void _ZN7S1552C43v56Ev();
extern void _ZN7S1552C43v57Ev();
extern void _ZN7S1552C43v58Ev();
extern void _ZN7S1552C43v59Ev();
extern void _ZN7S1552C43v60Ev();
extern void _ZN7S1552C43v61Ev();
extern void _ZN7S1552C43v62Ev();
extern void _ZN7S1552C43v63Ev();
extern void _ZN7S1552C43v64Ev();
extern void _ZN7S1552C43v65Ev();
extern void _ZN7S1552C43v66Ev();
extern void _ZN7S1552C43v67Ev();
extern void _ZN7S1552C43v68Ev();
extern void _ZN7S1552C43v69Ev();
extern void _ZN7S1552C43v70Ev();
extern void _ZN7S1552C33v71Ev();
extern void _ZN7S1552C33v72Ev();
extern void _ZN7S1552C33v73Ev();
extern void _ZN7S1552C33v74Ev();
extern void _ZN7S1552C33v75Ev();
extern void _ZN7S1552C33v76Ev();
extern void _ZN7S1552C33v77Ev();
extern void _ZN7S1552C33v78Ev();
extern void _ZN7S1552C33v79Ev();
extern void _ZN7S1552C33v80Ev();
extern void _ZN7S1552C33v81Ev();
extern void _ZN7S1552C33v82Ev();
extern void _ZN7S1552C33v83Ev();
extern void _ZN7S1552C33v84Ev();
extern void _ZN7S1552C33v85Ev();
extern void _ZN7S1552C33v86Ev();
extern void _ZN7S1552C33v87Ev();
extern void _ZN7S1552C33v88Ev();
extern void _ZN7S1552C33v89Ev();
extern void _ZN7S1552C33v90Ev();
extern void _ZN7S1552C33v91Ev();
extern void _ZN7S1552C33v92Ev();
extern void _ZN7S1552C23v93Ev();
extern void _ZN7S1552C23v94Ev();
extern void _ZN7S1552C23v95Ev();
extern void _ZN7S1552C23v96Ev();
extern void _ZN7S1552C23v97Ev();
extern void _ZN7S1552C23v98Ev();
extern void _ZN7S1552C23v99Ev();
extern void _ZN7S1552C24v100Ev();
extern void _ZN7S1552C24v101Ev();
extern void _ZN7S1552C24v102Ev();
extern void _ZN7S1552C24v103Ev();
extern void _ZN7S1552C24v104Ev();
extern void _ZN7S1552C24v105Ev();
extern void _ZN7S1552C24v106Ev();
extern void _ZN7S1552C24v107Ev();
extern void _ZN7S1552C24v108Ev();
extern void _ZN7S1552C24v109Ev();
extern void _ZN7S1552C24v110Ev();
extern void _ZN7S1552C24v111Ev();
extern void _ZN7S1552C12v1Ev();
extern void _ZN7S1552C12v2Ev();
extern void _ZN7S1552C12v3Ev();
extern void _ZN7S1552C12v4Ev();
extern void _ZN7S1552C12v5Ev();
extern void _ZN7S1552C12v6Ev();
static  VTBL_ENTRY vtc_S1552C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1552C1[0]),
  (VTBL_ENTRY)&_ZN7S1552C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1552C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1552C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1552C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1552C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1552C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v110Ev,
  (VTBL_ENTRY)&_ZN7S1552C24v111Ev,
  (VTBL_ENTRY)&_ZN7S1552C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1552C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1552C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1552C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1552C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1552C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1552C1[];
extern  VTBL_ENTRY _ZTV7S1552C1[];
Class_Descriptor cd_S1552C1 = {  "S1552C1", // class name
  bases_S1552C1, 3,
  &(vtc_S1552C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,156), // object size
  NSPAIRA(_ZTI7S1552C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1552C1),115, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1473C4  {
  int s1473c4f0;
  __tsi64 s1473c4f1;
  void *s1473c4f2[4];
  int s1473c4f3[2];
  void *s1473c4f4;
  ::S473C6_nt s1473c4f5;
  void *s1473c4f6[2];
  virtual  ~S1473C4(); // _ZN7S1473C4D1Ev
  virtual void  v5(); // _ZN7S1473C42v5Ev
  virtual void  v6(); // _ZN7S1473C42v6Ev
  virtual void  v7(); // _ZN7S1473C42v7Ev
  virtual void  v8(); // _ZN7S1473C42v8Ev
  virtual void  v9(); // _ZN7S1473C42v9Ev
  virtual void  v10(); // _ZN7S1473C43v10Ev
  virtual void  v11(); // _ZN7S1473C43v11Ev
  virtual void  v12(); // _ZN7S1473C43v12Ev
  virtual void  v13(); // _ZN7S1473C43v13Ev
  virtual void  v14(); // _ZN7S1473C43v14Ev
  virtual void  v15(); // _ZN7S1473C43v15Ev
  virtual void  v16(); // _ZN7S1473C43v16Ev
  virtual void  v17(); // _ZN7S1473C43v17Ev
  virtual void  v18(); // _ZN7S1473C43v18Ev
  virtual void  v19(); // _ZN7S1473C43v19Ev
  virtual void  v20(); // _ZN7S1473C43v20Ev
  virtual void  v21(); // _ZN7S1473C43v21Ev
  virtual void  v22(); // _ZN7S1473C43v22Ev
  virtual void  v23(); // _ZN7S1473C43v23Ev
  virtual void  v24(); // _ZN7S1473C43v24Ev
  virtual void  v25(); // _ZN7S1473C43v25Ev
  virtual void  v26(); // _ZN7S1473C43v26Ev
  virtual void  v27(); // _ZN7S1473C43v27Ev
  virtual void  v28(); // _ZN7S1473C43v28Ev
  virtual void  v29(); // _ZN7S1473C43v29Ev
  virtual void  v30(); // _ZN7S1473C43v30Ev
  virtual void  v31(); // _ZN7S1473C43v31Ev
  virtual void  v32(); // _ZN7S1473C43v32Ev
  virtual void  v33(); // _ZN7S1473C43v33Ev
  virtual void  v34(); // _ZN7S1473C43v34Ev
  virtual void  v35(); // _ZN7S1473C43v35Ev
  virtual void  v36(); // _ZN7S1473C43v36Ev
  virtual void  v37(); // _ZN7S1473C43v37Ev
  virtual void  v38(); // _ZN7S1473C43v38Ev
  virtual void  v39(); // _ZN7S1473C43v39Ev
  virtual void  v40(); // _ZN7S1473C43v40Ev
  virtual void  v41(); // _ZN7S1473C43v41Ev
  virtual void  v42(); // _ZN7S1473C43v42Ev
  virtual void  v43(); // _ZN7S1473C43v43Ev
  virtual void  v44(); // _ZN7S1473C43v44Ev
  virtual void  v45(); // _ZN7S1473C43v45Ev
  virtual void  v46(); // _ZN7S1473C43v46Ev
  virtual void  v47(); // _ZN7S1473C43v47Ev
  virtual void  v48(); // _ZN7S1473C43v48Ev
  virtual void  v49(); // _ZN7S1473C43v49Ev
  virtual void  v50(); // _ZN7S1473C43v50Ev
  virtual void  v51(); // _ZN7S1473C43v51Ev
  virtual void  v52(); // _ZN7S1473C43v52Ev
  virtual void  v53(); // _ZN7S1473C43v53Ev
  virtual void  v54(); // _ZN7S1473C43v54Ev
  virtual void  v55(); // _ZN7S1473C43v55Ev
  virtual void  v56(); // _ZN7S1473C43v56Ev
  virtual void  v57(); // _ZN7S1473C43v57Ev
  virtual void  v58(); // _ZN7S1473C43v58Ev
  virtual void  v59(); // _ZN7S1473C43v59Ev
  virtual void  v60(); // _ZN7S1473C43v60Ev
  virtual void  v61(); // _ZN7S1473C43v61Ev
  virtual void  v62(); // _ZN7S1473C43v62Ev
  virtual void  v63(); // _ZN7S1473C43v63Ev
  virtual void  v64(); // _ZN7S1473C43v64Ev
  virtual void  v65(); // _ZN7S1473C43v65Ev
  virtual void  v66(); // _ZN7S1473C43v66Ev
  virtual void  v67(); // _ZN7S1473C43v67Ev
  virtual void  v68(); // _ZN7S1473C43v68Ev
  S1473C4(); // tgen
};
//SIG(-1 S1473C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1473C4 ::~S1473C4(){ note_dtor("S1473C4", this);}
void  S1473C4 ::v5(){vfunc_called(this, "_ZN7S1473C42v5Ev");}
void  S1473C4 ::v6(){vfunc_called(this, "_ZN7S1473C42v6Ev");}
void  S1473C4 ::v7(){vfunc_called(this, "_ZN7S1473C42v7Ev");}
void  S1473C4 ::v8(){vfunc_called(this, "_ZN7S1473C42v8Ev");}
void  S1473C4 ::v9(){vfunc_called(this, "_ZN7S1473C42v9Ev");}
void  S1473C4 ::v10(){vfunc_called(this, "_ZN7S1473C43v10Ev");}
void  S1473C4 ::v11(){vfunc_called(this, "_ZN7S1473C43v11Ev");}
void  S1473C4 ::v12(){vfunc_called(this, "_ZN7S1473C43v12Ev");}
void  S1473C4 ::v13(){vfunc_called(this, "_ZN7S1473C43v13Ev");}
void  S1473C4 ::v14(){vfunc_called(this, "_ZN7S1473C43v14Ev");}
void  S1473C4 ::v15(){vfunc_called(this, "_ZN7S1473C43v15Ev");}
void  S1473C4 ::v16(){vfunc_called(this, "_ZN7S1473C43v16Ev");}
void  S1473C4 ::v17(){vfunc_called(this, "_ZN7S1473C43v17Ev");}
void  S1473C4 ::v18(){vfunc_called(this, "_ZN7S1473C43v18Ev");}
void  S1473C4 ::v19(){vfunc_called(this, "_ZN7S1473C43v19Ev");}
void  S1473C4 ::v20(){vfunc_called(this, "_ZN7S1473C43v20Ev");}
void  S1473C4 ::v21(){vfunc_called(this, "_ZN7S1473C43v21Ev");}
void  S1473C4 ::v22(){vfunc_called(this, "_ZN7S1473C43v22Ev");}
void  S1473C4 ::v23(){vfunc_called(this, "_ZN7S1473C43v23Ev");}
void  S1473C4 ::v24(){vfunc_called(this, "_ZN7S1473C43v24Ev");}
void  S1473C4 ::v25(){vfunc_called(this, "_ZN7S1473C43v25Ev");}
void  S1473C4 ::v26(){vfunc_called(this, "_ZN7S1473C43v26Ev");}
void  S1473C4 ::v27(){vfunc_called(this, "_ZN7S1473C43v27Ev");}
void  S1473C4 ::v28(){vfunc_called(this, "_ZN7S1473C43v28Ev");}
void  S1473C4 ::v29(){vfunc_called(this, "_ZN7S1473C43v29Ev");}
void  S1473C4 ::v30(){vfunc_called(this, "_ZN7S1473C43v30Ev");}
void  S1473C4 ::v31(){vfunc_called(this, "_ZN7S1473C43v31Ev");}
void  S1473C4 ::v32(){vfunc_called(this, "_ZN7S1473C43v32Ev");}
void  S1473C4 ::v33(){vfunc_called(this, "_ZN7S1473C43v33Ev");}
void  S1473C4 ::v34(){vfunc_called(this, "_ZN7S1473C43v34Ev");}
void  S1473C4 ::v35(){vfunc_called(this, "_ZN7S1473C43v35Ev");}
void  S1473C4 ::v36(){vfunc_called(this, "_ZN7S1473C43v36Ev");}
void  S1473C4 ::v37(){vfunc_called(this, "_ZN7S1473C43v37Ev");}
void  S1473C4 ::v38(){vfunc_called(this, "_ZN7S1473C43v38Ev");}
void  S1473C4 ::v39(){vfunc_called(this, "_ZN7S1473C43v39Ev");}
void  S1473C4 ::v40(){vfunc_called(this, "_ZN7S1473C43v40Ev");}
void  S1473C4 ::v41(){vfunc_called(this, "_ZN7S1473C43v41Ev");}
void  S1473C4 ::v42(){vfunc_called(this, "_ZN7S1473C43v42Ev");}
void  S1473C4 ::v43(){vfunc_called(this, "_ZN7S1473C43v43Ev");}
void  S1473C4 ::v44(){vfunc_called(this, "_ZN7S1473C43v44Ev");}
void  S1473C4 ::v45(){vfunc_called(this, "_ZN7S1473C43v45Ev");}
void  S1473C4 ::v46(){vfunc_called(this, "_ZN7S1473C43v46Ev");}
void  S1473C4 ::v47(){vfunc_called(this, "_ZN7S1473C43v47Ev");}
void  S1473C4 ::v48(){vfunc_called(this, "_ZN7S1473C43v48Ev");}
void  S1473C4 ::v49(){vfunc_called(this, "_ZN7S1473C43v49Ev");}
void  S1473C4 ::v50(){vfunc_called(this, "_ZN7S1473C43v50Ev");}
void  S1473C4 ::v51(){vfunc_called(this, "_ZN7S1473C43v51Ev");}
void  S1473C4 ::v52(){vfunc_called(this, "_ZN7S1473C43v52Ev");}
void  S1473C4 ::v53(){vfunc_called(this, "_ZN7S1473C43v53Ev");}
void  S1473C4 ::v54(){vfunc_called(this, "_ZN7S1473C43v54Ev");}
void  S1473C4 ::v55(){vfunc_called(this, "_ZN7S1473C43v55Ev");}
void  S1473C4 ::v56(){vfunc_called(this, "_ZN7S1473C43v56Ev");}
void  S1473C4 ::v57(){vfunc_called(this, "_ZN7S1473C43v57Ev");}
void  S1473C4 ::v58(){vfunc_called(this, "_ZN7S1473C43v58Ev");}
void  S1473C4 ::v59(){vfunc_called(this, "_ZN7S1473C43v59Ev");}
void  S1473C4 ::v60(){vfunc_called(this, "_ZN7S1473C43v60Ev");}
void  S1473C4 ::v61(){vfunc_called(this, "_ZN7S1473C43v61Ev");}
void  S1473C4 ::v62(){vfunc_called(this, "_ZN7S1473C43v62Ev");}
void  S1473C4 ::v63(){vfunc_called(this, "_ZN7S1473C43v63Ev");}
void  S1473C4 ::v64(){vfunc_called(this, "_ZN7S1473C43v64Ev");}
void  S1473C4 ::v65(){vfunc_called(this, "_ZN7S1473C43v65Ev");}
void  S1473C4 ::v66(){vfunc_called(this, "_ZN7S1473C43v66Ev");}
void  S1473C4 ::v67(){vfunc_called(this, "_ZN7S1473C43v67Ev");}
void  S1473C4 ::v68(){vfunc_called(this, "_ZN7S1473C43v68Ev");}
S1473C4 ::S1473C4(){ note_ctor("S1473C4", this);} // tgen

static void Test_S1473C4()
{
  extern Class_Descriptor cd_S1473C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1473C4, buf);
    S1473C4 *dp, &lv = *(dp=new (buf) S1473C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1473C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1473C4)");
    check_field_offset(lv, s1473c4f0, ABISELECT(8,4), "S1473C4.s1473c4f0");
    check_field_offset(lv, s1473c4f1, ABISELECT(16,8), "S1473C4.s1473c4f1");
    check_field_offset(lv, s1473c4f2, ABISELECT(24,16), "S1473C4.s1473c4f2");
    check_field_offset(lv, s1473c4f3, ABISELECT(56,32), "S1473C4.s1473c4f3");
    check_field_offset(lv, s1473c4f4, ABISELECT(64,40), "S1473C4.s1473c4f4");
    check_field_offset(lv, s1473c4f5, ABISELECT(72,44), "S1473C4.s1473c4f5");
    check_field_offset(lv, s1473c4f6, ABISELECT(80,52), "S1473C4.s1473c4f6");
    test_class_info(&lv, &cd_S1473C4);
    dp->~S1473C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1473C4(Test_S1473C4, "S1473C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1473C4C1Ev();
extern void _ZN7S1473C4D1Ev();
Name_Map name_map_S1473C4[] = {
  NSPAIR(_ZN7S1473C4C1Ev),
  NSPAIR(_ZN7S1473C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1473C4[];
extern void _ZN7S1473C4D1Ev();
extern void _ZN7S1473C4D0Ev();
extern void _ZN7S1473C42v5Ev();
extern void _ZN7S1473C42v6Ev();
extern void _ZN7S1473C42v7Ev();
extern void _ZN7S1473C42v8Ev();
extern void _ZN7S1473C42v9Ev();
extern void _ZN7S1473C43v10Ev();
extern void _ZN7S1473C43v11Ev();
extern void _ZN7S1473C43v12Ev();
extern void _ZN7S1473C43v13Ev();
extern void _ZN7S1473C43v14Ev();
extern void _ZN7S1473C43v15Ev();
extern void _ZN7S1473C43v16Ev();
extern void _ZN7S1473C43v17Ev();
extern void _ZN7S1473C43v18Ev();
extern void _ZN7S1473C43v19Ev();
extern void _ZN7S1473C43v20Ev();
extern void _ZN7S1473C43v21Ev();
extern void _ZN7S1473C43v22Ev();
extern void _ZN7S1473C43v23Ev();
extern void _ZN7S1473C43v24Ev();
extern void _ZN7S1473C43v25Ev();
extern void _ZN7S1473C43v26Ev();
extern void _ZN7S1473C43v27Ev();
extern void _ZN7S1473C43v28Ev();
extern void _ZN7S1473C43v29Ev();
extern void _ZN7S1473C43v30Ev();
extern void _ZN7S1473C43v31Ev();
extern void _ZN7S1473C43v32Ev();
extern void _ZN7S1473C43v33Ev();
extern void _ZN7S1473C43v34Ev();
extern void _ZN7S1473C43v35Ev();
extern void _ZN7S1473C43v36Ev();
extern void _ZN7S1473C43v37Ev();
extern void _ZN7S1473C43v38Ev();
extern void _ZN7S1473C43v39Ev();
extern void _ZN7S1473C43v40Ev();
extern void _ZN7S1473C43v41Ev();
extern void _ZN7S1473C43v42Ev();
extern void _ZN7S1473C43v43Ev();
extern void _ZN7S1473C43v44Ev();
extern void _ZN7S1473C43v45Ev();
extern void _ZN7S1473C43v46Ev();
extern void _ZN7S1473C43v47Ev();
extern void _ZN7S1473C43v48Ev();
extern void _ZN7S1473C43v49Ev();
extern void _ZN7S1473C43v50Ev();
extern void _ZN7S1473C43v51Ev();
extern void _ZN7S1473C43v52Ev();
extern void _ZN7S1473C43v53Ev();
extern void _ZN7S1473C43v54Ev();
extern void _ZN7S1473C43v55Ev();
extern void _ZN7S1473C43v56Ev();
extern void _ZN7S1473C43v57Ev();
extern void _ZN7S1473C43v58Ev();
extern void _ZN7S1473C43v59Ev();
extern void _ZN7S1473C43v60Ev();
extern void _ZN7S1473C43v61Ev();
extern void _ZN7S1473C43v62Ev();
extern void _ZN7S1473C43v63Ev();
extern void _ZN7S1473C43v64Ev();
extern void _ZN7S1473C43v65Ev();
extern void _ZN7S1473C43v66Ev();
extern void _ZN7S1473C43v67Ev();
extern void _ZN7S1473C43v68Ev();
static  VTBL_ENTRY vtc_S1473C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1473C4[0]),
  (VTBL_ENTRY)&_ZN7S1473C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1473C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v68Ev,
};
extern VTBL_ENTRY _ZTI7S1473C4[];
extern  VTBL_ENTRY _ZTV7S1473C4[];
Class_Descriptor cd_S1473C4 = {  "S1473C4", // class name
  0,0,//no base classes
  &(vtc_S1473C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1473C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1473C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1473C3  : S1473C4 {
  int s1473c3f0[2];
  void *s1473c3f1;
  int s1473c3f2[2];
  ::S473C7_nt s1473c3f3;
  ::S473C7_nt s1473c3f4;
  ::S21925C42 s1473c3f5;
  ::S473C7_nt s1473c3f6;
  unsigned int s1473c3f7:1;
  unsigned int s1473c3f8:1;
  unsigned int s1473c3f9:1;
  unsigned int s1473c3f10:1;
  unsigned int s1473c3f11:1;
  int s1473c3f12[2];
  virtual  ~S1473C3(); // _ZN7S1473C3D1Ev
  virtual void  v69(); // _ZN7S1473C33v69Ev
  virtual void  v70(); // _ZN7S1473C33v70Ev
  virtual void  v71(); // _ZN7S1473C33v71Ev
  virtual void  v72(); // _ZN7S1473C33v72Ev
  virtual void  v73(); // _ZN7S1473C33v73Ev
  virtual void  v74(); // _ZN7S1473C33v74Ev
  virtual void  v75(); // _ZN7S1473C33v75Ev
  virtual void  v76(); // _ZN7S1473C33v76Ev
  virtual void  v77(); // _ZN7S1473C33v77Ev
  virtual void  v78(); // _ZN7S1473C33v78Ev
  virtual void  v79(); // _ZN7S1473C33v79Ev
  virtual void  v80(); // _ZN7S1473C33v80Ev
  virtual void  v81(); // _ZN7S1473C33v81Ev
  virtual void  v82(); // _ZN7S1473C33v82Ev
  virtual void  v83(); // _ZN7S1473C33v83Ev
  virtual void  v84(); // _ZN7S1473C33v84Ev
  virtual void  v85(); // _ZN7S1473C33v85Ev
  virtual void  v86(); // _ZN7S1473C33v86Ev
  virtual void  v87(); // _ZN7S1473C33v87Ev
  virtual void  v88(); // _ZN7S1473C33v88Ev
  virtual void  v89(); // _ZN7S1473C33v89Ev
  virtual void  v90(); // _ZN7S1473C33v90Ev
  S1473C3(); // tgen
};
//SIG(-1 S1473C3) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1473C3 ::~S1473C3(){ note_dtor("S1473C3", this);}
void  S1473C3 ::v69(){vfunc_called(this, "_ZN7S1473C33v69Ev");}
void  S1473C3 ::v70(){vfunc_called(this, "_ZN7S1473C33v70Ev");}
void  S1473C3 ::v71(){vfunc_called(this, "_ZN7S1473C33v71Ev");}
void  S1473C3 ::v72(){vfunc_called(this, "_ZN7S1473C33v72Ev");}
void  S1473C3 ::v73(){vfunc_called(this, "_ZN7S1473C33v73Ev");}
void  S1473C3 ::v74(){vfunc_called(this, "_ZN7S1473C33v74Ev");}
void  S1473C3 ::v75(){vfunc_called(this, "_ZN7S1473C33v75Ev");}
void  S1473C3 ::v76(){vfunc_called(this, "_ZN7S1473C33v76Ev");}
void  S1473C3 ::v77(){vfunc_called(this, "_ZN7S1473C33v77Ev");}
void  S1473C3 ::v78(){vfunc_called(this, "_ZN7S1473C33v78Ev");}
void  S1473C3 ::v79(){vfunc_called(this, "_ZN7S1473C33v79Ev");}
void  S1473C3 ::v80(){vfunc_called(this, "_ZN7S1473C33v80Ev");}
void  S1473C3 ::v81(){vfunc_called(this, "_ZN7S1473C33v81Ev");}
void  S1473C3 ::v82(){vfunc_called(this, "_ZN7S1473C33v82Ev");}
void  S1473C3 ::v83(){vfunc_called(this, "_ZN7S1473C33v83Ev");}
void  S1473C3 ::v84(){vfunc_called(this, "_ZN7S1473C33v84Ev");}
void  S1473C3 ::v85(){vfunc_called(this, "_ZN7S1473C33v85Ev");}
void  S1473C3 ::v86(){vfunc_called(this, "_ZN7S1473C33v86Ev");}
void  S1473C3 ::v87(){vfunc_called(this, "_ZN7S1473C33v87Ev");}
void  S1473C3 ::v88(){vfunc_called(this, "_ZN7S1473C33v88Ev");}
void  S1473C3 ::v89(){vfunc_called(this, "_ZN7S1473C33v89Ev");}
void  S1473C3 ::v90(){vfunc_called(this, "_ZN7S1473C33v90Ev");}
S1473C3 ::S1473C3(){ note_ctor("S1473C3", this);} // tgen

static void Test_S1473C3()
{
  extern Class_Descriptor cd_S1473C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S1473C3, buf);
    S1473C3 *dp, &lv = *(dp=new (buf) S1473C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S1473C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1473C3)");
    check_base_class_offset(lv, (S1473C4*), 0, "S1473C3");
    check_field_offset(lv, s1473c3f0, ABISELECT(96,60), "S1473C3.s1473c3f0");
    check_field_offset(lv, s1473c3f1, ABISELECT(104,68), "S1473C3.s1473c3f1");
    check_field_offset(lv, s1473c3f2, ABISELECT(112,72), "S1473C3.s1473c3f2");
    check_field_offset(lv, s1473c3f3, ABISELECT(120,80), "S1473C3.s1473c3f3");
    check_field_offset(lv, s1473c3f4, ABISELECT(136,92), "S1473C3.s1473c3f4");
    check_field_offset(lv, s1473c3f5, ABISELECT(152,104), "S1473C3.s1473c3f5");
    check_field_offset(lv, s1473c3f6, ABISELECT(160,108), "S1473C3.s1473c3f6");
    set_bf_and_test(lv, s1473c3f7, ABISELECT(176,120), 0, 1, 1, "S1473C3");
    set_bf_and_test(lv, s1473c3f8, ABISELECT(176,120), 1, 1, 1, "S1473C3");
    set_bf_and_test(lv, s1473c3f9, ABISELECT(176,120), 2, 1, 1, "S1473C3");
    set_bf_and_test(lv, s1473c3f10, ABISELECT(176,120), 3, 1, 1, "S1473C3");
    set_bf_and_test(lv, s1473c3f11, ABISELECT(176,120), 4, 1, 1, "S1473C3");
    check_field_offset(lv, s1473c3f12, ABISELECT(180,124), "S1473C3.s1473c3f12");
    test_class_info(&lv, &cd_S1473C3);
    dp->~S1473C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1473C3(Test_S1473C3, "S1473C3", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN7S1473C3C1Ev();
extern void _ZN7S1473C3D1Ev();
Name_Map name_map_S1473C3[] = {
  NSPAIR(_ZN7S1473C3C1Ev),
  NSPAIR(_ZN7S1473C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1473C4;
extern VTBL_ENTRY _ZTI7S1473C4[];
extern  VTBL_ENTRY _ZTV7S1473C4[];
static Base_Class bases_S1473C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1473C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1473C3[];
extern void _ZN7S1473C3D1Ev();
extern void _ZN7S1473C3D0Ev();
extern void _ZN7S1473C42v5Ev();
extern void _ZN7S1473C42v6Ev();
extern void _ZN7S1473C42v7Ev();
extern void _ZN7S1473C42v8Ev();
extern void _ZN7S1473C42v9Ev();
extern void _ZN7S1473C43v10Ev();
extern void _ZN7S1473C43v11Ev();
extern void _ZN7S1473C43v12Ev();
extern void _ZN7S1473C43v13Ev();
extern void _ZN7S1473C43v14Ev();
extern void _ZN7S1473C43v15Ev();
extern void _ZN7S1473C43v16Ev();
extern void _ZN7S1473C43v17Ev();
extern void _ZN7S1473C43v18Ev();
extern void _ZN7S1473C43v19Ev();
extern void _ZN7S1473C43v20Ev();
extern void _ZN7S1473C43v21Ev();
extern void _ZN7S1473C43v22Ev();
extern void _ZN7S1473C43v23Ev();
extern void _ZN7S1473C43v24Ev();
extern void _ZN7S1473C43v25Ev();
extern void _ZN7S1473C43v26Ev();
extern void _ZN7S1473C43v27Ev();
extern void _ZN7S1473C43v28Ev();
extern void _ZN7S1473C43v29Ev();
extern void _ZN7S1473C43v30Ev();
extern void _ZN7S1473C43v31Ev();
extern void _ZN7S1473C43v32Ev();
extern void _ZN7S1473C43v33Ev();
extern void _ZN7S1473C43v34Ev();
extern void _ZN7S1473C43v35Ev();
extern void _ZN7S1473C43v36Ev();
extern void _ZN7S1473C43v37Ev();
extern void _ZN7S1473C43v38Ev();
extern void _ZN7S1473C43v39Ev();
extern void _ZN7S1473C43v40Ev();
extern void _ZN7S1473C43v41Ev();
extern void _ZN7S1473C43v42Ev();
extern void _ZN7S1473C43v43Ev();
extern void _ZN7S1473C43v44Ev();
extern void _ZN7S1473C43v45Ev();
extern void _ZN7S1473C43v46Ev();
extern void _ZN7S1473C43v47Ev();
extern void _ZN7S1473C43v48Ev();
extern void _ZN7S1473C43v49Ev();
extern void _ZN7S1473C43v50Ev();
extern void _ZN7S1473C43v51Ev();
extern void _ZN7S1473C43v52Ev();
extern void _ZN7S1473C43v53Ev();
extern void _ZN7S1473C43v54Ev();
extern void _ZN7S1473C43v55Ev();
extern void _ZN7S1473C43v56Ev();
extern void _ZN7S1473C43v57Ev();
extern void _ZN7S1473C43v58Ev();
extern void _ZN7S1473C43v59Ev();
extern void _ZN7S1473C43v60Ev();
extern void _ZN7S1473C43v61Ev();
extern void _ZN7S1473C43v62Ev();
extern void _ZN7S1473C43v63Ev();
extern void _ZN7S1473C43v64Ev();
extern void _ZN7S1473C43v65Ev();
extern void _ZN7S1473C43v66Ev();
extern void _ZN7S1473C43v67Ev();
extern void _ZN7S1473C43v68Ev();
extern void _ZN7S1473C33v69Ev();
extern void _ZN7S1473C33v70Ev();
extern void _ZN7S1473C33v71Ev();
extern void _ZN7S1473C33v72Ev();
extern void _ZN7S1473C33v73Ev();
extern void _ZN7S1473C33v74Ev();
extern void _ZN7S1473C33v75Ev();
extern void _ZN7S1473C33v76Ev();
extern void _ZN7S1473C33v77Ev();
extern void _ZN7S1473C33v78Ev();
extern void _ZN7S1473C33v79Ev();
extern void _ZN7S1473C33v80Ev();
extern void _ZN7S1473C33v81Ev();
extern void _ZN7S1473C33v82Ev();
extern void _ZN7S1473C33v83Ev();
extern void _ZN7S1473C33v84Ev();
extern void _ZN7S1473C33v85Ev();
extern void _ZN7S1473C33v86Ev();
extern void _ZN7S1473C33v87Ev();
extern void _ZN7S1473C33v88Ev();
extern void _ZN7S1473C33v89Ev();
extern void _ZN7S1473C33v90Ev();
static  VTBL_ENTRY vtc_S1473C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1473C3[0]),
  (VTBL_ENTRY)&_ZN7S1473C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1473C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v90Ev,
};
extern VTBL_ENTRY _ZTI7S1473C3[];
extern  VTBL_ENTRY _ZTV7S1473C3[];
Class_Descriptor cd_S1473C3 = {  "S1473C3", // class name
  bases_S1473C3, 1,
  &(vtc_S1473C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI7S1473C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1473C3),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1473C2  : S1473C3 {
  ::S473C6_nt s1473c2f0;
  virtual  ~S1473C2(); // _ZN7S1473C2D1Ev
  virtual void  v91(); // _ZN7S1473C23v91Ev
  virtual void  v92(); // _ZN7S1473C23v92Ev
  virtual void  v93(); // _ZN7S1473C23v93Ev
  virtual void  v94(); // _ZN7S1473C23v94Ev
  virtual void  v95(); // _ZN7S1473C23v95Ev
  virtual void  v96(); // _ZN7S1473C23v96Ev
  virtual void  v97(); // _ZN7S1473C23v97Ev
  virtual void  v98(); // _ZN7S1473C23v98Ev
  virtual void  v99(); // _ZN7S1473C23v99Ev
  virtual void  v100(); // _ZN7S1473C24v100Ev
  virtual void  v101(); // _ZN7S1473C24v101Ev
  virtual void  v102(); // _ZN7S1473C24v102Ev
  virtual void  v103(); // _ZN7S1473C24v103Ev
  virtual void  v104(); // _ZN7S1473C24v104Ev
  virtual void  v105(); // _ZN7S1473C24v105Ev
  virtual void  v106(); // _ZN7S1473C24v106Ev
  virtual void  v107(); // _ZN7S1473C24v107Ev
  virtual void  v108(); // _ZN7S1473C24v108Ev
  virtual void  v109(); // _ZN7S1473C24v109Ev
  S1473C2(); // tgen
};
//SIG(-1 S1473C2) C1{ BC2{ BC3{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4}


 S1473C2 ::~S1473C2(){ note_dtor("S1473C2", this);}
void  S1473C2 ::v91(){vfunc_called(this, "_ZN7S1473C23v91Ev");}
void  S1473C2 ::v92(){vfunc_called(this, "_ZN7S1473C23v92Ev");}
void  S1473C2 ::v93(){vfunc_called(this, "_ZN7S1473C23v93Ev");}
void  S1473C2 ::v94(){vfunc_called(this, "_ZN7S1473C23v94Ev");}
void  S1473C2 ::v95(){vfunc_called(this, "_ZN7S1473C23v95Ev");}
void  S1473C2 ::v96(){vfunc_called(this, "_ZN7S1473C23v96Ev");}
void  S1473C2 ::v97(){vfunc_called(this, "_ZN7S1473C23v97Ev");}
void  S1473C2 ::v98(){vfunc_called(this, "_ZN7S1473C23v98Ev");}
void  S1473C2 ::v99(){vfunc_called(this, "_ZN7S1473C23v99Ev");}
void  S1473C2 ::v100(){vfunc_called(this, "_ZN7S1473C24v100Ev");}
void  S1473C2 ::v101(){vfunc_called(this, "_ZN7S1473C24v101Ev");}
void  S1473C2 ::v102(){vfunc_called(this, "_ZN7S1473C24v102Ev");}
void  S1473C2 ::v103(){vfunc_called(this, "_ZN7S1473C24v103Ev");}
void  S1473C2 ::v104(){vfunc_called(this, "_ZN7S1473C24v104Ev");}
void  S1473C2 ::v105(){vfunc_called(this, "_ZN7S1473C24v105Ev");}
void  S1473C2 ::v106(){vfunc_called(this, "_ZN7S1473C24v106Ev");}
void  S1473C2 ::v107(){vfunc_called(this, "_ZN7S1473C24v107Ev");}
void  S1473C2 ::v108(){vfunc_called(this, "_ZN7S1473C24v108Ev");}
void  S1473C2 ::v109(){vfunc_called(this, "_ZN7S1473C24v109Ev");}
S1473C2 ::S1473C2(){ note_ctor("S1473C2", this);} // tgen

static void Test_S1473C2()
{
  extern Class_Descriptor cd_S1473C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S1473C2, buf);
    S1473C2 *dp, &lv = *(dp=new (buf) S1473C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S1473C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1473C2)");
    check_base_class_offset(lv, (S1473C4*)(S1473C3*), 0, "S1473C2");
    check_base_class_offset(lv, (S1473C3*), 0, "S1473C2");
    check_field_offset(lv, s1473c2f0, ABISELECT(188,132), "S1473C2.s1473c2f0");
    test_class_info(&lv, &cd_S1473C2);
    dp->~S1473C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1473C2(Test_S1473C2, "S1473C2", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S1473C2C1Ev();
extern void _ZN7S1473C2D1Ev();
Name_Map name_map_S1473C2[] = {
  NSPAIR(_ZN7S1473C2C1Ev),
  NSPAIR(_ZN7S1473C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1473C4;
extern VTBL_ENTRY _ZTI7S1473C4[];
extern  VTBL_ENTRY _ZTV7S1473C4[];
extern Class_Descriptor cd_S1473C3;
extern VTBL_ENTRY _ZTI7S1473C3[];
extern  VTBL_ENTRY _ZTV7S1473C3[];
static Base_Class bases_S1473C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1473C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1473C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1473C2[];
extern void _ZN7S1473C2D1Ev();
extern void _ZN7S1473C2D0Ev();
extern void _ZN7S1473C42v5Ev();
extern void _ZN7S1473C42v6Ev();
extern void _ZN7S1473C42v7Ev();
extern void _ZN7S1473C42v8Ev();
extern void _ZN7S1473C42v9Ev();
extern void _ZN7S1473C43v10Ev();
extern void _ZN7S1473C43v11Ev();
extern void _ZN7S1473C43v12Ev();
extern void _ZN7S1473C43v13Ev();
extern void _ZN7S1473C43v14Ev();
extern void _ZN7S1473C43v15Ev();
extern void _ZN7S1473C43v16Ev();
extern void _ZN7S1473C43v17Ev();
extern void _ZN7S1473C43v18Ev();
extern void _ZN7S1473C43v19Ev();
extern void _ZN7S1473C43v20Ev();
extern void _ZN7S1473C43v21Ev();
extern void _ZN7S1473C43v22Ev();
extern void _ZN7S1473C43v23Ev();
extern void _ZN7S1473C43v24Ev();
extern void _ZN7S1473C43v25Ev();
extern void _ZN7S1473C43v26Ev();
extern void _ZN7S1473C43v27Ev();
extern void _ZN7S1473C43v28Ev();
extern void _ZN7S1473C43v29Ev();
extern void _ZN7S1473C43v30Ev();
extern void _ZN7S1473C43v31Ev();
extern void _ZN7S1473C43v32Ev();
extern void _ZN7S1473C43v33Ev();
extern void _ZN7S1473C43v34Ev();
extern void _ZN7S1473C43v35Ev();
extern void _ZN7S1473C43v36Ev();
extern void _ZN7S1473C43v37Ev();
extern void _ZN7S1473C43v38Ev();
extern void _ZN7S1473C43v39Ev();
extern void _ZN7S1473C43v40Ev();
extern void _ZN7S1473C43v41Ev();
extern void _ZN7S1473C43v42Ev();
extern void _ZN7S1473C43v43Ev();
extern void _ZN7S1473C43v44Ev();
extern void _ZN7S1473C43v45Ev();
extern void _ZN7S1473C43v46Ev();
extern void _ZN7S1473C43v47Ev();
extern void _ZN7S1473C43v48Ev();
extern void _ZN7S1473C43v49Ev();
extern void _ZN7S1473C43v50Ev();
extern void _ZN7S1473C43v51Ev();
extern void _ZN7S1473C43v52Ev();
extern void _ZN7S1473C43v53Ev();
extern void _ZN7S1473C43v54Ev();
extern void _ZN7S1473C43v55Ev();
extern void _ZN7S1473C43v56Ev();
extern void _ZN7S1473C43v57Ev();
extern void _ZN7S1473C43v58Ev();
extern void _ZN7S1473C43v59Ev();
extern void _ZN7S1473C43v60Ev();
extern void _ZN7S1473C43v61Ev();
extern void _ZN7S1473C43v62Ev();
extern void _ZN7S1473C43v63Ev();
extern void _ZN7S1473C43v64Ev();
extern void _ZN7S1473C43v65Ev();
extern void _ZN7S1473C43v66Ev();
extern void _ZN7S1473C43v67Ev();
extern void _ZN7S1473C43v68Ev();
extern void _ZN7S1473C33v69Ev();
extern void _ZN7S1473C33v70Ev();
extern void _ZN7S1473C33v71Ev();
extern void _ZN7S1473C33v72Ev();
extern void _ZN7S1473C33v73Ev();
extern void _ZN7S1473C33v74Ev();
extern void _ZN7S1473C33v75Ev();
extern void _ZN7S1473C33v76Ev();
extern void _ZN7S1473C33v77Ev();
extern void _ZN7S1473C33v78Ev();
extern void _ZN7S1473C33v79Ev();
extern void _ZN7S1473C33v80Ev();
extern void _ZN7S1473C33v81Ev();
extern void _ZN7S1473C33v82Ev();
extern void _ZN7S1473C33v83Ev();
extern void _ZN7S1473C33v84Ev();
extern void _ZN7S1473C33v85Ev();
extern void _ZN7S1473C33v86Ev();
extern void _ZN7S1473C33v87Ev();
extern void _ZN7S1473C33v88Ev();
extern void _ZN7S1473C33v89Ev();
extern void _ZN7S1473C33v90Ev();
extern void _ZN7S1473C23v91Ev();
extern void _ZN7S1473C23v92Ev();
extern void _ZN7S1473C23v93Ev();
extern void _ZN7S1473C23v94Ev();
extern void _ZN7S1473C23v95Ev();
extern void _ZN7S1473C23v96Ev();
extern void _ZN7S1473C23v97Ev();
extern void _ZN7S1473C23v98Ev();
extern void _ZN7S1473C23v99Ev();
extern void _ZN7S1473C24v100Ev();
extern void _ZN7S1473C24v101Ev();
extern void _ZN7S1473C24v102Ev();
extern void _ZN7S1473C24v103Ev();
extern void _ZN7S1473C24v104Ev();
extern void _ZN7S1473C24v105Ev();
extern void _ZN7S1473C24v106Ev();
extern void _ZN7S1473C24v107Ev();
extern void _ZN7S1473C24v108Ev();
extern void _ZN7S1473C24v109Ev();
static  VTBL_ENTRY vtc_S1473C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1473C2[0]),
  (VTBL_ENTRY)&_ZN7S1473C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1473C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v109Ev,
};
extern VTBL_ENTRY _ZTI7S1473C2[];
extern  VTBL_ENTRY _ZTV7S1473C2[];
Class_Descriptor cd_S1473C2 = {  "S1473C2", // class name
  bases_S1473C2, 2,
  &(vtc_S1473C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S1473C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1473C2),109, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1473C1  : S1473C2 {
  ::S21925C22_nt s1473c1f0;
  virtual  ~S1473C1(); // _ZN7S1473C1D1Ev
  virtual void  v1(); // _ZN7S1473C12v1Ev
  virtual void  v2(); // _ZN7S1473C12v2Ev
  virtual void  v3(); // _ZN7S1473C12v3Ev
  virtual void  v4(); // _ZN7S1473C12v4Ev
  S1473C1(); // tgen
};
//SIG(1 S1473C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 FC5} vd v1 v2 v3 v4 FC11{ m Fi[3]}}


 S1473C1 ::~S1473C1(){ note_dtor("S1473C1", this);}
void  S1473C1 ::v1(){vfunc_called(this, "_ZN7S1473C12v1Ev");}
void  S1473C1 ::v2(){vfunc_called(this, "_ZN7S1473C12v2Ev");}
void  S1473C1 ::v3(){vfunc_called(this, "_ZN7S1473C12v3Ev");}
void  S1473C1 ::v4(){vfunc_called(this, "_ZN7S1473C12v4Ev");}
S1473C1 ::S1473C1(){ note_ctor("S1473C1", this);} // tgen

static void Test_S1473C1()
{
  extern Class_Descriptor cd_S1473C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,39)];
    init_test(&cd_S1473C1, buf);
    S1473C1 *dp, &lv = *(dp=new (buf) S1473C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,152), "sizeof(S1473C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1473C1)");
    check_base_class_offset(lv, (S1473C4*)(S1473C3*)(S1473C2*), 0, "S1473C1");
    check_base_class_offset(lv, (S1473C3*)(S1473C2*), 0, "S1473C1");
    check_base_class_offset(lv, (S1473C2*), 0, "S1473C1");
    check_field_offset(lv, s1473c1f0, ABISELECT(196,140), "S1473C1.s1473c1f0");
    test_class_info(&lv, &cd_S1473C1);
    dp->~S1473C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1473C1(Test_S1473C1, "S1473C1", ABISELECT(208,152));

#else // __cplusplus

extern void _ZN7S1473C1C1Ev();
extern void _ZN7S1473C1D1Ev();
Name_Map name_map_S1473C1[] = {
  NSPAIR(_ZN7S1473C1C1Ev),
  NSPAIR(_ZN7S1473C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1473C4;
extern VTBL_ENTRY _ZTI7S1473C4[];
extern  VTBL_ENTRY _ZTV7S1473C4[];
extern Class_Descriptor cd_S1473C3;
extern VTBL_ENTRY _ZTI7S1473C3[];
extern  VTBL_ENTRY _ZTV7S1473C3[];
extern Class_Descriptor cd_S1473C2;
extern VTBL_ENTRY _ZTI7S1473C2[];
extern  VTBL_ENTRY _ZTV7S1473C2[];
static Base_Class bases_S1473C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1473C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1473C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1473C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1473C1[];
extern void _ZN7S1473C1D1Ev();
extern void _ZN7S1473C1D0Ev();
extern void _ZN7S1473C42v5Ev();
extern void _ZN7S1473C42v6Ev();
extern void _ZN7S1473C42v7Ev();
extern void _ZN7S1473C42v8Ev();
extern void _ZN7S1473C42v9Ev();
extern void _ZN7S1473C43v10Ev();
extern void _ZN7S1473C43v11Ev();
extern void _ZN7S1473C43v12Ev();
extern void _ZN7S1473C43v13Ev();
extern void _ZN7S1473C43v14Ev();
extern void _ZN7S1473C43v15Ev();
extern void _ZN7S1473C43v16Ev();
extern void _ZN7S1473C43v17Ev();
extern void _ZN7S1473C43v18Ev();
extern void _ZN7S1473C43v19Ev();
extern void _ZN7S1473C43v20Ev();
extern void _ZN7S1473C43v21Ev();
extern void _ZN7S1473C43v22Ev();
extern void _ZN7S1473C43v23Ev();
extern void _ZN7S1473C43v24Ev();
extern void _ZN7S1473C43v25Ev();
extern void _ZN7S1473C43v26Ev();
extern void _ZN7S1473C43v27Ev();
extern void _ZN7S1473C43v28Ev();
extern void _ZN7S1473C43v29Ev();
extern void _ZN7S1473C43v30Ev();
extern void _ZN7S1473C43v31Ev();
extern void _ZN7S1473C43v32Ev();
extern void _ZN7S1473C43v33Ev();
extern void _ZN7S1473C43v34Ev();
extern void _ZN7S1473C43v35Ev();
extern void _ZN7S1473C43v36Ev();
extern void _ZN7S1473C43v37Ev();
extern void _ZN7S1473C43v38Ev();
extern void _ZN7S1473C43v39Ev();
extern void _ZN7S1473C43v40Ev();
extern void _ZN7S1473C43v41Ev();
extern void _ZN7S1473C43v42Ev();
extern void _ZN7S1473C43v43Ev();
extern void _ZN7S1473C43v44Ev();
extern void _ZN7S1473C43v45Ev();
extern void _ZN7S1473C43v46Ev();
extern void _ZN7S1473C43v47Ev();
extern void _ZN7S1473C43v48Ev();
extern void _ZN7S1473C43v49Ev();
extern void _ZN7S1473C43v50Ev();
extern void _ZN7S1473C43v51Ev();
extern void _ZN7S1473C43v52Ev();
extern void _ZN7S1473C43v53Ev();
extern void _ZN7S1473C43v54Ev();
extern void _ZN7S1473C43v55Ev();
extern void _ZN7S1473C43v56Ev();
extern void _ZN7S1473C43v57Ev();
extern void _ZN7S1473C43v58Ev();
extern void _ZN7S1473C43v59Ev();
extern void _ZN7S1473C43v60Ev();
extern void _ZN7S1473C43v61Ev();
extern void _ZN7S1473C43v62Ev();
extern void _ZN7S1473C43v63Ev();
extern void _ZN7S1473C43v64Ev();
extern void _ZN7S1473C43v65Ev();
extern void _ZN7S1473C43v66Ev();
extern void _ZN7S1473C43v67Ev();
extern void _ZN7S1473C43v68Ev();
extern void _ZN7S1473C33v69Ev();
extern void _ZN7S1473C33v70Ev();
extern void _ZN7S1473C33v71Ev();
extern void _ZN7S1473C33v72Ev();
extern void _ZN7S1473C33v73Ev();
extern void _ZN7S1473C33v74Ev();
extern void _ZN7S1473C33v75Ev();
extern void _ZN7S1473C33v76Ev();
extern void _ZN7S1473C33v77Ev();
extern void _ZN7S1473C33v78Ev();
extern void _ZN7S1473C33v79Ev();
extern void _ZN7S1473C33v80Ev();
extern void _ZN7S1473C33v81Ev();
extern void _ZN7S1473C33v82Ev();
extern void _ZN7S1473C33v83Ev();
extern void _ZN7S1473C33v84Ev();
extern void _ZN7S1473C33v85Ev();
extern void _ZN7S1473C33v86Ev();
extern void _ZN7S1473C33v87Ev();
extern void _ZN7S1473C33v88Ev();
extern void _ZN7S1473C33v89Ev();
extern void _ZN7S1473C33v90Ev();
extern void _ZN7S1473C23v91Ev();
extern void _ZN7S1473C23v92Ev();
extern void _ZN7S1473C23v93Ev();
extern void _ZN7S1473C23v94Ev();
extern void _ZN7S1473C23v95Ev();
extern void _ZN7S1473C23v96Ev();
extern void _ZN7S1473C23v97Ev();
extern void _ZN7S1473C23v98Ev();
extern void _ZN7S1473C23v99Ev();
extern void _ZN7S1473C24v100Ev();
extern void _ZN7S1473C24v101Ev();
extern void _ZN7S1473C24v102Ev();
extern void _ZN7S1473C24v103Ev();
extern void _ZN7S1473C24v104Ev();
extern void _ZN7S1473C24v105Ev();
extern void _ZN7S1473C24v106Ev();
extern void _ZN7S1473C24v107Ev();
extern void _ZN7S1473C24v108Ev();
extern void _ZN7S1473C24v109Ev();
extern void _ZN7S1473C12v1Ev();
extern void _ZN7S1473C12v2Ev();
extern void _ZN7S1473C12v3Ev();
extern void _ZN7S1473C12v4Ev();
static  VTBL_ENTRY vtc_S1473C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1473C1[0]),
  (VTBL_ENTRY)&_ZN7S1473C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1473C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1473C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1473C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1473C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1473C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v100Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v101Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v102Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v103Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v104Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v105Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v106Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v107Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v108Ev,
  (VTBL_ENTRY)&_ZN7S1473C24v109Ev,
  (VTBL_ENTRY)&_ZN7S1473C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1473C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1473C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1473C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1473C1[];
extern  VTBL_ENTRY _ZTV7S1473C1[];
Class_Descriptor cd_S1473C1 = {  "S1473C1", // class name
  bases_S1473C1, 3,
  &(vtc_S1473C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,152), // object size
  NSPAIRA(_ZTI7S1473C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1473C1),113, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C7_nt  {
  int s119c7f0;
  void  mf119c7(); // _ZN9S119C7_nt7mf119c7Ev
  virtual  ~S119C7_nt(); // _ZN9S119C7_ntD1Ev
  S119C7_nt(); // tgen
};
//SIG(-1 S119C7_nt) C1{ vd m Fi}


void  S119C7_nt ::mf119c7(){}
 S119C7_nt ::~S119C7_nt(){ note_dtor("S119C7_nt", this);}
S119C7_nt ::S119C7_nt(){ note_ctor("S119C7_nt", this);} // tgen

//skip512 S119C7_nt

#else // __cplusplus

extern void _ZN9S119C7_ntC1Ev();
extern void _ZN9S119C7_ntD1Ev();
Name_Map name_map_S119C7_nt[] = {
  NSPAIR(_ZN9S119C7_ntC1Ev),
  NSPAIR(_ZN9S119C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern void _ZN9S119C7_ntD1Ev();
extern void _ZN9S119C7_ntD0Ev();
static  VTBL_ENTRY vtc_S119C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S119C7_nt[0]),
  (VTBL_ENTRY)&_ZN9S119C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S119C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI9S119C7_nt[];
VTBL_ENTRY *P__ZTI9S119C7_nt = _ZTI9S119C7_nt; 
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
Class_Descriptor cd_S119C7_nt = {  "S119C7_nt", // class name
  0,0,//no base classes
  &(vtc_S119C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S119C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S119C7_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C6_nt  : S119C7_nt {
  virtual void  v4(); // _ZN9S119C6_nt2v4Ev
  virtual void  v5(); // _ZN9S119C6_nt2v5Ev
  virtual void  v6(); // _ZN9S119C6_nt2v6Ev
  virtual void  v7(); // _ZN9S119C6_nt2v7Ev
  virtual void  v8(); // _ZN9S119C6_nt2v8Ev
  ~S119C6_nt(); // tgen
  S119C6_nt(); // tgen
};
//SIG(-1 S119C6_nt) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S119C6_nt ::v4(){vfunc_called(this, "_ZN9S119C6_nt2v4Ev");}
void  S119C6_nt ::v5(){vfunc_called(this, "_ZN9S119C6_nt2v5Ev");}
void  S119C6_nt ::v6(){vfunc_called(this, "_ZN9S119C6_nt2v6Ev");}
void  S119C6_nt ::v7(){vfunc_called(this, "_ZN9S119C6_nt2v7Ev");}
void  S119C6_nt ::v8(){vfunc_called(this, "_ZN9S119C6_nt2v8Ev");}
S119C6_nt ::~S119C6_nt(){ note_dtor("S119C6_nt", this);} // tgen
S119C6_nt ::S119C6_nt(){ note_ctor("S119C6_nt", this);} // tgen

//skip512 S119C6_nt

#else // __cplusplus

extern void _ZN9S119C6_ntC1Ev();
extern void _ZN9S119C6_ntD1Ev();
Name_Map name_map_S119C6_nt[] = {
  NSPAIR(_ZN9S119C6_ntC1Ev),
  NSPAIR(_ZN9S119C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
static Base_Class bases_S119C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S119C6_nt[];
extern void _ZN9S119C6_ntD1Ev();
extern void _ZN9S119C6_ntD0Ev();
extern void _ZN9S119C6_nt2v4Ev();
extern void _ZN9S119C6_nt2v5Ev();
extern void _ZN9S119C6_nt2v6Ev();
extern void _ZN9S119C6_nt2v7Ev();
extern void _ZN9S119C6_nt2v8Ev();
static  VTBL_ENTRY vtc_S119C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S119C6_nt[0]),
  (VTBL_ENTRY)&_ZN9S119C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S119C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI9S119C6_nt[];
VTBL_ENTRY *P__ZTI9S119C6_nt = _ZTI9S119C6_nt; 
extern  VTBL_ENTRY _ZTV9S119C6_nt[];
Class_Descriptor cd_S119C6_nt = {  "S119C6_nt", // class name
  bases_S119C6_nt, 1,
  &(vtc_S119C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S119C6_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S119C6_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C9_nt  {
  void *s119c9f0;
  int s119c9f1[2];
  ::S21925C42 s119c9f2;
  void  mf119c9(); // _ZN9S119C9_nt7mf119c9Ev
};
//SIG(-1 S119C9_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S119C9_nt ::mf119c9(){}

//skip512 S119C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C8_nt  {
  ::S119C9_nt s119c8f0;
  void *s119c8f1[2];
  void  mf119c8(); // _ZN9S119C8_nt7mf119c8Ev
};
//SIG(-1 S119C8_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S119C8_nt ::mf119c8(){}

//skip512 S119C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C5_nt  : S119C6_nt {
  void *s119c5f0[3];
  ::S119C8_nt s119c5f1;
  virtual void  v9(); // _ZN9S119C5_nt2v9Ev
  virtual void  v10(); // _ZN9S119C5_nt3v10Ev
  virtual void  v11(); // _ZN9S119C5_nt3v11Ev
  virtual void  v12(); // _ZN9S119C5_nt3v12Ev
  virtual void  v13(); // _ZN9S119C5_nt3v13Ev
  virtual void  v14(); // _ZN9S119C5_nt3v14Ev
  virtual void  v15(); // _ZN9S119C5_nt3v15Ev
  virtual void  v16(); // _ZN9S119C5_nt3v16Ev
  virtual void  v17(); // _ZN9S119C5_nt3v17Ev
  virtual void  v18(); // _ZN9S119C5_nt3v18Ev
  virtual void  v19(); // _ZN9S119C5_nt3v19Ev
  ~S119C5_nt(); // tgen
  S119C5_nt(); // tgen
};
//SIG(-1 S119C5_nt) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S119C5_nt ::v9(){vfunc_called(this, "_ZN9S119C5_nt2v9Ev");}
void  S119C5_nt ::v10(){vfunc_called(this, "_ZN9S119C5_nt3v10Ev");}
void  S119C5_nt ::v11(){vfunc_called(this, "_ZN9S119C5_nt3v11Ev");}
void  S119C5_nt ::v12(){vfunc_called(this, "_ZN9S119C5_nt3v12Ev");}
void  S119C5_nt ::v13(){vfunc_called(this, "_ZN9S119C5_nt3v13Ev");}
void  S119C5_nt ::v14(){vfunc_called(this, "_ZN9S119C5_nt3v14Ev");}
void  S119C5_nt ::v15(){vfunc_called(this, "_ZN9S119C5_nt3v15Ev");}
void  S119C5_nt ::v16(){vfunc_called(this, "_ZN9S119C5_nt3v16Ev");}
void  S119C5_nt ::v17(){vfunc_called(this, "_ZN9S119C5_nt3v17Ev");}
void  S119C5_nt ::v18(){vfunc_called(this, "_ZN9S119C5_nt3v18Ev");}
void  S119C5_nt ::v19(){vfunc_called(this, "_ZN9S119C5_nt3v19Ev");}
S119C5_nt ::~S119C5_nt(){ note_dtor("S119C5_nt", this);} // tgen
S119C5_nt ::S119C5_nt(){ note_ctor("S119C5_nt", this);} // tgen

//skip512 S119C5_nt

#else // __cplusplus

extern void _ZN9S119C5_ntC1Ev();
extern void _ZN9S119C5_ntD1Ev();
Name_Map name_map_S119C5_nt[] = {
  NSPAIR(_ZN9S119C5_ntC1Ev),
  NSPAIR(_ZN9S119C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S119C6_nt;
extern VTBL_ENTRY _ZTI9S119C6_nt[];
extern  VTBL_ENTRY _ZTV9S119C6_nt[];
static Base_Class bases_S119C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S119C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S119C5_nt[];
extern void _ZN9S119C5_ntD1Ev();
extern void _ZN9S119C5_ntD0Ev();
extern void _ZN9S119C6_nt2v4Ev();
extern void _ZN9S119C6_nt2v5Ev();
extern void _ZN9S119C6_nt2v6Ev();
extern void _ZN9S119C6_nt2v7Ev();
extern void _ZN9S119C6_nt2v8Ev();
extern void _ZN9S119C5_nt2v9Ev();
extern void _ZN9S119C5_nt3v10Ev();
extern void _ZN9S119C5_nt3v11Ev();
extern void _ZN9S119C5_nt3v12Ev();
extern void _ZN9S119C5_nt3v13Ev();
extern void _ZN9S119C5_nt3v14Ev();
extern void _ZN9S119C5_nt3v15Ev();
extern void _ZN9S119C5_nt3v16Ev();
extern void _ZN9S119C5_nt3v17Ev();
extern void _ZN9S119C5_nt3v18Ev();
extern void _ZN9S119C5_nt3v19Ev();
static  VTBL_ENTRY vtc_S119C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S119C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S119C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S119C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI9S119C5_nt[];
VTBL_ENTRY *P__ZTI9S119C5_nt = _ZTI9S119C5_nt; 
extern  VTBL_ENTRY _ZTV9S119C5_nt[];
Class_Descriptor cd_S119C5_nt = {  "S119C5_nt", // class name
  bases_S119C5_nt, 2,
  &(vtc_S119C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI9S119C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S119C5_nt),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C11_nt  {
  void *s119c11f0;
  void  mf119c11(); // _ZN10S119C11_nt8mf119c11Ev
};
//SIG(-1 S119C11_nt) C1{ m Fp}


void  S119C11_nt ::mf119c11(){}

//skip512 S119C11_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S119C11_nt[];
VTBL_ENTRY *P__ZTI10S119C11_nt = _ZTI10S119C11_nt; 
Class_Descriptor cd_S119C11_nt = {  "S119C11_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S119C11_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C4_nt  : S119C5_nt {
  ::S119C8_nt s119c4f0;
  ::S119C11_nt s119c4f1;
  void *s119c4f2;
  virtual void  v20(); // _ZN9S119C4_nt3v20Ev
  virtual void  v21(); // _ZN9S119C4_nt3v21Ev
  virtual void  v22(); // _ZN9S119C4_nt3v22Ev
  virtual void  v23(); // _ZN9S119C4_nt3v23Ev
  ~S119C4_nt(); // tgen
  S119C4_nt(); // tgen
};
//SIG(-1 S119C4_nt) C1{ BC2{ BC3{ BC4{ vd m Fi} v5 v6 v7 v8 v9} v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 FC5 FC8{ m Fp} Fp}


void  S119C4_nt ::v20(){vfunc_called(this, "_ZN9S119C4_nt3v20Ev");}
void  S119C4_nt ::v21(){vfunc_called(this, "_ZN9S119C4_nt3v21Ev");}
void  S119C4_nt ::v22(){vfunc_called(this, "_ZN9S119C4_nt3v22Ev");}
void  S119C4_nt ::v23(){vfunc_called(this, "_ZN9S119C4_nt3v23Ev");}
S119C4_nt ::~S119C4_nt(){ note_dtor("S119C4_nt", this);} // tgen
S119C4_nt ::S119C4_nt(){ note_ctor("S119C4_nt", this);} // tgen

//skip512 S119C4_nt

#else // __cplusplus

extern void _ZN9S119C4_ntC1Ev();
extern void _ZN9S119C4_ntD1Ev();
Name_Map name_map_S119C4_nt[] = {
  NSPAIR(_ZN9S119C4_ntC1Ev),
  NSPAIR(_ZN9S119C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S119C6_nt;
extern VTBL_ENTRY _ZTI9S119C6_nt[];
extern  VTBL_ENTRY _ZTV9S119C6_nt[];
extern Class_Descriptor cd_S119C5_nt;
extern VTBL_ENTRY _ZTI9S119C5_nt[];
extern  VTBL_ENTRY _ZTV9S119C5_nt[];
static Base_Class bases_S119C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S119C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S119C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S119C4_nt[];
extern void _ZN9S119C4_ntD1Ev();
extern void _ZN9S119C4_ntD0Ev();
extern void _ZN9S119C6_nt2v4Ev();
extern void _ZN9S119C6_nt2v5Ev();
extern void _ZN9S119C6_nt2v6Ev();
extern void _ZN9S119C6_nt2v7Ev();
extern void _ZN9S119C6_nt2v8Ev();
extern void _ZN9S119C5_nt2v9Ev();
extern void _ZN9S119C5_nt3v10Ev();
extern void _ZN9S119C5_nt3v11Ev();
extern void _ZN9S119C5_nt3v12Ev();
extern void _ZN9S119C5_nt3v13Ev();
extern void _ZN9S119C5_nt3v14Ev();
extern void _ZN9S119C5_nt3v15Ev();
extern void _ZN9S119C5_nt3v16Ev();
extern void _ZN9S119C5_nt3v17Ev();
extern void _ZN9S119C5_nt3v18Ev();
extern void _ZN9S119C5_nt3v19Ev();
extern void _ZN9S119C4_nt3v20Ev();
extern void _ZN9S119C4_nt3v21Ev();
extern void _ZN9S119C4_nt3v22Ev();
extern void _ZN9S119C4_nt3v23Ev();
static  VTBL_ENTRY vtc_S119C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S119C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S119C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S119C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v23Ev,
};
extern VTBL_ENTRY _ZTI9S119C4_nt[];
VTBL_ENTRY *P__ZTI9S119C4_nt = _ZTI9S119C4_nt; 
extern  VTBL_ENTRY _ZTV9S119C4_nt[];
Class_Descriptor cd_S119C4_nt = {  "S119C4_nt", // class name
  bases_S119C4_nt, 3,
  &(vtc_S119C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,76), // object size
  NSPAIRA(_ZTI9S119C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S119C4_nt),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C13_nt  {
  void *s119c13f0;
  int s119c13f1;
  ::S21925C35_nt s119c13f2;
  void  mf119c13(); // _ZN10S119C13_nt8mf119c13Ev
};
//SIG(-1 S119C13_nt) C1{ m Fp Fi FC2{ m}}


void  S119C13_nt ::mf119c13(){}

//skip512 S119C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C12_nt  {
  ::S119C13_nt s119c12f0;
  int s119c12f1;
  void  mf119c12(); // _ZN10S119C12_nt8mf119c12Ev
};
//SIG(-1 S119C12_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S119C12_nt ::mf119c12(){}

//skip512 S119C12_nt

#else // __cplusplus

Class_Descriptor cd_S119C12_nt = {  "S119C12_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C17_nt  {
  void *s119c17f0;
  int s119c17f1[2];
  ::S119C11_nt s119c17f2;
  void  mf119c17(); // _ZN10S119C17_nt8mf119c17Ev
};
//SIG(-1 S119C17_nt) C1{ m Fp Fi[2] FC2{ m Fp}}


void  S119C17_nt ::mf119c17(){}

//skip512 S119C17_nt

#else // __cplusplus

Class_Descriptor cd_S119C17_nt = {  "S119C17_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C16_nt  : S119C17_nt {
};
//SIG(-1 S119C16_nt) C1{ BC2{ m Fp Fi[2] FC3{ m Fp}}}



//skip512 S119C16_nt

#else // __cplusplus

extern Class_Descriptor cd_S119C17_nt;
static Base_Class bases_S119C16_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C15_nt  {
  int s119c15f0;
  __tsi64 s119c15f1[2];
  char s119c15f2;
  int s119c15f3;
  ::S119C13_nt s119c15f4;
  ::S119C13_nt s119c15f5;
  ::S119C16_nt s119c15f6;
  void  mf119c15(); // _ZN10S119C15_nt8mf119c15Ev
};
//SIG(-1 S119C15_nt) C1{ m Fi FL[2] Fc Fi FC2{ m Fp Fi FC3{ m}} FC2 FC4{ BC5{ m Fp Fi[2] FC6{ m Fp}}}}


void  S119C15_nt ::mf119c15(){}

//skip512 S119C15_nt

#else // __cplusplus

Class_Descriptor cd_S119C15_nt = {  "S119C15_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(88,68), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C3  : S119C4_nt {
  ::S119C12_nt s119c3f0;
  ::S119C11_nt s119c3f1;
  ::S119C15_nt s119c3f2;
  void *s119c3f3[5];
  virtual void  v24(); // _ZN6S119C33v24Ev
  virtual void  v25(); // _ZN6S119C33v25Ev
  virtual void  v26(); // _ZN6S119C33v26Ev
  virtual void  v27(); // _ZN6S119C33v27Ev
  virtual void  v28(); // _ZN6S119C33v28Ev
  virtual void  v29(); // _ZN6S119C33v29Ev
  virtual void  v30(); // _ZN6S119C33v30Ev
  virtual void  v31(); // _ZN6S119C33v31Ev
  virtual void  v32(); // _ZN6S119C33v32Ev
  virtual void  v33(); // _ZN6S119C33v33Ev
  virtual void  v34(); // _ZN6S119C33v34Ev
  virtual void  v35(); // _ZN6S119C33v35Ev
  virtual void  v36(); // _ZN6S119C33v36Ev
  ~S119C3(); // tgen
  S119C3(); // tgen
};
//SIG(-1 S119C3) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v14 v15 v16 v17 v18} v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v30 v31 v32 v33 FC6 FC9{ m Fp} Fp} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC10{ m FC11{ m Fp Fi FC12{ m}} Fi} FC9 FC13{ m Fi FL[2] Fc Fi FC11 FC11 FC14{ BC15{ m Fp Fi[2] FC9}}} Fp[5]}


void  S119C3 ::v24(){vfunc_called(this, "_ZN6S119C33v24Ev");}
void  S119C3 ::v25(){vfunc_called(this, "_ZN6S119C33v25Ev");}
void  S119C3 ::v26(){vfunc_called(this, "_ZN6S119C33v26Ev");}
void  S119C3 ::v27(){vfunc_called(this, "_ZN6S119C33v27Ev");}
void  S119C3 ::v28(){vfunc_called(this, "_ZN6S119C33v28Ev");}
void  S119C3 ::v29(){vfunc_called(this, "_ZN6S119C33v29Ev");}
void  S119C3 ::v30(){vfunc_called(this, "_ZN6S119C33v30Ev");}
void  S119C3 ::v31(){vfunc_called(this, "_ZN6S119C33v31Ev");}
void  S119C3 ::v32(){vfunc_called(this, "_ZN6S119C33v32Ev");}
void  S119C3 ::v33(){vfunc_called(this, "_ZN6S119C33v33Ev");}
void  S119C3 ::v34(){vfunc_called(this, "_ZN6S119C33v34Ev");}
void  S119C3 ::v35(){vfunc_called(this, "_ZN6S119C33v35Ev");}
void  S119C3 ::v36(){vfunc_called(this, "_ZN6S119C33v36Ev");}
S119C3 ::~S119C3(){ note_dtor("S119C3", this);} // tgen
S119C3 ::S119C3(){ note_ctor("S119C3", this);} // tgen

static void Test_S119C3()
{
  extern Class_Descriptor cd_S119C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,47)];
    init_test(&cd_S119C3, buf);
    S119C3 *dp, &lv = *(dp=new (buf) S119C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,184), "sizeof(S119C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S119C3)");
    check_base_class_offset(lv, (S119C7_nt*)(S119C6_nt*)(S119C5_nt*)(S119C4_nt*), 0, "S119C3");
    check_base_class_offset(lv, (S119C6_nt*)(S119C5_nt*)(S119C4_nt*), 0, "S119C3");
    check_base_class_offset(lv, (S119C5_nt*)(S119C4_nt*), 0, "S119C3");
    check_base_class_offset(lv, (S119C4_nt*), 0, "S119C3");
    check_field_offset(lv, s119c3f0, ABISELECT(136,76), "S119C3.s119c3f0");
    check_field_offset(lv, s119c3f1, ABISELECT(160,92), "S119C3.s119c3f1");
    check_field_offset(lv, s119c3f2, ABISELECT(168,96), "S119C3.s119c3f2");
    check_field_offset(lv, s119c3f3, ABISELECT(256,164), "S119C3.s119c3f3");
    test_class_info(&lv, &cd_S119C3);
    dp->~S119C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS119C3(Test_S119C3, "S119C3", ABISELECT(296,184));

#else // __cplusplus

extern void _ZN6S119C3C1Ev();
extern void _ZN6S119C3D1Ev();
Name_Map name_map_S119C3[] = {
  NSPAIR(_ZN6S119C3C1Ev),
  NSPAIR(_ZN6S119C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S119C6_nt;
extern VTBL_ENTRY _ZTI9S119C6_nt[];
extern  VTBL_ENTRY _ZTV9S119C6_nt[];
extern Class_Descriptor cd_S119C5_nt;
extern VTBL_ENTRY _ZTI9S119C5_nt[];
extern  VTBL_ENTRY _ZTV9S119C5_nt[];
extern Class_Descriptor cd_S119C4_nt;
extern VTBL_ENTRY _ZTI9S119C4_nt[];
extern  VTBL_ENTRY _ZTV9S119C4_nt[];
static Base_Class bases_S119C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S119C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S119C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S119C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S119C3[];
extern void _ZN6S119C3D1Ev();
extern void _ZN6S119C3D0Ev();
extern void _ZN9S119C6_nt2v4Ev();
extern void _ZN9S119C6_nt2v5Ev();
extern void _ZN9S119C6_nt2v6Ev();
extern void _ZN9S119C6_nt2v7Ev();
extern void _ZN9S119C6_nt2v8Ev();
extern void _ZN9S119C5_nt2v9Ev();
extern void _ZN9S119C5_nt3v10Ev();
extern void _ZN9S119C5_nt3v11Ev();
extern void _ZN9S119C5_nt3v12Ev();
extern void _ZN9S119C5_nt3v13Ev();
extern void _ZN9S119C5_nt3v14Ev();
extern void _ZN9S119C5_nt3v15Ev();
extern void _ZN9S119C5_nt3v16Ev();
extern void _ZN9S119C5_nt3v17Ev();
extern void _ZN9S119C5_nt3v18Ev();
extern void _ZN9S119C5_nt3v19Ev();
extern void _ZN9S119C4_nt3v20Ev();
extern void _ZN9S119C4_nt3v21Ev();
extern void _ZN9S119C4_nt3v22Ev();
extern void _ZN9S119C4_nt3v23Ev();
extern void _ZN6S119C33v24Ev();
extern void _ZN6S119C33v25Ev();
extern void _ZN6S119C33v26Ev();
extern void _ZN6S119C33v27Ev();
extern void _ZN6S119C33v28Ev();
extern void _ZN6S119C33v29Ev();
extern void _ZN6S119C33v30Ev();
extern void _ZN6S119C33v31Ev();
extern void _ZN6S119C33v32Ev();
extern void _ZN6S119C33v33Ev();
extern void _ZN6S119C33v34Ev();
extern void _ZN6S119C33v35Ev();
extern void _ZN6S119C33v36Ev();
static  VTBL_ENTRY vtc_S119C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S119C3[0]),
  (VTBL_ENTRY)&_ZN6S119C3D1Ev,
  (VTBL_ENTRY)&_ZN6S119C3D0Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN6S119C33v24Ev,
  (VTBL_ENTRY)&_ZN6S119C33v25Ev,
  (VTBL_ENTRY)&_ZN6S119C33v26Ev,
  (VTBL_ENTRY)&_ZN6S119C33v27Ev,
  (VTBL_ENTRY)&_ZN6S119C33v28Ev,
  (VTBL_ENTRY)&_ZN6S119C33v29Ev,
  (VTBL_ENTRY)&_ZN6S119C33v30Ev,
  (VTBL_ENTRY)&_ZN6S119C33v31Ev,
  (VTBL_ENTRY)&_ZN6S119C33v32Ev,
  (VTBL_ENTRY)&_ZN6S119C33v33Ev,
  (VTBL_ENTRY)&_ZN6S119C33v34Ev,
  (VTBL_ENTRY)&_ZN6S119C33v35Ev,
  (VTBL_ENTRY)&_ZN6S119C33v36Ev,
};
extern VTBL_ENTRY _ZTI6S119C3[];
extern  VTBL_ENTRY _ZTV6S119C3[];
Class_Descriptor cd_S119C3 = {  "S119C3", // class name
  bases_S119C3, 4,
  &(vtc_S119C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,184), // object size
  NSPAIRA(_ZTI6S119C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S119C3),37, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C2  : S119C3 {
  virtual void  v37(); // _ZN6S119C23v37Ev
  virtual void  v38(); // _ZN6S119C23v38Ev
  virtual void  v39(); // _ZN6S119C23v39Ev
  virtual void  v40(); // _ZN6S119C23v40Ev
  virtual void  v41(); // _ZN6S119C23v41Ev
  virtual void  v42(); // _ZN6S119C23v42Ev
  ~S119C2(); // tgen
  S119C2(); // tgen
};
//SIG(-1 S119C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fi} v7 v8 v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[3] FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]}} v23 v24 v25 v26 FC7 FC10{ m Fp} Fp} v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} FC10 FC14{ m Fi FL[2] Fc Fi FC12 FC12 FC15{ BC16{ m Fp Fi[2] FC10}}} Fp[5]} v1 v2 v3 v4 v5 v6}


void  S119C2 ::v37(){vfunc_called(this, "_ZN6S119C23v37Ev");}
void  S119C2 ::v38(){vfunc_called(this, "_ZN6S119C23v38Ev");}
void  S119C2 ::v39(){vfunc_called(this, "_ZN6S119C23v39Ev");}
void  S119C2 ::v40(){vfunc_called(this, "_ZN6S119C23v40Ev");}
void  S119C2 ::v41(){vfunc_called(this, "_ZN6S119C23v41Ev");}
void  S119C2 ::v42(){vfunc_called(this, "_ZN6S119C23v42Ev");}
S119C2 ::~S119C2(){ note_dtor("S119C2", this);} // tgen
S119C2 ::S119C2(){ note_ctor("S119C2", this);} // tgen

static void Test_S119C2()
{
  extern Class_Descriptor cd_S119C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,47)];
    init_test(&cd_S119C2, buf);
    S119C2 *dp, &lv = *(dp=new (buf) S119C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,184), "sizeof(S119C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S119C2)");
    check_base_class_offset(lv, (S119C7_nt*)(S119C6_nt*)(S119C5_nt*)(S119C4_nt*)(S119C3*), 0, "S119C2");
    check_base_class_offset(lv, (S119C6_nt*)(S119C5_nt*)(S119C4_nt*)(S119C3*), 0, "S119C2");
    check_base_class_offset(lv, (S119C5_nt*)(S119C4_nt*)(S119C3*), 0, "S119C2");
    check_base_class_offset(lv, (S119C4_nt*)(S119C3*), 0, "S119C2");
    check_base_class_offset(lv, (S119C3*), 0, "S119C2");
    test_class_info(&lv, &cd_S119C2);
    dp->~S119C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS119C2(Test_S119C2, "S119C2", ABISELECT(296,184));

#else // __cplusplus

extern void _ZN6S119C2C1Ev();
extern void _ZN6S119C2D1Ev();
Name_Map name_map_S119C2[] = {
  NSPAIR(_ZN6S119C2C1Ev),
  NSPAIR(_ZN6S119C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S119C6_nt;
extern VTBL_ENTRY _ZTI9S119C6_nt[];
extern  VTBL_ENTRY _ZTV9S119C6_nt[];
extern Class_Descriptor cd_S119C5_nt;
extern VTBL_ENTRY _ZTI9S119C5_nt[];
extern  VTBL_ENTRY _ZTV9S119C5_nt[];
extern Class_Descriptor cd_S119C4_nt;
extern VTBL_ENTRY _ZTI9S119C4_nt[];
extern  VTBL_ENTRY _ZTV9S119C4_nt[];
extern Class_Descriptor cd_S119C3;
extern VTBL_ENTRY _ZTI6S119C3[];
extern  VTBL_ENTRY _ZTV6S119C3[];
static Base_Class bases_S119C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S119C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S119C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S119C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S119C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S119C2[];
extern void _ZN6S119C2D1Ev();
extern void _ZN6S119C2D0Ev();
extern void _ZN9S119C6_nt2v4Ev();
extern void _ZN9S119C6_nt2v5Ev();
extern void _ZN9S119C6_nt2v6Ev();
extern void _ZN9S119C6_nt2v7Ev();
extern void _ZN9S119C6_nt2v8Ev();
extern void _ZN9S119C5_nt2v9Ev();
extern void _ZN9S119C5_nt3v10Ev();
extern void _ZN9S119C5_nt3v11Ev();
extern void _ZN9S119C5_nt3v12Ev();
extern void _ZN9S119C5_nt3v13Ev();
extern void _ZN9S119C5_nt3v14Ev();
extern void _ZN9S119C5_nt3v15Ev();
extern void _ZN9S119C5_nt3v16Ev();
extern void _ZN9S119C5_nt3v17Ev();
extern void _ZN9S119C5_nt3v18Ev();
extern void _ZN9S119C5_nt3v19Ev();
extern void _ZN9S119C4_nt3v20Ev();
extern void _ZN9S119C4_nt3v21Ev();
extern void _ZN9S119C4_nt3v22Ev();
extern void _ZN9S119C4_nt3v23Ev();
extern void _ZN6S119C33v24Ev();
extern void _ZN6S119C33v25Ev();
extern void _ZN6S119C33v26Ev();
extern void _ZN6S119C33v27Ev();
extern void _ZN6S119C33v28Ev();
extern void _ZN6S119C33v29Ev();
extern void _ZN6S119C33v30Ev();
extern void _ZN6S119C33v31Ev();
extern void _ZN6S119C33v32Ev();
extern void _ZN6S119C33v33Ev();
extern void _ZN6S119C33v34Ev();
extern void _ZN6S119C33v35Ev();
extern void _ZN6S119C33v36Ev();
extern void _ZN6S119C23v37Ev();
extern void _ZN6S119C23v38Ev();
extern void _ZN6S119C23v39Ev();
extern void _ZN6S119C23v40Ev();
extern void _ZN6S119C23v41Ev();
extern void _ZN6S119C23v42Ev();
static  VTBL_ENTRY vtc_S119C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S119C2[0]),
  (VTBL_ENTRY)&_ZN6S119C2D1Ev,
  (VTBL_ENTRY)&_ZN6S119C2D0Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN6S119C33v24Ev,
  (VTBL_ENTRY)&_ZN6S119C33v25Ev,
  (VTBL_ENTRY)&_ZN6S119C33v26Ev,
  (VTBL_ENTRY)&_ZN6S119C33v27Ev,
  (VTBL_ENTRY)&_ZN6S119C33v28Ev,
  (VTBL_ENTRY)&_ZN6S119C33v29Ev,
  (VTBL_ENTRY)&_ZN6S119C33v30Ev,
  (VTBL_ENTRY)&_ZN6S119C33v31Ev,
  (VTBL_ENTRY)&_ZN6S119C33v32Ev,
  (VTBL_ENTRY)&_ZN6S119C33v33Ev,
  (VTBL_ENTRY)&_ZN6S119C33v34Ev,
  (VTBL_ENTRY)&_ZN6S119C33v35Ev,
  (VTBL_ENTRY)&_ZN6S119C33v36Ev,
  (VTBL_ENTRY)&_ZN6S119C23v37Ev,
  (VTBL_ENTRY)&_ZN6S119C23v38Ev,
  (VTBL_ENTRY)&_ZN6S119C23v39Ev,
  (VTBL_ENTRY)&_ZN6S119C23v40Ev,
  (VTBL_ENTRY)&_ZN6S119C23v41Ev,
  (VTBL_ENTRY)&_ZN6S119C23v42Ev,
};
extern VTBL_ENTRY _ZTI6S119C2[];
extern  VTBL_ENTRY _ZTV6S119C2[];
Class_Descriptor cd_S119C2 = {  "S119C2", // class name
  bases_S119C2, 5,
  &(vtc_S119C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,184), // object size
  NSPAIRA(_ZTI6S119C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S119C2),43, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S119C1  : S119C2 {
  virtual void  v1(); // _ZN6S119C12v1Ev
  virtual void  v2(); // _ZN6S119C12v2Ev
  virtual void  v3(); // _ZN6S119C12v3Ev
  ~S119C1(); // tgen
  S119C1(); // tgen
};
//SIG(1 S119C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd m Fi} v4 v5 v6 v7 v8} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] FC8{ m FC9{ m Fp Fi[2] FC10{ m}} Fp[2]}} v20 v21 v22 v23 FC8 FC11{ m Fp} Fp} v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 FC12{ m FC13{ m Fp Fi FC14{ m}} Fi} FC11 FC15{ m Fi FL[2] Fc Fi FC13 FC13 FC16{ BC17{ m Fp Fi[2] FC11}}} Fp[5]} v37 v38 v39 v40 v41 v42} v1 v2 v3}


void  S119C1 ::v1(){vfunc_called(this, "_ZN6S119C12v1Ev");}
void  S119C1 ::v2(){vfunc_called(this, "_ZN6S119C12v2Ev");}
void  S119C1 ::v3(){vfunc_called(this, "_ZN6S119C12v3Ev");}
S119C1 ::~S119C1(){ note_dtor("S119C1", this);} // tgen
S119C1 ::S119C1(){ note_ctor("S119C1", this);} // tgen

static void Test_S119C1()
{
  extern Class_Descriptor cd_S119C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,47)];
    init_test(&cd_S119C1, buf);
    S119C1 *dp, &lv = *(dp=new (buf) S119C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,184), "sizeof(S119C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S119C1)");
    check_base_class_offset(lv, (S119C7_nt*)(S119C6_nt*)(S119C5_nt*)(S119C4_nt*)(S119C3*)(S119C2*), 0, "S119C1");
    check_base_class_offset(lv, (S119C6_nt*)(S119C5_nt*)(S119C4_nt*)(S119C3*)(S119C2*), 0, "S119C1");
    check_base_class_offset(lv, (S119C5_nt*)(S119C4_nt*)(S119C3*)(S119C2*), 0, "S119C1");
    check_base_class_offset(lv, (S119C4_nt*)(S119C3*)(S119C2*), 0, "S119C1");
    check_base_class_offset(lv, (S119C3*)(S119C2*), 0, "S119C1");
    check_base_class_offset(lv, (S119C2*), 0, "S119C1");
    test_class_info(&lv, &cd_S119C1);
    dp->~S119C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS119C1(Test_S119C1, "S119C1", ABISELECT(296,184));

#else // __cplusplus

extern void _ZN6S119C1C1Ev();
extern void _ZN6S119C1D1Ev();
Name_Map name_map_S119C1[] = {
  NSPAIR(_ZN6S119C1C1Ev),
  NSPAIR(_ZN6S119C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S119C6_nt;
extern VTBL_ENTRY _ZTI9S119C6_nt[];
extern  VTBL_ENTRY _ZTV9S119C6_nt[];
extern Class_Descriptor cd_S119C5_nt;
extern VTBL_ENTRY _ZTI9S119C5_nt[];
extern  VTBL_ENTRY _ZTV9S119C5_nt[];
extern Class_Descriptor cd_S119C4_nt;
extern VTBL_ENTRY _ZTI9S119C4_nt[];
extern  VTBL_ENTRY _ZTV9S119C4_nt[];
extern Class_Descriptor cd_S119C3;
extern VTBL_ENTRY _ZTI6S119C3[];
extern  VTBL_ENTRY _ZTV6S119C3[];
extern Class_Descriptor cd_S119C2;
extern VTBL_ENTRY _ZTI6S119C2[];
extern  VTBL_ENTRY _ZTV6S119C2[];
static Base_Class bases_S119C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S119C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S119C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S119C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S119C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S119C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S119C1[];
extern void _ZN6S119C1D1Ev();
extern void _ZN6S119C1D0Ev();
extern void _ZN9S119C6_nt2v4Ev();
extern void _ZN9S119C6_nt2v5Ev();
extern void _ZN9S119C6_nt2v6Ev();
extern void _ZN9S119C6_nt2v7Ev();
extern void _ZN9S119C6_nt2v8Ev();
extern void _ZN9S119C5_nt2v9Ev();
extern void _ZN9S119C5_nt3v10Ev();
extern void _ZN9S119C5_nt3v11Ev();
extern void _ZN9S119C5_nt3v12Ev();
extern void _ZN9S119C5_nt3v13Ev();
extern void _ZN9S119C5_nt3v14Ev();
extern void _ZN9S119C5_nt3v15Ev();
extern void _ZN9S119C5_nt3v16Ev();
extern void _ZN9S119C5_nt3v17Ev();
extern void _ZN9S119C5_nt3v18Ev();
extern void _ZN9S119C5_nt3v19Ev();
extern void _ZN9S119C4_nt3v20Ev();
extern void _ZN9S119C4_nt3v21Ev();
extern void _ZN9S119C4_nt3v22Ev();
extern void _ZN9S119C4_nt3v23Ev();
extern void _ZN6S119C33v24Ev();
extern void _ZN6S119C33v25Ev();
extern void _ZN6S119C33v26Ev();
extern void _ZN6S119C33v27Ev();
extern void _ZN6S119C33v28Ev();
extern void _ZN6S119C33v29Ev();
extern void _ZN6S119C33v30Ev();
extern void _ZN6S119C33v31Ev();
extern void _ZN6S119C33v32Ev();
extern void _ZN6S119C33v33Ev();
extern void _ZN6S119C33v34Ev();
extern void _ZN6S119C33v35Ev();
extern void _ZN6S119C33v36Ev();
extern void _ZN6S119C23v37Ev();
extern void _ZN6S119C23v38Ev();
extern void _ZN6S119C23v39Ev();
extern void _ZN6S119C23v40Ev();
extern void _ZN6S119C23v41Ev();
extern void _ZN6S119C23v42Ev();
extern void _ZN6S119C12v1Ev();
extern void _ZN6S119C12v2Ev();
extern void _ZN6S119C12v3Ev();
static  VTBL_ENTRY vtc_S119C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S119C1[0]),
  (VTBL_ENTRY)&_ZN6S119C1D1Ev,
  (VTBL_ENTRY)&_ZN6S119C1D0Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S119C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S119C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S119C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN6S119C33v24Ev,
  (VTBL_ENTRY)&_ZN6S119C33v25Ev,
  (VTBL_ENTRY)&_ZN6S119C33v26Ev,
  (VTBL_ENTRY)&_ZN6S119C33v27Ev,
  (VTBL_ENTRY)&_ZN6S119C33v28Ev,
  (VTBL_ENTRY)&_ZN6S119C33v29Ev,
  (VTBL_ENTRY)&_ZN6S119C33v30Ev,
  (VTBL_ENTRY)&_ZN6S119C33v31Ev,
  (VTBL_ENTRY)&_ZN6S119C33v32Ev,
  (VTBL_ENTRY)&_ZN6S119C33v33Ev,
  (VTBL_ENTRY)&_ZN6S119C33v34Ev,
  (VTBL_ENTRY)&_ZN6S119C33v35Ev,
  (VTBL_ENTRY)&_ZN6S119C33v36Ev,
  (VTBL_ENTRY)&_ZN6S119C23v37Ev,
  (VTBL_ENTRY)&_ZN6S119C23v38Ev,
  (VTBL_ENTRY)&_ZN6S119C23v39Ev,
  (VTBL_ENTRY)&_ZN6S119C23v40Ev,
  (VTBL_ENTRY)&_ZN6S119C23v41Ev,
  (VTBL_ENTRY)&_ZN6S119C23v42Ev,
  (VTBL_ENTRY)&_ZN6S119C12v1Ev,
  (VTBL_ENTRY)&_ZN6S119C12v2Ev,
  (VTBL_ENTRY)&_ZN6S119C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S119C1[];
extern  VTBL_ENTRY _ZTV6S119C1[];
Class_Descriptor cd_S119C1 = {  "S119C1", // class name
  bases_S119C1, 6,
  &(vtc_S119C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,184), // object size
  NSPAIRA(_ZTI6S119C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S119C1),46, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5134C3  {
  char s5134c3f0;
  void *s5134c3f1;
  ::S21926C3_nt s5134c3f2;
  virtual  ~S5134C3(); // _ZN7S5134C3D1Ev
  virtual void  v4(); // _ZN7S5134C32v4Ev
  virtual void  v5(); // _ZN7S5134C32v5Ev
  virtual void  v6(); // _ZN7S5134C32v6Ev
  virtual void  v7(); // _ZN7S5134C32v7Ev
  S5134C3(); // tgen
};
//SIG(-1 S5134C3) C1{ vd v1 v2 v3 v4 Fc Fp FC2{ FL[4]}}


 S5134C3 ::~S5134C3(){ note_dtor("S5134C3", this);}
void  S5134C3 ::v4(){vfunc_called(this, "_ZN7S5134C32v4Ev");}
void  S5134C3 ::v5(){vfunc_called(this, "_ZN7S5134C32v5Ev");}
void  S5134C3 ::v6(){vfunc_called(this, "_ZN7S5134C32v6Ev");}
void  S5134C3 ::v7(){vfunc_called(this, "_ZN7S5134C32v7Ev");}
S5134C3 ::S5134C3(){ note_ctor("S5134C3", this);} // tgen

static void Test_S5134C3()
{
  extern Class_Descriptor cd_S5134C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S5134C3, buf);
    S5134C3 *dp, &lv = *(dp=new (buf) S5134C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S5134C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5134C3)");
    check_field_offset(lv, s5134c3f0, ABISELECT(8,4), "S5134C3.s5134c3f0");
    check_field_offset(lv, s5134c3f1, ABISELECT(16,8), "S5134C3.s5134c3f1");
    check_field_offset(lv, s5134c3f2, ABISELECT(24,12), "S5134C3.s5134c3f2");
    test_class_info(&lv, &cd_S5134C3);
    dp->~S5134C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5134C3(Test_S5134C3, "S5134C3", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S5134C3C1Ev();
extern void _ZN7S5134C3D1Ev();
Name_Map name_map_S5134C3[] = {
  NSPAIR(_ZN7S5134C3C1Ev),
  NSPAIR(_ZN7S5134C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5134C3[];
extern void _ZN7S5134C3D1Ev();
extern void _ZN7S5134C3D0Ev();
extern void _ZN7S5134C32v4Ev();
extern void _ZN7S5134C32v5Ev();
extern void _ZN7S5134C32v6Ev();
extern void _ZN7S5134C32v7Ev();
static  VTBL_ENTRY vtc_S5134C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5134C3[0]),
  (VTBL_ENTRY)&_ZN7S5134C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5134C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5134C3[];
extern  VTBL_ENTRY _ZTV7S5134C3[];
Class_Descriptor cd_S5134C3 = {  "S5134C3", // class name
  0,0,//no base classes
  &(vtc_S5134C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S5134C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5134C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5134C2  : S5134C3 {
  int s5134c2f0[3];
  void *s5134c2f1;
  ::S119C9_nt s5134c2f2;
  virtual  ~S5134C2(); // _ZN7S5134C2D1Ev
  virtual void  v8(); // _ZN7S5134C22v8Ev
  virtual void  v9(); // _ZN7S5134C22v9Ev
  virtual void  v10(); // _ZN7S5134C23v10Ev
  virtual void  v11(); // _ZN7S5134C23v11Ev
  S5134C2(); // tgen
};
//SIG(-1 S5134C2) C1{ BC2{ vd v5 v6 v7 v8 Fc Fp FC3{ FL[4]}} vd v1 v2 v3 v4 Fi[3] Fp FC4{ m Fp Fi[2] FC5{ m}}}


 S5134C2 ::~S5134C2(){ note_dtor("S5134C2", this);}
void  S5134C2 ::v8(){vfunc_called(this, "_ZN7S5134C22v8Ev");}
void  S5134C2 ::v9(){vfunc_called(this, "_ZN7S5134C22v9Ev");}
void  S5134C2 ::v10(){vfunc_called(this, "_ZN7S5134C23v10Ev");}
void  S5134C2 ::v11(){vfunc_called(this, "_ZN7S5134C23v11Ev");}
S5134C2 ::S5134C2(){ note_ctor("S5134C2", this);} // tgen

static void Test_S5134C2()
{
  extern Class_Descriptor cd_S5134C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,20)];
    init_test(&cd_S5134C2, buf);
    S5134C2 *dp, &lv = *(dp=new (buf) S5134C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,76), "sizeof(S5134C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5134C2)");
    check_base_class_offset(lv, (S5134C3*), 0, "S5134C2");
    check_field_offset(lv, s5134c2f0, ABISELECT(56,44), "S5134C2.s5134c2f0");
    check_field_offset(lv, s5134c2f1, ABISELECT(72,56), "S5134C2.s5134c2f1");
    check_field_offset(lv, s5134c2f2, ABISELECT(80,60), "S5134C2.s5134c2f2");
    test_class_info(&lv, &cd_S5134C2);
    dp->~S5134C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5134C2(Test_S5134C2, "S5134C2", ABISELECT(104,76));

#else // __cplusplus

extern void _ZN7S5134C2C1Ev();
extern void _ZN7S5134C2D1Ev();
Name_Map name_map_S5134C2[] = {
  NSPAIR(_ZN7S5134C2C1Ev),
  NSPAIR(_ZN7S5134C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5134C3;
extern VTBL_ENTRY _ZTI7S5134C3[];
extern  VTBL_ENTRY _ZTV7S5134C3[];
static Base_Class bases_S5134C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5134C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5134C2[];
extern void _ZN7S5134C2D1Ev();
extern void _ZN7S5134C2D0Ev();
extern void _ZN7S5134C32v4Ev();
extern void _ZN7S5134C32v5Ev();
extern void _ZN7S5134C32v6Ev();
extern void _ZN7S5134C32v7Ev();
extern void _ZN7S5134C22v8Ev();
extern void _ZN7S5134C22v9Ev();
extern void _ZN7S5134C23v10Ev();
extern void _ZN7S5134C23v11Ev();
static  VTBL_ENTRY vtc_S5134C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5134C2[0]),
  (VTBL_ENTRY)&_ZN7S5134C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5134C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5134C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5134C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5134C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5134C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S5134C2[];
extern  VTBL_ENTRY _ZTV7S5134C2[];
Class_Descriptor cd_S5134C2 = {  "S5134C2", // class name
  bases_S5134C2, 1,
  &(vtc_S5134C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,76), // object size
  NSPAIRA(_ZTI7S5134C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5134C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5134C7  {
  int s5134c7f0;
  ::S21927C31 s5134c7f1;
  ::S119C13_nt s5134c7f2;
  int s5134c7f3;
  char s5134c7f4;
  void  mf5134c7(); // _ZN7S5134C78mf5134c7Ev
  virtual  ~S5134C7(); // _ZN7S5134C7D1Ev
  S5134C7(); // tgen
};
//SIG(-1 S5134C7) C1{ vd m Fi FC2{ vd m Fc Fp Fi[4] Fc[2] FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC4 Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FL[4]} FC11{ m Fp FC12{ Fi[4]}} FC10} FC13{ m Fp Fi FC8} Fi Fc}


void  S5134C7 ::mf5134c7(){}
 S5134C7 ::~S5134C7(){ note_dtor("S5134C7", this);}
S5134C7 ::S5134C7(){ note_ctor("S5134C7", this);} // tgen

static void Test_S5134C7()
{
  extern Class_Descriptor cd_S5134C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,52)];
    init_test(&cd_S5134C7, buf);
    S5134C7 *dp, &lv = *(dp=new (buf) S5134C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,204), "sizeof(S5134C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5134C7)");
    check_field_offset(lv, s5134c7f0, ABISELECT(8,4), "S5134C7.s5134c7f0");
    check_field_offset(lv, s5134c7f1, ABISELECT(16,8), "S5134C7.s5134c7f1");
    check_field_offset(lv, s5134c7f2, ABISELECT(240,184), "S5134C7.s5134c7f2");
    check_field_offset(lv, s5134c7f3, ABISELECT(256,196), "S5134C7.s5134c7f3");
    check_field_offset(lv, s5134c7f4, ABISELECT(260,200), "S5134C7.s5134c7f4");
    test_class_info(&lv, &cd_S5134C7);
    dp->~S5134C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5134C7(Test_S5134C7, "S5134C7", ABISELECT(264,204));

#else // __cplusplus

extern void _ZN7S5134C7C1Ev();
extern void _ZN7S5134C7D1Ev();
Name_Map name_map_S5134C7[] = {
  NSPAIR(_ZN7S5134C7C1Ev),
  NSPAIR(_ZN7S5134C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5134C7[];
extern void _ZN7S5134C7D1Ev();
extern void _ZN7S5134C7D0Ev();
static  VTBL_ENTRY vtc_S5134C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5134C7[0]),
  (VTBL_ENTRY)&_ZN7S5134C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5134C7D0Ev,
};
extern VTBL_ENTRY _ZTI7S5134C7[];
extern  VTBL_ENTRY _ZTV7S5134C7[];
Class_Descriptor cd_S5134C7 = {  "S5134C7", // class name
  0,0,//no base classes
  &(vtc_S5134C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,204), // object size
  NSPAIRA(_ZTI7S5134C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5134C7),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5134C1  : S5134C2 {
  void *s5134c1f0[5];
  ::S5134C7 s5134c1f1;
  int s5134c1f2;
  ::S21927C2_nt s5134c1f3;
  virtual  ~S5134C1(); // _ZN7S5134C1D1Ev
  virtual void  v1(); // _ZN7S5134C12v1Ev
  virtual void  v2(); // _ZN7S5134C12v2Ev
  virtual void  v3(); // _ZN7S5134C12v3Ev
  S5134C1(); // tgen
};
//SIG(1 S5134C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 Fc Fp FC4{ FL[4]}} vd v8 v9 v10 v11 Fi[3] Fp FC5{ m Fp Fi[2] FC6{ m}}} vd v1 v2 v3 Fp[5] FC7{ vd m Fi FC8{ vd m Fc Fp Fi[4] Fc[2] FC9{ BC10{ m Fp Fi FC6 FC6}} FC11{ BC12{ m Fp Fi FC13{ m} FC13}} FC10 Fp Fc[2] Fi[2] FC14{ m Fp[2]} FC15{ m FL[4]} FC16{ m Fp FC17{ Fi[4]}} FC15} FC18{ m Fp Fi FC13} Fi Fc} Fi FC15}


 S5134C1 ::~S5134C1(){ note_dtor("S5134C1", this);}
void  S5134C1 ::v1(){vfunc_called(this, "_ZN7S5134C12v1Ev");}
void  S5134C1 ::v2(){vfunc_called(this, "_ZN7S5134C12v2Ev");}
void  S5134C1 ::v3(){vfunc_called(this, "_ZN7S5134C12v3Ev");}
S5134C1 ::S5134C1(){ note_ctor("S5134C1", this);} // tgen

static void Test_S5134C1()
{
  extern Class_Descriptor cd_S5134C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,85)];
    init_test(&cd_S5134C1, buf);
    S5134C1 *dp, &lv = *(dp=new (buf) S5134C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,336), "sizeof(S5134C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5134C1)");
    check_base_class_offset(lv, (S5134C3*)(S5134C2*), 0, "S5134C1");
    check_base_class_offset(lv, (S5134C2*), 0, "S5134C1");
    check_field_offset(lv, s5134c1f0, ABISELECT(104,76), "S5134C1.s5134c1f0");
    check_field_offset(lv, s5134c1f1, ABISELECT(144,96), "S5134C1.s5134c1f1");
    check_field_offset(lv, s5134c1f2, ABISELECT(408,300), "S5134C1.s5134c1f2");
    check_field_offset(lv, s5134c1f3, ABISELECT(416,304), "S5134C1.s5134c1f3");
    test_class_info(&lv, &cd_S5134C1);
    dp->~S5134C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5134C1(Test_S5134C1, "S5134C1", ABISELECT(448,336));

#else // __cplusplus

extern void _ZN7S5134C1C1Ev();
extern void _ZN7S5134C1D1Ev();
Name_Map name_map_S5134C1[] = {
  NSPAIR(_ZN7S5134C1C1Ev),
  NSPAIR(_ZN7S5134C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5134C3;
extern VTBL_ENTRY _ZTI7S5134C3[];
extern  VTBL_ENTRY _ZTV7S5134C3[];
extern Class_Descriptor cd_S5134C2;
extern VTBL_ENTRY _ZTI7S5134C2[];
extern  VTBL_ENTRY _ZTV7S5134C2[];
static Base_Class bases_S5134C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5134C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5134C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5134C1[];
extern void _ZN7S5134C1D1Ev();
extern void _ZN7S5134C1D0Ev();
extern void _ZN7S5134C32v4Ev();
extern void _ZN7S5134C32v5Ev();
extern void _ZN7S5134C32v6Ev();
extern void _ZN7S5134C32v7Ev();
extern void _ZN7S5134C22v8Ev();
extern void _ZN7S5134C22v9Ev();
extern void _ZN7S5134C23v10Ev();
extern void _ZN7S5134C23v11Ev();
extern void _ZN7S5134C12v1Ev();
extern void _ZN7S5134C12v2Ev();
extern void _ZN7S5134C12v3Ev();
static  VTBL_ENTRY vtc_S5134C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5134C1[0]),
  (VTBL_ENTRY)&_ZN7S5134C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5134C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5134C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5134C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5134C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5134C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5134C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5134C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5134C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5134C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5134C1[];
extern  VTBL_ENTRY _ZTV7S5134C1[];
Class_Descriptor cd_S5134C1 = {  "S5134C1", // class name
  bases_S5134C1, 2,
  &(vtc_S5134C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,336), // object size
  NSPAIRA(_ZTI7S5134C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5134C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5133C3  {
  char s5133c3f0;
  void *s5133c3f1;
  ::S21926C3_nt s5133c3f2;
  virtual  ~S5133C3(); // _ZN7S5133C3D1Ev
  virtual void  v4(); // _ZN7S5133C32v4Ev
  virtual void  v5(); // _ZN7S5133C32v5Ev
  virtual void  v6(); // _ZN7S5133C32v6Ev
  virtual void  v7(); // _ZN7S5133C32v7Ev
  S5133C3(); // tgen
};
//SIG(-1 S5133C3) C1{ vd v1 v2 v3 v4 Fc Fp FC2{ FL[4]}}


 S5133C3 ::~S5133C3(){ note_dtor("S5133C3", this);}
void  S5133C3 ::v4(){vfunc_called(this, "_ZN7S5133C32v4Ev");}
void  S5133C3 ::v5(){vfunc_called(this, "_ZN7S5133C32v5Ev");}
void  S5133C3 ::v6(){vfunc_called(this, "_ZN7S5133C32v6Ev");}
void  S5133C3 ::v7(){vfunc_called(this, "_ZN7S5133C32v7Ev");}
S5133C3 ::S5133C3(){ note_ctor("S5133C3", this);} // tgen

static void Test_S5133C3()
{
  extern Class_Descriptor cd_S5133C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S5133C3, buf);
    S5133C3 *dp, &lv = *(dp=new (buf) S5133C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S5133C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5133C3)");
    check_field_offset(lv, s5133c3f0, ABISELECT(8,4), "S5133C3.s5133c3f0");
    check_field_offset(lv, s5133c3f1, ABISELECT(16,8), "S5133C3.s5133c3f1");
    check_field_offset(lv, s5133c3f2, ABISELECT(24,12), "S5133C3.s5133c3f2");
    test_class_info(&lv, &cd_S5133C3);
    dp->~S5133C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5133C3(Test_S5133C3, "S5133C3", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S5133C3C1Ev();
extern void _ZN7S5133C3D1Ev();
Name_Map name_map_S5133C3[] = {
  NSPAIR(_ZN7S5133C3C1Ev),
  NSPAIR(_ZN7S5133C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5133C3[];
extern void _ZN7S5133C3D1Ev();
extern void _ZN7S5133C3D0Ev();
extern void _ZN7S5133C32v4Ev();
extern void _ZN7S5133C32v5Ev();
extern void _ZN7S5133C32v6Ev();
extern void _ZN7S5133C32v7Ev();
static  VTBL_ENTRY vtc_S5133C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5133C3[0]),
  (VTBL_ENTRY)&_ZN7S5133C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5133C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5133C3[];
extern  VTBL_ENTRY _ZTV7S5133C3[];
Class_Descriptor cd_S5133C3 = {  "S5133C3", // class name
  0,0,//no base classes
  &(vtc_S5133C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S5133C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5133C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5133C2  : S5133C3 {
  int s5133c2f0[3];
  void *s5133c2f1;
  ::S119C9_nt s5133c2f2;
  virtual  ~S5133C2(); // _ZN7S5133C2D1Ev
  virtual void  v8(); // _ZN7S5133C22v8Ev
  virtual void  v9(); // _ZN7S5133C22v9Ev
  virtual void  v10(); // _ZN7S5133C23v10Ev
  virtual void  v11(); // _ZN7S5133C23v11Ev
  S5133C2(); // tgen
};
//SIG(-1 S5133C2) C1{ BC2{ vd v5 v6 v7 v8 Fc Fp FC3{ FL[4]}} vd v1 v2 v3 v4 Fi[3] Fp FC4{ m Fp Fi[2] FC5{ m}}}


 S5133C2 ::~S5133C2(){ note_dtor("S5133C2", this);}
void  S5133C2 ::v8(){vfunc_called(this, "_ZN7S5133C22v8Ev");}
void  S5133C2 ::v9(){vfunc_called(this, "_ZN7S5133C22v9Ev");}
void  S5133C2 ::v10(){vfunc_called(this, "_ZN7S5133C23v10Ev");}
void  S5133C2 ::v11(){vfunc_called(this, "_ZN7S5133C23v11Ev");}
S5133C2 ::S5133C2(){ note_ctor("S5133C2", this);} // tgen

static void Test_S5133C2()
{
  extern Class_Descriptor cd_S5133C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,20)];
    init_test(&cd_S5133C2, buf);
    S5133C2 *dp, &lv = *(dp=new (buf) S5133C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,76), "sizeof(S5133C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5133C2)");
    check_base_class_offset(lv, (S5133C3*), 0, "S5133C2");
    check_field_offset(lv, s5133c2f0, ABISELECT(56,44), "S5133C2.s5133c2f0");
    check_field_offset(lv, s5133c2f1, ABISELECT(72,56), "S5133C2.s5133c2f1");
    check_field_offset(lv, s5133c2f2, ABISELECT(80,60), "S5133C2.s5133c2f2");
    test_class_info(&lv, &cd_S5133C2);
    dp->~S5133C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5133C2(Test_S5133C2, "S5133C2", ABISELECT(104,76));

#else // __cplusplus

extern void _ZN7S5133C2C1Ev();
extern void _ZN7S5133C2D1Ev();
Name_Map name_map_S5133C2[] = {
  NSPAIR(_ZN7S5133C2C1Ev),
  NSPAIR(_ZN7S5133C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5133C3;
extern VTBL_ENTRY _ZTI7S5133C3[];
extern  VTBL_ENTRY _ZTV7S5133C3[];
static Base_Class bases_S5133C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5133C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5133C2[];
extern void _ZN7S5133C2D1Ev();
extern void _ZN7S5133C2D0Ev();
extern void _ZN7S5133C32v4Ev();
extern void _ZN7S5133C32v5Ev();
extern void _ZN7S5133C32v6Ev();
extern void _ZN7S5133C32v7Ev();
extern void _ZN7S5133C22v8Ev();
extern void _ZN7S5133C22v9Ev();
extern void _ZN7S5133C23v10Ev();
extern void _ZN7S5133C23v11Ev();
static  VTBL_ENTRY vtc_S5133C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5133C2[0]),
  (VTBL_ENTRY)&_ZN7S5133C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5133C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5133C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5133C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5133C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5133C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S5133C2[];
extern  VTBL_ENTRY _ZTV7S5133C2[];
Class_Descriptor cd_S5133C2 = {  "S5133C2", // class name
  bases_S5133C2, 1,
  &(vtc_S5133C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,76), // object size
  NSPAIRA(_ZTI7S5133C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5133C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5133C7  {
  int s5133c7f0;
  ::S21926C32 s5133c7f1;
  ::S119C13_nt s5133c7f2;
  int s5133c7f3;
  char s5133c7f4;
  void  mf5133c7(); // _ZN7S5133C78mf5133c7Ev
  virtual  ~S5133C7(); // _ZN7S5133C7D1Ev
  S5133C7(); // tgen
};
//SIG(-1 S5133C7) C1{ vd m Fi FC2{ vd m Fc Fp Fi[4] Fc[2] FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC4 Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FC11{ FL[4]}} FC12{ m Fp FC13{ Fi[4]}} FC10} FC14{ m Fp Fi FC5} Fi Fc}


void  S5133C7 ::mf5133c7(){}
 S5133C7 ::~S5133C7(){ note_dtor("S5133C7", this);}
S5133C7 ::S5133C7(){ note_ctor("S5133C7", this);} // tgen

static void Test_S5133C7()
{
  extern Class_Descriptor cd_S5133C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,52)];
    init_test(&cd_S5133C7, buf);
    S5133C7 *dp, &lv = *(dp=new (buf) S5133C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,204), "sizeof(S5133C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5133C7)");
    check_field_offset(lv, s5133c7f0, ABISELECT(8,4), "S5133C7.s5133c7f0");
    check_field_offset(lv, s5133c7f1, ABISELECT(16,8), "S5133C7.s5133c7f1");
    check_field_offset(lv, s5133c7f2, ABISELECT(240,184), "S5133C7.s5133c7f2");
    check_field_offset(lv, s5133c7f3, ABISELECT(256,196), "S5133C7.s5133c7f3");
    check_field_offset(lv, s5133c7f4, ABISELECT(260,200), "S5133C7.s5133c7f4");
    test_class_info(&lv, &cd_S5133C7);
    dp->~S5133C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5133C7(Test_S5133C7, "S5133C7", ABISELECT(264,204));

#else // __cplusplus

extern void _ZN7S5133C7C1Ev();
extern void _ZN7S5133C7D1Ev();
Name_Map name_map_S5133C7[] = {
  NSPAIR(_ZN7S5133C7C1Ev),
  NSPAIR(_ZN7S5133C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5133C7[];
extern void _ZN7S5133C7D1Ev();
extern void _ZN7S5133C7D0Ev();
static  VTBL_ENTRY vtc_S5133C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5133C7[0]),
  (VTBL_ENTRY)&_ZN7S5133C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5133C7D0Ev,
};
extern VTBL_ENTRY _ZTI7S5133C7[];
extern  VTBL_ENTRY _ZTV7S5133C7[];
Class_Descriptor cd_S5133C7 = {  "S5133C7", // class name
  0,0,//no base classes
  &(vtc_S5133C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,204), // object size
  NSPAIRA(_ZTI7S5133C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5133C7),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5133C1  : S5133C2 {
  void *s5133c1f0[5];
  ::S5133C7 s5133c1f1;
  int s5133c1f2;
  ::S21926C2_nt s5133c1f3;
  virtual  ~S5133C1(); // _ZN7S5133C1D1Ev
  virtual void  v1(); // _ZN7S5133C12v1Ev
  virtual void  v2(); // _ZN7S5133C12v2Ev
  virtual void  v3(); // _ZN7S5133C12v3Ev
  S5133C1(); // tgen
};
//SIG(1 S5133C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 Fc Fp FC4{ FL[4]}} vd v8 v9 v10 v11 Fi[3] Fp FC5{ m Fp Fi[2] FC6{ m}}} vd v1 v2 v3 Fp[5] FC7{ vd m Fi FC8{ vd m Fc Fp Fi[4] Fc[2] FC9{ BC10{ m Fp Fi FC11{ m} FC11}} FC12{ BC13{ m Fp Fi FC6 FC6}} FC10 Fp Fc[2] Fi[2] FC14{ m Fp[2]} FC15{ m FC4} FC16{ m Fp FC17{ Fi[4]}} FC15} FC18{ m Fp Fi FC11} Fi Fc} Fi FC15}


 S5133C1 ::~S5133C1(){ note_dtor("S5133C1", this);}
void  S5133C1 ::v1(){vfunc_called(this, "_ZN7S5133C12v1Ev");}
void  S5133C1 ::v2(){vfunc_called(this, "_ZN7S5133C12v2Ev");}
void  S5133C1 ::v3(){vfunc_called(this, "_ZN7S5133C12v3Ev");}
S5133C1 ::S5133C1(){ note_ctor("S5133C1", this);} // tgen

static void Test_S5133C1()
{
  extern Class_Descriptor cd_S5133C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,85)];
    init_test(&cd_S5133C1, buf);
    S5133C1 *dp, &lv = *(dp=new (buf) S5133C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,336), "sizeof(S5133C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5133C1)");
    check_base_class_offset(lv, (S5133C3*)(S5133C2*), 0, "S5133C1");
    check_base_class_offset(lv, (S5133C2*), 0, "S5133C1");
    check_field_offset(lv, s5133c1f0, ABISELECT(104,76), "S5133C1.s5133c1f0");
    check_field_offset(lv, s5133c1f1, ABISELECT(144,96), "S5133C1.s5133c1f1");
    check_field_offset(lv, s5133c1f2, ABISELECT(408,300), "S5133C1.s5133c1f2");
    check_field_offset(lv, s5133c1f3, ABISELECT(416,304), "S5133C1.s5133c1f3");
    test_class_info(&lv, &cd_S5133C1);
    dp->~S5133C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5133C1(Test_S5133C1, "S5133C1", ABISELECT(448,336));

#else // __cplusplus

extern void _ZN7S5133C1C1Ev();
extern void _ZN7S5133C1D1Ev();
Name_Map name_map_S5133C1[] = {
  NSPAIR(_ZN7S5133C1C1Ev),
  NSPAIR(_ZN7S5133C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5133C3;
extern VTBL_ENTRY _ZTI7S5133C3[];
extern  VTBL_ENTRY _ZTV7S5133C3[];
extern Class_Descriptor cd_S5133C2;
extern VTBL_ENTRY _ZTI7S5133C2[];
extern  VTBL_ENTRY _ZTV7S5133C2[];
static Base_Class bases_S5133C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5133C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5133C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5133C1[];
extern void _ZN7S5133C1D1Ev();
extern void _ZN7S5133C1D0Ev();
extern void _ZN7S5133C32v4Ev();
extern void _ZN7S5133C32v5Ev();
extern void _ZN7S5133C32v6Ev();
extern void _ZN7S5133C32v7Ev();
extern void _ZN7S5133C22v8Ev();
extern void _ZN7S5133C22v9Ev();
extern void _ZN7S5133C23v10Ev();
extern void _ZN7S5133C23v11Ev();
extern void _ZN7S5133C12v1Ev();
extern void _ZN7S5133C12v2Ev();
extern void _ZN7S5133C12v3Ev();
static  VTBL_ENTRY vtc_S5133C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5133C1[0]),
  (VTBL_ENTRY)&_ZN7S5133C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5133C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5133C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5133C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5133C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5133C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5133C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5133C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5133C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5133C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5133C1[];
extern  VTBL_ENTRY _ZTV7S5133C1[];
Class_Descriptor cd_S5133C1 = {  "S5133C1", // class name
  bases_S5133C1, 2,
  &(vtc_S5133C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,336), // object size
  NSPAIRA(_ZTI7S5133C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5133C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5132C3  {
  char s5132c3f0;
  void *s5132c3f1;
  ::S21925C3_nt s5132c3f2;
  virtual  ~S5132C3(); // _ZN7S5132C3D1Ev
  virtual void  v4(); // _ZN7S5132C32v4Ev
  virtual void  v5(); // _ZN7S5132C32v5Ev
  virtual void  v6(); // _ZN7S5132C32v6Ev
  virtual void  v7(); // _ZN7S5132C32v7Ev
  S5132C3(); // tgen
};
//SIG(-1 S5132C3) C1{ vd v1 v2 v3 v4 Fc Fp FC2{ Fl[4]}}


 S5132C3 ::~S5132C3(){ note_dtor("S5132C3", this);}
void  S5132C3 ::v4(){vfunc_called(this, "_ZN7S5132C32v4Ev");}
void  S5132C3 ::v5(){vfunc_called(this, "_ZN7S5132C32v5Ev");}
void  S5132C3 ::v6(){vfunc_called(this, "_ZN7S5132C32v6Ev");}
void  S5132C3 ::v7(){vfunc_called(this, "_ZN7S5132C32v7Ev");}
S5132C3 ::S5132C3(){ note_ctor("S5132C3", this);} // tgen

static void Test_S5132C3()
{
  extern Class_Descriptor cd_S5132C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S5132C3, buf);
    S5132C3 *dp, &lv = *(dp=new (buf) S5132C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S5132C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5132C3)");
    check_field_offset(lv, s5132c3f0, ABISELECT(8,4), "S5132C3.s5132c3f0");
    check_field_offset(lv, s5132c3f1, ABISELECT(16,8), "S5132C3.s5132c3f1");
    check_field_offset(lv, s5132c3f2, ABISELECT(24,12), "S5132C3.s5132c3f2");
    test_class_info(&lv, &cd_S5132C3);
    dp->~S5132C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5132C3(Test_S5132C3, "S5132C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S5132C3C1Ev();
extern void _ZN7S5132C3D1Ev();
Name_Map name_map_S5132C3[] = {
  NSPAIR(_ZN7S5132C3C1Ev),
  NSPAIR(_ZN7S5132C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5132C3[];
extern void _ZN7S5132C3D1Ev();
extern void _ZN7S5132C3D0Ev();
extern void _ZN7S5132C32v4Ev();
extern void _ZN7S5132C32v5Ev();
extern void _ZN7S5132C32v6Ev();
extern void _ZN7S5132C32v7Ev();
static  VTBL_ENTRY vtc_S5132C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5132C3[0]),
  (VTBL_ENTRY)&_ZN7S5132C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5132C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5132C3[];
extern  VTBL_ENTRY _ZTV7S5132C3[];
Class_Descriptor cd_S5132C3 = {  "S5132C3", // class name
  0,0,//no base classes
  &(vtc_S5132C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S5132C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5132C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5132C2  : S5132C3 {
  int s5132c2f0[3];
  void *s5132c2f1;
  ::S119C9_nt s5132c2f2;
  virtual  ~S5132C2(); // _ZN7S5132C2D1Ev
  virtual void  v8(); // _ZN7S5132C22v8Ev
  virtual void  v9(); // _ZN7S5132C22v9Ev
  virtual void  v10(); // _ZN7S5132C23v10Ev
  virtual void  v11(); // _ZN7S5132C23v11Ev
  S5132C2(); // tgen
};
//SIG(-1 S5132C2) C1{ BC2{ vd v5 v6 v7 v8 Fc Fp FC3{ Fl[4]}} vd v1 v2 v3 v4 Fi[3] Fp FC4{ m Fp Fi[2] FC5{ m}}}


 S5132C2 ::~S5132C2(){ note_dtor("S5132C2", this);}
void  S5132C2 ::v8(){vfunc_called(this, "_ZN7S5132C22v8Ev");}
void  S5132C2 ::v9(){vfunc_called(this, "_ZN7S5132C22v9Ev");}
void  S5132C2 ::v10(){vfunc_called(this, "_ZN7S5132C23v10Ev");}
void  S5132C2 ::v11(){vfunc_called(this, "_ZN7S5132C23v11Ev");}
S5132C2 ::S5132C2(){ note_ctor("S5132C2", this);} // tgen

static void Test_S5132C2()
{
  extern Class_Descriptor cd_S5132C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,16)];
    init_test(&cd_S5132C2, buf);
    S5132C2 *dp, &lv = *(dp=new (buf) S5132C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S5132C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5132C2)");
    check_base_class_offset(lv, (S5132C3*), 0, "S5132C2");
    check_field_offset(lv, s5132c2f0, ABISELECT(56,28), "S5132C2.s5132c2f0");
    check_field_offset(lv, s5132c2f1, ABISELECT(72,40), "S5132C2.s5132c2f1");
    check_field_offset(lv, s5132c2f2, ABISELECT(80,44), "S5132C2.s5132c2f2");
    test_class_info(&lv, &cd_S5132C2);
    dp->~S5132C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5132C2(Test_S5132C2, "S5132C2", ABISELECT(104,60));

#else // __cplusplus

extern void _ZN7S5132C2C1Ev();
extern void _ZN7S5132C2D1Ev();
Name_Map name_map_S5132C2[] = {
  NSPAIR(_ZN7S5132C2C1Ev),
  NSPAIR(_ZN7S5132C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5132C3;
extern VTBL_ENTRY _ZTI7S5132C3[];
extern  VTBL_ENTRY _ZTV7S5132C3[];
static Base_Class bases_S5132C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5132C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5132C2[];
extern void _ZN7S5132C2D1Ev();
extern void _ZN7S5132C2D0Ev();
extern void _ZN7S5132C32v4Ev();
extern void _ZN7S5132C32v5Ev();
extern void _ZN7S5132C32v6Ev();
extern void _ZN7S5132C32v7Ev();
extern void _ZN7S5132C22v8Ev();
extern void _ZN7S5132C22v9Ev();
extern void _ZN7S5132C23v10Ev();
extern void _ZN7S5132C23v11Ev();
static  VTBL_ENTRY vtc_S5132C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5132C2[0]),
  (VTBL_ENTRY)&_ZN7S5132C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5132C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5132C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5132C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5132C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5132C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S5132C2[];
extern  VTBL_ENTRY _ZTV7S5132C2[];
Class_Descriptor cd_S5132C2 = {  "S5132C2", // class name
  bases_S5132C2, 1,
  &(vtc_S5132C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,60), // object size
  NSPAIRA(_ZTI7S5132C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5132C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5132C7  {
  int s5132c7f0;
  ::S21925C32 s5132c7f1;
  ::S119C13_nt s5132c7f2;
  int s5132c7f3;
  char s5132c7f4;
  void  mf5132c7(); // _ZN7S5132C78mf5132c7Ev
  virtual  ~S5132C7(); // _ZN7S5132C7D1Ev
  S5132C7(); // tgen
};
//SIG(-1 S5132C7) C1{ vd m Fi FC2{ vd m Fc Fp Fi[4] Fc[2] FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC3 FC6{ m Fp Fi FC7{ m} FC7} Fp Fc[2] Fi[2] FC8{ m Fp[2]} FC9{ m FC10{ Fl[4]}} FC11{ m Fp FC12{ Fi[4]}} FC9} FC13{ m Fp Fi FC5} Fi Fc}


void  S5132C7 ::mf5132c7(){}
 S5132C7 ::~S5132C7(){ note_dtor("S5132C7", this);}
S5132C7 ::S5132C7(){ note_ctor("S5132C7", this);} // tgen

static void Test_S5132C7()
{
  extern Class_Descriptor cd_S5132C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,44)];
    init_test(&cd_S5132C7, buf);
    S5132C7 *dp, &lv = *(dp=new (buf) S5132C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,172), "sizeof(S5132C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5132C7)");
    check_field_offset(lv, s5132c7f0, ABISELECT(8,4), "S5132C7.s5132c7f0");
    check_field_offset(lv, s5132c7f1, ABISELECT(16,8), "S5132C7.s5132c7f1");
    check_field_offset(lv, s5132c7f2, ABISELECT(240,152), "S5132C7.s5132c7f2");
    check_field_offset(lv, s5132c7f3, ABISELECT(256,164), "S5132C7.s5132c7f3");
    check_field_offset(lv, s5132c7f4, ABISELECT(260,168), "S5132C7.s5132c7f4");
    test_class_info(&lv, &cd_S5132C7);
    dp->~S5132C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5132C7(Test_S5132C7, "S5132C7", ABISELECT(264,172));

#else // __cplusplus

extern void _ZN7S5132C7C1Ev();
extern void _ZN7S5132C7D1Ev();
Name_Map name_map_S5132C7[] = {
  NSPAIR(_ZN7S5132C7C1Ev),
  NSPAIR(_ZN7S5132C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5132C7[];
extern void _ZN7S5132C7D1Ev();
extern void _ZN7S5132C7D0Ev();
static  VTBL_ENTRY vtc_S5132C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5132C7[0]),
  (VTBL_ENTRY)&_ZN7S5132C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5132C7D0Ev,
};
extern VTBL_ENTRY _ZTI7S5132C7[];
extern  VTBL_ENTRY _ZTV7S5132C7[];
Class_Descriptor cd_S5132C7 = {  "S5132C7", // class name
  0,0,//no base classes
  &(vtc_S5132C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,172), // object size
  NSPAIRA(_ZTI7S5132C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5132C7),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5132C1  : S5132C2 {
  void *s5132c1f0[5];
  ::S5132C7 s5132c1f1;
  int s5132c1f2;
  ::S21925C2_nt s5132c1f3;
  virtual  ~S5132C1(); // _ZN7S5132C1D1Ev
  virtual void  v1(); // _ZN7S5132C12v1Ev
  virtual void  v2(); // _ZN7S5132C12v2Ev
  virtual void  v3(); // _ZN7S5132C12v3Ev
  S5132C1(); // tgen
};
//SIG(1 S5132C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 Fc Fp FC4{ Fl[4]}} vd v8 v9 v10 v11 Fi[3] Fp FC5{ m Fp Fi[2] FC6{ m}}} vd v1 v2 v3 Fp[5] FC7{ vd m Fi FC8{ vd m Fc Fp Fi[4] Fc[2] FC9{ BC10{ m Fp Fi FC11{ m} FC11}} FC9 FC12{ m Fp Fi FC6 FC6} Fp Fc[2] Fi[2] FC13{ m Fp[2]} FC14{ m FC4} FC15{ m Fp FC16{ Fi[4]}} FC14} FC17{ m Fp Fi FC11} Fi Fc} Fi FC14}


 S5132C1 ::~S5132C1(){ note_dtor("S5132C1", this);}
void  S5132C1 ::v1(){vfunc_called(this, "_ZN7S5132C12v1Ev");}
void  S5132C1 ::v2(){vfunc_called(this, "_ZN7S5132C12v2Ev");}
void  S5132C1 ::v3(){vfunc_called(this, "_ZN7S5132C12v3Ev");}
S5132C1 ::S5132C1(){ note_ctor("S5132C1", this);} // tgen

static void Test_S5132C1()
{
  extern Class_Descriptor cd_S5132C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,69)];
    init_test(&cd_S5132C1, buf);
    S5132C1 *dp, &lv = *(dp=new (buf) S5132C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,272), "sizeof(S5132C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5132C1)");
    check_base_class_offset(lv, (S5132C3*)(S5132C2*), 0, "S5132C1");
    check_base_class_offset(lv, (S5132C2*), 0, "S5132C1");
    check_field_offset(lv, s5132c1f0, ABISELECT(104,60), "S5132C1.s5132c1f0");
    check_field_offset(lv, s5132c1f1, ABISELECT(144,80), "S5132C1.s5132c1f1");
    check_field_offset(lv, s5132c1f2, ABISELECT(408,252), "S5132C1.s5132c1f2");
    check_field_offset(lv, s5132c1f3, ABISELECT(416,256), "S5132C1.s5132c1f3");
    test_class_info(&lv, &cd_S5132C1);
    dp->~S5132C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5132C1(Test_S5132C1, "S5132C1", ABISELECT(448,272));

#else // __cplusplus

extern void _ZN7S5132C1C1Ev();
extern void _ZN7S5132C1D1Ev();
Name_Map name_map_S5132C1[] = {
  NSPAIR(_ZN7S5132C1C1Ev),
  NSPAIR(_ZN7S5132C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5132C3;
extern VTBL_ENTRY _ZTI7S5132C3[];
extern  VTBL_ENTRY _ZTV7S5132C3[];
extern Class_Descriptor cd_S5132C2;
extern VTBL_ENTRY _ZTI7S5132C2[];
extern  VTBL_ENTRY _ZTV7S5132C2[];
static Base_Class bases_S5132C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5132C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5132C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5132C1[];
extern void _ZN7S5132C1D1Ev();
extern void _ZN7S5132C1D0Ev();
extern void _ZN7S5132C32v4Ev();
extern void _ZN7S5132C32v5Ev();
extern void _ZN7S5132C32v6Ev();
extern void _ZN7S5132C32v7Ev();
extern void _ZN7S5132C22v8Ev();
extern void _ZN7S5132C22v9Ev();
extern void _ZN7S5132C23v10Ev();
extern void _ZN7S5132C23v11Ev();
extern void _ZN7S5132C12v1Ev();
extern void _ZN7S5132C12v2Ev();
extern void _ZN7S5132C12v3Ev();
static  VTBL_ENTRY vtc_S5132C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5132C1[0]),
  (VTBL_ENTRY)&_ZN7S5132C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5132C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5132C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5132C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5132C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5132C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5132C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5132C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5132C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5132C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5132C1[];
extern  VTBL_ENTRY _ZTV7S5132C1[];
Class_Descriptor cd_S5132C1 = {  "S5132C1", // class name
  bases_S5132C1, 2,
  &(vtc_S5132C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,272), // object size
  NSPAIRA(_ZTI7S5132C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5132C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1283C4_nt  {
  void *s1283c4f0;
  ::S119C12_nt s1283c4f1;
  char s1283c4f2;
  int s1283c4f3;
  virtual  ~S1283C4_nt(); // _ZN10S1283C4_ntD1Ev
  virtual void  v10(); // _ZN10S1283C4_nt3v10Ev
  virtual void  v11(); // _ZN10S1283C4_nt3v11Ev
  virtual void  v12(); // _ZN10S1283C4_nt3v12Ev
  virtual void  v13(); // _ZN10S1283C4_nt3v13Ev
  virtual void  v14(); // _ZN10S1283C4_nt3v14Ev
  virtual void  v15(); // _ZN10S1283C4_nt3v15Ev
  virtual void  v16(); // _ZN10S1283C4_nt3v16Ev
  virtual void  v17(); // _ZN10S1283C4_nt3v17Ev
  virtual void  v18(); // _ZN10S1283C4_nt3v18Ev
  virtual void  v19(); // _ZN10S1283C4_nt3v19Ev
  virtual void  v20(); // _ZN10S1283C4_nt3v20Ev
  virtual void  v21(); // _ZN10S1283C4_nt3v21Ev
  virtual void  v22(); // _ZN10S1283C4_nt3v22Ev
  S1283C4_nt(); // tgen
};
//SIG(-1 S1283C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fc Fi}


 S1283C4_nt ::~S1283C4_nt(){ note_dtor("S1283C4_nt", this);}
void  S1283C4_nt ::v10(){vfunc_called(this, "_ZN10S1283C4_nt3v10Ev");}
void  S1283C4_nt ::v11(){vfunc_called(this, "_ZN10S1283C4_nt3v11Ev");}
void  S1283C4_nt ::v12(){vfunc_called(this, "_ZN10S1283C4_nt3v12Ev");}
void  S1283C4_nt ::v13(){vfunc_called(this, "_ZN10S1283C4_nt3v13Ev");}
void  S1283C4_nt ::v14(){vfunc_called(this, "_ZN10S1283C4_nt3v14Ev");}
void  S1283C4_nt ::v15(){vfunc_called(this, "_ZN10S1283C4_nt3v15Ev");}
void  S1283C4_nt ::v16(){vfunc_called(this, "_ZN10S1283C4_nt3v16Ev");}
void  S1283C4_nt ::v17(){vfunc_called(this, "_ZN10S1283C4_nt3v17Ev");}
void  S1283C4_nt ::v18(){vfunc_called(this, "_ZN10S1283C4_nt3v18Ev");}
void  S1283C4_nt ::v19(){vfunc_called(this, "_ZN10S1283C4_nt3v19Ev");}
void  S1283C4_nt ::v20(){vfunc_called(this, "_ZN10S1283C4_nt3v20Ev");}
void  S1283C4_nt ::v21(){vfunc_called(this, "_ZN10S1283C4_nt3v21Ev");}
void  S1283C4_nt ::v22(){vfunc_called(this, "_ZN10S1283C4_nt3v22Ev");}
S1283C4_nt ::S1283C4_nt(){ note_ctor("S1283C4_nt", this);} // tgen

//skip512 S1283C4_nt

#else // __cplusplus

extern void _ZN10S1283C4_ntC1Ev();
extern void _ZN10S1283C4_ntD1Ev();
Name_Map name_map_S1283C4_nt[] = {
  NSPAIR(_ZN10S1283C4_ntC1Ev),
  NSPAIR(_ZN10S1283C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1283C4_nt[];
extern void _ZN10S1283C4_ntD1Ev();
extern void _ZN10S1283C4_ntD0Ev();
extern void _ZN10S1283C4_nt3v10Ev();
extern void _ZN10S1283C4_nt3v11Ev();
extern void _ZN10S1283C4_nt3v12Ev();
extern void _ZN10S1283C4_nt3v13Ev();
extern void _ZN10S1283C4_nt3v14Ev();
extern void _ZN10S1283C4_nt3v15Ev();
extern void _ZN10S1283C4_nt3v16Ev();
extern void _ZN10S1283C4_nt3v17Ev();
extern void _ZN10S1283C4_nt3v18Ev();
extern void _ZN10S1283C4_nt3v19Ev();
extern void _ZN10S1283C4_nt3v20Ev();
extern void _ZN10S1283C4_nt3v21Ev();
extern void _ZN10S1283C4_nt3v22Ev();
static  VTBL_ENTRY vtc_S1283C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1283C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1283C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v22Ev,
};
extern VTBL_ENTRY _ZTI10S1283C4_nt[];
VTBL_ENTRY *P__ZTI10S1283C4_nt = _ZTI10S1283C4_nt; 
extern  VTBL_ENTRY _ZTV10S1283C4_nt[];
Class_Descriptor cd_S1283C4_nt = {  "S1283C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1283C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S1283C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1283C4_nt),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1283C3_nt  : S1283C4_nt {
  void *s1283c3f0[3];
  int s1283c3f1;
  virtual  ~S1283C3_nt(); // _ZN10S1283C3_ntD1Ev
  virtual void  v23(); // _ZN10S1283C3_nt3v23Ev
  virtual void  v24(); // _ZN10S1283C3_nt3v24Ev
  virtual void  v25(); // _ZN10S1283C3_nt3v25Ev
  virtual void  v26(); // _ZN10S1283C3_nt3v26Ev
  virtual void  v27(); // _ZN10S1283C3_nt3v27Ev
  virtual void  v28(); // _ZN10S1283C3_nt3v28Ev
  virtual void  v29(); // _ZN10S1283C3_nt3v29Ev
  virtual void  v30(); // _ZN10S1283C3_nt3v30Ev
  virtual void  v31(); // _ZN10S1283C3_nt3v31Ev
  virtual void  v32(); // _ZN10S1283C3_nt3v32Ev
  virtual void  v33(); // _ZN10S1283C3_nt3v33Ev
  S1283C3_nt(); // tgen
};
//SIG(-1 S1283C3_nt) C1{ BC2{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fc Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] Fi}


 S1283C3_nt ::~S1283C3_nt(){ note_dtor("S1283C3_nt", this);}
void  S1283C3_nt ::v23(){vfunc_called(this, "_ZN10S1283C3_nt3v23Ev");}
void  S1283C3_nt ::v24(){vfunc_called(this, "_ZN10S1283C3_nt3v24Ev");}
void  S1283C3_nt ::v25(){vfunc_called(this, "_ZN10S1283C3_nt3v25Ev");}
void  S1283C3_nt ::v26(){vfunc_called(this, "_ZN10S1283C3_nt3v26Ev");}
void  S1283C3_nt ::v27(){vfunc_called(this, "_ZN10S1283C3_nt3v27Ev");}
void  S1283C3_nt ::v28(){vfunc_called(this, "_ZN10S1283C3_nt3v28Ev");}
void  S1283C3_nt ::v29(){vfunc_called(this, "_ZN10S1283C3_nt3v29Ev");}
void  S1283C3_nt ::v30(){vfunc_called(this, "_ZN10S1283C3_nt3v30Ev");}
void  S1283C3_nt ::v31(){vfunc_called(this, "_ZN10S1283C3_nt3v31Ev");}
void  S1283C3_nt ::v32(){vfunc_called(this, "_ZN10S1283C3_nt3v32Ev");}
void  S1283C3_nt ::v33(){vfunc_called(this, "_ZN10S1283C3_nt3v33Ev");}
S1283C3_nt ::S1283C3_nt(){ note_ctor("S1283C3_nt", this);} // tgen

//skip512 S1283C3_nt

#else // __cplusplus

extern void _ZN10S1283C3_ntC1Ev();
extern void _ZN10S1283C3_ntD1Ev();
Name_Map name_map_S1283C3_nt[] = {
  NSPAIR(_ZN10S1283C3_ntC1Ev),
  NSPAIR(_ZN10S1283C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1283C4_nt;
extern VTBL_ENTRY _ZTI10S1283C4_nt[];
extern  VTBL_ENTRY _ZTV10S1283C4_nt[];
static Base_Class bases_S1283C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1283C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1283C3_nt[];
extern void _ZN10S1283C3_ntD1Ev();
extern void _ZN10S1283C3_ntD0Ev();
extern void _ZN10S1283C4_nt3v10Ev();
extern void _ZN10S1283C4_nt3v11Ev();
extern void _ZN10S1283C4_nt3v12Ev();
extern void _ZN10S1283C4_nt3v13Ev();
extern void _ZN10S1283C4_nt3v14Ev();
extern void _ZN10S1283C4_nt3v15Ev();
extern void _ZN10S1283C4_nt3v16Ev();
extern void _ZN10S1283C4_nt3v17Ev();
extern void _ZN10S1283C4_nt3v18Ev();
extern void _ZN10S1283C4_nt3v19Ev();
extern void _ZN10S1283C4_nt3v20Ev();
extern void _ZN10S1283C4_nt3v21Ev();
extern void _ZN10S1283C4_nt3v22Ev();
extern void _ZN10S1283C3_nt3v23Ev();
extern void _ZN10S1283C3_nt3v24Ev();
extern void _ZN10S1283C3_nt3v25Ev();
extern void _ZN10S1283C3_nt3v26Ev();
extern void _ZN10S1283C3_nt3v27Ev();
extern void _ZN10S1283C3_nt3v28Ev();
extern void _ZN10S1283C3_nt3v29Ev();
extern void _ZN10S1283C3_nt3v30Ev();
extern void _ZN10S1283C3_nt3v31Ev();
extern void _ZN10S1283C3_nt3v32Ev();
extern void _ZN10S1283C3_nt3v33Ev();
static  VTBL_ENTRY vtc_S1283C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1283C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1283C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v33Ev,
};
extern VTBL_ENTRY _ZTI10S1283C3_nt[];
VTBL_ENTRY *P__ZTI10S1283C3_nt = _ZTI10S1283C3_nt; 
extern  VTBL_ENTRY _ZTV10S1283C3_nt[];
Class_Descriptor cd_S1283C3_nt = {  "S1283C3_nt", // class name
  bases_S1283C3_nt, 1,
  &(vtc_S1283C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI10S1283C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1283C3_nt),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1283C9_nt  {
  __tsi64 s1283c9f0;
  void  mf1283c9(); // _ZN10S1283C9_nt8mf1283c9Ev
};
//SIG(-1 S1283C9_nt) C1{ m FL}


void  S1283C9_nt ::mf1283c9(){}

//skip512 S1283C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1283C8_nt  {
  ::S1283C9_nt s1283c8f0;
  void  mf1283c8(); // _ZN10S1283C8_nt8mf1283c8Ev
};
//SIG(-1 S1283C8_nt) C1{ m FC2{ m FL}}


void  S1283C8_nt ::mf1283c8(){}

//skip512 S1283C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1283C2_nt  : S1283C3_nt {
  void *s1283c2f0[2];
  int s1283c2f1[3];
  ::S119C12_nt s1283c2f2;
  char s1283c2f3;
  ::S1283C8_nt s1283c2f4;
  char s1283c2f5;
  int s1283c2f6;
  char s1283c2f7;
  int s1283c2f8;
  char s1283c2f9[2];
  int s1283c2f10;
  char s1283c2f11;
  virtual  ~S1283C2_nt(); // _ZN10S1283C2_ntD1Ev
  virtual void  v34(); // _ZN10S1283C2_nt3v34Ev
  virtual void  v35(); // _ZN10S1283C2_nt3v35Ev
  virtual void  v36(); // _ZN10S1283C2_nt3v36Ev
  virtual void  v37(); // _ZN10S1283C2_nt3v37Ev
  virtual void  v38(); // _ZN10S1283C2_nt3v38Ev
  virtual void  v39(); // _ZN10S1283C2_nt3v39Ev
  virtual void  v40(); // _ZN10S1283C2_nt3v40Ev
  virtual void  v41(); // _ZN10S1283C2_nt3v41Ev
  virtual void  v42(); // _ZN10S1283C2_nt3v42Ev
  virtual void  v43(); // _ZN10S1283C2_nt3v43Ev
  virtual void  v44(); // _ZN10S1283C2_nt3v44Ev
  virtual void  v45(); // _ZN10S1283C2_nt3v45Ev
  virtual void  v46(); // _ZN10S1283C2_nt3v46Ev
  virtual void  v47(); // _ZN10S1283C2_nt3v47Ev
  virtual void  v48(); // _ZN10S1283C2_nt3v48Ev
  virtual void  v49(); // _ZN10S1283C2_nt3v49Ev
  virtual void  v50(); // _ZN10S1283C2_nt3v50Ev
  S1283C2_nt(); // tgen
};
//SIG(-1 S1283C2_nt) C1{ BC2{ BC3{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fc Fi} vd v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 Fp[3] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[2] Fi[3] FC4 Fc FC7{ m FC8{ m FL}} Fc Fi Fc Fi Fc[2] Fi Fc}


 S1283C2_nt ::~S1283C2_nt(){ note_dtor("S1283C2_nt", this);}
void  S1283C2_nt ::v34(){vfunc_called(this, "_ZN10S1283C2_nt3v34Ev");}
void  S1283C2_nt ::v35(){vfunc_called(this, "_ZN10S1283C2_nt3v35Ev");}
void  S1283C2_nt ::v36(){vfunc_called(this, "_ZN10S1283C2_nt3v36Ev");}
void  S1283C2_nt ::v37(){vfunc_called(this, "_ZN10S1283C2_nt3v37Ev");}
void  S1283C2_nt ::v38(){vfunc_called(this, "_ZN10S1283C2_nt3v38Ev");}
void  S1283C2_nt ::v39(){vfunc_called(this, "_ZN10S1283C2_nt3v39Ev");}
void  S1283C2_nt ::v40(){vfunc_called(this, "_ZN10S1283C2_nt3v40Ev");}
void  S1283C2_nt ::v41(){vfunc_called(this, "_ZN10S1283C2_nt3v41Ev");}
void  S1283C2_nt ::v42(){vfunc_called(this, "_ZN10S1283C2_nt3v42Ev");}
void  S1283C2_nt ::v43(){vfunc_called(this, "_ZN10S1283C2_nt3v43Ev");}
void  S1283C2_nt ::v44(){vfunc_called(this, "_ZN10S1283C2_nt3v44Ev");}
void  S1283C2_nt ::v45(){vfunc_called(this, "_ZN10S1283C2_nt3v45Ev");}
void  S1283C2_nt ::v46(){vfunc_called(this, "_ZN10S1283C2_nt3v46Ev");}
void  S1283C2_nt ::v47(){vfunc_called(this, "_ZN10S1283C2_nt3v47Ev");}
void  S1283C2_nt ::v48(){vfunc_called(this, "_ZN10S1283C2_nt3v48Ev");}
void  S1283C2_nt ::v49(){vfunc_called(this, "_ZN10S1283C2_nt3v49Ev");}
void  S1283C2_nt ::v50(){vfunc_called(this, "_ZN10S1283C2_nt3v50Ev");}
S1283C2_nt ::S1283C2_nt(){ note_ctor("S1283C2_nt", this);} // tgen

//skip512 S1283C2_nt

#else // __cplusplus

extern void _ZN10S1283C2_ntC1Ev();
extern void _ZN10S1283C2_ntD1Ev();
Name_Map name_map_S1283C2_nt[] = {
  NSPAIR(_ZN10S1283C2_ntC1Ev),
  NSPAIR(_ZN10S1283C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1283C4_nt;
extern VTBL_ENTRY _ZTI10S1283C4_nt[];
extern  VTBL_ENTRY _ZTV10S1283C4_nt[];
extern Class_Descriptor cd_S1283C3_nt;
extern VTBL_ENTRY _ZTI10S1283C3_nt[];
extern  VTBL_ENTRY _ZTV10S1283C3_nt[];
static Base_Class bases_S1283C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1283C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1283C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1283C2_nt[];
extern void _ZN10S1283C2_ntD1Ev();
extern void _ZN10S1283C2_ntD0Ev();
extern void _ZN10S1283C4_nt3v10Ev();
extern void _ZN10S1283C4_nt3v11Ev();
extern void _ZN10S1283C4_nt3v12Ev();
extern void _ZN10S1283C4_nt3v13Ev();
extern void _ZN10S1283C4_nt3v14Ev();
extern void _ZN10S1283C4_nt3v15Ev();
extern void _ZN10S1283C4_nt3v16Ev();
extern void _ZN10S1283C4_nt3v17Ev();
extern void _ZN10S1283C4_nt3v18Ev();
extern void _ZN10S1283C4_nt3v19Ev();
extern void _ZN10S1283C4_nt3v20Ev();
extern void _ZN10S1283C4_nt3v21Ev();
extern void _ZN10S1283C4_nt3v22Ev();
extern void _ZN10S1283C3_nt3v23Ev();
extern void _ZN10S1283C3_nt3v24Ev();
extern void _ZN10S1283C3_nt3v25Ev();
extern void _ZN10S1283C3_nt3v26Ev();
extern void _ZN10S1283C3_nt3v27Ev();
extern void _ZN10S1283C3_nt3v28Ev();
extern void _ZN10S1283C3_nt3v29Ev();
extern void _ZN10S1283C3_nt3v30Ev();
extern void _ZN10S1283C3_nt3v31Ev();
extern void _ZN10S1283C3_nt3v32Ev();
extern void _ZN10S1283C3_nt3v33Ev();
extern void _ZN10S1283C2_nt3v34Ev();
extern void _ZN10S1283C2_nt3v35Ev();
extern void _ZN10S1283C2_nt3v36Ev();
extern void _ZN10S1283C2_nt3v37Ev();
extern void _ZN10S1283C2_nt3v38Ev();
extern void _ZN10S1283C2_nt3v39Ev();
extern void _ZN10S1283C2_nt3v40Ev();
extern void _ZN10S1283C2_nt3v41Ev();
extern void _ZN10S1283C2_nt3v42Ev();
extern void _ZN10S1283C2_nt3v43Ev();
extern void _ZN10S1283C2_nt3v44Ev();
extern void _ZN10S1283C2_nt3v45Ev();
extern void _ZN10S1283C2_nt3v46Ev();
extern void _ZN10S1283C2_nt3v47Ev();
extern void _ZN10S1283C2_nt3v48Ev();
extern void _ZN10S1283C2_nt3v49Ev();
extern void _ZN10S1283C2_nt3v50Ev();
static  VTBL_ENTRY vtc_S1283C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1283C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1283C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v50Ev,
};
extern VTBL_ENTRY _ZTI10S1283C2_nt[];
VTBL_ENTRY *P__ZTI10S1283C2_nt = _ZTI10S1283C2_nt; 
extern  VTBL_ENTRY _ZTV10S1283C2_nt[];
Class_Descriptor cd_S1283C2_nt = {  "S1283C2_nt", // class name
  bases_S1283C2_nt, 2,
  &(vtc_S1283C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI10S1283C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1283C2_nt),45, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1283C1  : S1283C2_nt {
  void *s1283c1f0;
  int s1283c1f1;
  void *s1283c1f2;
  int s1283c1f3;
  virtual  ~S1283C1(); // _ZN7S1283C1D1Ev
  virtual void  v1(); // _ZN7S1283C12v1Ev
  virtual void  v2(); // _ZN7S1283C12v2Ev
  virtual void  v3(); // _ZN7S1283C12v3Ev
  virtual void  v4(); // _ZN7S1283C12v4Ev
  virtual void  v5(); // _ZN7S1283C12v5Ev
  virtual void  v6(); // _ZN7S1283C12v6Ev
  virtual void  v7(); // _ZN7S1283C12v7Ev
  virtual void  v8(); // _ZN7S1283C12v8Ev
  virtual void  v9(); // _ZN7S1283C12v9Ev
  S1283C1(); // tgen
};
//SIG(1 S1283C1) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fc Fi} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp[3] Fi} vd v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 Fp[2] Fi[3] FC5 Fc FC8{ m FC9{ m FL}} Fc Fi Fc Fi Fc[2] Fi Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp Fi Fp Fi}


 S1283C1 ::~S1283C1(){ note_dtor("S1283C1", this);}
void  S1283C1 ::v1(){vfunc_called(this, "_ZN7S1283C12v1Ev");}
void  S1283C1 ::v2(){vfunc_called(this, "_ZN7S1283C12v2Ev");}
void  S1283C1 ::v3(){vfunc_called(this, "_ZN7S1283C12v3Ev");}
void  S1283C1 ::v4(){vfunc_called(this, "_ZN7S1283C12v4Ev");}
void  S1283C1 ::v5(){vfunc_called(this, "_ZN7S1283C12v5Ev");}
void  S1283C1 ::v6(){vfunc_called(this, "_ZN7S1283C12v6Ev");}
void  S1283C1 ::v7(){vfunc_called(this, "_ZN7S1283C12v7Ev");}
void  S1283C1 ::v8(){vfunc_called(this, "_ZN7S1283C12v8Ev");}
void  S1283C1 ::v9(){vfunc_called(this, "_ZN7S1283C12v9Ev");}
S1283C1 ::S1283C1(){ note_ctor("S1283C1", this);} // tgen

static void Test_S1283C1()
{
  extern Class_Descriptor cd_S1283C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,36)];
    init_test(&cd_S1283C1, buf);
    S1283C1 *dp, &lv = *(dp=new (buf) S1283C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,140), "sizeof(S1283C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1283C1)");
    check_base_class_offset(lv, (S1283C4_nt*)(S1283C3_nt*)(S1283C2_nt*), 0, "S1283C1");
    check_base_class_offset(lv, (S1283C3_nt*)(S1283C2_nt*), 0, "S1283C1");
    check_base_class_offset(lv, (S1283C2_nt*), 0, "S1283C1");
    check_field_offset(lv, s1283c1f0, ABISELECT(184,124), "S1283C1.s1283c1f0");
    check_field_offset(lv, s1283c1f1, ABISELECT(192,128), "S1283C1.s1283c1f1");
    check_field_offset(lv, s1283c1f2, ABISELECT(200,132), "S1283C1.s1283c1f2");
    check_field_offset(lv, s1283c1f3, ABISELECT(208,136), "S1283C1.s1283c1f3");
    test_class_info(&lv, &cd_S1283C1);
    dp->~S1283C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1283C1(Test_S1283C1, "S1283C1", ABISELECT(216,140));

#else // __cplusplus

extern void _ZN7S1283C1C1Ev();
extern void _ZN7S1283C1D1Ev();
Name_Map name_map_S1283C1[] = {
  NSPAIR(_ZN7S1283C1C1Ev),
  NSPAIR(_ZN7S1283C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1283C4_nt;
extern VTBL_ENTRY _ZTI10S1283C4_nt[];
extern  VTBL_ENTRY _ZTV10S1283C4_nt[];
extern Class_Descriptor cd_S1283C3_nt;
extern VTBL_ENTRY _ZTI10S1283C3_nt[];
extern  VTBL_ENTRY _ZTV10S1283C3_nt[];
extern Class_Descriptor cd_S1283C2_nt;
extern VTBL_ENTRY _ZTI10S1283C2_nt[];
extern  VTBL_ENTRY _ZTV10S1283C2_nt[];
static Base_Class bases_S1283C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1283C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1283C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1283C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1283C1[];
extern void _ZN7S1283C1D1Ev();
extern void _ZN7S1283C1D0Ev();
extern void _ZN10S1283C4_nt3v10Ev();
extern void _ZN10S1283C4_nt3v11Ev();
extern void _ZN10S1283C4_nt3v12Ev();
extern void _ZN10S1283C4_nt3v13Ev();
extern void _ZN10S1283C4_nt3v14Ev();
extern void _ZN10S1283C4_nt3v15Ev();
extern void _ZN10S1283C4_nt3v16Ev();
extern void _ZN10S1283C4_nt3v17Ev();
extern void _ZN10S1283C4_nt3v18Ev();
extern void _ZN10S1283C4_nt3v19Ev();
extern void _ZN10S1283C4_nt3v20Ev();
extern void _ZN10S1283C4_nt3v21Ev();
extern void _ZN10S1283C4_nt3v22Ev();
extern void _ZN10S1283C3_nt3v23Ev();
extern void _ZN10S1283C3_nt3v24Ev();
extern void _ZN10S1283C3_nt3v25Ev();
extern void _ZN10S1283C3_nt3v26Ev();
extern void _ZN10S1283C3_nt3v27Ev();
extern void _ZN10S1283C3_nt3v28Ev();
extern void _ZN10S1283C3_nt3v29Ev();
extern void _ZN10S1283C3_nt3v30Ev();
extern void _ZN10S1283C3_nt3v31Ev();
extern void _ZN10S1283C3_nt3v32Ev();
extern void _ZN10S1283C3_nt3v33Ev();
extern void _ZN10S1283C2_nt3v34Ev();
extern void _ZN10S1283C2_nt3v35Ev();
extern void _ZN10S1283C2_nt3v36Ev();
extern void _ZN10S1283C2_nt3v37Ev();
extern void _ZN10S1283C2_nt3v38Ev();
extern void _ZN10S1283C2_nt3v39Ev();
extern void _ZN10S1283C2_nt3v40Ev();
extern void _ZN10S1283C2_nt3v41Ev();
extern void _ZN10S1283C2_nt3v42Ev();
extern void _ZN10S1283C2_nt3v43Ev();
extern void _ZN10S1283C2_nt3v44Ev();
extern void _ZN10S1283C2_nt3v45Ev();
extern void _ZN10S1283C2_nt3v46Ev();
extern void _ZN10S1283C2_nt3v47Ev();
extern void _ZN10S1283C2_nt3v48Ev();
extern void _ZN10S1283C2_nt3v49Ev();
extern void _ZN10S1283C2_nt3v50Ev();
extern void _ZN7S1283C12v1Ev();
extern void _ZN7S1283C12v2Ev();
extern void _ZN7S1283C12v3Ev();
extern void _ZN7S1283C12v4Ev();
extern void _ZN7S1283C12v5Ev();
extern void _ZN7S1283C12v6Ev();
extern void _ZN7S1283C12v7Ev();
extern void _ZN7S1283C12v8Ev();
extern void _ZN7S1283C12v9Ev();
static  VTBL_ENTRY vtc_S1283C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1283C1[0]),
  (VTBL_ENTRY)&_ZN7S1283C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1283C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1283C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1283C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1283C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN7S1283C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1283C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1283C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1283C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1283C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1283C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1283C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1283C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1283C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1283C1[];
extern  VTBL_ENTRY _ZTV7S1283C1[];
Class_Descriptor cd_S1283C1 = {  "S1283C1", // class name
  bases_S1283C1, 3,
  &(vtc_S1283C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,140), // object size
  NSPAIRA(_ZTI7S1283C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1283C1),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2370C4_nt  {
  ::S119C13_nt s2370c4f0;
  int s2370c4f1[2];
  char s2370c4f2;
  virtual  ~S2370C4_nt(); // _ZN10S2370C4_ntD1Ev
  virtual void  v5(); // _ZN10S2370C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2370C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2370C4_nt2v7Ev
  S2370C4_nt(); // tgen
};
//SIG(-1 S2370C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2370C4_nt ::~S2370C4_nt(){ note_dtor("S2370C4_nt", this);}
void  S2370C4_nt ::v5(){vfunc_called(this, "_ZN10S2370C4_nt2v5Ev");}
void  S2370C4_nt ::v6(){vfunc_called(this, "_ZN10S2370C4_nt2v6Ev");}
void  S2370C4_nt ::v7(){vfunc_called(this, "_ZN10S2370C4_nt2v7Ev");}
S2370C4_nt ::S2370C4_nt(){ note_ctor("S2370C4_nt", this);} // tgen

//skip512 S2370C4_nt

#else // __cplusplus

extern void _ZN10S2370C4_ntC1Ev();
extern void _ZN10S2370C4_ntD1Ev();
Name_Map name_map_S2370C4_nt[] = {
  NSPAIR(_ZN10S2370C4_ntC1Ev),
  NSPAIR(_ZN10S2370C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2370C4_nt[];
extern void _ZN10S2370C4_ntD1Ev();
extern void _ZN10S2370C4_ntD0Ev();
extern void _ZN10S2370C4_nt2v5Ev();
extern void _ZN10S2370C4_nt2v6Ev();
extern void _ZN10S2370C4_nt2v7Ev();
static  VTBL_ENTRY vtc_S2370C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2370C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2370C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2370C4_nt[];
VTBL_ENTRY *P__ZTI10S2370C4_nt = _ZTI10S2370C4_nt; 
extern  VTBL_ENTRY _ZTV10S2370C4_nt[];
Class_Descriptor cd_S2370C4_nt = {  "S2370C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2370C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2370C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2370C4_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2370C3_nt  : S2370C4_nt {
  void *s2370c3f0;
  virtual void  v8(); // _ZN10S2370C3_nt2v8Ev
  virtual void  v9(); // _ZN10S2370C3_nt2v9Ev
  ~S2370C3_nt(); // tgen
  S2370C3_nt(); // tgen
};
//SIG(-1 S2370C3_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2370C3_nt ::v8(){vfunc_called(this, "_ZN10S2370C3_nt2v8Ev");}
void  S2370C3_nt ::v9(){vfunc_called(this, "_ZN10S2370C3_nt2v9Ev");}
S2370C3_nt ::~S2370C3_nt(){ note_dtor("S2370C3_nt", this);} // tgen
S2370C3_nt ::S2370C3_nt(){ note_ctor("S2370C3_nt", this);} // tgen

//skip512 S2370C3_nt

#else // __cplusplus

extern void _ZN10S2370C3_ntC1Ev();
extern void _ZN10S2370C3_ntD1Ev();
Name_Map name_map_S2370C3_nt[] = {
  NSPAIR(_ZN10S2370C3_ntC1Ev),
  NSPAIR(_ZN10S2370C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2370C4_nt;
extern VTBL_ENTRY _ZTI10S2370C4_nt[];
extern  VTBL_ENTRY _ZTV10S2370C4_nt[];
static Base_Class bases_S2370C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2370C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2370C3_nt[];
extern void _ZN10S2370C3_ntD1Ev();
extern void _ZN10S2370C3_ntD0Ev();
extern void _ZN10S2370C4_nt2v5Ev();
extern void _ZN10S2370C4_nt2v6Ev();
extern void _ZN10S2370C4_nt2v7Ev();
extern void _ZN10S2370C3_nt2v8Ev();
extern void _ZN10S2370C3_nt2v9Ev();
static  VTBL_ENTRY vtc_S2370C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2370C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2370C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2370C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2370C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2370C3_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S2370C3_nt[];
VTBL_ENTRY *P__ZTI10S2370C3_nt = _ZTI10S2370C3_nt; 
extern  VTBL_ENTRY _ZTV10S2370C3_nt[];
Class_Descriptor cd_S2370C3_nt = {  "S2370C3_nt", // class name
  bases_S2370C3_nt, 1,
  &(vtc_S2370C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S2370C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2370C3_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2370C13  : S119C15_nt {
  char s2370c13f0;
};
//SIG(-1 S2370C13) C1{ BC2{ m Fi FL[2] Fc Fi FC3{ m Fp Fi FC4{ m}} FC3 FC5{ BC6{ m Fp Fi[2] FC7{ m Fp}}}} Fc}



static void Test_S2370C13()
{
  extern Class_Descriptor cd_S2370C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S2370C13, buf);
    S2370C13 &lv = *(new (buf) S2370C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S2370C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2370C13)");
    check_base_class_offset(lv, (S119C15_nt*), 0, "S2370C13");
    check_field_offset(lv, s2370c13f0, ABISELECT(88,68), "S2370C13.s2370c13f0");
    test_class_info(&lv, &cd_S2370C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2370C13(Test_S2370C13, "S2370C13", ABISELECT(96,72));

#else // __cplusplus

extern Class_Descriptor cd_S119C15_nt;
static Base_Class bases_S2370C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2370C13 = {  "S2370C13", // class name
  bases_S2370C13, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(96,72), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2370C12  {
  __tsi64 s2370c12f0;
  int s2370c12f1[3];
  void *s2370c12f2[2];
  int s2370c12f3;
  ::S2370C13 s2370c12f4;
  void  mf2370c12(); // _ZN8S2370C129mf2370c12Ev
};
//SIG(-1 S2370C12) C1{ m FL Fi[3] Fp[2] Fi FC2{ BC3{ m Fi FL[2] Fc Fi FC4{ m Fp Fi FC5{ m}} FC4 FC6{ BC7{ m Fp Fi[2] FC8{ m Fp}}}} Fc}}


void  S2370C12 ::mf2370c12(){}

static void Test_S2370C12()
{
  {
    init_simple_test("S2370C12");
    S2370C12 lv;
    check2(sizeof(lv), ABISELECT(144,104), "sizeof(S2370C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2370C12)");
    check_field_offset(lv, s2370c12f0, 0, "S2370C12.s2370c12f0");
    check_field_offset(lv, s2370c12f1, 8, "S2370C12.s2370c12f1");
    check_field_offset(lv, s2370c12f2, ABISELECT(24,20), "S2370C12.s2370c12f2");
    check_field_offset(lv, s2370c12f3, ABISELECT(40,28), "S2370C12.s2370c12f3");
    check_field_offset(lv, s2370c12f4, ABISELECT(48,32), "S2370C12.s2370c12f4");
  }
}
static Arrange_To_Call_Me vS2370C12(Test_S2370C12, "S2370C12", ABISELECT(144,104));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2370C11  {
  __tsi64 s2370c11f0;
  int s2370c11f1[2];
  void *s2370c11f2[5];
  ::S2370C12 s2370c11f3;
  char s2370c11f4[2];
  void  mf2370c11(); // _ZN8S2370C119mf2370c11Ev
};
//SIG(-1 S2370C11) C1{ m FL Fi[2] Fp[5] FC2{ m FL Fi[3] Fp[2] Fi FC3{ BC4{ m Fi FL[2] Fc Fi FC5{ m Fp Fi FC6{ m}} FC5 FC7{ BC8{ m Fp Fi[2] FC9{ m Fp}}}} Fc}} Fc[2]}


void  S2370C11 ::mf2370c11(){}

static void Test_S2370C11()
{
  {
    init_simple_test("S2370C11");
    S2370C11 lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S2370C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2370C11)");
    check_field_offset(lv, s2370c11f0, 0, "S2370C11.s2370c11f0");
    check_field_offset(lv, s2370c11f1, 8, "S2370C11.s2370c11f1");
    check_field_offset(lv, s2370c11f2, 16, "S2370C11.s2370c11f2");
    check_field_offset(lv, s2370c11f3, ABISELECT(56,36), "S2370C11.s2370c11f3");
    check_field_offset(lv, s2370c11f4, ABISELECT(200,140), "S2370C11.s2370c11f4");
  }
}
static Arrange_To_Call_Me vS2370C11(Test_S2370C11, "S2370C11", ABISELECT(208,144));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2370C2  : S2370C3_nt {
  ::S21926C2_nt s2370c2f0;
  ::S21925C4_nt s2370c2f1;
  ::S2370C11 s2370c2f2;
  void *s2370c2f3[2];
  ::S119C9_nt s2370c2f4;
  int s2370c2f5[4];
  virtual  ~S2370C2(); // _ZN7S2370C2D1Ev
  virtual void  v10(); // _ZN7S2370C23v10Ev
  virtual void  v11(); // _ZN7S2370C23v11Ev
  virtual void  v12(); // _ZN7S2370C23v12Ev
  virtual void  v13(); // _ZN7S2370C23v13Ev
  virtual void  v14(); // _ZN7S2370C23v14Ev
  virtual void  v15(); // _ZN7S2370C23v15Ev
  S2370C2(); // tgen
};
//SIG(-1 S2370C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} FC10{ m FL Fi[2] Fp[5] FC11{ m FL Fi[3] Fp[2] Fi FC12{ BC13{ m Fi FL[2] Fc Fi FC4 FC4 FC14{ BC15{ m Fp Fi[2] FC16{ m Fp}}}} Fc}} Fc[2]} Fp[2] FC17{ m Fp Fi[2] FC18{ m}} Fi[4]}


 S2370C2 ::~S2370C2(){ note_dtor("S2370C2", this);}
void  S2370C2 ::v10(){vfunc_called(this, "_ZN7S2370C23v10Ev");}
void  S2370C2 ::v11(){vfunc_called(this, "_ZN7S2370C23v11Ev");}
void  S2370C2 ::v12(){vfunc_called(this, "_ZN7S2370C23v12Ev");}
void  S2370C2 ::v13(){vfunc_called(this, "_ZN7S2370C23v13Ev");}
void  S2370C2 ::v14(){vfunc_called(this, "_ZN7S2370C23v14Ev");}
void  S2370C2 ::v15(){vfunc_called(this, "_ZN7S2370C23v15Ev");}
S2370C2 ::S2370C2(){ note_ctor("S2370C2", this);} // tgen

static void Test_S2370C2()
{
  extern Class_Descriptor cd_S2370C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,68)];
    init_test(&cd_S2370C2, buf);
    S2370C2 *dp, &lv = *(dp=new (buf) S2370C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,268), "sizeof(S2370C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2370C2)");
    check_base_class_offset(lv, (S2370C4_nt*)(S2370C3_nt*), 0, "S2370C2");
    check_base_class_offset(lv, (S2370C3_nt*), 0, "S2370C2");
    check_field_offset(lv, s2370c2f0, ABISELECT(48,32), "S2370C2.s2370c2f0");
    check_field_offset(lv, s2370c2f1, ABISELECT(80,64), "S2370C2.s2370c2f1");
    check_field_offset(lv, s2370c2f2, ABISELECT(104,84), "S2370C2.s2370c2f2");
    check_field_offset(lv, s2370c2f3, ABISELECT(312,228), "S2370C2.s2370c2f3");
    check_field_offset(lv, s2370c2f4, ABISELECT(328,236), "S2370C2.s2370c2f4");
    check_field_offset(lv, s2370c2f5, ABISELECT(352,252), "S2370C2.s2370c2f5");
    test_class_info(&lv, &cd_S2370C2);
    dp->~S2370C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2370C2(Test_S2370C2, "S2370C2", ABISELECT(368,268));

#else // __cplusplus

extern void _ZN7S2370C2C1Ev();
extern void _ZN7S2370C2D1Ev();
Name_Map name_map_S2370C2[] = {
  NSPAIR(_ZN7S2370C2C1Ev),
  NSPAIR(_ZN7S2370C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2370C4_nt;
extern VTBL_ENTRY _ZTI10S2370C4_nt[];
extern  VTBL_ENTRY _ZTV10S2370C4_nt[];
extern Class_Descriptor cd_S2370C3_nt;
extern VTBL_ENTRY _ZTI10S2370C3_nt[];
extern  VTBL_ENTRY _ZTV10S2370C3_nt[];
static Base_Class bases_S2370C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2370C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2370C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2370C2[];
extern void _ZN7S2370C2D1Ev();
extern void _ZN7S2370C2D0Ev();
extern void _ZN10S2370C4_nt2v5Ev();
extern void _ZN10S2370C4_nt2v6Ev();
extern void _ZN10S2370C4_nt2v7Ev();
extern void _ZN10S2370C3_nt2v8Ev();
extern void _ZN10S2370C3_nt2v9Ev();
extern void _ZN7S2370C23v10Ev();
extern void _ZN7S2370C23v11Ev();
extern void _ZN7S2370C23v12Ev();
extern void _ZN7S2370C23v13Ev();
extern void _ZN7S2370C23v14Ev();
extern void _ZN7S2370C23v15Ev();
static  VTBL_ENTRY vtc_S2370C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2370C2[0]),
  (VTBL_ENTRY)&_ZN7S2370C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2370C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2370C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2370C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S2370C2[];
extern  VTBL_ENTRY _ZTV7S2370C2[];
Class_Descriptor cd_S2370C2 = {  "S2370C2", // class name
  bases_S2370C2, 2,
  &(vtc_S2370C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,268), // object size
  NSPAIRA(_ZTI7S2370C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2370C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2370C1  : S2370C2 {
  ::S119C11_nt s2370c1f0;
  __tsi64 s2370c1f1;
  int s2370c1f2[2];
  void *s2370c1f3[2];
  virtual  ~S2370C1(); // _ZN7S2370C1D1Ev
  virtual void  v1(); // _ZN7S2370C12v1Ev
  virtual void  v2(); // _ZN7S2370C12v2Ev
  virtual void  v3(); // _ZN7S2370C12v3Ev
  virtual void  v4(); // _ZN7S2370C12v4Ev
  S2370C1(); // tgen
};
//SIG(1 S2370C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 v11 v12 v13 v14 v15 FC7{ m FC8{ FL[4]}} FC9{ m Fp FC10{ Fi[4]}} FC11{ m FL Fi[2] Fp[5] FC12{ m FL Fi[3] Fp[2] Fi FC13{ BC14{ m Fi FL[2] Fc Fi FC5 FC5 FC15{ BC16{ m Fp Fi[2] FC17{ m Fp}}}} Fc}} Fc[2]} Fp[2] FC18{ m Fp Fi[2] FC19{ m}} Fi[4]} vd v1 v2 v3 v4 FC17 FL Fi[2] Fp[2]}


 S2370C1 ::~S2370C1(){ note_dtor("S2370C1", this);}
void  S2370C1 ::v1(){vfunc_called(this, "_ZN7S2370C12v1Ev");}
void  S2370C1 ::v2(){vfunc_called(this, "_ZN7S2370C12v2Ev");}
void  S2370C1 ::v3(){vfunc_called(this, "_ZN7S2370C12v3Ev");}
void  S2370C1 ::v4(){vfunc_called(this, "_ZN7S2370C12v4Ev");}
S2370C1 ::S2370C1(){ note_ctor("S2370C1", this);} // tgen

static void Test_S2370C1()
{
  extern Class_Descriptor cd_S2370C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,75)];
    init_test(&cd_S2370C1, buf);
    S2370C1 *dp, &lv = *(dp=new (buf) S2370C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,296), "sizeof(S2370C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2370C1)");
    check_base_class_offset(lv, (S2370C4_nt*)(S2370C3_nt*)(S2370C2*), 0, "S2370C1");
    check_base_class_offset(lv, (S2370C3_nt*)(S2370C2*), 0, "S2370C1");
    check_base_class_offset(lv, (S2370C2*), 0, "S2370C1");
    check_field_offset(lv, s2370c1f0, ABISELECT(368,268), "S2370C1.s2370c1f0");
    check_field_offset(lv, s2370c1f1, ABISELECT(376,272), "S2370C1.s2370c1f1");
    check_field_offset(lv, s2370c1f2, ABISELECT(384,280), "S2370C1.s2370c1f2");
    check_field_offset(lv, s2370c1f3, ABISELECT(392,288), "S2370C1.s2370c1f3");
    test_class_info(&lv, &cd_S2370C1);
    dp->~S2370C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2370C1(Test_S2370C1, "S2370C1", ABISELECT(408,296));

#else // __cplusplus

extern void _ZN7S2370C1C1Ev();
extern void _ZN7S2370C1D1Ev();
Name_Map name_map_S2370C1[] = {
  NSPAIR(_ZN7S2370C1C1Ev),
  NSPAIR(_ZN7S2370C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2370C4_nt;
extern VTBL_ENTRY _ZTI10S2370C4_nt[];
extern  VTBL_ENTRY _ZTV10S2370C4_nt[];
extern Class_Descriptor cd_S2370C3_nt;
extern VTBL_ENTRY _ZTI10S2370C3_nt[];
extern  VTBL_ENTRY _ZTV10S2370C3_nt[];
extern Class_Descriptor cd_S2370C2;
extern VTBL_ENTRY _ZTI7S2370C2[];
extern  VTBL_ENTRY _ZTV7S2370C2[];
static Base_Class bases_S2370C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2370C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2370C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2370C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2370C1[];
extern void _ZN7S2370C1D1Ev();
extern void _ZN7S2370C1D0Ev();
extern void _ZN10S2370C4_nt2v5Ev();
extern void _ZN10S2370C4_nt2v6Ev();
extern void _ZN10S2370C4_nt2v7Ev();
extern void _ZN10S2370C3_nt2v8Ev();
extern void _ZN10S2370C3_nt2v9Ev();
extern void _ZN7S2370C23v10Ev();
extern void _ZN7S2370C23v11Ev();
extern void _ZN7S2370C23v12Ev();
extern void _ZN7S2370C23v13Ev();
extern void _ZN7S2370C23v14Ev();
extern void _ZN7S2370C23v15Ev();
extern void _ZN7S2370C12v1Ev();
extern void _ZN7S2370C12v2Ev();
extern void _ZN7S2370C12v3Ev();
extern void _ZN7S2370C12v4Ev();
static  VTBL_ENTRY vtc_S2370C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2370C1[0]),
  (VTBL_ENTRY)&_ZN7S2370C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2370C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2370C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2370C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2370C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2370C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2370C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2370C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2370C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2370C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2370C1[];
extern  VTBL_ENTRY _ZTV7S2370C1[];
Class_Descriptor cd_S2370C1 = {  "S2370C1", // class name
  bases_S2370C1, 3,
  &(vtc_S2370C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(408,296), // object size
  NSPAIRA(_ZTI7S2370C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2370C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2369C4  {
  ::S119C13_nt s2369c4f0;
  int s2369c4f1[2];
  char s2369c4f2;
  virtual  ~S2369C4(); // _ZN7S2369C4D1Ev
  virtual void  v5(); // _ZN7S2369C42v5Ev
  virtual void  v6(); // _ZN7S2369C42v6Ev
  virtual void  v7(); // _ZN7S2369C42v7Ev
  S2369C4(); // tgen
};
//SIG(-1 S2369C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2369C4 ::~S2369C4(){ note_dtor("S2369C4", this);}
void  S2369C4 ::v5(){vfunc_called(this, "_ZN7S2369C42v5Ev");}
void  S2369C4 ::v6(){vfunc_called(this, "_ZN7S2369C42v6Ev");}
void  S2369C4 ::v7(){vfunc_called(this, "_ZN7S2369C42v7Ev");}
S2369C4 ::S2369C4(){ note_ctor("S2369C4", this);} // tgen

static void Test_S2369C4()
{
  extern Class_Descriptor cd_S2369C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2369C4, buf);
    S2369C4 *dp, &lv = *(dp=new (buf) S2369C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2369C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2369C4)");
    check_field_offset(lv, s2369c4f0, ABISELECT(8,4), "S2369C4.s2369c4f0");
    check_field_offset(lv, s2369c4f1, ABISELECT(24,16), "S2369C4.s2369c4f1");
    check_field_offset(lv, s2369c4f2, ABISELECT(32,24), "S2369C4.s2369c4f2");
    test_class_info(&lv, &cd_S2369C4);
    dp->~S2369C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2369C4(Test_S2369C4, "S2369C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2369C4C1Ev();
extern void _ZN7S2369C4D1Ev();
Name_Map name_map_S2369C4[] = {
  NSPAIR(_ZN7S2369C4C1Ev),
  NSPAIR(_ZN7S2369C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2369C4[];
extern void _ZN7S2369C4D1Ev();
extern void _ZN7S2369C4D0Ev();
extern void _ZN7S2369C42v5Ev();
extern void _ZN7S2369C42v6Ev();
extern void _ZN7S2369C42v7Ev();
static  VTBL_ENTRY vtc_S2369C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2369C4[0]),
  (VTBL_ENTRY)&_ZN7S2369C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2369C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2369C4[];
extern  VTBL_ENTRY _ZTV7S2369C4[];
Class_Descriptor cd_S2369C4 = {  "S2369C4", // class name
  0,0,//no base classes
  &(vtc_S2369C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2369C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2369C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2369C3  : S2369C4 {
  void *s2369c3f0;
  virtual void  v8(); // _ZN7S2369C32v8Ev
  virtual void  v9(); // _ZN7S2369C32v9Ev
  ~S2369C3(); // tgen
  S2369C3(); // tgen
};
//SIG(-1 S2369C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2369C3 ::v8(){vfunc_called(this, "_ZN7S2369C32v8Ev");}
void  S2369C3 ::v9(){vfunc_called(this, "_ZN7S2369C32v9Ev");}
S2369C3 ::~S2369C3(){ note_dtor("S2369C3", this);} // tgen
S2369C3 ::S2369C3(){ note_ctor("S2369C3", this);} // tgen

static void Test_S2369C3()
{
  extern Class_Descriptor cd_S2369C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2369C3, buf);
    S2369C3 *dp, &lv = *(dp=new (buf) S2369C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2369C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2369C3)");
    check_base_class_offset(lv, (S2369C4*), 0, "S2369C3");
    check_field_offset(lv, s2369c3f0, ABISELECT(40,28), "S2369C3.s2369c3f0");
    test_class_info(&lv, &cd_S2369C3);
    dp->~S2369C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2369C3(Test_S2369C3, "S2369C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2369C3C1Ev();
extern void _ZN7S2369C3D1Ev();
Name_Map name_map_S2369C3[] = {
  NSPAIR(_ZN7S2369C3C1Ev),
  NSPAIR(_ZN7S2369C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2369C4;
extern VTBL_ENTRY _ZTI7S2369C4[];
extern  VTBL_ENTRY _ZTV7S2369C4[];
static Base_Class bases_S2369C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2369C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2369C3[];
extern void _ZN7S2369C3D1Ev();
extern void _ZN7S2369C3D0Ev();
extern void _ZN7S2369C42v5Ev();
extern void _ZN7S2369C42v6Ev();
extern void _ZN7S2369C42v7Ev();
extern void _ZN7S2369C32v8Ev();
extern void _ZN7S2369C32v9Ev();
static  VTBL_ENTRY vtc_S2369C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2369C3[0]),
  (VTBL_ENTRY)&_ZN7S2369C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2369C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2369C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2369C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S2369C3[];
extern  VTBL_ENTRY _ZTV7S2369C3[];
Class_Descriptor cd_S2369C3 = {  "S2369C3", // class name
  bases_S2369C3, 1,
  &(vtc_S2369C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2369C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2369C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2369C2  : S2369C3 {
  ::S21925C2_nt s2369c2f0;
  ::S21925C4_nt s2369c2f1;
  ::S2370C11 s2369c2f2;
  void *s2369c2f3[2];
  ::S119C9_nt s2369c2f4;
  int s2369c2f5[4];
  virtual  ~S2369C2(); // _ZN7S2369C2D1Ev
  virtual void  v10(); // _ZN7S2369C23v10Ev
  virtual void  v11(); // _ZN7S2369C23v11Ev
  virtual void  v12(); // _ZN7S2369C23v12Ev
  virtual void  v13(); // _ZN7S2369C23v13Ev
  virtual void  v14(); // _ZN7S2369C23v14Ev
  virtual void  v15(); // _ZN7S2369C23v15Ev
  S2369C2(); // tgen
};
//SIG(-1 S2369C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 FC6{ m FC7{ Fl[4]}} FC8{ m Fp FC9{ Fi[4]}} FC10{ m FL Fi[2] Fp[5] FC11{ m FL Fi[3] Fp[2] Fi FC12{ BC13{ m Fi FL[2] Fc Fi FC4 FC4 FC14{ BC15{ m Fp Fi[2] FC16{ m Fp}}}} Fc}} Fc[2]} Fp[2] FC17{ m Fp Fi[2] FC18{ m}} Fi[4]}


 S2369C2 ::~S2369C2(){ note_dtor("S2369C2", this);}
void  S2369C2 ::v10(){vfunc_called(this, "_ZN7S2369C23v10Ev");}
void  S2369C2 ::v11(){vfunc_called(this, "_ZN7S2369C23v11Ev");}
void  S2369C2 ::v12(){vfunc_called(this, "_ZN7S2369C23v12Ev");}
void  S2369C2 ::v13(){vfunc_called(this, "_ZN7S2369C23v13Ev");}
void  S2369C2 ::v14(){vfunc_called(this, "_ZN7S2369C23v14Ev");}
void  S2369C2 ::v15(){vfunc_called(this, "_ZN7S2369C23v15Ev");}
S2369C2 ::S2369C2(){ note_ctor("S2369C2", this);} // tgen

static void Test_S2369C2()
{
  extern Class_Descriptor cd_S2369C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,64)];
    init_test(&cd_S2369C2, buf);
    S2369C2 *dp, &lv = *(dp=new (buf) S2369C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,252), "sizeof(S2369C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2369C2)");
    check_base_class_offset(lv, (S2369C4*)(S2369C3*), 0, "S2369C2");
    check_base_class_offset(lv, (S2369C3*), 0, "S2369C2");
    check_field_offset(lv, s2369c2f0, ABISELECT(48,32), "S2369C2.s2369c2f0");
    check_field_offset(lv, s2369c2f1, ABISELECT(80,48), "S2369C2.s2369c2f1");
    check_field_offset(lv, s2369c2f2, ABISELECT(104,68), "S2369C2.s2369c2f2");
    check_field_offset(lv, s2369c2f3, ABISELECT(312,212), "S2369C2.s2369c2f3");
    check_field_offset(lv, s2369c2f4, ABISELECT(328,220), "S2369C2.s2369c2f4");
    check_field_offset(lv, s2369c2f5, ABISELECT(352,236), "S2369C2.s2369c2f5");
    test_class_info(&lv, &cd_S2369C2);
    dp->~S2369C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2369C2(Test_S2369C2, "S2369C2", ABISELECT(368,252));

#else // __cplusplus

extern void _ZN7S2369C2C1Ev();
extern void _ZN7S2369C2D1Ev();
Name_Map name_map_S2369C2[] = {
  NSPAIR(_ZN7S2369C2C1Ev),
  NSPAIR(_ZN7S2369C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2369C4;
extern VTBL_ENTRY _ZTI7S2369C4[];
extern  VTBL_ENTRY _ZTV7S2369C4[];
extern Class_Descriptor cd_S2369C3;
extern VTBL_ENTRY _ZTI7S2369C3[];
extern  VTBL_ENTRY _ZTV7S2369C3[];
static Base_Class bases_S2369C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2369C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2369C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2369C2[];
extern void _ZN7S2369C2D1Ev();
extern void _ZN7S2369C2D0Ev();
extern void _ZN7S2369C42v5Ev();
extern void _ZN7S2369C42v6Ev();
extern void _ZN7S2369C42v7Ev();
extern void _ZN7S2369C32v8Ev();
extern void _ZN7S2369C32v9Ev();
extern void _ZN7S2369C23v10Ev();
extern void _ZN7S2369C23v11Ev();
extern void _ZN7S2369C23v12Ev();
extern void _ZN7S2369C23v13Ev();
extern void _ZN7S2369C23v14Ev();
extern void _ZN7S2369C23v15Ev();
static  VTBL_ENTRY vtc_S2369C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2369C2[0]),
  (VTBL_ENTRY)&_ZN7S2369C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2369C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2369C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2369C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S2369C2[];
extern  VTBL_ENTRY _ZTV7S2369C2[];
Class_Descriptor cd_S2369C2 = {  "S2369C2", // class name
  bases_S2369C2, 2,
  &(vtc_S2369C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,252), // object size
  NSPAIRA(_ZTI7S2369C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2369C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2369C1  : S2369C2 {
  ::S119C11_nt s2369c1f0;
  __tsi64 s2369c1f1;
  int s2369c1f2[2];
  void *s2369c1f3[2];
  virtual  ~S2369C1(); // _ZN7S2369C1D1Ev
  virtual void  v1(); // _ZN7S2369C12v1Ev
  virtual void  v2(); // _ZN7S2369C12v2Ev
  virtual void  v3(); // _ZN7S2369C12v3Ev
  virtual void  v4(); // _ZN7S2369C12v4Ev
  S2369C1(); // tgen
};
//SIG(1 S2369C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 v11 v12 v13 v14 v15 FC7{ m FC8{ Fl[4]}} FC9{ m Fp FC10{ Fi[4]}} FC11{ m FL Fi[2] Fp[5] FC12{ m FL Fi[3] Fp[2] Fi FC13{ BC14{ m Fi FL[2] Fc Fi FC5 FC5 FC15{ BC16{ m Fp Fi[2] FC17{ m Fp}}}} Fc}} Fc[2]} Fp[2] FC18{ m Fp Fi[2] FC19{ m}} Fi[4]} vd v1 v2 v3 v4 FC17 FL Fi[2] Fp[2]}


 S2369C1 ::~S2369C1(){ note_dtor("S2369C1", this);}
void  S2369C1 ::v1(){vfunc_called(this, "_ZN7S2369C12v1Ev");}
void  S2369C1 ::v2(){vfunc_called(this, "_ZN7S2369C12v2Ev");}
void  S2369C1 ::v3(){vfunc_called(this, "_ZN7S2369C12v3Ev");}
void  S2369C1 ::v4(){vfunc_called(this, "_ZN7S2369C12v4Ev");}
S2369C1 ::S2369C1(){ note_ctor("S2369C1", this);} // tgen

static void Test_S2369C1()
{
  extern Class_Descriptor cd_S2369C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,71)];
    init_test(&cd_S2369C1, buf);
    S2369C1 *dp, &lv = *(dp=new (buf) S2369C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,280), "sizeof(S2369C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2369C1)");
    check_base_class_offset(lv, (S2369C4*)(S2369C3*)(S2369C2*), 0, "S2369C1");
    check_base_class_offset(lv, (S2369C3*)(S2369C2*), 0, "S2369C1");
    check_base_class_offset(lv, (S2369C2*), 0, "S2369C1");
    check_field_offset(lv, s2369c1f0, ABISELECT(368,252), "S2369C1.s2369c1f0");
    check_field_offset(lv, s2369c1f1, ABISELECT(376,256), "S2369C1.s2369c1f1");
    check_field_offset(lv, s2369c1f2, ABISELECT(384,264), "S2369C1.s2369c1f2");
    check_field_offset(lv, s2369c1f3, ABISELECT(392,272), "S2369C1.s2369c1f3");
    test_class_info(&lv, &cd_S2369C1);
    dp->~S2369C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2369C1(Test_S2369C1, "S2369C1", ABISELECT(408,280));

#else // __cplusplus

extern void _ZN7S2369C1C1Ev();
extern void _ZN7S2369C1D1Ev();
Name_Map name_map_S2369C1[] = {
  NSPAIR(_ZN7S2369C1C1Ev),
  NSPAIR(_ZN7S2369C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2369C4;
extern VTBL_ENTRY _ZTI7S2369C4[];
extern  VTBL_ENTRY _ZTV7S2369C4[];
extern Class_Descriptor cd_S2369C3;
extern VTBL_ENTRY _ZTI7S2369C3[];
extern  VTBL_ENTRY _ZTV7S2369C3[];
extern Class_Descriptor cd_S2369C2;
extern VTBL_ENTRY _ZTI7S2369C2[];
extern  VTBL_ENTRY _ZTV7S2369C2[];
static Base_Class bases_S2369C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2369C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2369C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2369C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2369C1[];
extern void _ZN7S2369C1D1Ev();
extern void _ZN7S2369C1D0Ev();
extern void _ZN7S2369C42v5Ev();
extern void _ZN7S2369C42v6Ev();
extern void _ZN7S2369C42v7Ev();
extern void _ZN7S2369C32v8Ev();
extern void _ZN7S2369C32v9Ev();
extern void _ZN7S2369C23v10Ev();
extern void _ZN7S2369C23v11Ev();
extern void _ZN7S2369C23v12Ev();
extern void _ZN7S2369C23v13Ev();
extern void _ZN7S2369C23v14Ev();
extern void _ZN7S2369C23v15Ev();
extern void _ZN7S2369C12v1Ev();
extern void _ZN7S2369C12v2Ev();
extern void _ZN7S2369C12v3Ev();
extern void _ZN7S2369C12v4Ev();
static  VTBL_ENTRY vtc_S2369C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2369C1[0]),
  (VTBL_ENTRY)&_ZN7S2369C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2369C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2369C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2369C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2369C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2369C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2369C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2369C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2369C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2369C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2369C1[];
extern  VTBL_ENTRY _ZTV7S2369C1[];
Class_Descriptor cd_S2369C1 = {  "S2369C1", // class name
  bases_S2369C1, 3,
  &(vtc_S2369C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(408,280), // object size
  NSPAIRA(_ZTI7S2369C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2369C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2371C4  {
  ::S119C13_nt s2371c4f0;
  int s2371c4f1[2];
  char s2371c4f2;
  virtual  ~S2371C4(); // _ZN7S2371C4D1Ev
  virtual void  v5(); // _ZN7S2371C42v5Ev
  virtual void  v6(); // _ZN7S2371C42v6Ev
  virtual void  v7(); // _ZN7S2371C42v7Ev
  S2371C4(); // tgen
};
//SIG(-1 S2371C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2371C4 ::~S2371C4(){ note_dtor("S2371C4", this);}
void  S2371C4 ::v5(){vfunc_called(this, "_ZN7S2371C42v5Ev");}
void  S2371C4 ::v6(){vfunc_called(this, "_ZN7S2371C42v6Ev");}
void  S2371C4 ::v7(){vfunc_called(this, "_ZN7S2371C42v7Ev");}
S2371C4 ::S2371C4(){ note_ctor("S2371C4", this);} // tgen

static void Test_S2371C4()
{
  extern Class_Descriptor cd_S2371C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2371C4, buf);
    S2371C4 *dp, &lv = *(dp=new (buf) S2371C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2371C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2371C4)");
    check_field_offset(lv, s2371c4f0, ABISELECT(8,4), "S2371C4.s2371c4f0");
    check_field_offset(lv, s2371c4f1, ABISELECT(24,16), "S2371C4.s2371c4f1");
    check_field_offset(lv, s2371c4f2, ABISELECT(32,24), "S2371C4.s2371c4f2");
    test_class_info(&lv, &cd_S2371C4);
    dp->~S2371C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2371C4(Test_S2371C4, "S2371C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2371C4C1Ev();
extern void _ZN7S2371C4D1Ev();
Name_Map name_map_S2371C4[] = {
  NSPAIR(_ZN7S2371C4C1Ev),
  NSPAIR(_ZN7S2371C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2371C4[];
extern void _ZN7S2371C4D1Ev();
extern void _ZN7S2371C4D0Ev();
extern void _ZN7S2371C42v5Ev();
extern void _ZN7S2371C42v6Ev();
extern void _ZN7S2371C42v7Ev();
static  VTBL_ENTRY vtc_S2371C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2371C4[0]),
  (VTBL_ENTRY)&_ZN7S2371C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2371C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2371C4[];
extern  VTBL_ENTRY _ZTV7S2371C4[];
Class_Descriptor cd_S2371C4 = {  "S2371C4", // class name
  0,0,//no base classes
  &(vtc_S2371C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2371C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2371C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2371C3  : S2371C4 {
  void *s2371c3f0;
  virtual void  v8(); // _ZN7S2371C32v8Ev
  virtual void  v9(); // _ZN7S2371C32v9Ev
  ~S2371C3(); // tgen
  S2371C3(); // tgen
};
//SIG(-1 S2371C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2371C3 ::v8(){vfunc_called(this, "_ZN7S2371C32v8Ev");}
void  S2371C3 ::v9(){vfunc_called(this, "_ZN7S2371C32v9Ev");}
S2371C3 ::~S2371C3(){ note_dtor("S2371C3", this);} // tgen
S2371C3 ::S2371C3(){ note_ctor("S2371C3", this);} // tgen

static void Test_S2371C3()
{
  extern Class_Descriptor cd_S2371C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2371C3, buf);
    S2371C3 *dp, &lv = *(dp=new (buf) S2371C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2371C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2371C3)");
    check_base_class_offset(lv, (S2371C4*), 0, "S2371C3");
    check_field_offset(lv, s2371c3f0, ABISELECT(40,28), "S2371C3.s2371c3f0");
    test_class_info(&lv, &cd_S2371C3);
    dp->~S2371C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2371C3(Test_S2371C3, "S2371C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2371C3C1Ev();
extern void _ZN7S2371C3D1Ev();
Name_Map name_map_S2371C3[] = {
  NSPAIR(_ZN7S2371C3C1Ev),
  NSPAIR(_ZN7S2371C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2371C4;
extern VTBL_ENTRY _ZTI7S2371C4[];
extern  VTBL_ENTRY _ZTV7S2371C4[];
static Base_Class bases_S2371C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2371C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2371C3[];
extern void _ZN7S2371C3D1Ev();
extern void _ZN7S2371C3D0Ev();
extern void _ZN7S2371C42v5Ev();
extern void _ZN7S2371C42v6Ev();
extern void _ZN7S2371C42v7Ev();
extern void _ZN7S2371C32v8Ev();
extern void _ZN7S2371C32v9Ev();
static  VTBL_ENTRY vtc_S2371C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2371C3[0]),
  (VTBL_ENTRY)&_ZN7S2371C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2371C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2371C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2371C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S2371C3[];
extern  VTBL_ENTRY _ZTV7S2371C3[];
Class_Descriptor cd_S2371C3 = {  "S2371C3", // class name
  bases_S2371C3, 1,
  &(vtc_S2371C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2371C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2371C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2371C2  : S2371C3 {
  ::S21927C2_nt s2371c2f0;
  ::S21925C4_nt s2371c2f1;
  ::S2370C11 s2371c2f2;
  void *s2371c2f3[2];
  ::S119C9_nt s2371c2f4;
  int s2371c2f5[4];
  virtual  ~S2371C2(); // _ZN7S2371C2D1Ev
  virtual void  v10(); // _ZN7S2371C23v10Ev
  virtual void  v11(); // _ZN7S2371C23v11Ev
  virtual void  v12(); // _ZN7S2371C23v12Ev
  virtual void  v13(); // _ZN7S2371C23v13Ev
  virtual void  v14(); // _ZN7S2371C23v14Ev
  virtual void  v15(); // _ZN7S2371C23v15Ev
  S2371C2(); // tgen
};
//SIG(-1 S2371C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 FC6{ m FL[4]} FC7{ m Fp FC8{ Fi[4]}} FC9{ m FL Fi[2] Fp[5] FC10{ m FL Fi[3] Fp[2] Fi FC11{ BC12{ m Fi FL[2] Fc Fi FC4 FC4 FC13{ BC14{ m Fp Fi[2] FC15{ m Fp}}}} Fc}} Fc[2]} Fp[2] FC16{ m Fp Fi[2] FC17{ m}} Fi[4]}


 S2371C2 ::~S2371C2(){ note_dtor("S2371C2", this);}
void  S2371C2 ::v10(){vfunc_called(this, "_ZN7S2371C23v10Ev");}
void  S2371C2 ::v11(){vfunc_called(this, "_ZN7S2371C23v11Ev");}
void  S2371C2 ::v12(){vfunc_called(this, "_ZN7S2371C23v12Ev");}
void  S2371C2 ::v13(){vfunc_called(this, "_ZN7S2371C23v13Ev");}
void  S2371C2 ::v14(){vfunc_called(this, "_ZN7S2371C23v14Ev");}
void  S2371C2 ::v15(){vfunc_called(this, "_ZN7S2371C23v15Ev");}
S2371C2 ::S2371C2(){ note_ctor("S2371C2", this);} // tgen

static void Test_S2371C2()
{
  extern Class_Descriptor cd_S2371C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,68)];
    init_test(&cd_S2371C2, buf);
    S2371C2 *dp, &lv = *(dp=new (buf) S2371C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,268), "sizeof(S2371C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2371C2)");
    check_base_class_offset(lv, (S2371C4*)(S2371C3*), 0, "S2371C2");
    check_base_class_offset(lv, (S2371C3*), 0, "S2371C2");
    check_field_offset(lv, s2371c2f0, ABISELECT(48,32), "S2371C2.s2371c2f0");
    check_field_offset(lv, s2371c2f1, ABISELECT(80,64), "S2371C2.s2371c2f1");
    check_field_offset(lv, s2371c2f2, ABISELECT(104,84), "S2371C2.s2371c2f2");
    check_field_offset(lv, s2371c2f3, ABISELECT(312,228), "S2371C2.s2371c2f3");
    check_field_offset(lv, s2371c2f4, ABISELECT(328,236), "S2371C2.s2371c2f4");
    check_field_offset(lv, s2371c2f5, ABISELECT(352,252), "S2371C2.s2371c2f5");
    test_class_info(&lv, &cd_S2371C2);
    dp->~S2371C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2371C2(Test_S2371C2, "S2371C2", ABISELECT(368,268));

#else // __cplusplus

extern void _ZN7S2371C2C1Ev();
extern void _ZN7S2371C2D1Ev();
Name_Map name_map_S2371C2[] = {
  NSPAIR(_ZN7S2371C2C1Ev),
  NSPAIR(_ZN7S2371C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2371C4;
extern VTBL_ENTRY _ZTI7S2371C4[];
extern  VTBL_ENTRY _ZTV7S2371C4[];
extern Class_Descriptor cd_S2371C3;
extern VTBL_ENTRY _ZTI7S2371C3[];
extern  VTBL_ENTRY _ZTV7S2371C3[];
static Base_Class bases_S2371C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2371C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2371C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2371C2[];
extern void _ZN7S2371C2D1Ev();
extern void _ZN7S2371C2D0Ev();
extern void _ZN7S2371C42v5Ev();
extern void _ZN7S2371C42v6Ev();
extern void _ZN7S2371C42v7Ev();
extern void _ZN7S2371C32v8Ev();
extern void _ZN7S2371C32v9Ev();
extern void _ZN7S2371C23v10Ev();
extern void _ZN7S2371C23v11Ev();
extern void _ZN7S2371C23v12Ev();
extern void _ZN7S2371C23v13Ev();
extern void _ZN7S2371C23v14Ev();
extern void _ZN7S2371C23v15Ev();
static  VTBL_ENTRY vtc_S2371C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2371C2[0]),
  (VTBL_ENTRY)&_ZN7S2371C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2371C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2371C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2371C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S2371C2[];
extern  VTBL_ENTRY _ZTV7S2371C2[];
Class_Descriptor cd_S2371C2 = {  "S2371C2", // class name
  bases_S2371C2, 2,
  &(vtc_S2371C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,268), // object size
  NSPAIRA(_ZTI7S2371C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2371C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2371C1  : S2371C2 {
  ::S119C11_nt s2371c1f0;
  __tsi64 s2371c1f1;
  int s2371c1f2[2];
  void *s2371c1f3[2];
  virtual  ~S2371C1(); // _ZN7S2371C1D1Ev
  virtual void  v1(); // _ZN7S2371C12v1Ev
  virtual void  v2(); // _ZN7S2371C12v2Ev
  virtual void  v3(); // _ZN7S2371C12v3Ev
  virtual void  v4(); // _ZN7S2371C12v4Ev
  S2371C1(); // tgen
};
//SIG(1 S2371C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 v11 v12 v13 v14 v15 FC7{ m FL[4]} FC8{ m Fp FC9{ Fi[4]}} FC10{ m FL Fi[2] Fp[5] FC11{ m FL Fi[3] Fp[2] Fi FC12{ BC13{ m Fi FL[2] Fc Fi FC5 FC5 FC14{ BC15{ m Fp Fi[2] FC16{ m Fp}}}} Fc}} Fc[2]} Fp[2] FC17{ m Fp Fi[2] FC18{ m}} Fi[4]} vd v1 v2 v3 v4 FC16 FL Fi[2] Fp[2]}


 S2371C1 ::~S2371C1(){ note_dtor("S2371C1", this);}
void  S2371C1 ::v1(){vfunc_called(this, "_ZN7S2371C12v1Ev");}
void  S2371C1 ::v2(){vfunc_called(this, "_ZN7S2371C12v2Ev");}
void  S2371C1 ::v3(){vfunc_called(this, "_ZN7S2371C12v3Ev");}
void  S2371C1 ::v4(){vfunc_called(this, "_ZN7S2371C12v4Ev");}
S2371C1 ::S2371C1(){ note_ctor("S2371C1", this);} // tgen

static void Test_S2371C1()
{
  extern Class_Descriptor cd_S2371C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,75)];
    init_test(&cd_S2371C1, buf);
    S2371C1 *dp, &lv = *(dp=new (buf) S2371C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,296), "sizeof(S2371C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2371C1)");
    check_base_class_offset(lv, (S2371C4*)(S2371C3*)(S2371C2*), 0, "S2371C1");
    check_base_class_offset(lv, (S2371C3*)(S2371C2*), 0, "S2371C1");
    check_base_class_offset(lv, (S2371C2*), 0, "S2371C1");
    check_field_offset(lv, s2371c1f0, ABISELECT(368,268), "S2371C1.s2371c1f0");
    check_field_offset(lv, s2371c1f1, ABISELECT(376,272), "S2371C1.s2371c1f1");
    check_field_offset(lv, s2371c1f2, ABISELECT(384,280), "S2371C1.s2371c1f2");
    check_field_offset(lv, s2371c1f3, ABISELECT(392,288), "S2371C1.s2371c1f3");
    test_class_info(&lv, &cd_S2371C1);
    dp->~S2371C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2371C1(Test_S2371C1, "S2371C1", ABISELECT(408,296));

#else // __cplusplus

extern void _ZN7S2371C1C1Ev();
extern void _ZN7S2371C1D1Ev();
Name_Map name_map_S2371C1[] = {
  NSPAIR(_ZN7S2371C1C1Ev),
  NSPAIR(_ZN7S2371C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2371C4;
extern VTBL_ENTRY _ZTI7S2371C4[];
extern  VTBL_ENTRY _ZTV7S2371C4[];
extern Class_Descriptor cd_S2371C3;
extern VTBL_ENTRY _ZTI7S2371C3[];
extern  VTBL_ENTRY _ZTV7S2371C3[];
extern Class_Descriptor cd_S2371C2;
extern VTBL_ENTRY _ZTI7S2371C2[];
extern  VTBL_ENTRY _ZTV7S2371C2[];
static Base_Class bases_S2371C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2371C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2371C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2371C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2371C1[];
extern void _ZN7S2371C1D1Ev();
extern void _ZN7S2371C1D0Ev();
extern void _ZN7S2371C42v5Ev();
extern void _ZN7S2371C42v6Ev();
extern void _ZN7S2371C42v7Ev();
extern void _ZN7S2371C32v8Ev();
extern void _ZN7S2371C32v9Ev();
extern void _ZN7S2371C23v10Ev();
extern void _ZN7S2371C23v11Ev();
extern void _ZN7S2371C23v12Ev();
extern void _ZN7S2371C23v13Ev();
extern void _ZN7S2371C23v14Ev();
extern void _ZN7S2371C23v15Ev();
extern void _ZN7S2371C12v1Ev();
extern void _ZN7S2371C12v2Ev();
extern void _ZN7S2371C12v3Ev();
extern void _ZN7S2371C12v4Ev();
static  VTBL_ENTRY vtc_S2371C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2371C1[0]),
  (VTBL_ENTRY)&_ZN7S2371C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2371C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2371C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2371C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2371C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2371C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2371C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2371C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2371C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2371C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2371C1[];
extern  VTBL_ENTRY _ZTV7S2371C1[];
Class_Descriptor cd_S2371C1 = {  "S2371C1", // class name
  bases_S2371C1, 3,
  &(vtc_S2371C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(408,296), // object size
  NSPAIRA(_ZTI7S2371C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2371C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1365C4  {
  void *s1365c4f0;
  ::S119C12_nt s1365c4f1;
  char s1365c4f2;
  int s1365c4f3;
  virtual  ~S1365C4(); // _ZN7S1365C4D1Ev
  virtual void  v3(); // _ZN7S1365C42v3Ev
  virtual void  v4(); // _ZN7S1365C42v4Ev
  virtual void  v5(); // _ZN7S1365C42v5Ev
  virtual void  v6(); // _ZN7S1365C42v6Ev
  virtual void  v7(); // _ZN7S1365C42v7Ev
  virtual void  v8(); // _ZN7S1365C42v8Ev
  virtual void  v9(); // _ZN7S1365C42v9Ev
  virtual void  v10(); // _ZN7S1365C43v10Ev
  virtual void  v11(); // _ZN7S1365C43v11Ev
  virtual void  v12(); // _ZN7S1365C43v12Ev
  virtual void  v13(); // _ZN7S1365C43v13Ev
  virtual void  v14(); // _ZN7S1365C43v14Ev
  virtual void  v15(); // _ZN7S1365C43v15Ev
  S1365C4(); // tgen
};
//SIG(-1 S1365C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fc Fi}


 S1365C4 ::~S1365C4(){ note_dtor("S1365C4", this);}
void  S1365C4 ::v3(){vfunc_called(this, "_ZN7S1365C42v3Ev");}
void  S1365C4 ::v4(){vfunc_called(this, "_ZN7S1365C42v4Ev");}
void  S1365C4 ::v5(){vfunc_called(this, "_ZN7S1365C42v5Ev");}
void  S1365C4 ::v6(){vfunc_called(this, "_ZN7S1365C42v6Ev");}
void  S1365C4 ::v7(){vfunc_called(this, "_ZN7S1365C42v7Ev");}
void  S1365C4 ::v8(){vfunc_called(this, "_ZN7S1365C42v8Ev");}
void  S1365C4 ::v9(){vfunc_called(this, "_ZN7S1365C42v9Ev");}
void  S1365C4 ::v10(){vfunc_called(this, "_ZN7S1365C43v10Ev");}
void  S1365C4 ::v11(){vfunc_called(this, "_ZN7S1365C43v11Ev");}
void  S1365C4 ::v12(){vfunc_called(this, "_ZN7S1365C43v12Ev");}
void  S1365C4 ::v13(){vfunc_called(this, "_ZN7S1365C43v13Ev");}
void  S1365C4 ::v14(){vfunc_called(this, "_ZN7S1365C43v14Ev");}
void  S1365C4 ::v15(){vfunc_called(this, "_ZN7S1365C43v15Ev");}
S1365C4 ::S1365C4(){ note_ctor("S1365C4", this);} // tgen

static void Test_S1365C4()
{
  extern Class_Descriptor cd_S1365C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1365C4, buf);
    S1365C4 *dp, &lv = *(dp=new (buf) S1365C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1365C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1365C4)");
    check_field_offset(lv, s1365c4f0, ABISELECT(8,4), "S1365C4.s1365c4f0");
    check_field_offset(lv, s1365c4f1, ABISELECT(16,8), "S1365C4.s1365c4f1");
    check_field_offset(lv, s1365c4f2, ABISELECT(40,24), "S1365C4.s1365c4f2");
    check_field_offset(lv, s1365c4f3, ABISELECT(44,28), "S1365C4.s1365c4f3");
    test_class_info(&lv, &cd_S1365C4);
    dp->~S1365C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1365C4(Test_S1365C4, "S1365C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1365C4C1Ev();
extern void _ZN7S1365C4D1Ev();
Name_Map name_map_S1365C4[] = {
  NSPAIR(_ZN7S1365C4C1Ev),
  NSPAIR(_ZN7S1365C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1365C4[];
extern void _ZN7S1365C4D1Ev();
extern void _ZN7S1365C4D0Ev();
extern void _ZN7S1365C42v3Ev();
extern void _ZN7S1365C42v4Ev();
extern void _ZN7S1365C42v5Ev();
extern void _ZN7S1365C42v6Ev();
extern void _ZN7S1365C42v7Ev();
extern void _ZN7S1365C42v8Ev();
extern void _ZN7S1365C42v9Ev();
extern void _ZN7S1365C43v10Ev();
extern void _ZN7S1365C43v11Ev();
extern void _ZN7S1365C43v12Ev();
extern void _ZN7S1365C43v13Ev();
extern void _ZN7S1365C43v14Ev();
extern void _ZN7S1365C43v15Ev();
static  VTBL_ENTRY vtc_S1365C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1365C4[0]),
  (VTBL_ENTRY)&_ZN7S1365C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1365C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S1365C4[];
extern  VTBL_ENTRY _ZTV7S1365C4[];
Class_Descriptor cd_S1365C4 = {  "S1365C4", // class name
  0,0,//no base classes
  &(vtc_S1365C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1365C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1365C4),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1365C3  : S1365C4 {
  void *s1365c3f0[3];
  int s1365c3f1;
  virtual  ~S1365C3(); // _ZN7S1365C3D1Ev
  virtual void  v16(); // _ZN7S1365C33v16Ev
  virtual void  v17(); // _ZN7S1365C33v17Ev
  virtual void  v18(); // _ZN7S1365C33v18Ev
  virtual void  v19(); // _ZN7S1365C33v19Ev
  virtual void  v20(); // _ZN7S1365C33v20Ev
  virtual void  v21(); // _ZN7S1365C33v21Ev
  virtual void  v22(); // _ZN7S1365C33v22Ev
  virtual void  v23(); // _ZN7S1365C33v23Ev
  virtual void  v24(); // _ZN7S1365C33v24Ev
  virtual void  v25(); // _ZN7S1365C33v25Ev
  virtual void  v26(); // _ZN7S1365C33v26Ev
  S1365C3(); // tgen
};
//SIG(-1 S1365C3) C1{ BC2{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fc Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] Fi}


 S1365C3 ::~S1365C3(){ note_dtor("S1365C3", this);}
void  S1365C3 ::v16(){vfunc_called(this, "_ZN7S1365C33v16Ev");}
void  S1365C3 ::v17(){vfunc_called(this, "_ZN7S1365C33v17Ev");}
void  S1365C3 ::v18(){vfunc_called(this, "_ZN7S1365C33v18Ev");}
void  S1365C3 ::v19(){vfunc_called(this, "_ZN7S1365C33v19Ev");}
void  S1365C3 ::v20(){vfunc_called(this, "_ZN7S1365C33v20Ev");}
void  S1365C3 ::v21(){vfunc_called(this, "_ZN7S1365C33v21Ev");}
void  S1365C3 ::v22(){vfunc_called(this, "_ZN7S1365C33v22Ev");}
void  S1365C3 ::v23(){vfunc_called(this, "_ZN7S1365C33v23Ev");}
void  S1365C3 ::v24(){vfunc_called(this, "_ZN7S1365C33v24Ev");}
void  S1365C3 ::v25(){vfunc_called(this, "_ZN7S1365C33v25Ev");}
void  S1365C3 ::v26(){vfunc_called(this, "_ZN7S1365C33v26Ev");}
S1365C3 ::S1365C3(){ note_ctor("S1365C3", this);} // tgen

static void Test_S1365C3()
{
  extern Class_Descriptor cd_S1365C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S1365C3, buf);
    S1365C3 *dp, &lv = *(dp=new (buf) S1365C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S1365C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1365C3)");
    check_base_class_offset(lv, (S1365C4*), 0, "S1365C3");
    check_field_offset(lv, s1365c3f0, ABISELECT(48,32), "S1365C3.s1365c3f0");
    check_field_offset(lv, s1365c3f1, ABISELECT(72,44), "S1365C3.s1365c3f1");
    test_class_info(&lv, &cd_S1365C3);
    dp->~S1365C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1365C3(Test_S1365C3, "S1365C3", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S1365C3C1Ev();
extern void _ZN7S1365C3D1Ev();
Name_Map name_map_S1365C3[] = {
  NSPAIR(_ZN7S1365C3C1Ev),
  NSPAIR(_ZN7S1365C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1365C4;
extern VTBL_ENTRY _ZTI7S1365C4[];
extern  VTBL_ENTRY _ZTV7S1365C4[];
static Base_Class bases_S1365C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1365C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1365C3[];
extern void _ZN7S1365C3D1Ev();
extern void _ZN7S1365C3D0Ev();
extern void _ZN7S1365C42v3Ev();
extern void _ZN7S1365C42v4Ev();
extern void _ZN7S1365C42v5Ev();
extern void _ZN7S1365C42v6Ev();
extern void _ZN7S1365C42v7Ev();
extern void _ZN7S1365C42v8Ev();
extern void _ZN7S1365C42v9Ev();
extern void _ZN7S1365C43v10Ev();
extern void _ZN7S1365C43v11Ev();
extern void _ZN7S1365C43v12Ev();
extern void _ZN7S1365C43v13Ev();
extern void _ZN7S1365C43v14Ev();
extern void _ZN7S1365C43v15Ev();
extern void _ZN7S1365C33v16Ev();
extern void _ZN7S1365C33v17Ev();
extern void _ZN7S1365C33v18Ev();
extern void _ZN7S1365C33v19Ev();
extern void _ZN7S1365C33v20Ev();
extern void _ZN7S1365C33v21Ev();
extern void _ZN7S1365C33v22Ev();
extern void _ZN7S1365C33v23Ev();
extern void _ZN7S1365C33v24Ev();
extern void _ZN7S1365C33v25Ev();
extern void _ZN7S1365C33v26Ev();
static  VTBL_ENTRY vtc_S1365C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1365C3[0]),
  (VTBL_ENTRY)&_ZN7S1365C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1365C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v26Ev,
};
extern VTBL_ENTRY _ZTI7S1365C3[];
extern  VTBL_ENTRY _ZTV7S1365C3[];
Class_Descriptor cd_S1365C3 = {  "S1365C3", // class name
  bases_S1365C3, 1,
  &(vtc_S1365C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S1365C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1365C3),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1365C2  : S1365C3 {
  void *s1365c2f0[2];
  int s1365c2f1[3];
  ::S119C12_nt s1365c2f2;
  char s1365c2f3;
  ::S1283C8_nt s1365c2f4;
  char s1365c2f5;
  int s1365c2f6;
  char s1365c2f7;
  int s1365c2f8;
  char s1365c2f9[2];
  int s1365c2f10;
  char s1365c2f11;
  virtual  ~S1365C2(); // _ZN7S1365C2D1Ev
  virtual void  v27(); // _ZN7S1365C23v27Ev
  virtual void  v28(); // _ZN7S1365C23v28Ev
  virtual void  v29(); // _ZN7S1365C23v29Ev
  virtual void  v30(); // _ZN7S1365C23v30Ev
  virtual void  v31(); // _ZN7S1365C23v31Ev
  virtual void  v32(); // _ZN7S1365C23v32Ev
  virtual void  v33(); // _ZN7S1365C23v33Ev
  virtual void  v34(); // _ZN7S1365C23v34Ev
  virtual void  v35(); // _ZN7S1365C23v35Ev
  virtual void  v36(); // _ZN7S1365C23v36Ev
  virtual void  v37(); // _ZN7S1365C23v37Ev
  virtual void  v38(); // _ZN7S1365C23v38Ev
  virtual void  v39(); // _ZN7S1365C23v39Ev
  virtual void  v40(); // _ZN7S1365C23v40Ev
  virtual void  v41(); // _ZN7S1365C23v41Ev
  virtual void  v42(); // _ZN7S1365C23v42Ev
  virtual void  v43(); // _ZN7S1365C23v43Ev
  S1365C2(); // tgen
};
//SIG(-1 S1365C2) C1{ BC2{ BC3{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fc Fi} vd v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 Fp[3] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[2] Fi[3] FC4 Fc FC7{ m FC8{ m FL}} Fc Fi Fc Fi Fc[2] Fi Fc}


 S1365C2 ::~S1365C2(){ note_dtor("S1365C2", this);}
void  S1365C2 ::v27(){vfunc_called(this, "_ZN7S1365C23v27Ev");}
void  S1365C2 ::v28(){vfunc_called(this, "_ZN7S1365C23v28Ev");}
void  S1365C2 ::v29(){vfunc_called(this, "_ZN7S1365C23v29Ev");}
void  S1365C2 ::v30(){vfunc_called(this, "_ZN7S1365C23v30Ev");}
void  S1365C2 ::v31(){vfunc_called(this, "_ZN7S1365C23v31Ev");}
void  S1365C2 ::v32(){vfunc_called(this, "_ZN7S1365C23v32Ev");}
void  S1365C2 ::v33(){vfunc_called(this, "_ZN7S1365C23v33Ev");}
void  S1365C2 ::v34(){vfunc_called(this, "_ZN7S1365C23v34Ev");}
void  S1365C2 ::v35(){vfunc_called(this, "_ZN7S1365C23v35Ev");}
void  S1365C2 ::v36(){vfunc_called(this, "_ZN7S1365C23v36Ev");}
void  S1365C2 ::v37(){vfunc_called(this, "_ZN7S1365C23v37Ev");}
void  S1365C2 ::v38(){vfunc_called(this, "_ZN7S1365C23v38Ev");}
void  S1365C2 ::v39(){vfunc_called(this, "_ZN7S1365C23v39Ev");}
void  S1365C2 ::v40(){vfunc_called(this, "_ZN7S1365C23v40Ev");}
void  S1365C2 ::v41(){vfunc_called(this, "_ZN7S1365C23v41Ev");}
void  S1365C2 ::v42(){vfunc_called(this, "_ZN7S1365C23v42Ev");}
void  S1365C2 ::v43(){vfunc_called(this, "_ZN7S1365C23v43Ev");}
S1365C2 ::S1365C2(){ note_ctor("S1365C2", this);} // tgen

static void Test_S1365C2()
{
  extern Class_Descriptor cd_S1365C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S1365C2, buf);
    S1365C2 *dp, &lv = *(dp=new (buf) S1365C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S1365C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1365C2)");
    check_base_class_offset(lv, (S1365C4*)(S1365C3*), 0, "S1365C2");
    check_base_class_offset(lv, (S1365C3*), 0, "S1365C2");
    check_field_offset(lv, s1365c2f0, ABISELECT(80,48), "S1365C2.s1365c2f0");
    check_field_offset(lv, s1365c2f1, ABISELECT(96,56), "S1365C2.s1365c2f1");
    check_field_offset(lv, s1365c2f2, ABISELECT(112,68), "S1365C2.s1365c2f2");
    check_field_offset(lv, s1365c2f3, ABISELECT(136,84), "S1365C2.s1365c2f3");
    check_field_offset(lv, s1365c2f4, ABISELECT(144,88), "S1365C2.s1365c2f4");
    check_field_offset(lv, s1365c2f5, ABISELECT(152,96), "S1365C2.s1365c2f5");
    check_field_offset(lv, s1365c2f6, ABISELECT(156,100), "S1365C2.s1365c2f6");
    check_field_offset(lv, s1365c2f7, ABISELECT(160,104), "S1365C2.s1365c2f7");
    check_field_offset(lv, s1365c2f8, ABISELECT(164,108), "S1365C2.s1365c2f8");
    check_field_offset(lv, s1365c2f9, ABISELECT(168,112), "S1365C2.s1365c2f9");
    check_field_offset(lv, s1365c2f10, ABISELECT(172,116), "S1365C2.s1365c2f10");
    check_field_offset(lv, s1365c2f11, ABISELECT(176,120), "S1365C2.s1365c2f11");
    test_class_info(&lv, &cd_S1365C2);
    dp->~S1365C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1365C2(Test_S1365C2, "S1365C2", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN7S1365C2C1Ev();
extern void _ZN7S1365C2D1Ev();
Name_Map name_map_S1365C2[] = {
  NSPAIR(_ZN7S1365C2C1Ev),
  NSPAIR(_ZN7S1365C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1365C4;
extern VTBL_ENTRY _ZTI7S1365C4[];
extern  VTBL_ENTRY _ZTV7S1365C4[];
extern Class_Descriptor cd_S1365C3;
extern VTBL_ENTRY _ZTI7S1365C3[];
extern  VTBL_ENTRY _ZTV7S1365C3[];
static Base_Class bases_S1365C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1365C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1365C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1365C2[];
extern void _ZN7S1365C2D1Ev();
extern void _ZN7S1365C2D0Ev();
extern void _ZN7S1365C42v3Ev();
extern void _ZN7S1365C42v4Ev();
extern void _ZN7S1365C42v5Ev();
extern void _ZN7S1365C42v6Ev();
extern void _ZN7S1365C42v7Ev();
extern void _ZN7S1365C42v8Ev();
extern void _ZN7S1365C42v9Ev();
extern void _ZN7S1365C43v10Ev();
extern void _ZN7S1365C43v11Ev();
extern void _ZN7S1365C43v12Ev();
extern void _ZN7S1365C43v13Ev();
extern void _ZN7S1365C43v14Ev();
extern void _ZN7S1365C43v15Ev();
extern void _ZN7S1365C33v16Ev();
extern void _ZN7S1365C33v17Ev();
extern void _ZN7S1365C33v18Ev();
extern void _ZN7S1365C33v19Ev();
extern void _ZN7S1365C33v20Ev();
extern void _ZN7S1365C33v21Ev();
extern void _ZN7S1365C33v22Ev();
extern void _ZN7S1365C33v23Ev();
extern void _ZN7S1365C33v24Ev();
extern void _ZN7S1365C33v25Ev();
extern void _ZN7S1365C33v26Ev();
extern void _ZN7S1365C23v27Ev();
extern void _ZN7S1365C23v28Ev();
extern void _ZN7S1365C23v29Ev();
extern void _ZN7S1365C23v30Ev();
extern void _ZN7S1365C23v31Ev();
extern void _ZN7S1365C23v32Ev();
extern void _ZN7S1365C23v33Ev();
extern void _ZN7S1365C23v34Ev();
extern void _ZN7S1365C23v35Ev();
extern void _ZN7S1365C23v36Ev();
extern void _ZN7S1365C23v37Ev();
extern void _ZN7S1365C23v38Ev();
extern void _ZN7S1365C23v39Ev();
extern void _ZN7S1365C23v40Ev();
extern void _ZN7S1365C23v41Ev();
extern void _ZN7S1365C23v42Ev();
extern void _ZN7S1365C23v43Ev();
static  VTBL_ENTRY vtc_S1365C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1365C2[0]),
  (VTBL_ENTRY)&_ZN7S1365C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1365C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v28Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v29Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v30Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v31Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v32Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v33Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v34Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v35Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v36Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v37Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v38Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v39Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v40Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v41Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v42Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v43Ev,
};
extern VTBL_ENTRY _ZTI7S1365C2[];
extern  VTBL_ENTRY _ZTV7S1365C2[];
Class_Descriptor cd_S1365C2 = {  "S1365C2", // class name
  bases_S1365C2, 2,
  &(vtc_S1365C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI7S1365C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1365C2),45, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1365C1  : S1365C2 {
  virtual  ~S1365C1(); // _ZN7S1365C1D1Ev
  virtual void  v1(); // _ZN7S1365C12v1Ev
  virtual void  v2(); // _ZN7S1365C12v2Ev
  S1365C1(); // tgen
};
//SIG(1 S1365C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fc Fi} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp[3] Fi} vd v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 Fp[2] Fi[3] FC5 Fc FC8{ m FC9{ m FL}} Fc Fi Fc Fi Fc[2] Fi Fc} vd v1 v2}


 S1365C1 ::~S1365C1(){ note_dtor("S1365C1", this);}
void  S1365C1 ::v1(){vfunc_called(this, "_ZN7S1365C12v1Ev");}
void  S1365C1 ::v2(){vfunc_called(this, "_ZN7S1365C12v2Ev");}
S1365C1 ::S1365C1(){ note_ctor("S1365C1", this);} // tgen

static void Test_S1365C1()
{
  extern Class_Descriptor cd_S1365C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S1365C1, buf);
    S1365C1 *dp, &lv = *(dp=new (buf) S1365C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S1365C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1365C1)");
    check_base_class_offset(lv, (S1365C4*)(S1365C3*)(S1365C2*), 0, "S1365C1");
    check_base_class_offset(lv, (S1365C3*)(S1365C2*), 0, "S1365C1");
    check_base_class_offset(lv, (S1365C2*), 0, "S1365C1");
    test_class_info(&lv, &cd_S1365C1);
    dp->~S1365C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1365C1(Test_S1365C1, "S1365C1", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN7S1365C1C1Ev();
extern void _ZN7S1365C1D1Ev();
Name_Map name_map_S1365C1[] = {
  NSPAIR(_ZN7S1365C1C1Ev),
  NSPAIR(_ZN7S1365C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1365C4;
extern VTBL_ENTRY _ZTI7S1365C4[];
extern  VTBL_ENTRY _ZTV7S1365C4[];
extern Class_Descriptor cd_S1365C3;
extern VTBL_ENTRY _ZTI7S1365C3[];
extern  VTBL_ENTRY _ZTV7S1365C3[];
extern Class_Descriptor cd_S1365C2;
extern VTBL_ENTRY _ZTI7S1365C2[];
extern  VTBL_ENTRY _ZTV7S1365C2[];
static Base_Class bases_S1365C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1365C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1365C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1365C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1365C1[];
extern void _ZN7S1365C1D1Ev();
extern void _ZN7S1365C1D0Ev();
extern void _ZN7S1365C42v3Ev();
extern void _ZN7S1365C42v4Ev();
extern void _ZN7S1365C42v5Ev();
extern void _ZN7S1365C42v6Ev();
extern void _ZN7S1365C42v7Ev();
extern void _ZN7S1365C42v8Ev();
extern void _ZN7S1365C42v9Ev();
extern void _ZN7S1365C43v10Ev();
extern void _ZN7S1365C43v11Ev();
extern void _ZN7S1365C43v12Ev();
extern void _ZN7S1365C43v13Ev();
extern void _ZN7S1365C43v14Ev();
extern void _ZN7S1365C43v15Ev();
extern void _ZN7S1365C33v16Ev();
extern void _ZN7S1365C33v17Ev();
extern void _ZN7S1365C33v18Ev();
extern void _ZN7S1365C33v19Ev();
extern void _ZN7S1365C33v20Ev();
extern void _ZN7S1365C33v21Ev();
extern void _ZN7S1365C33v22Ev();
extern void _ZN7S1365C33v23Ev();
extern void _ZN7S1365C33v24Ev();
extern void _ZN7S1365C33v25Ev();
extern void _ZN7S1365C33v26Ev();
extern void _ZN7S1365C23v27Ev();
extern void _ZN7S1365C23v28Ev();
extern void _ZN7S1365C23v29Ev();
extern void _ZN7S1365C23v30Ev();
extern void _ZN7S1365C23v31Ev();
extern void _ZN7S1365C23v32Ev();
extern void _ZN7S1365C23v33Ev();
extern void _ZN7S1365C23v34Ev();
extern void _ZN7S1365C23v35Ev();
extern void _ZN7S1365C23v36Ev();
extern void _ZN7S1365C23v37Ev();
extern void _ZN7S1365C23v38Ev();
extern void _ZN7S1365C23v39Ev();
extern void _ZN7S1365C23v40Ev();
extern void _ZN7S1365C23v41Ev();
extern void _ZN7S1365C23v42Ev();
extern void _ZN7S1365C23v43Ev();
extern void _ZN7S1365C12v1Ev();
extern void _ZN7S1365C12v2Ev();
static  VTBL_ENTRY vtc_S1365C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1365C1[0]),
  (VTBL_ENTRY)&_ZN7S1365C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1365C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1365C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1365C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1365C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v28Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v29Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v30Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v31Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v32Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v33Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v34Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v35Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v36Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v37Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v38Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v39Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v40Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v41Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v42Ev,
  (VTBL_ENTRY)&_ZN7S1365C23v43Ev,
  (VTBL_ENTRY)&_ZN7S1365C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1365C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1365C1[];
extern  VTBL_ENTRY _ZTV7S1365C1[];
Class_Descriptor cd_S1365C1 = {  "S1365C1", // class name
  bases_S1365C1, 3,
  &(vtc_S1365C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI7S1365C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1365C1),47, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S774C4  : S119C7_nt {
  virtual void  v9(); // _ZN6S774C42v9Ev
  virtual void  v10(); // _ZN6S774C43v10Ev
  virtual void  v11(); // _ZN6S774C43v11Ev
  virtual void  v12(); // _ZN6S774C43v12Ev
  virtual void  v13(); // _ZN6S774C43v13Ev
  ~S774C4(); // tgen
  S774C4(); // tgen
};
//SIG(-1 S774C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S774C4 ::v9(){vfunc_called(this, "_ZN6S774C42v9Ev");}
void  S774C4 ::v10(){vfunc_called(this, "_ZN6S774C43v10Ev");}
void  S774C4 ::v11(){vfunc_called(this, "_ZN6S774C43v11Ev");}
void  S774C4 ::v12(){vfunc_called(this, "_ZN6S774C43v12Ev");}
void  S774C4 ::v13(){vfunc_called(this, "_ZN6S774C43v13Ev");}
S774C4 ::~S774C4(){ note_dtor("S774C4", this);} // tgen
S774C4 ::S774C4(){ note_ctor("S774C4", this);} // tgen

static void Test_S774C4()
{
  extern Class_Descriptor cd_S774C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S774C4, buf);
    S774C4 *dp, &lv = *(dp=new (buf) S774C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S774C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S774C4)");
    check_base_class_offset(lv, (S119C7_nt*), 0, "S774C4");
    test_class_info(&lv, &cd_S774C4);
    dp->~S774C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS774C4(Test_S774C4, "S774C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S774C4C1Ev();
extern void _ZN6S774C4D1Ev();
Name_Map name_map_S774C4[] = {
  NSPAIR(_ZN6S774C4C1Ev),
  NSPAIR(_ZN6S774C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
static Base_Class bases_S774C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S774C4[];
extern void _ZN6S774C4D1Ev();
extern void _ZN6S774C4D0Ev();
extern void _ZN6S774C42v9Ev();
extern void _ZN6S774C43v10Ev();
extern void _ZN6S774C43v11Ev();
extern void _ZN6S774C43v12Ev();
extern void _ZN6S774C43v13Ev();
static  VTBL_ENTRY vtc_S774C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S774C4[0]),
  (VTBL_ENTRY)&_ZN6S774C4D1Ev,
  (VTBL_ENTRY)&_ZN6S774C4D0Ev,
  (VTBL_ENTRY)&_ZN6S774C42v9Ev,
  (VTBL_ENTRY)&_ZN6S774C43v10Ev,
  (VTBL_ENTRY)&_ZN6S774C43v11Ev,
  (VTBL_ENTRY)&_ZN6S774C43v12Ev,
  (VTBL_ENTRY)&_ZN6S774C43v13Ev,
};
extern VTBL_ENTRY _ZTI6S774C4[];
extern  VTBL_ENTRY _ZTV6S774C4[];
Class_Descriptor cd_S774C4 = {  "S774C4", // class name
  bases_S774C4, 1,
  &(vtc_S774C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S774C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S774C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S774C3  : S774C4 {
  void *s774c3f0[3];
  ::S119C8_nt s774c3f1;
  virtual void  v14(); // _ZN6S774C33v14Ev
  virtual void  v15(); // _ZN6S774C33v15Ev
  virtual void  v16(); // _ZN6S774C33v16Ev
  virtual void  v17(); // _ZN6S774C33v17Ev
  virtual void  v18(); // _ZN6S774C33v18Ev
  virtual void  v19(); // _ZN6S774C33v19Ev
  virtual void  v20(); // _ZN6S774C33v20Ev
  virtual void  v21(); // _ZN6S774C33v21Ev
  virtual void  v22(); // _ZN6S774C33v22Ev
  virtual void  v23(); // _ZN6S774C33v23Ev
  virtual void  v24(); // _ZN6S774C33v24Ev
  ~S774C3(); // tgen
  S774C3(); // tgen
};
//SIG(-1 S774C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S774C3 ::v14(){vfunc_called(this, "_ZN6S774C33v14Ev");}
void  S774C3 ::v15(){vfunc_called(this, "_ZN6S774C33v15Ev");}
void  S774C3 ::v16(){vfunc_called(this, "_ZN6S774C33v16Ev");}
void  S774C3 ::v17(){vfunc_called(this, "_ZN6S774C33v17Ev");}
void  S774C3 ::v18(){vfunc_called(this, "_ZN6S774C33v18Ev");}
void  S774C3 ::v19(){vfunc_called(this, "_ZN6S774C33v19Ev");}
void  S774C3 ::v20(){vfunc_called(this, "_ZN6S774C33v20Ev");}
void  S774C3 ::v21(){vfunc_called(this, "_ZN6S774C33v21Ev");}
void  S774C3 ::v22(){vfunc_called(this, "_ZN6S774C33v22Ev");}
void  S774C3 ::v23(){vfunc_called(this, "_ZN6S774C33v23Ev");}
void  S774C3 ::v24(){vfunc_called(this, "_ZN6S774C33v24Ev");}
S774C3 ::~S774C3(){ note_dtor("S774C3", this);} // tgen
S774C3 ::S774C3(){ note_ctor("S774C3", this);} // tgen

static void Test_S774C3()
{
  extern Class_Descriptor cd_S774C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S774C3, buf);
    S774C3 *dp, &lv = *(dp=new (buf) S774C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S774C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S774C3)");
    check_base_class_offset(lv, (S119C7_nt*)(S774C4*), 0, "S774C3");
    check_base_class_offset(lv, (S774C4*), 0, "S774C3");
    check_field_offset(lv, s774c3f0, ABISELECT(16,8), "S774C3.s774c3f0");
    check_field_offset(lv, s774c3f1, ABISELECT(40,20), "S774C3.s774c3f1");
    test_class_info(&lv, &cd_S774C3);
    dp->~S774C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS774C3(Test_S774C3, "S774C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S774C3C1Ev();
extern void _ZN6S774C3D1Ev();
Name_Map name_map_S774C3[] = {
  NSPAIR(_ZN6S774C3C1Ev),
  NSPAIR(_ZN6S774C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S774C4;
extern VTBL_ENTRY _ZTI6S774C4[];
extern  VTBL_ENTRY _ZTV6S774C4[];
static Base_Class bases_S774C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S774C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S774C3[];
extern void _ZN6S774C3D1Ev();
extern void _ZN6S774C3D0Ev();
extern void _ZN6S774C42v9Ev();
extern void _ZN6S774C43v10Ev();
extern void _ZN6S774C43v11Ev();
extern void _ZN6S774C43v12Ev();
extern void _ZN6S774C43v13Ev();
extern void _ZN6S774C33v14Ev();
extern void _ZN6S774C33v15Ev();
extern void _ZN6S774C33v16Ev();
extern void _ZN6S774C33v17Ev();
extern void _ZN6S774C33v18Ev();
extern void _ZN6S774C33v19Ev();
extern void _ZN6S774C33v20Ev();
extern void _ZN6S774C33v21Ev();
extern void _ZN6S774C33v22Ev();
extern void _ZN6S774C33v23Ev();
extern void _ZN6S774C33v24Ev();
static  VTBL_ENTRY vtc_S774C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S774C3[0]),
  (VTBL_ENTRY)&_ZN6S774C3D1Ev,
  (VTBL_ENTRY)&_ZN6S774C3D0Ev,
  (VTBL_ENTRY)&_ZN6S774C42v9Ev,
  (VTBL_ENTRY)&_ZN6S774C43v10Ev,
  (VTBL_ENTRY)&_ZN6S774C43v11Ev,
  (VTBL_ENTRY)&_ZN6S774C43v12Ev,
  (VTBL_ENTRY)&_ZN6S774C43v13Ev,
  (VTBL_ENTRY)&_ZN6S774C33v14Ev,
  (VTBL_ENTRY)&_ZN6S774C33v15Ev,
  (VTBL_ENTRY)&_ZN6S774C33v16Ev,
  (VTBL_ENTRY)&_ZN6S774C33v17Ev,
  (VTBL_ENTRY)&_ZN6S774C33v18Ev,
  (VTBL_ENTRY)&_ZN6S774C33v19Ev,
  (VTBL_ENTRY)&_ZN6S774C33v20Ev,
  (VTBL_ENTRY)&_ZN6S774C33v21Ev,
  (VTBL_ENTRY)&_ZN6S774C33v22Ev,
  (VTBL_ENTRY)&_ZN6S774C33v23Ev,
  (VTBL_ENTRY)&_ZN6S774C33v24Ev,
};
extern VTBL_ENTRY _ZTI6S774C3[];
extern  VTBL_ENTRY _ZTV6S774C3[];
Class_Descriptor cd_S774C3 = {  "S774C3", // class name
  bases_S774C3, 2,
  &(vtc_S774C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S774C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S774C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S774C2  : S774C3 {
  ::S119C8_nt s774c2f0;
  ::S119C11_nt s774c2f1;
  void *s774c2f2;
  virtual void  v25(); // _ZN6S774C23v25Ev
  virtual void  v26(); // _ZN6S774C23v26Ev
  virtual void  v27(); // _ZN6S774C23v27Ev
  virtual void  v28(); // _ZN6S774C23v28Ev
  ~S774C2(); // tgen
  S774C2(); // tgen
};
//SIG(-1 S774C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v5 v6 v7 v8 v9} v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 FC5 FC8{ m Fp} Fp}


void  S774C2 ::v25(){vfunc_called(this, "_ZN6S774C23v25Ev");}
void  S774C2 ::v26(){vfunc_called(this, "_ZN6S774C23v26Ev");}
void  S774C2 ::v27(){vfunc_called(this, "_ZN6S774C23v27Ev");}
void  S774C2 ::v28(){vfunc_called(this, "_ZN6S774C23v28Ev");}
S774C2 ::~S774C2(){ note_dtor("S774C2", this);} // tgen
S774C2 ::S774C2(){ note_ctor("S774C2", this);} // tgen

static void Test_S774C2()
{
  extern Class_Descriptor cd_S774C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,20)];
    init_test(&cd_S774C2, buf);
    S774C2 *dp, &lv = *(dp=new (buf) S774C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,76), "sizeof(S774C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S774C2)");
    check_base_class_offset(lv, (S119C7_nt*)(S774C4*)(S774C3*), 0, "S774C2");
    check_base_class_offset(lv, (S774C4*)(S774C3*), 0, "S774C2");
    check_base_class_offset(lv, (S774C3*), 0, "S774C2");
    check_field_offset(lv, s774c2f0, ABISELECT(80,44), "S774C2.s774c2f0");
    check_field_offset(lv, s774c2f1, ABISELECT(120,68), "S774C2.s774c2f1");
    check_field_offset(lv, s774c2f2, ABISELECT(128,72), "S774C2.s774c2f2");
    test_class_info(&lv, &cd_S774C2);
    dp->~S774C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS774C2(Test_S774C2, "S774C2", ABISELECT(136,76));

#else // __cplusplus

extern void _ZN6S774C2C1Ev();
extern void _ZN6S774C2D1Ev();
Name_Map name_map_S774C2[] = {
  NSPAIR(_ZN6S774C2C1Ev),
  NSPAIR(_ZN6S774C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S774C4;
extern VTBL_ENTRY _ZTI6S774C4[];
extern  VTBL_ENTRY _ZTV6S774C4[];
extern Class_Descriptor cd_S774C3;
extern VTBL_ENTRY _ZTI6S774C3[];
extern  VTBL_ENTRY _ZTV6S774C3[];
static Base_Class bases_S774C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S774C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S774C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S774C2[];
extern void _ZN6S774C2D1Ev();
extern void _ZN6S774C2D0Ev();
extern void _ZN6S774C42v9Ev();
extern void _ZN6S774C43v10Ev();
extern void _ZN6S774C43v11Ev();
extern void _ZN6S774C43v12Ev();
extern void _ZN6S774C43v13Ev();
extern void _ZN6S774C33v14Ev();
extern void _ZN6S774C33v15Ev();
extern void _ZN6S774C33v16Ev();
extern void _ZN6S774C33v17Ev();
extern void _ZN6S774C33v18Ev();
extern void _ZN6S774C33v19Ev();
extern void _ZN6S774C33v20Ev();
extern void _ZN6S774C33v21Ev();
extern void _ZN6S774C33v22Ev();
extern void _ZN6S774C33v23Ev();
extern void _ZN6S774C33v24Ev();
extern void _ZN6S774C23v25Ev();
extern void _ZN6S774C23v26Ev();
extern void _ZN6S774C23v27Ev();
extern void _ZN6S774C23v28Ev();
static  VTBL_ENTRY vtc_S774C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S774C2[0]),
  (VTBL_ENTRY)&_ZN6S774C2D1Ev,
  (VTBL_ENTRY)&_ZN6S774C2D0Ev,
  (VTBL_ENTRY)&_ZN6S774C42v9Ev,
  (VTBL_ENTRY)&_ZN6S774C43v10Ev,
  (VTBL_ENTRY)&_ZN6S774C43v11Ev,
  (VTBL_ENTRY)&_ZN6S774C43v12Ev,
  (VTBL_ENTRY)&_ZN6S774C43v13Ev,
  (VTBL_ENTRY)&_ZN6S774C33v14Ev,
  (VTBL_ENTRY)&_ZN6S774C33v15Ev,
  (VTBL_ENTRY)&_ZN6S774C33v16Ev,
  (VTBL_ENTRY)&_ZN6S774C33v17Ev,
  (VTBL_ENTRY)&_ZN6S774C33v18Ev,
  (VTBL_ENTRY)&_ZN6S774C33v19Ev,
  (VTBL_ENTRY)&_ZN6S774C33v20Ev,
  (VTBL_ENTRY)&_ZN6S774C33v21Ev,
  (VTBL_ENTRY)&_ZN6S774C33v22Ev,
  (VTBL_ENTRY)&_ZN6S774C33v23Ev,
  (VTBL_ENTRY)&_ZN6S774C33v24Ev,
  (VTBL_ENTRY)&_ZN6S774C23v25Ev,
  (VTBL_ENTRY)&_ZN6S774C23v26Ev,
  (VTBL_ENTRY)&_ZN6S774C23v27Ev,
  (VTBL_ENTRY)&_ZN6S774C23v28Ev,
};
extern VTBL_ENTRY _ZTI6S774C2[];
extern  VTBL_ENTRY _ZTV6S774C2[];
Class_Descriptor cd_S774C2 = {  "S774C2", // class name
  bases_S774C2, 3,
  &(vtc_S774C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,76), // object size
  NSPAIRA(_ZTI6S774C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S774C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S774C1  : S774C2 {
  ::S119C12_nt s774c1f0;
  ::S119C15_nt s774c1f1;
  void *s774c1f2[4];
  virtual  ~S774C1(); // _ZN6S774C1D1Ev
  virtual void  v1(); // _ZN6S774C12v1Ev
  virtual void  v2(); // _ZN6S774C12v2Ev
  virtual void  v3(); // _ZN6S774C12v3Ev
  virtual void  v4(); // _ZN6S774C12v4Ev
  virtual void  v5(); // _ZN6S774C12v5Ev
  virtual void  v6(); // _ZN6S774C12v6Ev
  virtual void  v7(); // _ZN6S774C12v7Ev
  virtual void  v8(); // _ZN6S774C12v8Ev
  S774C1(); // tgen
};
//SIG(1 S774C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v25 v26 v27 v28 FC6 FC9{ m Fp} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 FC10{ m FC11{ m Fp Fi FC12{ m}} Fi} FC13{ m Fi FL[2] Fc Fi FC11 FC11 FC14{ BC15{ m Fp Fi[2] FC9}}} Fp[4]}


 S774C1 ::~S774C1(){ note_dtor("S774C1", this);}
void  S774C1 ::v1(){vfunc_called(this, "_ZN6S774C12v1Ev");}
void  S774C1 ::v2(){vfunc_called(this, "_ZN6S774C12v2Ev");}
void  S774C1 ::v3(){vfunc_called(this, "_ZN6S774C12v3Ev");}
void  S774C1 ::v4(){vfunc_called(this, "_ZN6S774C12v4Ev");}
void  S774C1 ::v5(){vfunc_called(this, "_ZN6S774C12v5Ev");}
void  S774C1 ::v6(){vfunc_called(this, "_ZN6S774C12v6Ev");}
void  S774C1 ::v7(){vfunc_called(this, "_ZN6S774C12v7Ev");}
void  S774C1 ::v8(){vfunc_called(this, "_ZN6S774C12v8Ev");}
S774C1 ::S774C1(){ note_ctor("S774C1", this);} // tgen

static void Test_S774C1()
{
  extern Class_Descriptor cd_S774C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,45)];
    init_test(&cd_S774C1, buf);
    S774C1 *dp, &lv = *(dp=new (buf) S774C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,176), "sizeof(S774C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S774C1)");
    check_base_class_offset(lv, (S119C7_nt*)(S774C4*)(S774C3*)(S774C2*), 0, "S774C1");
    check_base_class_offset(lv, (S774C4*)(S774C3*)(S774C2*), 0, "S774C1");
    check_base_class_offset(lv, (S774C3*)(S774C2*), 0, "S774C1");
    check_base_class_offset(lv, (S774C2*), 0, "S774C1");
    check_field_offset(lv, s774c1f0, ABISELECT(136,76), "S774C1.s774c1f0");
    check_field_offset(lv, s774c1f1, ABISELECT(160,92), "S774C1.s774c1f1");
    check_field_offset(lv, s774c1f2, ABISELECT(248,160), "S774C1.s774c1f2");
    test_class_info(&lv, &cd_S774C1);
    dp->~S774C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS774C1(Test_S774C1, "S774C1", ABISELECT(280,176));

#else // __cplusplus

extern void _ZN6S774C1C1Ev();
extern void _ZN6S774C1D1Ev();
Name_Map name_map_S774C1[] = {
  NSPAIR(_ZN6S774C1C1Ev),
  NSPAIR(_ZN6S774C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S774C4;
extern VTBL_ENTRY _ZTI6S774C4[];
extern  VTBL_ENTRY _ZTV6S774C4[];
extern Class_Descriptor cd_S774C3;
extern VTBL_ENTRY _ZTI6S774C3[];
extern  VTBL_ENTRY _ZTV6S774C3[];
extern Class_Descriptor cd_S774C2;
extern VTBL_ENTRY _ZTI6S774C2[];
extern  VTBL_ENTRY _ZTV6S774C2[];
static Base_Class bases_S774C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S774C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S774C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S774C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S774C1[];
extern void _ZN6S774C1D1Ev();
extern void _ZN6S774C1D0Ev();
extern void _ZN6S774C42v9Ev();
extern void _ZN6S774C43v10Ev();
extern void _ZN6S774C43v11Ev();
extern void _ZN6S774C43v12Ev();
extern void _ZN6S774C43v13Ev();
extern void _ZN6S774C33v14Ev();
extern void _ZN6S774C33v15Ev();
extern void _ZN6S774C33v16Ev();
extern void _ZN6S774C33v17Ev();
extern void _ZN6S774C33v18Ev();
extern void _ZN6S774C33v19Ev();
extern void _ZN6S774C33v20Ev();
extern void _ZN6S774C33v21Ev();
extern void _ZN6S774C33v22Ev();
extern void _ZN6S774C33v23Ev();
extern void _ZN6S774C33v24Ev();
extern void _ZN6S774C23v25Ev();
extern void _ZN6S774C23v26Ev();
extern void _ZN6S774C23v27Ev();
extern void _ZN6S774C23v28Ev();
extern void _ZN6S774C12v1Ev();
extern void _ZN6S774C12v2Ev();
extern void _ZN6S774C12v3Ev();
extern void _ZN6S774C12v4Ev();
extern void _ZN6S774C12v5Ev();
extern void _ZN6S774C12v6Ev();
extern void _ZN6S774C12v7Ev();
extern void _ZN6S774C12v8Ev();
static  VTBL_ENTRY vtc_S774C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S774C1[0]),
  (VTBL_ENTRY)&_ZN6S774C1D1Ev,
  (VTBL_ENTRY)&_ZN6S774C1D0Ev,
  (VTBL_ENTRY)&_ZN6S774C42v9Ev,
  (VTBL_ENTRY)&_ZN6S774C43v10Ev,
  (VTBL_ENTRY)&_ZN6S774C43v11Ev,
  (VTBL_ENTRY)&_ZN6S774C43v12Ev,
  (VTBL_ENTRY)&_ZN6S774C43v13Ev,
  (VTBL_ENTRY)&_ZN6S774C33v14Ev,
  (VTBL_ENTRY)&_ZN6S774C33v15Ev,
  (VTBL_ENTRY)&_ZN6S774C33v16Ev,
  (VTBL_ENTRY)&_ZN6S774C33v17Ev,
  (VTBL_ENTRY)&_ZN6S774C33v18Ev,
  (VTBL_ENTRY)&_ZN6S774C33v19Ev,
  (VTBL_ENTRY)&_ZN6S774C33v20Ev,
  (VTBL_ENTRY)&_ZN6S774C33v21Ev,
  (VTBL_ENTRY)&_ZN6S774C33v22Ev,
  (VTBL_ENTRY)&_ZN6S774C33v23Ev,
  (VTBL_ENTRY)&_ZN6S774C33v24Ev,
  (VTBL_ENTRY)&_ZN6S774C23v25Ev,
  (VTBL_ENTRY)&_ZN6S774C23v26Ev,
  (VTBL_ENTRY)&_ZN6S774C23v27Ev,
  (VTBL_ENTRY)&_ZN6S774C23v28Ev,
  (VTBL_ENTRY)&_ZN6S774C12v1Ev,
  (VTBL_ENTRY)&_ZN6S774C12v2Ev,
  (VTBL_ENTRY)&_ZN6S774C12v3Ev,
  (VTBL_ENTRY)&_ZN6S774C12v4Ev,
  (VTBL_ENTRY)&_ZN6S774C12v5Ev,
  (VTBL_ENTRY)&_ZN6S774C12v6Ev,
  (VTBL_ENTRY)&_ZN6S774C12v7Ev,
  (VTBL_ENTRY)&_ZN6S774C12v8Ev,
};
extern VTBL_ENTRY _ZTI6S774C1[];
extern  VTBL_ENTRY _ZTV6S774C1[];
Class_Descriptor cd_S774C1 = {  "S774C1", // class name
  bases_S774C1, 4,
  &(vtc_S774C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,176), // object size
  NSPAIRA(_ZTI6S774C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S774C1),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8689C2  {
  ::S119C13_nt s8689c2f0;
  ::S119C13_nt s8689c2f1;
  int s8689c2f2;
  ::S21926C32 s8689c2f3;
  ::S119C8_nt s8689c2f4;
  ::S119C13_nt s8689c2f5;
  virtual  ~S8689C2(); // _ZN7S8689C2D1Ev
  virtual void  v2(); // _ZN7S8689C22v2Ev
  S8689C2(); // tgen
};
//SIG(-1 S8689C2) C1{ vd v1 FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC7{ BC8{ m Fp Fi FC9{ m} FC9}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FC12{ FL[4]}} FC13{ m Fp FC14{ Fi[4]}} FC11} FC15{ m FC16{ m Fp Fi[2] FC9} Fp[2]} FC2}


 S8689C2 ::~S8689C2(){ note_dtor("S8689C2", this);}
void  S8689C2 ::v2(){vfunc_called(this, "_ZN7S8689C22v2Ev");}
S8689C2 ::S8689C2(){ note_ctor("S8689C2", this);} // tgen

static void Test_S8689C2()
{
  extern Class_Descriptor cd_S8689C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,62)];
    init_test(&cd_S8689C2, buf);
    S8689C2 *dp, &lv = *(dp=new (buf) S8689C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,244), "sizeof(S8689C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8689C2)");
    check_field_offset(lv, s8689c2f0, ABISELECT(8,4), "S8689C2.s8689c2f0");
    check_field_offset(lv, s8689c2f1, ABISELECT(24,16), "S8689C2.s8689c2f1");
    check_field_offset(lv, s8689c2f2, ABISELECT(40,28), "S8689C2.s8689c2f2");
    check_field_offset(lv, s8689c2f3, ABISELECT(48,32), "S8689C2.s8689c2f3");
    check_field_offset(lv, s8689c2f4, ABISELECT(272,208), "S8689C2.s8689c2f4");
    check_field_offset(lv, s8689c2f5, ABISELECT(312,232), "S8689C2.s8689c2f5");
    test_class_info(&lv, &cd_S8689C2);
    dp->~S8689C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8689C2(Test_S8689C2, "S8689C2", ABISELECT(328,244));

#else // __cplusplus

extern void _ZN7S8689C2C1Ev();
extern void _ZN7S8689C2D1Ev();
Name_Map name_map_S8689C2[] = {
  NSPAIR(_ZN7S8689C2C1Ev),
  NSPAIR(_ZN7S8689C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8689C2[];
extern void _ZN7S8689C2D1Ev();
extern void _ZN7S8689C2D0Ev();
extern void _ZN7S8689C22v2Ev();
static  VTBL_ENTRY vtc_S8689C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8689C2[0]),
  (VTBL_ENTRY)&_ZN7S8689C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8689C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8689C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8689C2[];
extern  VTBL_ENTRY _ZTV7S8689C2[];
Class_Descriptor cd_S8689C2 = {  "S8689C2", // class name
  0,0,//no base classes
  &(vtc_S8689C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,244), // object size
  NSPAIRA(_ZTI7S8689C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8689C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8689C1  : S8689C2 {
  char s8689c1f0;
  virtual  ~S8689C1(); // _ZN7S8689C1D1Ev
  virtual void  v1(); // _ZN7S8689C12v1Ev
  S8689C1(); // tgen
};
//SIG(1 S8689C1) C1{ BC2{ vd v2 FC3{ m Fp Fi FC4{ m}} FC3 Fi FC5{ vd m Fc Fp Fi[4] Fc[2] FC6{ BC7{ m Fp Fi FC4 FC4}} FC8{ BC9{ m Fp Fi FC10{ m} FC10}} FC7 Fp Fc[2] Fi[2] FC11{ m Fp[2]} FC12{ m FC13{ FL[4]}} FC14{ m Fp FC15{ Fi[4]}} FC12} FC16{ m FC17{ m Fp Fi[2] FC10} Fp[2]} FC3} vd v1 Fc}


 S8689C1 ::~S8689C1(){ note_dtor("S8689C1", this);}
void  S8689C1 ::v1(){vfunc_called(this, "_ZN7S8689C12v1Ev");}
S8689C1 ::S8689C1(){ note_ctor("S8689C1", this);} // tgen

static void Test_S8689C1()
{
  extern Class_Descriptor cd_S8689C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,63)];
    init_test(&cd_S8689C1, buf);
    S8689C1 *dp, &lv = *(dp=new (buf) S8689C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,248), "sizeof(S8689C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8689C1)");
    check_base_class_offset(lv, (S8689C2*), 0, "S8689C1");
    check_field_offset(lv, s8689c1f0, ABISELECT(328,244), "S8689C1.s8689c1f0");
    test_class_info(&lv, &cd_S8689C1);
    dp->~S8689C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8689C1(Test_S8689C1, "S8689C1", ABISELECT(336,248));

#else // __cplusplus

extern void _ZN7S8689C1C1Ev();
extern void _ZN7S8689C1D1Ev();
Name_Map name_map_S8689C1[] = {
  NSPAIR(_ZN7S8689C1C1Ev),
  NSPAIR(_ZN7S8689C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8689C2;
extern VTBL_ENTRY _ZTI7S8689C2[];
extern  VTBL_ENTRY _ZTV7S8689C2[];
static Base_Class bases_S8689C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8689C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8689C1[];
extern void _ZN7S8689C1D1Ev();
extern void _ZN7S8689C1D0Ev();
extern void _ZN7S8689C22v2Ev();
extern void _ZN7S8689C12v1Ev();
static  VTBL_ENTRY vtc_S8689C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8689C1[0]),
  (VTBL_ENTRY)&_ZN7S8689C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8689C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8689C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8689C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8689C1[];
extern  VTBL_ENTRY _ZTV7S8689C1[];
Class_Descriptor cd_S8689C1 = {  "S8689C1", // class name
  bases_S8689C1, 1,
  &(vtc_S8689C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,248), // object size
  NSPAIRA(_ZTI7S8689C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8689C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8688C2  {
  ::S119C13_nt s8688c2f0;
  ::S119C13_nt s8688c2f1;
  int s8688c2f2;
  ::S21925C32 s8688c2f3;
  ::S119C8_nt s8688c2f4;
  ::S119C13_nt s8688c2f5;
  virtual  ~S8688C2(); // _ZN7S8688C2D1Ev
  virtual void  v2(); // _ZN7S8688C22v2Ev
  S8688C2(); // tgen
};
//SIG(-1 S8688C2) C1{ vd v1 FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC5 FC7{ m Fp Fi FC8{ m} FC8} Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FC11{ Fl[4]}} FC12{ m Fp FC13{ Fi[4]}} FC10} FC14{ m FC15{ m Fp Fi[2] FC8} Fp[2]} FC2}


 S8688C2 ::~S8688C2(){ note_dtor("S8688C2", this);}
void  S8688C2 ::v2(){vfunc_called(this, "_ZN7S8688C22v2Ev");}
S8688C2 ::S8688C2(){ note_ctor("S8688C2", this);} // tgen

static void Test_S8688C2()
{
  extern Class_Descriptor cd_S8688C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,54)];
    init_test(&cd_S8688C2, buf);
    S8688C2 *dp, &lv = *(dp=new (buf) S8688C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,212), "sizeof(S8688C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8688C2)");
    check_field_offset(lv, s8688c2f0, ABISELECT(8,4), "S8688C2.s8688c2f0");
    check_field_offset(lv, s8688c2f1, ABISELECT(24,16), "S8688C2.s8688c2f1");
    check_field_offset(lv, s8688c2f2, ABISELECT(40,28), "S8688C2.s8688c2f2");
    check_field_offset(lv, s8688c2f3, ABISELECT(48,32), "S8688C2.s8688c2f3");
    check_field_offset(lv, s8688c2f4, ABISELECT(272,176), "S8688C2.s8688c2f4");
    check_field_offset(lv, s8688c2f5, ABISELECT(312,200), "S8688C2.s8688c2f5");
    test_class_info(&lv, &cd_S8688C2);
    dp->~S8688C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8688C2(Test_S8688C2, "S8688C2", ABISELECT(328,212));

#else // __cplusplus

extern void _ZN7S8688C2C1Ev();
extern void _ZN7S8688C2D1Ev();
Name_Map name_map_S8688C2[] = {
  NSPAIR(_ZN7S8688C2C1Ev),
  NSPAIR(_ZN7S8688C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8688C2[];
extern void _ZN7S8688C2D1Ev();
extern void _ZN7S8688C2D0Ev();
extern void _ZN7S8688C22v2Ev();
static  VTBL_ENTRY vtc_S8688C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8688C2[0]),
  (VTBL_ENTRY)&_ZN7S8688C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8688C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8688C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8688C2[];
extern  VTBL_ENTRY _ZTV7S8688C2[];
Class_Descriptor cd_S8688C2 = {  "S8688C2", // class name
  0,0,//no base classes
  &(vtc_S8688C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,212), // object size
  NSPAIRA(_ZTI7S8688C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8688C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8688C1  : S8688C2 {
  char s8688c1f0;
  virtual  ~S8688C1(); // _ZN7S8688C1D1Ev
  virtual void  v1(); // _ZN7S8688C12v1Ev
  S8688C1(); // tgen
};
//SIG(1 S8688C1) C1{ BC2{ vd v2 FC3{ m Fp Fi FC4{ m}} FC3 Fi FC5{ vd m Fc Fp Fi[4] Fc[2] FC6{ BC7{ m Fp Fi FC4 FC4}} FC6 FC8{ m Fp Fi FC9{ m} FC9} Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FC12{ Fl[4]}} FC13{ m Fp FC14{ Fi[4]}} FC11} FC15{ m FC16{ m Fp Fi[2] FC9} Fp[2]} FC3} vd v1 Fc}


 S8688C1 ::~S8688C1(){ note_dtor("S8688C1", this);}
void  S8688C1 ::v1(){vfunc_called(this, "_ZN7S8688C12v1Ev");}
S8688C1 ::S8688C1(){ note_ctor("S8688C1", this);} // tgen

static void Test_S8688C1()
{
  extern Class_Descriptor cd_S8688C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,55)];
    init_test(&cd_S8688C1, buf);
    S8688C1 *dp, &lv = *(dp=new (buf) S8688C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,216), "sizeof(S8688C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8688C1)");
    check_base_class_offset(lv, (S8688C2*), 0, "S8688C1");
    check_field_offset(lv, s8688c1f0, ABISELECT(328,212), "S8688C1.s8688c1f0");
    test_class_info(&lv, &cd_S8688C1);
    dp->~S8688C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8688C1(Test_S8688C1, "S8688C1", ABISELECT(336,216));

#else // __cplusplus

extern void _ZN7S8688C1C1Ev();
extern void _ZN7S8688C1D1Ev();
Name_Map name_map_S8688C1[] = {
  NSPAIR(_ZN7S8688C1C1Ev),
  NSPAIR(_ZN7S8688C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8688C2;
extern VTBL_ENTRY _ZTI7S8688C2[];
extern  VTBL_ENTRY _ZTV7S8688C2[];
static Base_Class bases_S8688C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8688C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8688C1[];
extern void _ZN7S8688C1D1Ev();
extern void _ZN7S8688C1D0Ev();
extern void _ZN7S8688C22v2Ev();
extern void _ZN7S8688C12v1Ev();
static  VTBL_ENTRY vtc_S8688C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8688C1[0]),
  (VTBL_ENTRY)&_ZN7S8688C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8688C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8688C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8688C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8688C1[];
extern  VTBL_ENTRY _ZTV7S8688C1[];
Class_Descriptor cd_S8688C1 = {  "S8688C1", // class name
  bases_S8688C1, 1,
  &(vtc_S8688C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,216), // object size
  NSPAIRA(_ZTI7S8688C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8688C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S772C4  : S119C7_nt {
  virtual void  v8(); // _ZN6S772C42v8Ev
  virtual void  v9(); // _ZN6S772C42v9Ev
  virtual void  v10(); // _ZN6S772C43v10Ev
  virtual void  v11(); // _ZN6S772C43v11Ev
  virtual void  v12(); // _ZN6S772C43v12Ev
  ~S772C4(); // tgen
  S772C4(); // tgen
};
//SIG(-1 S772C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S772C4 ::v8(){vfunc_called(this, "_ZN6S772C42v8Ev");}
void  S772C4 ::v9(){vfunc_called(this, "_ZN6S772C42v9Ev");}
void  S772C4 ::v10(){vfunc_called(this, "_ZN6S772C43v10Ev");}
void  S772C4 ::v11(){vfunc_called(this, "_ZN6S772C43v11Ev");}
void  S772C4 ::v12(){vfunc_called(this, "_ZN6S772C43v12Ev");}
S772C4 ::~S772C4(){ note_dtor("S772C4", this);} // tgen
S772C4 ::S772C4(){ note_ctor("S772C4", this);} // tgen

static void Test_S772C4()
{
  extern Class_Descriptor cd_S772C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S772C4, buf);
    S772C4 *dp, &lv = *(dp=new (buf) S772C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S772C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S772C4)");
    check_base_class_offset(lv, (S119C7_nt*), 0, "S772C4");
    test_class_info(&lv, &cd_S772C4);
    dp->~S772C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS772C4(Test_S772C4, "S772C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S772C4C1Ev();
extern void _ZN6S772C4D1Ev();
Name_Map name_map_S772C4[] = {
  NSPAIR(_ZN6S772C4C1Ev),
  NSPAIR(_ZN6S772C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
static Base_Class bases_S772C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S772C4[];
extern void _ZN6S772C4D1Ev();
extern void _ZN6S772C4D0Ev();
extern void _ZN6S772C42v8Ev();
extern void _ZN6S772C42v9Ev();
extern void _ZN6S772C43v10Ev();
extern void _ZN6S772C43v11Ev();
extern void _ZN6S772C43v12Ev();
static  VTBL_ENTRY vtc_S772C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S772C4[0]),
  (VTBL_ENTRY)&_ZN6S772C4D1Ev,
  (VTBL_ENTRY)&_ZN6S772C4D0Ev,
  (VTBL_ENTRY)&_ZN6S772C42v8Ev,
  (VTBL_ENTRY)&_ZN6S772C42v9Ev,
  (VTBL_ENTRY)&_ZN6S772C43v10Ev,
  (VTBL_ENTRY)&_ZN6S772C43v11Ev,
  (VTBL_ENTRY)&_ZN6S772C43v12Ev,
};
extern VTBL_ENTRY _ZTI6S772C4[];
extern  VTBL_ENTRY _ZTV6S772C4[];
Class_Descriptor cd_S772C4 = {  "S772C4", // class name
  bases_S772C4, 1,
  &(vtc_S772C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S772C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S772C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S772C3  : S772C4 {
  void *s772c3f0[3];
  ::S119C8_nt s772c3f1;
  virtual void  v13(); // _ZN6S772C33v13Ev
  virtual void  v14(); // _ZN6S772C33v14Ev
  virtual void  v15(); // _ZN6S772C33v15Ev
  virtual void  v16(); // _ZN6S772C33v16Ev
  virtual void  v17(); // _ZN6S772C33v17Ev
  virtual void  v18(); // _ZN6S772C33v18Ev
  virtual void  v19(); // _ZN6S772C33v19Ev
  virtual void  v20(); // _ZN6S772C33v20Ev
  virtual void  v21(); // _ZN6S772C33v21Ev
  virtual void  v22(); // _ZN6S772C33v22Ev
  virtual void  v23(); // _ZN6S772C33v23Ev
  ~S772C3(); // tgen
  S772C3(); // tgen
};
//SIG(-1 S772C3) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S772C3 ::v13(){vfunc_called(this, "_ZN6S772C33v13Ev");}
void  S772C3 ::v14(){vfunc_called(this, "_ZN6S772C33v14Ev");}
void  S772C3 ::v15(){vfunc_called(this, "_ZN6S772C33v15Ev");}
void  S772C3 ::v16(){vfunc_called(this, "_ZN6S772C33v16Ev");}
void  S772C3 ::v17(){vfunc_called(this, "_ZN6S772C33v17Ev");}
void  S772C3 ::v18(){vfunc_called(this, "_ZN6S772C33v18Ev");}
void  S772C3 ::v19(){vfunc_called(this, "_ZN6S772C33v19Ev");}
void  S772C3 ::v20(){vfunc_called(this, "_ZN6S772C33v20Ev");}
void  S772C3 ::v21(){vfunc_called(this, "_ZN6S772C33v21Ev");}
void  S772C3 ::v22(){vfunc_called(this, "_ZN6S772C33v22Ev");}
void  S772C3 ::v23(){vfunc_called(this, "_ZN6S772C33v23Ev");}
S772C3 ::~S772C3(){ note_dtor("S772C3", this);} // tgen
S772C3 ::S772C3(){ note_ctor("S772C3", this);} // tgen

static void Test_S772C3()
{
  extern Class_Descriptor cd_S772C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S772C3, buf);
    S772C3 *dp, &lv = *(dp=new (buf) S772C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S772C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S772C3)");
    check_base_class_offset(lv, (S119C7_nt*)(S772C4*), 0, "S772C3");
    check_base_class_offset(lv, (S772C4*), 0, "S772C3");
    check_field_offset(lv, s772c3f0, ABISELECT(16,8), "S772C3.s772c3f0");
    check_field_offset(lv, s772c3f1, ABISELECT(40,20), "S772C3.s772c3f1");
    test_class_info(&lv, &cd_S772C3);
    dp->~S772C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS772C3(Test_S772C3, "S772C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S772C3C1Ev();
extern void _ZN6S772C3D1Ev();
Name_Map name_map_S772C3[] = {
  NSPAIR(_ZN6S772C3C1Ev),
  NSPAIR(_ZN6S772C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S772C4;
extern VTBL_ENTRY _ZTI6S772C4[];
extern  VTBL_ENTRY _ZTV6S772C4[];
static Base_Class bases_S772C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S772C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S772C3[];
extern void _ZN6S772C3D1Ev();
extern void _ZN6S772C3D0Ev();
extern void _ZN6S772C42v8Ev();
extern void _ZN6S772C42v9Ev();
extern void _ZN6S772C43v10Ev();
extern void _ZN6S772C43v11Ev();
extern void _ZN6S772C43v12Ev();
extern void _ZN6S772C33v13Ev();
extern void _ZN6S772C33v14Ev();
extern void _ZN6S772C33v15Ev();
extern void _ZN6S772C33v16Ev();
extern void _ZN6S772C33v17Ev();
extern void _ZN6S772C33v18Ev();
extern void _ZN6S772C33v19Ev();
extern void _ZN6S772C33v20Ev();
extern void _ZN6S772C33v21Ev();
extern void _ZN6S772C33v22Ev();
extern void _ZN6S772C33v23Ev();
static  VTBL_ENTRY vtc_S772C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S772C3[0]),
  (VTBL_ENTRY)&_ZN6S772C3D1Ev,
  (VTBL_ENTRY)&_ZN6S772C3D0Ev,
  (VTBL_ENTRY)&_ZN6S772C42v8Ev,
  (VTBL_ENTRY)&_ZN6S772C42v9Ev,
  (VTBL_ENTRY)&_ZN6S772C43v10Ev,
  (VTBL_ENTRY)&_ZN6S772C43v11Ev,
  (VTBL_ENTRY)&_ZN6S772C43v12Ev,
  (VTBL_ENTRY)&_ZN6S772C33v13Ev,
  (VTBL_ENTRY)&_ZN6S772C33v14Ev,
  (VTBL_ENTRY)&_ZN6S772C33v15Ev,
  (VTBL_ENTRY)&_ZN6S772C33v16Ev,
  (VTBL_ENTRY)&_ZN6S772C33v17Ev,
  (VTBL_ENTRY)&_ZN6S772C33v18Ev,
  (VTBL_ENTRY)&_ZN6S772C33v19Ev,
  (VTBL_ENTRY)&_ZN6S772C33v20Ev,
  (VTBL_ENTRY)&_ZN6S772C33v21Ev,
  (VTBL_ENTRY)&_ZN6S772C33v22Ev,
  (VTBL_ENTRY)&_ZN6S772C33v23Ev,
};
extern VTBL_ENTRY _ZTI6S772C3[];
extern  VTBL_ENTRY _ZTV6S772C3[];
Class_Descriptor cd_S772C3 = {  "S772C3", // class name
  bases_S772C3, 2,
  &(vtc_S772C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S772C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S772C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S772C2  : S772C3 {
  ::S119C8_nt s772c2f0;
  ::S119C11_nt s772c2f1;
  void *s772c2f2;
  virtual void  v24(); // _ZN6S772C23v24Ev
  virtual void  v25(); // _ZN6S772C23v25Ev
  virtual void  v26(); // _ZN6S772C23v26Ev
  virtual void  v27(); // _ZN6S772C23v27Ev
  ~S772C2(); // tgen
  S772C2(); // tgen
};
//SIG(-1 S772C2) C1{ BC2{ BC3{ BC4{ vd m Fi} v5 v6 v7 v8 v9} v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 v4 FC5 FC8{ m Fp} Fp}


void  S772C2 ::v24(){vfunc_called(this, "_ZN6S772C23v24Ev");}
void  S772C2 ::v25(){vfunc_called(this, "_ZN6S772C23v25Ev");}
void  S772C2 ::v26(){vfunc_called(this, "_ZN6S772C23v26Ev");}
void  S772C2 ::v27(){vfunc_called(this, "_ZN6S772C23v27Ev");}
S772C2 ::~S772C2(){ note_dtor("S772C2", this);} // tgen
S772C2 ::S772C2(){ note_ctor("S772C2", this);} // tgen

static void Test_S772C2()
{
  extern Class_Descriptor cd_S772C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,20)];
    init_test(&cd_S772C2, buf);
    S772C2 *dp, &lv = *(dp=new (buf) S772C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,76), "sizeof(S772C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S772C2)");
    check_base_class_offset(lv, (S119C7_nt*)(S772C4*)(S772C3*), 0, "S772C2");
    check_base_class_offset(lv, (S772C4*)(S772C3*), 0, "S772C2");
    check_base_class_offset(lv, (S772C3*), 0, "S772C2");
    check_field_offset(lv, s772c2f0, ABISELECT(80,44), "S772C2.s772c2f0");
    check_field_offset(lv, s772c2f1, ABISELECT(120,68), "S772C2.s772c2f1");
    check_field_offset(lv, s772c2f2, ABISELECT(128,72), "S772C2.s772c2f2");
    test_class_info(&lv, &cd_S772C2);
    dp->~S772C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS772C2(Test_S772C2, "S772C2", ABISELECT(136,76));

#else // __cplusplus

extern void _ZN6S772C2C1Ev();
extern void _ZN6S772C2D1Ev();
Name_Map name_map_S772C2[] = {
  NSPAIR(_ZN6S772C2C1Ev),
  NSPAIR(_ZN6S772C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S772C4;
extern VTBL_ENTRY _ZTI6S772C4[];
extern  VTBL_ENTRY _ZTV6S772C4[];
extern Class_Descriptor cd_S772C3;
extern VTBL_ENTRY _ZTI6S772C3[];
extern  VTBL_ENTRY _ZTV6S772C3[];
static Base_Class bases_S772C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S772C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S772C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S772C2[];
extern void _ZN6S772C2D1Ev();
extern void _ZN6S772C2D0Ev();
extern void _ZN6S772C42v8Ev();
extern void _ZN6S772C42v9Ev();
extern void _ZN6S772C43v10Ev();
extern void _ZN6S772C43v11Ev();
extern void _ZN6S772C43v12Ev();
extern void _ZN6S772C33v13Ev();
extern void _ZN6S772C33v14Ev();
extern void _ZN6S772C33v15Ev();
extern void _ZN6S772C33v16Ev();
extern void _ZN6S772C33v17Ev();
extern void _ZN6S772C33v18Ev();
extern void _ZN6S772C33v19Ev();
extern void _ZN6S772C33v20Ev();
extern void _ZN6S772C33v21Ev();
extern void _ZN6S772C33v22Ev();
extern void _ZN6S772C33v23Ev();
extern void _ZN6S772C23v24Ev();
extern void _ZN6S772C23v25Ev();
extern void _ZN6S772C23v26Ev();
extern void _ZN6S772C23v27Ev();
static  VTBL_ENTRY vtc_S772C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S772C2[0]),
  (VTBL_ENTRY)&_ZN6S772C2D1Ev,
  (VTBL_ENTRY)&_ZN6S772C2D0Ev,
  (VTBL_ENTRY)&_ZN6S772C42v8Ev,
  (VTBL_ENTRY)&_ZN6S772C42v9Ev,
  (VTBL_ENTRY)&_ZN6S772C43v10Ev,
  (VTBL_ENTRY)&_ZN6S772C43v11Ev,
  (VTBL_ENTRY)&_ZN6S772C43v12Ev,
  (VTBL_ENTRY)&_ZN6S772C33v13Ev,
  (VTBL_ENTRY)&_ZN6S772C33v14Ev,
  (VTBL_ENTRY)&_ZN6S772C33v15Ev,
  (VTBL_ENTRY)&_ZN6S772C33v16Ev,
  (VTBL_ENTRY)&_ZN6S772C33v17Ev,
  (VTBL_ENTRY)&_ZN6S772C33v18Ev,
  (VTBL_ENTRY)&_ZN6S772C33v19Ev,
  (VTBL_ENTRY)&_ZN6S772C33v20Ev,
  (VTBL_ENTRY)&_ZN6S772C33v21Ev,
  (VTBL_ENTRY)&_ZN6S772C33v22Ev,
  (VTBL_ENTRY)&_ZN6S772C33v23Ev,
  (VTBL_ENTRY)&_ZN6S772C23v24Ev,
  (VTBL_ENTRY)&_ZN6S772C23v25Ev,
  (VTBL_ENTRY)&_ZN6S772C23v26Ev,
  (VTBL_ENTRY)&_ZN6S772C23v27Ev,
};
extern VTBL_ENTRY _ZTI6S772C2[];
extern  VTBL_ENTRY _ZTV6S772C2[];
Class_Descriptor cd_S772C2 = {  "S772C2", // class name
  bases_S772C2, 3,
  &(vtc_S772C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,76), // object size
  NSPAIRA(_ZTI6S772C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S772C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S772C10  {
  ::S119C13_nt s772c10f0;
  ::S119C13_nt s772c10f1;
  __tsi64 s772c10f2;
  int s772c10f3;
  char s772c10f4[3];
  int s772c10f5[3];
  ::S119C13_nt s772c10f6;
  ::S119C13_nt s772c10f7;
  int s772c10f8;
  char s772c10f9[2];
  __tsi64 s772c10f10;
  void  mf772c10(); // _ZN7S772C108mf772c10Ev
};
//SIG(-1 S772C10) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 FL Fi Fc[3] Fi[3] FC2 FC2 Fi Fc[2] FL}


void  S772C10 ::mf772c10(){}

static void Test_S772C10()
{
  {
    init_simple_test("S772C10");
    S772C10 lv;
    check2(sizeof(lv), ABISELECT(112,92), "sizeof(S772C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S772C10)");
    check_field_offset(lv, s772c10f0, 0, "S772C10.s772c10f0");
    check_field_offset(lv, s772c10f1, ABISELECT(16,12), "S772C10.s772c10f1");
    check_field_offset(lv, s772c10f2, ABISELECT(32,24), "S772C10.s772c10f2");
    check_field_offset(lv, s772c10f3, ABISELECT(40,32), "S772C10.s772c10f3");
    check_field_offset(lv, s772c10f4, ABISELECT(44,36), "S772C10.s772c10f4");
    check_field_offset(lv, s772c10f5, ABISELECT(48,40), "S772C10.s772c10f5");
    check_field_offset(lv, s772c10f6, ABISELECT(64,52), "S772C10.s772c10f6");
    check_field_offset(lv, s772c10f7, ABISELECT(80,64), "S772C10.s772c10f7");
    check_field_offset(lv, s772c10f8, ABISELECT(96,76), "S772C10.s772c10f8");
    check_field_offset(lv, s772c10f9, ABISELECT(100,80), "S772C10.s772c10f9");
    check_field_offset(lv, s772c10f10, ABISELECT(104,84), "S772C10.s772c10f10");
  }
}
static Arrange_To_Call_Me vS772C10(Test_S772C10, "S772C10", ABISELECT(112,92));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S772C1  : S772C2 {
  int s772c1f0;
  char s772c1f1;
  ::S772C10 s772c1f2;
  void *s772c1f3;
  ::S21925C44_nt s772c1f4;
  void *s772c1f5[2];
  char s772c1f6[2];
  virtual void  v1(); // _ZN6S772C12v1Ev
  virtual void  v2(); // _ZN6S772C12v2Ev
  virtual void  v3(); // _ZN6S772C12v3Ev
  virtual void  v4(); // _ZN6S772C12v4Ev
  virtual void  v5(); // _ZN6S772C12v5Ev
  virtual void  v6(); // _ZN6S772C12v6Ev
  virtual void  v7(); // _ZN6S772C12v7Ev
  ~S772C1(); // tgen
  S772C1(); // tgen
};
//SIG(1 S772C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fi} v8 v9 v10 v11 v12} v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp[3] FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]}} v24 v25 v26 v27 FC6 FC9{ m Fp} Fp} v1 v2 v3 v4 v5 v6 v7 Fi Fc FC10{ m FC11{ m Fp Fi FC12{ m}} FC11 FL Fi Fc[3] Fi[3] FC11 FC11 Fi Fc[2] FL} Fp FC13{ m Fp[2]} Fp[2] Fc[2]}


void  S772C1 ::v1(){vfunc_called(this, "_ZN6S772C12v1Ev");}
void  S772C1 ::v2(){vfunc_called(this, "_ZN6S772C12v2Ev");}
void  S772C1 ::v3(){vfunc_called(this, "_ZN6S772C12v3Ev");}
void  S772C1 ::v4(){vfunc_called(this, "_ZN6S772C12v4Ev");}
void  S772C1 ::v5(){vfunc_called(this, "_ZN6S772C12v5Ev");}
void  S772C1 ::v6(){vfunc_called(this, "_ZN6S772C12v6Ev");}
void  S772C1 ::v7(){vfunc_called(this, "_ZN6S772C12v7Ev");}
S772C1 ::~S772C1(){ note_dtor("S772C1", this);} // tgen
S772C1 ::S772C1(){ note_ctor("S772C1", this);} // tgen

static void Test_S772C1()
{
  extern Class_Descriptor cd_S772C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,51)];
    init_test(&cd_S772C1, buf);
    S772C1 *dp, &lv = *(dp=new (buf) S772C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,200), "sizeof(S772C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S772C1)");
    check_base_class_offset(lv, (S119C7_nt*)(S772C4*)(S772C3*)(S772C2*), 0, "S772C1");
    check_base_class_offset(lv, (S772C4*)(S772C3*)(S772C2*), 0, "S772C1");
    check_base_class_offset(lv, (S772C3*)(S772C2*), 0, "S772C1");
    check_base_class_offset(lv, (S772C2*), 0, "S772C1");
    check_field_offset(lv, s772c1f0, ABISELECT(136,76), "S772C1.s772c1f0");
    check_field_offset(lv, s772c1f1, ABISELECT(140,80), "S772C1.s772c1f1");
    check_field_offset(lv, s772c1f2, ABISELECT(144,84), "S772C1.s772c1f2");
    check_field_offset(lv, s772c1f3, ABISELECT(256,176), "S772C1.s772c1f3");
    check_field_offset(lv, s772c1f4, ABISELECT(264,180), "S772C1.s772c1f4");
    check_field_offset(lv, s772c1f5, ABISELECT(280,188), "S772C1.s772c1f5");
    check_field_offset(lv, s772c1f6, ABISELECT(296,196), "S772C1.s772c1f6");
    test_class_info(&lv, &cd_S772C1);
    dp->~S772C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS772C1(Test_S772C1, "S772C1", ABISELECT(304,200));

#else // __cplusplus

extern void _ZN6S772C1C1Ev();
extern void _ZN6S772C1D1Ev();
Name_Map name_map_S772C1[] = {
  NSPAIR(_ZN6S772C1C1Ev),
  NSPAIR(_ZN6S772C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
extern Class_Descriptor cd_S772C4;
extern VTBL_ENTRY _ZTI6S772C4[];
extern  VTBL_ENTRY _ZTV6S772C4[];
extern Class_Descriptor cd_S772C3;
extern VTBL_ENTRY _ZTI6S772C3[];
extern  VTBL_ENTRY _ZTV6S772C3[];
extern Class_Descriptor cd_S772C2;
extern VTBL_ENTRY _ZTI6S772C2[];
extern  VTBL_ENTRY _ZTV6S772C2[];
static Base_Class bases_S772C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S772C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S772C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S772C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S772C1[];
extern void _ZN6S772C1D1Ev();
extern void _ZN6S772C1D0Ev();
extern void _ZN6S772C42v8Ev();
extern void _ZN6S772C42v9Ev();
extern void _ZN6S772C43v10Ev();
extern void _ZN6S772C43v11Ev();
extern void _ZN6S772C43v12Ev();
extern void _ZN6S772C33v13Ev();
extern void _ZN6S772C33v14Ev();
extern void _ZN6S772C33v15Ev();
extern void _ZN6S772C33v16Ev();
extern void _ZN6S772C33v17Ev();
extern void _ZN6S772C33v18Ev();
extern void _ZN6S772C33v19Ev();
extern void _ZN6S772C33v20Ev();
extern void _ZN6S772C33v21Ev();
extern void _ZN6S772C33v22Ev();
extern void _ZN6S772C33v23Ev();
extern void _ZN6S772C23v24Ev();
extern void _ZN6S772C23v25Ev();
extern void _ZN6S772C23v26Ev();
extern void _ZN6S772C23v27Ev();
extern void _ZN6S772C12v1Ev();
extern void _ZN6S772C12v2Ev();
extern void _ZN6S772C12v3Ev();
extern void _ZN6S772C12v4Ev();
extern void _ZN6S772C12v5Ev();
extern void _ZN6S772C12v6Ev();
extern void _ZN6S772C12v7Ev();
static  VTBL_ENTRY vtc_S772C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S772C1[0]),
  (VTBL_ENTRY)&_ZN6S772C1D1Ev,
  (VTBL_ENTRY)&_ZN6S772C1D0Ev,
  (VTBL_ENTRY)&_ZN6S772C42v8Ev,
  (VTBL_ENTRY)&_ZN6S772C42v9Ev,
  (VTBL_ENTRY)&_ZN6S772C43v10Ev,
  (VTBL_ENTRY)&_ZN6S772C43v11Ev,
  (VTBL_ENTRY)&_ZN6S772C43v12Ev,
  (VTBL_ENTRY)&_ZN6S772C33v13Ev,
  (VTBL_ENTRY)&_ZN6S772C33v14Ev,
  (VTBL_ENTRY)&_ZN6S772C33v15Ev,
  (VTBL_ENTRY)&_ZN6S772C33v16Ev,
  (VTBL_ENTRY)&_ZN6S772C33v17Ev,
  (VTBL_ENTRY)&_ZN6S772C33v18Ev,
  (VTBL_ENTRY)&_ZN6S772C33v19Ev,
  (VTBL_ENTRY)&_ZN6S772C33v20Ev,
  (VTBL_ENTRY)&_ZN6S772C33v21Ev,
  (VTBL_ENTRY)&_ZN6S772C33v22Ev,
  (VTBL_ENTRY)&_ZN6S772C33v23Ev,
  (VTBL_ENTRY)&_ZN6S772C23v24Ev,
  (VTBL_ENTRY)&_ZN6S772C23v25Ev,
  (VTBL_ENTRY)&_ZN6S772C23v26Ev,
  (VTBL_ENTRY)&_ZN6S772C23v27Ev,
  (VTBL_ENTRY)&_ZN6S772C12v1Ev,
  (VTBL_ENTRY)&_ZN6S772C12v2Ev,
  (VTBL_ENTRY)&_ZN6S772C12v3Ev,
  (VTBL_ENTRY)&_ZN6S772C12v4Ev,
  (VTBL_ENTRY)&_ZN6S772C12v5Ev,
  (VTBL_ENTRY)&_ZN6S772C12v6Ev,
  (VTBL_ENTRY)&_ZN6S772C12v7Ev,
};
extern VTBL_ENTRY _ZTI6S772C1[];
extern  VTBL_ENTRY _ZTV6S772C1[];
Class_Descriptor cd_S772C1 = {  "S772C1", // class name
  bases_S772C1, 4,
  &(vtc_S772C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,200), // object size
  NSPAIRA(_ZTI6S772C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S772C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8691C2  {
  ::S119C13_nt s8691c2f0;
  ::S119C13_nt s8691c2f1;
  int s8691c2f2;
  ::S21926C32 s8691c2f3;
  ::S119C8_nt s8691c2f4;
  ::S119C13_nt s8691c2f5;
  virtual  ~S8691C2(); // _ZN7S8691C2D1Ev
  virtual void  v2(); // _ZN7S8691C22v2Ev
  S8691C2(); // tgen
};
//SIG(-1 S8691C2) C1{ vd v1 FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC7{ BC8{ m Fp Fi FC9{ m} FC9}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FC12{ FL[4]}} FC13{ m Fp FC14{ Fi[4]}} FC11} FC15{ m FC16{ m Fp Fi[2] FC9} Fp[2]} FC2}


 S8691C2 ::~S8691C2(){ note_dtor("S8691C2", this);}
void  S8691C2 ::v2(){vfunc_called(this, "_ZN7S8691C22v2Ev");}
S8691C2 ::S8691C2(){ note_ctor("S8691C2", this);} // tgen

static void Test_S8691C2()
{
  extern Class_Descriptor cd_S8691C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,62)];
    init_test(&cd_S8691C2, buf);
    S8691C2 *dp, &lv = *(dp=new (buf) S8691C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,244), "sizeof(S8691C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8691C2)");
    check_field_offset(lv, s8691c2f0, ABISELECT(8,4), "S8691C2.s8691c2f0");
    check_field_offset(lv, s8691c2f1, ABISELECT(24,16), "S8691C2.s8691c2f1");
    check_field_offset(lv, s8691c2f2, ABISELECT(40,28), "S8691C2.s8691c2f2");
    check_field_offset(lv, s8691c2f3, ABISELECT(48,32), "S8691C2.s8691c2f3");
    check_field_offset(lv, s8691c2f4, ABISELECT(272,208), "S8691C2.s8691c2f4");
    check_field_offset(lv, s8691c2f5, ABISELECT(312,232), "S8691C2.s8691c2f5");
    test_class_info(&lv, &cd_S8691C2);
    dp->~S8691C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8691C2(Test_S8691C2, "S8691C2", ABISELECT(328,244));

#else // __cplusplus

extern void _ZN7S8691C2C1Ev();
extern void _ZN7S8691C2D1Ev();
Name_Map name_map_S8691C2[] = {
  NSPAIR(_ZN7S8691C2C1Ev),
  NSPAIR(_ZN7S8691C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8691C2[];
extern void _ZN7S8691C2D1Ev();
extern void _ZN7S8691C2D0Ev();
extern void _ZN7S8691C22v2Ev();
static  VTBL_ENTRY vtc_S8691C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8691C2[0]),
  (VTBL_ENTRY)&_ZN7S8691C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8691C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8691C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8691C2[];
extern  VTBL_ENTRY _ZTV7S8691C2[];
Class_Descriptor cd_S8691C2 = {  "S8691C2", // class name
  0,0,//no base classes
  &(vtc_S8691C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,244), // object size
  NSPAIRA(_ZTI7S8691C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8691C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8691C1  : S8691C2 {
  virtual  ~S8691C1(); // _ZN7S8691C1D1Ev
  virtual void  v1(); // _ZN7S8691C12v1Ev
  S8691C1(); // tgen
};
//SIG(1 S8691C1) C1{ BC2{ vd v2 FC3{ m Fp Fi FC4{ m}} FC3 Fi FC5{ vd m Fc Fp Fi[4] Fc[2] FC6{ BC7{ m Fp Fi FC4 FC4}} FC8{ BC9{ m Fp Fi FC10{ m} FC10}} FC7 Fp Fc[2] Fi[2] FC11{ m Fp[2]} FC12{ m FC13{ FL[4]}} FC14{ m Fp FC15{ Fi[4]}} FC12} FC16{ m FC17{ m Fp Fi[2] FC10} Fp[2]} FC3} vd v1}


 S8691C1 ::~S8691C1(){ note_dtor("S8691C1", this);}
void  S8691C1 ::v1(){vfunc_called(this, "_ZN7S8691C12v1Ev");}
S8691C1 ::S8691C1(){ note_ctor("S8691C1", this);} // tgen

static void Test_S8691C1()
{
  extern Class_Descriptor cd_S8691C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,62)];
    init_test(&cd_S8691C1, buf);
    S8691C1 *dp, &lv = *(dp=new (buf) S8691C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,244), "sizeof(S8691C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8691C1)");
    check_base_class_offset(lv, (S8691C2*), 0, "S8691C1");
    test_class_info(&lv, &cd_S8691C1);
    dp->~S8691C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8691C1(Test_S8691C1, "S8691C1", ABISELECT(328,244));

#else // __cplusplus

extern void _ZN7S8691C1C1Ev();
extern void _ZN7S8691C1D1Ev();
Name_Map name_map_S8691C1[] = {
  NSPAIR(_ZN7S8691C1C1Ev),
  NSPAIR(_ZN7S8691C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8691C2;
extern VTBL_ENTRY _ZTI7S8691C2[];
extern  VTBL_ENTRY _ZTV7S8691C2[];
static Base_Class bases_S8691C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8691C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8691C1[];
extern void _ZN7S8691C1D1Ev();
extern void _ZN7S8691C1D0Ev();
extern void _ZN7S8691C22v2Ev();
extern void _ZN7S8691C12v1Ev();
static  VTBL_ENTRY vtc_S8691C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8691C1[0]),
  (VTBL_ENTRY)&_ZN7S8691C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8691C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8691C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8691C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8691C1[];
extern  VTBL_ENTRY _ZTV7S8691C1[];
Class_Descriptor cd_S8691C1 = {  "S8691C1", // class name
  bases_S8691C1, 1,
  &(vtc_S8691C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,244), // object size
  NSPAIRA(_ZTI7S8691C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8691C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8690C2  {
  ::S119C13_nt s8690c2f0;
  ::S119C13_nt s8690c2f1;
  int s8690c2f2;
  ::S21925C32 s8690c2f3;
  ::S119C8_nt s8690c2f4;
  ::S119C13_nt s8690c2f5;
  virtual  ~S8690C2(); // _ZN7S8690C2D1Ev
  virtual void  v2(); // _ZN7S8690C22v2Ev
  S8690C2(); // tgen
};
//SIG(-1 S8690C2) C1{ vd v1 FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC5 FC7{ m Fp Fi FC8{ m} FC8} Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FC11{ Fl[4]}} FC12{ m Fp FC13{ Fi[4]}} FC10} FC14{ m FC15{ m Fp Fi[2] FC8} Fp[2]} FC2}


 S8690C2 ::~S8690C2(){ note_dtor("S8690C2", this);}
void  S8690C2 ::v2(){vfunc_called(this, "_ZN7S8690C22v2Ev");}
S8690C2 ::S8690C2(){ note_ctor("S8690C2", this);} // tgen

static void Test_S8690C2()
{
  extern Class_Descriptor cd_S8690C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,54)];
    init_test(&cd_S8690C2, buf);
    S8690C2 *dp, &lv = *(dp=new (buf) S8690C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,212), "sizeof(S8690C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8690C2)");
    check_field_offset(lv, s8690c2f0, ABISELECT(8,4), "S8690C2.s8690c2f0");
    check_field_offset(lv, s8690c2f1, ABISELECT(24,16), "S8690C2.s8690c2f1");
    check_field_offset(lv, s8690c2f2, ABISELECT(40,28), "S8690C2.s8690c2f2");
    check_field_offset(lv, s8690c2f3, ABISELECT(48,32), "S8690C2.s8690c2f3");
    check_field_offset(lv, s8690c2f4, ABISELECT(272,176), "S8690C2.s8690c2f4");
    check_field_offset(lv, s8690c2f5, ABISELECT(312,200), "S8690C2.s8690c2f5");
    test_class_info(&lv, &cd_S8690C2);
    dp->~S8690C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8690C2(Test_S8690C2, "S8690C2", ABISELECT(328,212));

#else // __cplusplus

extern void _ZN7S8690C2C1Ev();
extern void _ZN7S8690C2D1Ev();
Name_Map name_map_S8690C2[] = {
  NSPAIR(_ZN7S8690C2C1Ev),
  NSPAIR(_ZN7S8690C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8690C2[];
extern void _ZN7S8690C2D1Ev();
extern void _ZN7S8690C2D0Ev();
extern void _ZN7S8690C22v2Ev();
static  VTBL_ENTRY vtc_S8690C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8690C2[0]),
  (VTBL_ENTRY)&_ZN7S8690C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8690C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8690C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8690C2[];
extern  VTBL_ENTRY _ZTV7S8690C2[];
Class_Descriptor cd_S8690C2 = {  "S8690C2", // class name
  0,0,//no base classes
  &(vtc_S8690C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,212), // object size
  NSPAIRA(_ZTI7S8690C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8690C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8690C1  : S8690C2 {
  virtual  ~S8690C1(); // _ZN7S8690C1D1Ev
  virtual void  v1(); // _ZN7S8690C12v1Ev
  S8690C1(); // tgen
};
//SIG(1 S8690C1) C1{ BC2{ vd v2 FC3{ m Fp Fi FC4{ m}} FC3 Fi FC5{ vd m Fc Fp Fi[4] Fc[2] FC6{ BC7{ m Fp Fi FC4 FC4}} FC6 FC8{ m Fp Fi FC9{ m} FC9} Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FC12{ Fl[4]}} FC13{ m Fp FC14{ Fi[4]}} FC11} FC15{ m FC16{ m Fp Fi[2] FC9} Fp[2]} FC3} vd v1}


 S8690C1 ::~S8690C1(){ note_dtor("S8690C1", this);}
void  S8690C1 ::v1(){vfunc_called(this, "_ZN7S8690C12v1Ev");}
S8690C1 ::S8690C1(){ note_ctor("S8690C1", this);} // tgen

static void Test_S8690C1()
{
  extern Class_Descriptor cd_S8690C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,54)];
    init_test(&cd_S8690C1, buf);
    S8690C1 *dp, &lv = *(dp=new (buf) S8690C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,212), "sizeof(S8690C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8690C1)");
    check_base_class_offset(lv, (S8690C2*), 0, "S8690C1");
    test_class_info(&lv, &cd_S8690C1);
    dp->~S8690C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8690C1(Test_S8690C1, "S8690C1", ABISELECT(328,212));

#else // __cplusplus

extern void _ZN7S8690C1C1Ev();
extern void _ZN7S8690C1D1Ev();
Name_Map name_map_S8690C1[] = {
  NSPAIR(_ZN7S8690C1C1Ev),
  NSPAIR(_ZN7S8690C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8690C2;
extern VTBL_ENTRY _ZTI7S8690C2[];
extern  VTBL_ENTRY _ZTV7S8690C2[];
static Base_Class bases_S8690C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8690C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8690C1[];
extern void _ZN7S8690C1D1Ev();
extern void _ZN7S8690C1D0Ev();
extern void _ZN7S8690C22v2Ev();
extern void _ZN7S8690C12v1Ev();
static  VTBL_ENTRY vtc_S8690C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8690C1[0]),
  (VTBL_ENTRY)&_ZN7S8690C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8690C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8690C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8690C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8690C1[];
extern  VTBL_ENTRY _ZTV7S8690C1[];
Class_Descriptor cd_S8690C1 = {  "S8690C1", // class name
  bases_S8690C1, 1,
  &(vtc_S8690C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,212), // object size
  NSPAIRA(_ZTI7S8690C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8690C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8692C2  {
  ::S119C13_nt s8692c2f0;
  ::S119C13_nt s8692c2f1;
  int s8692c2f2;
  ::S21927C31 s8692c2f3;
  ::S119C8_nt s8692c2f4;
  ::S119C13_nt s8692c2f5;
  virtual  ~S8692C2(); // _ZN7S8692C2D1Ev
  virtual void  v2(); // _ZN7S8692C22v2Ev
  S8692C2(); // tgen
};
//SIG(-1 S8692C2) C1{ vd v1 FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ BC9{ m Fp Fi FC3 FC3}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FL[4]} FC12{ m Fp FC13{ Fi[4]}} FC11} FC14{ m FC15{ m Fp Fi[2] FC7} Fp[2]} FC2}


 S8692C2 ::~S8692C2(){ note_dtor("S8692C2", this);}
void  S8692C2 ::v2(){vfunc_called(this, "_ZN7S8692C22v2Ev");}
S8692C2 ::S8692C2(){ note_ctor("S8692C2", this);} // tgen

static void Test_S8692C2()
{
  extern Class_Descriptor cd_S8692C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,62)];
    init_test(&cd_S8692C2, buf);
    S8692C2 *dp, &lv = *(dp=new (buf) S8692C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,244), "sizeof(S8692C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8692C2)");
    check_field_offset(lv, s8692c2f0, ABISELECT(8,4), "S8692C2.s8692c2f0");
    check_field_offset(lv, s8692c2f1, ABISELECT(24,16), "S8692C2.s8692c2f1");
    check_field_offset(lv, s8692c2f2, ABISELECT(40,28), "S8692C2.s8692c2f2");
    check_field_offset(lv, s8692c2f3, ABISELECT(48,32), "S8692C2.s8692c2f3");
    check_field_offset(lv, s8692c2f4, ABISELECT(272,208), "S8692C2.s8692c2f4");
    check_field_offset(lv, s8692c2f5, ABISELECT(312,232), "S8692C2.s8692c2f5");
    test_class_info(&lv, &cd_S8692C2);
    dp->~S8692C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8692C2(Test_S8692C2, "S8692C2", ABISELECT(328,244));

#else // __cplusplus

extern void _ZN7S8692C2C1Ev();
extern void _ZN7S8692C2D1Ev();
Name_Map name_map_S8692C2[] = {
  NSPAIR(_ZN7S8692C2C1Ev),
  NSPAIR(_ZN7S8692C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8692C2[];
extern void _ZN7S8692C2D1Ev();
extern void _ZN7S8692C2D0Ev();
extern void _ZN7S8692C22v2Ev();
static  VTBL_ENTRY vtc_S8692C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8692C2[0]),
  (VTBL_ENTRY)&_ZN7S8692C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8692C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8692C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8692C2[];
extern  VTBL_ENTRY _ZTV7S8692C2[];
Class_Descriptor cd_S8692C2 = {  "S8692C2", // class name
  0,0,//no base classes
  &(vtc_S8692C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,244), // object size
  NSPAIRA(_ZTI7S8692C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8692C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8692C1  : S8692C2 {
  char s8692c1f0;
  virtual  ~S8692C1(); // _ZN7S8692C1D1Ev
  virtual void  v1(); // _ZN7S8692C12v1Ev
  S8692C1(); // tgen
};
//SIG(1 S8692C1) C1{ BC2{ vd v2 FC3{ m Fp Fi FC4{ m}} FC3 Fi FC5{ vd m Fc Fp Fi[4] Fc[2] FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC9{ BC10{ m Fp Fi FC4 FC4}} FC7 Fp Fc[2] Fi[2] FC11{ m Fp[2]} FC12{ m FL[4]} FC13{ m Fp FC14{ Fi[4]}} FC12} FC15{ m FC16{ m Fp Fi[2] FC8} Fp[2]} FC3} vd v1 Fc}


 S8692C1 ::~S8692C1(){ note_dtor("S8692C1", this);}
void  S8692C1 ::v1(){vfunc_called(this, "_ZN7S8692C12v1Ev");}
S8692C1 ::S8692C1(){ note_ctor("S8692C1", this);} // tgen

static void Test_S8692C1()
{
  extern Class_Descriptor cd_S8692C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,63)];
    init_test(&cd_S8692C1, buf);
    S8692C1 *dp, &lv = *(dp=new (buf) S8692C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,248), "sizeof(S8692C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8692C1)");
    check_base_class_offset(lv, (S8692C2*), 0, "S8692C1");
    check_field_offset(lv, s8692c1f0, ABISELECT(328,244), "S8692C1.s8692c1f0");
    test_class_info(&lv, &cd_S8692C1);
    dp->~S8692C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8692C1(Test_S8692C1, "S8692C1", ABISELECT(336,248));

#else // __cplusplus

extern void _ZN7S8692C1C1Ev();
extern void _ZN7S8692C1D1Ev();
Name_Map name_map_S8692C1[] = {
  NSPAIR(_ZN7S8692C1C1Ev),
  NSPAIR(_ZN7S8692C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8692C2;
extern VTBL_ENTRY _ZTI7S8692C2[];
extern  VTBL_ENTRY _ZTV7S8692C2[];
static Base_Class bases_S8692C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8692C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8692C1[];
extern void _ZN7S8692C1D1Ev();
extern void _ZN7S8692C1D0Ev();
extern void _ZN7S8692C22v2Ev();
extern void _ZN7S8692C12v1Ev();
static  VTBL_ENTRY vtc_S8692C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8692C1[0]),
  (VTBL_ENTRY)&_ZN7S8692C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8692C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8692C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8692C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8692C1[];
extern  VTBL_ENTRY _ZTV7S8692C1[];
Class_Descriptor cd_S8692C1 = {  "S8692C1", // class name
  bases_S8692C1, 1,
  &(vtc_S8692C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,248), // object size
  NSPAIRA(_ZTI7S8692C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8692C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8693C2  {
  ::S119C13_nt s8693c2f0;
  ::S119C13_nt s8693c2f1;
  int s8693c2f2;
  ::S21927C31 s8693c2f3;
  ::S119C8_nt s8693c2f4;
  ::S119C13_nt s8693c2f5;
  virtual  ~S8693C2(); // _ZN7S8693C2D1Ev
  virtual void  v2(); // _ZN7S8693C22v2Ev
  S8693C2(); // tgen
};
//SIG(-1 S8693C2) C1{ vd v1 FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ BC9{ m Fp Fi FC3 FC3}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FL[4]} FC12{ m Fp FC13{ Fi[4]}} FC11} FC14{ m FC15{ m Fp Fi[2] FC7} Fp[2]} FC2}


 S8693C2 ::~S8693C2(){ note_dtor("S8693C2", this);}
void  S8693C2 ::v2(){vfunc_called(this, "_ZN7S8693C22v2Ev");}
S8693C2 ::S8693C2(){ note_ctor("S8693C2", this);} // tgen

static void Test_S8693C2()
{
  extern Class_Descriptor cd_S8693C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,62)];
    init_test(&cd_S8693C2, buf);
    S8693C2 *dp, &lv = *(dp=new (buf) S8693C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,244), "sizeof(S8693C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8693C2)");
    check_field_offset(lv, s8693c2f0, ABISELECT(8,4), "S8693C2.s8693c2f0");
    check_field_offset(lv, s8693c2f1, ABISELECT(24,16), "S8693C2.s8693c2f1");
    check_field_offset(lv, s8693c2f2, ABISELECT(40,28), "S8693C2.s8693c2f2");
    check_field_offset(lv, s8693c2f3, ABISELECT(48,32), "S8693C2.s8693c2f3");
    check_field_offset(lv, s8693c2f4, ABISELECT(272,208), "S8693C2.s8693c2f4");
    check_field_offset(lv, s8693c2f5, ABISELECT(312,232), "S8693C2.s8693c2f5");
    test_class_info(&lv, &cd_S8693C2);
    dp->~S8693C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8693C2(Test_S8693C2, "S8693C2", ABISELECT(328,244));

#else // __cplusplus

extern void _ZN7S8693C2C1Ev();
extern void _ZN7S8693C2D1Ev();
Name_Map name_map_S8693C2[] = {
  NSPAIR(_ZN7S8693C2C1Ev),
  NSPAIR(_ZN7S8693C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8693C2[];
extern void _ZN7S8693C2D1Ev();
extern void _ZN7S8693C2D0Ev();
extern void _ZN7S8693C22v2Ev();
static  VTBL_ENTRY vtc_S8693C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8693C2[0]),
  (VTBL_ENTRY)&_ZN7S8693C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8693C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8693C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8693C2[];
extern  VTBL_ENTRY _ZTV7S8693C2[];
Class_Descriptor cd_S8693C2 = {  "S8693C2", // class name
  0,0,//no base classes
  &(vtc_S8693C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,244), // object size
  NSPAIRA(_ZTI7S8693C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8693C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8693C1  : S8693C2 {
  virtual  ~S8693C1(); // _ZN7S8693C1D1Ev
  virtual void  v1(); // _ZN7S8693C12v1Ev
  S8693C1(); // tgen
};
//SIG(1 S8693C1) C1{ BC2{ vd v2 FC3{ m Fp Fi FC4{ m}} FC3 Fi FC5{ vd m Fc Fp Fi[4] Fc[2] FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC9{ BC10{ m Fp Fi FC4 FC4}} FC7 Fp Fc[2] Fi[2] FC11{ m Fp[2]} FC12{ m FL[4]} FC13{ m Fp FC14{ Fi[4]}} FC12} FC15{ m FC16{ m Fp Fi[2] FC8} Fp[2]} FC3} vd v1}


 S8693C1 ::~S8693C1(){ note_dtor("S8693C1", this);}
void  S8693C1 ::v1(){vfunc_called(this, "_ZN7S8693C12v1Ev");}
S8693C1 ::S8693C1(){ note_ctor("S8693C1", this);} // tgen

static void Test_S8693C1()
{
  extern Class_Descriptor cd_S8693C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,62)];
    init_test(&cd_S8693C1, buf);
    S8693C1 *dp, &lv = *(dp=new (buf) S8693C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,244), "sizeof(S8693C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8693C1)");
    check_base_class_offset(lv, (S8693C2*), 0, "S8693C1");
    test_class_info(&lv, &cd_S8693C1);
    dp->~S8693C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8693C1(Test_S8693C1, "S8693C1", ABISELECT(328,244));

#else // __cplusplus

extern void _ZN7S8693C1C1Ev();
extern void _ZN7S8693C1D1Ev();
Name_Map name_map_S8693C1[] = {
  NSPAIR(_ZN7S8693C1C1Ev),
  NSPAIR(_ZN7S8693C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8693C2;
extern VTBL_ENTRY _ZTI7S8693C2[];
extern  VTBL_ENTRY _ZTV7S8693C2[];
static Base_Class bases_S8693C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8693C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8693C1[];
extern void _ZN7S8693C1D1Ev();
extern void _ZN7S8693C1D0Ev();
extern void _ZN7S8693C22v2Ev();
extern void _ZN7S8693C12v1Ev();
static  VTBL_ENTRY vtc_S8693C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8693C1[0]),
  (VTBL_ENTRY)&_ZN7S8693C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8693C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8693C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8693C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8693C1[];
extern  VTBL_ENTRY _ZTV7S8693C1[];
Class_Descriptor cd_S8693C1 = {  "S8693C1", // class name
  bases_S8693C1, 1,
  &(vtc_S8693C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,244), // object size
  NSPAIRA(_ZTI7S8693C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8693C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10146C2_nt  {
  virtual  ~S10146C2_nt(); // _ZN11S10146C2_ntD1Ev
  virtual void  v7(); // _ZN11S10146C2_nt2v7Ev
  virtual void  v8(); // _ZN11S10146C2_nt2v8Ev
  virtual void  v9(); // _ZN11S10146C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10146C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10146C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10146C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10146C2_nt3v13Ev
  virtual void  v14(); // _ZN11S10146C2_nt3v14Ev
  virtual void  v15(); // _ZN11S10146C2_nt3v15Ev
  virtual void  v16(); // _ZN11S10146C2_nt3v16Ev
  S10146C2_nt(); // tgen
};
//SIG(-1 S10146C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S10146C2_nt ::~S10146C2_nt(){ note_dtor("S10146C2_nt", this);}
void  S10146C2_nt ::v7(){vfunc_called(this, "_ZN11S10146C2_nt2v7Ev");}
void  S10146C2_nt ::v8(){vfunc_called(this, "_ZN11S10146C2_nt2v8Ev");}
void  S10146C2_nt ::v9(){vfunc_called(this, "_ZN11S10146C2_nt2v9Ev");}
void  S10146C2_nt ::v10(){vfunc_called(this, "_ZN11S10146C2_nt3v10Ev");}
void  S10146C2_nt ::v11(){vfunc_called(this, "_ZN11S10146C2_nt3v11Ev");}
void  S10146C2_nt ::v12(){vfunc_called(this, "_ZN11S10146C2_nt3v12Ev");}
void  S10146C2_nt ::v13(){vfunc_called(this, "_ZN11S10146C2_nt3v13Ev");}
void  S10146C2_nt ::v14(){vfunc_called(this, "_ZN11S10146C2_nt3v14Ev");}
void  S10146C2_nt ::v15(){vfunc_called(this, "_ZN11S10146C2_nt3v15Ev");}
void  S10146C2_nt ::v16(){vfunc_called(this, "_ZN11S10146C2_nt3v16Ev");}
S10146C2_nt ::S10146C2_nt(){ note_ctor("S10146C2_nt", this);} // tgen

//skip512 S10146C2_nt

#else // __cplusplus

extern void _ZN11S10146C2_ntC1Ev();
extern void _ZN11S10146C2_ntD1Ev();
Name_Map name_map_S10146C2_nt[] = {
  NSPAIR(_ZN11S10146C2_ntC1Ev),
  NSPAIR(_ZN11S10146C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10146C2_nt[];
extern void _ZN11S10146C2_ntD1Ev();
extern void _ZN11S10146C2_ntD0Ev();
extern void _ZN11S10146C2_nt2v7Ev();
extern void _ZN11S10146C2_nt2v8Ev();
extern void _ZN11S10146C2_nt2v9Ev();
extern void _ZN11S10146C2_nt3v10Ev();
extern void _ZN11S10146C2_nt3v11Ev();
extern void _ZN11S10146C2_nt3v12Ev();
extern void _ZN11S10146C2_nt3v13Ev();
extern void _ZN11S10146C2_nt3v14Ev();
extern void _ZN11S10146C2_nt3v15Ev();
extern void _ZN11S10146C2_nt3v16Ev();
static  VTBL_ENTRY vtc_S10146C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10146C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10146C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI11S10146C2_nt[];
VTBL_ENTRY *P__ZTI11S10146C2_nt = _ZTI11S10146C2_nt; 
extern  VTBL_ENTRY _ZTV11S10146C2_nt[];
Class_Descriptor cd_S10146C2_nt = {  "S10146C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10146C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10146C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10146C2_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10146C9_nt  {
  short s10146c9f0[6];
  int s10146c9f1[2];
  char s10146c9f2;
  short s10146c9f3;
  void  mf10146c9(); // _ZN11S10146C9_nt9mf10146c9Ev
};
//SIG(-1 S10146C9_nt) C1{ m Fs[6] Fi[2] Fc Fs}


void  S10146C9_nt ::mf10146c9(){}

//skip512 S10146C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10146C8  {
  int s10146c8f0[3];
  ::S119C13_nt s10146c8f1;
  ::S119C13_nt s10146c8f2;
  ::S119C13_nt s10146c8f3;
  __tsi64 s10146c8f4;
  char s10146c8f5;
  int s10146c8f6[2];
  char s10146c8f7;
  ::S10146C9_nt s10146c8f8;
  ::S119C13_nt s10146c8f9;
  ::S119C13_nt s10146c8f10;
  void  mf10146c8(); // _ZN8S10146C89mf10146c8Ev
};
//SIG(-1 S10146C8) C1{ m Fi[3] FC2{ m Fp Fi FC3{ m}} FC2 FC2 FL Fc Fi[2] Fc FC4{ m Fs[6] Fi[2] Fc Fs} FC2 FC2}


void  S10146C8 ::mf10146c8(){}

static void Test_S10146C8()
{
  {
    init_simple_test("S10146C8");
    S10146C8 lv;
    check2(sizeof(lv), ABISELECT(144,120), "sizeof(S10146C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10146C8)");
    check_field_offset(lv, s10146c8f0, 0, "S10146C8.s10146c8f0");
    check_field_offset(lv, s10146c8f1, ABISELECT(16,12), "S10146C8.s10146c8f1");
    check_field_offset(lv, s10146c8f2, ABISELECT(32,24), "S10146C8.s10146c8f2");
    check_field_offset(lv, s10146c8f3, ABISELECT(48,36), "S10146C8.s10146c8f3");
    check_field_offset(lv, s10146c8f4, ABISELECT(64,48), "S10146C8.s10146c8f4");
    check_field_offset(lv, s10146c8f5, ABISELECT(72,56), "S10146C8.s10146c8f5");
    check_field_offset(lv, s10146c8f6, ABISELECT(76,60), "S10146C8.s10146c8f6");
    check_field_offset(lv, s10146c8f7, ABISELECT(84,68), "S10146C8.s10146c8f7");
    check_field_offset(lv, s10146c8f8, ABISELECT(88,72), "S10146C8.s10146c8f8");
    check_field_offset(lv, s10146c8f9, ABISELECT(112,96), "S10146C8.s10146c8f9");
    check_field_offset(lv, s10146c8f10, ABISELECT(128,108), "S10146C8.s10146c8f10");
  }
}
static Arrange_To_Call_Me vS10146C8(Test_S10146C8, "S10146C8", ABISELECT(144,120));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10146C10  : S119C15_nt {
  int s10146c10f0;
};
//SIG(-1 S10146C10) C1{ BC2{ m Fi FL[2] Fc Fi FC3{ m Fp Fi FC4{ m}} FC3 FC5{ BC6{ m Fp Fi[2] FC7{ m Fp}}}} Fi}



static void Test_S10146C10()
{
  extern Class_Descriptor cd_S10146C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S10146C10, buf);
    S10146C10 &lv = *(new (buf) S10146C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S10146C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10146C10)");
    check_base_class_offset(lv, (S119C15_nt*), 0, "S10146C10");
    check_field_offset(lv, s10146c10f0, ABISELECT(88,68), "S10146C10.s10146c10f0");
    test_class_info(&lv, &cd_S10146C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10146C10(Test_S10146C10, "S10146C10", ABISELECT(96,72));

#else // __cplusplus

extern Class_Descriptor cd_S119C15_nt;
static Base_Class bases_S10146C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S10146C10 = {  "S10146C10", // class name
  bases_S10146C10, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(96,72), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10146C1  : S10146C2_nt {
  void *s10146c1f0;
  ::S21925C41 s10146c1f1;
  ::S119C13_nt s10146c1f2;
  ::S10146C8 s10146c1f3;
  ::S10146C10 s10146c1f4;
  void *s10146c1f5[2];
  int s10146c1f6;
  virtual  ~S10146C1(); // _ZN8S10146C1D1Ev
  virtual void  v1(); // _ZN8S10146C12v1Ev
  virtual void  v2(); // _ZN8S10146C12v2Ev
  virtual void  v3(); // _ZN8S10146C12v3Ev
  virtual void  v4(); // _ZN8S10146C12v4Ev
  virtual void  v5(); // _ZN8S10146C12v5Ev
  virtual void  v6(); // _ZN8S10146C12v6Ev
  S10146C1(); // tgen
};
//SIG(1 S10146C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 Fp FC3{ m Fp Fi FC4{ m} FC4} FC5{ m Fp Fi FC6{ m}} FC7{ m Fi[3] FC5 FC5 FC5 FL Fc Fi[2] Fc FC8{ m Fs[6] Fi[2] Fc Fs} FC5 FC5} FC9{ BC10{ m Fi FL[2] Fc Fi FC5 FC5 FC11{ BC12{ m Fp Fi[2] FC13{ m Fp}}}} Fi} Fp[2] Fi}


 S10146C1 ::~S10146C1(){ note_dtor("S10146C1", this);}
void  S10146C1 ::v1(){vfunc_called(this, "_ZN8S10146C12v1Ev");}
void  S10146C1 ::v2(){vfunc_called(this, "_ZN8S10146C12v2Ev");}
void  S10146C1 ::v3(){vfunc_called(this, "_ZN8S10146C12v3Ev");}
void  S10146C1 ::v4(){vfunc_called(this, "_ZN8S10146C12v4Ev");}
void  S10146C1 ::v5(){vfunc_called(this, "_ZN8S10146C12v5Ev");}
void  S10146C1 ::v6(){vfunc_called(this, "_ZN8S10146C12v6Ev");}
S10146C1 ::S10146C1(){ note_ctor("S10146C1", this);} // tgen

static void Test_S10146C1()
{
  extern Class_Descriptor cd_S10146C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,60)];
    init_test(&cd_S10146C1, buf);
    S10146C1 *dp, &lv = *(dp=new (buf) S10146C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,236), "sizeof(S10146C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10146C1)");
    check_base_class_offset(lv, (S10146C2_nt*), 0, "S10146C1");
    check_field_offset(lv, s10146c1f0, ABISELECT(8,4), "S10146C1.s10146c1f0");
    check_field_offset(lv, s10146c1f1, ABISELECT(16,8), "S10146C1.s10146c1f1");
    check_field_offset(lv, s10146c1f2, ABISELECT(32,20), "S10146C1.s10146c1f2");
    check_field_offset(lv, s10146c1f3, ABISELECT(48,32), "S10146C1.s10146c1f3");
    check_field_offset(lv, s10146c1f4, ABISELECT(192,152), "S10146C1.s10146c1f4");
    check_field_offset(lv, s10146c1f5, ABISELECT(288,224), "S10146C1.s10146c1f5");
    check_field_offset(lv, s10146c1f6, ABISELECT(304,232), "S10146C1.s10146c1f6");
    test_class_info(&lv, &cd_S10146C1);
    dp->~S10146C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10146C1(Test_S10146C1, "S10146C1", ABISELECT(312,236));

#else // __cplusplus

extern void _ZN8S10146C1C1Ev();
extern void _ZN8S10146C1D1Ev();
Name_Map name_map_S10146C1[] = {
  NSPAIR(_ZN8S10146C1C1Ev),
  NSPAIR(_ZN8S10146C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10146C2_nt;
extern VTBL_ENTRY _ZTI11S10146C2_nt[];
extern  VTBL_ENTRY _ZTV11S10146C2_nt[];
static Base_Class bases_S10146C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10146C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10146C1[];
extern void _ZN8S10146C1D1Ev();
extern void _ZN8S10146C1D0Ev();
extern void _ZN11S10146C2_nt2v7Ev();
extern void _ZN11S10146C2_nt2v8Ev();
extern void _ZN11S10146C2_nt2v9Ev();
extern void _ZN11S10146C2_nt3v10Ev();
extern void _ZN11S10146C2_nt3v11Ev();
extern void _ZN11S10146C2_nt3v12Ev();
extern void _ZN11S10146C2_nt3v13Ev();
extern void _ZN11S10146C2_nt3v14Ev();
extern void _ZN11S10146C2_nt3v15Ev();
extern void _ZN11S10146C2_nt3v16Ev();
extern void _ZN8S10146C12v1Ev();
extern void _ZN8S10146C12v2Ev();
extern void _ZN8S10146C12v3Ev();
extern void _ZN8S10146C12v4Ev();
extern void _ZN8S10146C12v5Ev();
extern void _ZN8S10146C12v6Ev();
static  VTBL_ENTRY vtc_S10146C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10146C1[0]),
  (VTBL_ENTRY)&_ZN8S10146C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10146C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10146C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN8S10146C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10146C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10146C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10146C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10146C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10146C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10146C1[];
extern  VTBL_ENTRY _ZTV8S10146C1[];
Class_Descriptor cd_S10146C1 = {  "S10146C1", // class name
  bases_S10146C1, 1,
  &(vtc_S10146C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,236), // object size
  NSPAIRA(_ZTI8S10146C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10146C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5065C3  {
  ::S119C13_nt s5065c3f0;
  int s5065c3f1[2];
  char s5065c3f2;
  virtual  ~S5065C3(); // _ZN7S5065C3D1Ev
  virtual void  v4(); // _ZN7S5065C32v4Ev
  virtual void  v5(); // _ZN7S5065C32v5Ev
  virtual void  v6(); // _ZN7S5065C32v6Ev
  S5065C3(); // tgen
};
//SIG(-1 S5065C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5065C3 ::~S5065C3(){ note_dtor("S5065C3", this);}
void  S5065C3 ::v4(){vfunc_called(this, "_ZN7S5065C32v4Ev");}
void  S5065C3 ::v5(){vfunc_called(this, "_ZN7S5065C32v5Ev");}
void  S5065C3 ::v6(){vfunc_called(this, "_ZN7S5065C32v6Ev");}
S5065C3 ::S5065C3(){ note_ctor("S5065C3", this);} // tgen

static void Test_S5065C3()
{
  extern Class_Descriptor cd_S5065C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5065C3, buf);
    S5065C3 *dp, &lv = *(dp=new (buf) S5065C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5065C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5065C3)");
    check_field_offset(lv, s5065c3f0, ABISELECT(8,4), "S5065C3.s5065c3f0");
    check_field_offset(lv, s5065c3f1, ABISELECT(24,16), "S5065C3.s5065c3f1");
    check_field_offset(lv, s5065c3f2, ABISELECT(32,24), "S5065C3.s5065c3f2");
    test_class_info(&lv, &cd_S5065C3);
    dp->~S5065C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5065C3(Test_S5065C3, "S5065C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5065C3C1Ev();
extern void _ZN7S5065C3D1Ev();
Name_Map name_map_S5065C3[] = {
  NSPAIR(_ZN7S5065C3C1Ev),
  NSPAIR(_ZN7S5065C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5065C3[];
extern void _ZN7S5065C3D1Ev();
extern void _ZN7S5065C3D0Ev();
extern void _ZN7S5065C32v4Ev();
extern void _ZN7S5065C32v5Ev();
extern void _ZN7S5065C32v6Ev();
static  VTBL_ENTRY vtc_S5065C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5065C3[0]),
  (VTBL_ENTRY)&_ZN7S5065C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5065C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5065C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5065C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5065C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5065C3[];
extern  VTBL_ENTRY _ZTV7S5065C3[];
Class_Descriptor cd_S5065C3 = {  "S5065C3", // class name
  0,0,//no base classes
  &(vtc_S5065C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5065C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5065C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5065C2  : S5065C3 {
  void *s5065c2f0;
  virtual void  v7(); // _ZN7S5065C22v7Ev
  virtual void  v8(); // _ZN7S5065C22v8Ev
  ~S5065C2(); // tgen
  S5065C2(); // tgen
};
//SIG(-1 S5065C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5065C2 ::v7(){vfunc_called(this, "_ZN7S5065C22v7Ev");}
void  S5065C2 ::v8(){vfunc_called(this, "_ZN7S5065C22v8Ev");}
S5065C2 ::~S5065C2(){ note_dtor("S5065C2", this);} // tgen
S5065C2 ::S5065C2(){ note_ctor("S5065C2", this);} // tgen

static void Test_S5065C2()
{
  extern Class_Descriptor cd_S5065C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5065C2, buf);
    S5065C2 *dp, &lv = *(dp=new (buf) S5065C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5065C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5065C2)");
    check_base_class_offset(lv, (S5065C3*), 0, "S5065C2");
    check_field_offset(lv, s5065c2f0, ABISELECT(40,28), "S5065C2.s5065c2f0");
    test_class_info(&lv, &cd_S5065C2);
    dp->~S5065C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5065C2(Test_S5065C2, "S5065C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5065C2C1Ev();
extern void _ZN7S5065C2D1Ev();
Name_Map name_map_S5065C2[] = {
  NSPAIR(_ZN7S5065C2C1Ev),
  NSPAIR(_ZN7S5065C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5065C3;
extern VTBL_ENTRY _ZTI7S5065C3[];
extern  VTBL_ENTRY _ZTV7S5065C3[];
static Base_Class bases_S5065C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5065C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5065C2[];
extern void _ZN7S5065C2D1Ev();
extern void _ZN7S5065C2D0Ev();
extern void _ZN7S5065C32v4Ev();
extern void _ZN7S5065C32v5Ev();
extern void _ZN7S5065C32v6Ev();
extern void _ZN7S5065C22v7Ev();
extern void _ZN7S5065C22v8Ev();
static  VTBL_ENTRY vtc_S5065C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5065C2[0]),
  (VTBL_ENTRY)&_ZN7S5065C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5065C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5065C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5065C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5065C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5065C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5065C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5065C2[];
extern  VTBL_ENTRY _ZTV7S5065C2[];
Class_Descriptor cd_S5065C2 = {  "S5065C2", // class name
  bases_S5065C2, 1,
  &(vtc_S5065C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5065C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5065C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5065C1  : S5065C2 {
  ::S21926C2_nt s5065c1f0;
  ::S21925C4_nt s5065c1f1;
  ::S2370C11 s5065c1f2;
  void *s5065c1f3[2];
  ::S119C9_nt s5065c1f4;
  int s5065c1f5;
  virtual void  v1(); // _ZN7S5065C12v1Ev
  virtual void  v2(); // _ZN7S5065C12v2Ev
  virtual void  v3(); // _ZN7S5065C12v3Ev
  ~S5065C1(); // tgen
  S5065C1(); // tgen
};
//SIG(1 S5065C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} v1 v2 v3 FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} FC10{ m FL Fi[2] Fp[5] FC11{ m FL Fi[3] Fp[2] Fi FC12{ BC13{ m Fi FL[2] Fc Fi FC4 FC4 FC14{ BC15{ m Fp Fi[2] FC16{ m Fp}}}} Fc}} Fc[2]} Fp[2] FC17{ m Fp Fi[2] FC18{ m}} Fi}


void  S5065C1 ::v1(){vfunc_called(this, "_ZN7S5065C12v1Ev");}
void  S5065C1 ::v2(){vfunc_called(this, "_ZN7S5065C12v2Ev");}
void  S5065C1 ::v3(){vfunc_called(this, "_ZN7S5065C12v3Ev");}
S5065C1 ::~S5065C1(){ note_dtor("S5065C1", this);} // tgen
S5065C1 ::S5065C1(){ note_ctor("S5065C1", this);} // tgen

static void Test_S5065C1()
{
  extern Class_Descriptor cd_S5065C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,65)];
    init_test(&cd_S5065C1, buf);
    S5065C1 *dp, &lv = *(dp=new (buf) S5065C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,256), "sizeof(S5065C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5065C1)");
    check_base_class_offset(lv, (S5065C3*)(S5065C2*), 0, "S5065C1");
    check_base_class_offset(lv, (S5065C2*), 0, "S5065C1");
    check_field_offset(lv, s5065c1f0, ABISELECT(48,32), "S5065C1.s5065c1f0");
    check_field_offset(lv, s5065c1f1, ABISELECT(80,64), "S5065C1.s5065c1f1");
    check_field_offset(lv, s5065c1f2, ABISELECT(104,84), "S5065C1.s5065c1f2");
    check_field_offset(lv, s5065c1f3, ABISELECT(312,228), "S5065C1.s5065c1f3");
    check_field_offset(lv, s5065c1f4, ABISELECT(328,236), "S5065C1.s5065c1f4");
    check_field_offset(lv, s5065c1f5, ABISELECT(352,252), "S5065C1.s5065c1f5");
    test_class_info(&lv, &cd_S5065C1);
    dp->~S5065C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5065C1(Test_S5065C1, "S5065C1", ABISELECT(360,256));

#else // __cplusplus

extern void _ZN7S5065C1C1Ev();
extern void _ZN7S5065C1D1Ev();
Name_Map name_map_S5065C1[] = {
  NSPAIR(_ZN7S5065C1C1Ev),
  NSPAIR(_ZN7S5065C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5065C3;
extern VTBL_ENTRY _ZTI7S5065C3[];
extern  VTBL_ENTRY _ZTV7S5065C3[];
extern Class_Descriptor cd_S5065C2;
extern VTBL_ENTRY _ZTI7S5065C2[];
extern  VTBL_ENTRY _ZTV7S5065C2[];
static Base_Class bases_S5065C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5065C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5065C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5065C1[];
extern void _ZN7S5065C1D1Ev();
extern void _ZN7S5065C1D0Ev();
extern void _ZN7S5065C32v4Ev();
extern void _ZN7S5065C32v5Ev();
extern void _ZN7S5065C32v6Ev();
extern void _ZN7S5065C22v7Ev();
extern void _ZN7S5065C22v8Ev();
extern void _ZN7S5065C12v1Ev();
extern void _ZN7S5065C12v2Ev();
extern void _ZN7S5065C12v3Ev();
static  VTBL_ENTRY vtc_S5065C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5065C1[0]),
  (VTBL_ENTRY)&_ZN7S5065C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5065C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5065C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5065C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5065C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5065C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5065C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5065C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5065C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5065C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5065C1[];
extern  VTBL_ENTRY _ZTV7S5065C1[];
Class_Descriptor cd_S5065C1 = {  "S5065C1", // class name
  bases_S5065C1, 2,
  &(vtc_S5065C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,256), // object size
  NSPAIRA(_ZTI7S5065C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5065C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5064C3  {
  ::S119C13_nt s5064c3f0;
  int s5064c3f1[2];
  char s5064c3f2;
  virtual  ~S5064C3(); // _ZN7S5064C3D1Ev
  virtual void  v4(); // _ZN7S5064C32v4Ev
  virtual void  v5(); // _ZN7S5064C32v5Ev
  virtual void  v6(); // _ZN7S5064C32v6Ev
  S5064C3(); // tgen
};
//SIG(-1 S5064C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5064C3 ::~S5064C3(){ note_dtor("S5064C3", this);}
void  S5064C3 ::v4(){vfunc_called(this, "_ZN7S5064C32v4Ev");}
void  S5064C3 ::v5(){vfunc_called(this, "_ZN7S5064C32v5Ev");}
void  S5064C3 ::v6(){vfunc_called(this, "_ZN7S5064C32v6Ev");}
S5064C3 ::S5064C3(){ note_ctor("S5064C3", this);} // tgen

static void Test_S5064C3()
{
  extern Class_Descriptor cd_S5064C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5064C3, buf);
    S5064C3 *dp, &lv = *(dp=new (buf) S5064C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5064C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5064C3)");
    check_field_offset(lv, s5064c3f0, ABISELECT(8,4), "S5064C3.s5064c3f0");
    check_field_offset(lv, s5064c3f1, ABISELECT(24,16), "S5064C3.s5064c3f1");
    check_field_offset(lv, s5064c3f2, ABISELECT(32,24), "S5064C3.s5064c3f2");
    test_class_info(&lv, &cd_S5064C3);
    dp->~S5064C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5064C3(Test_S5064C3, "S5064C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5064C3C1Ev();
extern void _ZN7S5064C3D1Ev();
Name_Map name_map_S5064C3[] = {
  NSPAIR(_ZN7S5064C3C1Ev),
  NSPAIR(_ZN7S5064C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5064C3[];
extern void _ZN7S5064C3D1Ev();
extern void _ZN7S5064C3D0Ev();
extern void _ZN7S5064C32v4Ev();
extern void _ZN7S5064C32v5Ev();
extern void _ZN7S5064C32v6Ev();
static  VTBL_ENTRY vtc_S5064C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5064C3[0]),
  (VTBL_ENTRY)&_ZN7S5064C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5064C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5064C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5064C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5064C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5064C3[];
extern  VTBL_ENTRY _ZTV7S5064C3[];
Class_Descriptor cd_S5064C3 = {  "S5064C3", // class name
  0,0,//no base classes
  &(vtc_S5064C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5064C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5064C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5064C2  : S5064C3 {
  void *s5064c2f0;
  virtual void  v7(); // _ZN7S5064C22v7Ev
  virtual void  v8(); // _ZN7S5064C22v8Ev
  ~S5064C2(); // tgen
  S5064C2(); // tgen
};
//SIG(-1 S5064C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5064C2 ::v7(){vfunc_called(this, "_ZN7S5064C22v7Ev");}
void  S5064C2 ::v8(){vfunc_called(this, "_ZN7S5064C22v8Ev");}
S5064C2 ::~S5064C2(){ note_dtor("S5064C2", this);} // tgen
S5064C2 ::S5064C2(){ note_ctor("S5064C2", this);} // tgen

static void Test_S5064C2()
{
  extern Class_Descriptor cd_S5064C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5064C2, buf);
    S5064C2 *dp, &lv = *(dp=new (buf) S5064C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5064C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5064C2)");
    check_base_class_offset(lv, (S5064C3*), 0, "S5064C2");
    check_field_offset(lv, s5064c2f0, ABISELECT(40,28), "S5064C2.s5064c2f0");
    test_class_info(&lv, &cd_S5064C2);
    dp->~S5064C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5064C2(Test_S5064C2, "S5064C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5064C2C1Ev();
extern void _ZN7S5064C2D1Ev();
Name_Map name_map_S5064C2[] = {
  NSPAIR(_ZN7S5064C2C1Ev),
  NSPAIR(_ZN7S5064C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5064C3;
extern VTBL_ENTRY _ZTI7S5064C3[];
extern  VTBL_ENTRY _ZTV7S5064C3[];
static Base_Class bases_S5064C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5064C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5064C2[];
extern void _ZN7S5064C2D1Ev();
extern void _ZN7S5064C2D0Ev();
extern void _ZN7S5064C32v4Ev();
extern void _ZN7S5064C32v5Ev();
extern void _ZN7S5064C32v6Ev();
extern void _ZN7S5064C22v7Ev();
extern void _ZN7S5064C22v8Ev();
static  VTBL_ENTRY vtc_S5064C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5064C2[0]),
  (VTBL_ENTRY)&_ZN7S5064C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5064C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5064C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5064C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5064C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5064C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5064C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5064C2[];
extern  VTBL_ENTRY _ZTV7S5064C2[];
Class_Descriptor cd_S5064C2 = {  "S5064C2", // class name
  bases_S5064C2, 1,
  &(vtc_S5064C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5064C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5064C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5064C1  : S5064C2 {
  ::S21925C2_nt s5064c1f0;
  ::S21925C4_nt s5064c1f1;
  ::S2370C11 s5064c1f2;
  void *s5064c1f3[2];
  ::S119C9_nt s5064c1f4;
  int s5064c1f5;
  virtual void  v1(); // _ZN7S5064C12v1Ev
  virtual void  v2(); // _ZN7S5064C12v2Ev
  virtual void  v3(); // _ZN7S5064C12v3Ev
  ~S5064C1(); // tgen
  S5064C1(); // tgen
};
//SIG(1 S5064C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} v1 v2 v3 FC6{ m FC7{ Fl[4]}} FC8{ m Fp FC9{ Fi[4]}} FC10{ m FL Fi[2] Fp[5] FC11{ m FL Fi[3] Fp[2] Fi FC12{ BC13{ m Fi FL[2] Fc Fi FC4 FC4 FC14{ BC15{ m Fp Fi[2] FC16{ m Fp}}}} Fc}} Fc[2]} Fp[2] FC17{ m Fp Fi[2] FC18{ m}} Fi}


void  S5064C1 ::v1(){vfunc_called(this, "_ZN7S5064C12v1Ev");}
void  S5064C1 ::v2(){vfunc_called(this, "_ZN7S5064C12v2Ev");}
void  S5064C1 ::v3(){vfunc_called(this, "_ZN7S5064C12v3Ev");}
S5064C1 ::~S5064C1(){ note_dtor("S5064C1", this);} // tgen
S5064C1 ::S5064C1(){ note_ctor("S5064C1", this);} // tgen

static void Test_S5064C1()
{
  extern Class_Descriptor cd_S5064C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,61)];
    init_test(&cd_S5064C1, buf);
    S5064C1 *dp, &lv = *(dp=new (buf) S5064C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,240), "sizeof(S5064C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5064C1)");
    check_base_class_offset(lv, (S5064C3*)(S5064C2*), 0, "S5064C1");
    check_base_class_offset(lv, (S5064C2*), 0, "S5064C1");
    check_field_offset(lv, s5064c1f0, ABISELECT(48,32), "S5064C1.s5064c1f0");
    check_field_offset(lv, s5064c1f1, ABISELECT(80,48), "S5064C1.s5064c1f1");
    check_field_offset(lv, s5064c1f2, ABISELECT(104,68), "S5064C1.s5064c1f2");
    check_field_offset(lv, s5064c1f3, ABISELECT(312,212), "S5064C1.s5064c1f3");
    check_field_offset(lv, s5064c1f4, ABISELECT(328,220), "S5064C1.s5064c1f4");
    check_field_offset(lv, s5064c1f5, ABISELECT(352,236), "S5064C1.s5064c1f5");
    test_class_info(&lv, &cd_S5064C1);
    dp->~S5064C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5064C1(Test_S5064C1, "S5064C1", ABISELECT(360,240));

#else // __cplusplus

extern void _ZN7S5064C1C1Ev();
extern void _ZN7S5064C1D1Ev();
Name_Map name_map_S5064C1[] = {
  NSPAIR(_ZN7S5064C1C1Ev),
  NSPAIR(_ZN7S5064C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5064C3;
extern VTBL_ENTRY _ZTI7S5064C3[];
extern  VTBL_ENTRY _ZTV7S5064C3[];
extern Class_Descriptor cd_S5064C2;
extern VTBL_ENTRY _ZTI7S5064C2[];
extern  VTBL_ENTRY _ZTV7S5064C2[];
static Base_Class bases_S5064C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5064C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5064C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5064C1[];
extern void _ZN7S5064C1D1Ev();
extern void _ZN7S5064C1D0Ev();
extern void _ZN7S5064C32v4Ev();
extern void _ZN7S5064C32v5Ev();
extern void _ZN7S5064C32v6Ev();
extern void _ZN7S5064C22v7Ev();
extern void _ZN7S5064C22v8Ev();
extern void _ZN7S5064C12v1Ev();
extern void _ZN7S5064C12v2Ev();
extern void _ZN7S5064C12v3Ev();
static  VTBL_ENTRY vtc_S5064C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5064C1[0]),
  (VTBL_ENTRY)&_ZN7S5064C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5064C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5064C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5064C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5064C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5064C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5064C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5064C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5064C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5064C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5064C1[];
extern  VTBL_ENTRY _ZTV7S5064C1[];
Class_Descriptor cd_S5064C1 = {  "S5064C1", // class name
  bases_S5064C1, 2,
  &(vtc_S5064C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,240), // object size
  NSPAIRA(_ZTI7S5064C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5064C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9374C2  {
  ::S119C13_nt s9374c2f0;
  int s9374c2f1[2];
  char s9374c2f2;
  virtual  ~S9374C2(); // _ZN7S9374C2D1Ev
  virtual void  v3(); // _ZN7S9374C22v3Ev
  virtual void  v4(); // _ZN7S9374C22v4Ev
  virtual void  v5(); // _ZN7S9374C22v5Ev
  S9374C2(); // tgen
};
//SIG(-1 S9374C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9374C2 ::~S9374C2(){ note_dtor("S9374C2", this);}
void  S9374C2 ::v3(){vfunc_called(this, "_ZN7S9374C22v3Ev");}
void  S9374C2 ::v4(){vfunc_called(this, "_ZN7S9374C22v4Ev");}
void  S9374C2 ::v5(){vfunc_called(this, "_ZN7S9374C22v5Ev");}
S9374C2 ::S9374C2(){ note_ctor("S9374C2", this);} // tgen

static void Test_S9374C2()
{
  extern Class_Descriptor cd_S9374C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9374C2, buf);
    S9374C2 *dp, &lv = *(dp=new (buf) S9374C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9374C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9374C2)");
    check_field_offset(lv, s9374c2f0, ABISELECT(8,4), "S9374C2.s9374c2f0");
    check_field_offset(lv, s9374c2f1, ABISELECT(24,16), "S9374C2.s9374c2f1");
    check_field_offset(lv, s9374c2f2, ABISELECT(32,24), "S9374C2.s9374c2f2");
    test_class_info(&lv, &cd_S9374C2);
    dp->~S9374C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9374C2(Test_S9374C2, "S9374C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9374C2C1Ev();
extern void _ZN7S9374C2D1Ev();
Name_Map name_map_S9374C2[] = {
  NSPAIR(_ZN7S9374C2C1Ev),
  NSPAIR(_ZN7S9374C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9374C2[];
extern void _ZN7S9374C2D1Ev();
extern void _ZN7S9374C2D0Ev();
extern void _ZN7S9374C22v3Ev();
extern void _ZN7S9374C22v4Ev();
extern void _ZN7S9374C22v5Ev();
static  VTBL_ENTRY vtc_S9374C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9374C2[0]),
  (VTBL_ENTRY)&_ZN7S9374C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9374C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9374C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9374C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9374C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9374C2[];
extern  VTBL_ENTRY _ZTV7S9374C2[];
Class_Descriptor cd_S9374C2 = {  "S9374C2", // class name
  0,0,//no base classes
  &(vtc_S9374C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9374C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9374C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9374C1  : S9374C2 {
  void *s9374c1f0;
  int s9374c1f1;
  ::S21926C32 s9374c1f2;
  virtual  ~S9374C1(); // _ZN7S9374C1D1Ev
  virtual void  v1(); // _ZN7S9374C12v1Ev
  virtual void  v2(); // _ZN7S9374C12v2Ev
  S9374C1(); // tgen
};
//SIG(1 S9374C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp Fi FC5{ vd m Fc Fp Fi[4] Fc[2] FC6{ BC7{ m Fp Fi FC4 FC4}} FC8{ BC9{ m Fp Fi FC10{ m} FC10}} FC7 Fp Fc[2] Fi[2] FC11{ m Fp[2]} FC12{ m FC13{ FL[4]}} FC14{ m Fp FC15{ Fi[4]}} FC12}}


 S9374C1 ::~S9374C1(){ note_dtor("S9374C1", this);}
void  S9374C1 ::v1(){vfunc_called(this, "_ZN7S9374C12v1Ev");}
void  S9374C1 ::v2(){vfunc_called(this, "_ZN7S9374C12v2Ev");}
S9374C1 ::S9374C1(){ note_ctor("S9374C1", this);} // tgen

static void Test_S9374C1()
{
  extern Class_Descriptor cd_S9374C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S9374C1, buf);
    S9374C1 *dp, &lv = *(dp=new (buf) S9374C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S9374C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9374C1)");
    check_base_class_offset(lv, (S9374C2*), 0, "S9374C1");
    check_field_offset(lv, s9374c1f0, ABISELECT(40,28), "S9374C1.s9374c1f0");
    check_field_offset(lv, s9374c1f1, ABISELECT(48,32), "S9374C1.s9374c1f1");
    check_field_offset(lv, s9374c1f2, ABISELECT(56,36), "S9374C1.s9374c1f2");
    test_class_info(&lv, &cd_S9374C1);
    dp->~S9374C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9374C1(Test_S9374C1, "S9374C1", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S9374C1C1Ev();
extern void _ZN7S9374C1D1Ev();
Name_Map name_map_S9374C1[] = {
  NSPAIR(_ZN7S9374C1C1Ev),
  NSPAIR(_ZN7S9374C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9374C2;
extern VTBL_ENTRY _ZTI7S9374C2[];
extern  VTBL_ENTRY _ZTV7S9374C2[];
static Base_Class bases_S9374C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9374C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9374C1[];
extern void _ZN7S9374C1D1Ev();
extern void _ZN7S9374C1D0Ev();
extern void _ZN7S9374C22v3Ev();
extern void _ZN7S9374C22v4Ev();
extern void _ZN7S9374C22v5Ev();
extern void _ZN7S9374C12v1Ev();
extern void _ZN7S9374C12v2Ev();
static  VTBL_ENTRY vtc_S9374C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9374C1[0]),
  (VTBL_ENTRY)&_ZN7S9374C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9374C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9374C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9374C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9374C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9374C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9374C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9374C1[];
extern  VTBL_ENTRY _ZTV7S9374C1[];
Class_Descriptor cd_S9374C1 = {  "S9374C1", // class name
  bases_S9374C1, 1,
  &(vtc_S9374C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S9374C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9374C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9373C2  {
  ::S119C13_nt s9373c2f0;
  int s9373c2f1[2];
  char s9373c2f2;
  virtual  ~S9373C2(); // _ZN7S9373C2D1Ev
  virtual void  v3(); // _ZN7S9373C22v3Ev
  virtual void  v4(); // _ZN7S9373C22v4Ev
  virtual void  v5(); // _ZN7S9373C22v5Ev
  S9373C2(); // tgen
};
//SIG(-1 S9373C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9373C2 ::~S9373C2(){ note_dtor("S9373C2", this);}
void  S9373C2 ::v3(){vfunc_called(this, "_ZN7S9373C22v3Ev");}
void  S9373C2 ::v4(){vfunc_called(this, "_ZN7S9373C22v4Ev");}
void  S9373C2 ::v5(){vfunc_called(this, "_ZN7S9373C22v5Ev");}
S9373C2 ::S9373C2(){ note_ctor("S9373C2", this);} // tgen

static void Test_S9373C2()
{
  extern Class_Descriptor cd_S9373C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9373C2, buf);
    S9373C2 *dp, &lv = *(dp=new (buf) S9373C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9373C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9373C2)");
    check_field_offset(lv, s9373c2f0, ABISELECT(8,4), "S9373C2.s9373c2f0");
    check_field_offset(lv, s9373c2f1, ABISELECT(24,16), "S9373C2.s9373c2f1");
    check_field_offset(lv, s9373c2f2, ABISELECT(32,24), "S9373C2.s9373c2f2");
    test_class_info(&lv, &cd_S9373C2);
    dp->~S9373C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9373C2(Test_S9373C2, "S9373C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9373C2C1Ev();
extern void _ZN7S9373C2D1Ev();
Name_Map name_map_S9373C2[] = {
  NSPAIR(_ZN7S9373C2C1Ev),
  NSPAIR(_ZN7S9373C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9373C2[];
extern void _ZN7S9373C2D1Ev();
extern void _ZN7S9373C2D0Ev();
extern void _ZN7S9373C22v3Ev();
extern void _ZN7S9373C22v4Ev();
extern void _ZN7S9373C22v5Ev();
static  VTBL_ENTRY vtc_S9373C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9373C2[0]),
  (VTBL_ENTRY)&_ZN7S9373C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9373C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9373C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9373C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9373C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9373C2[];
extern  VTBL_ENTRY _ZTV7S9373C2[];
Class_Descriptor cd_S9373C2 = {  "S9373C2", // class name
  0,0,//no base classes
  &(vtc_S9373C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9373C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9373C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9373C1  : S9373C2 {
  void *s9373c1f0;
  int s9373c1f1;
  ::S21925C32 s9373c1f2;
  virtual  ~S9373C1(); // _ZN7S9373C1D1Ev
  virtual void  v1(); // _ZN7S9373C12v1Ev
  virtual void  v2(); // _ZN7S9373C12v2Ev
  S9373C1(); // tgen
};
//SIG(1 S9373C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp Fi FC5{ vd m Fc Fp Fi[4] Fc[2] FC6{ BC7{ m Fp Fi FC4 FC4}} FC6 FC8{ m Fp Fi FC9{ m} FC9} Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FC12{ Fl[4]}} FC13{ m Fp FC14{ Fi[4]}} FC11}}


 S9373C1 ::~S9373C1(){ note_dtor("S9373C1", this);}
void  S9373C1 ::v1(){vfunc_called(this, "_ZN7S9373C12v1Ev");}
void  S9373C1 ::v2(){vfunc_called(this, "_ZN7S9373C12v2Ev");}
S9373C1 ::S9373C1(){ note_ctor("S9373C1", this);} // tgen

static void Test_S9373C1()
{
  extern Class_Descriptor cd_S9373C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,46)];
    init_test(&cd_S9373C1, buf);
    S9373C1 *dp, &lv = *(dp=new (buf) S9373C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,180), "sizeof(S9373C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9373C1)");
    check_base_class_offset(lv, (S9373C2*), 0, "S9373C1");
    check_field_offset(lv, s9373c1f0, ABISELECT(40,28), "S9373C1.s9373c1f0");
    check_field_offset(lv, s9373c1f1, ABISELECT(48,32), "S9373C1.s9373c1f1");
    check_field_offset(lv, s9373c1f2, ABISELECT(56,36), "S9373C1.s9373c1f2");
    test_class_info(&lv, &cd_S9373C1);
    dp->~S9373C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9373C1(Test_S9373C1, "S9373C1", ABISELECT(280,180));

#else // __cplusplus

extern void _ZN7S9373C1C1Ev();
extern void _ZN7S9373C1D1Ev();
Name_Map name_map_S9373C1[] = {
  NSPAIR(_ZN7S9373C1C1Ev),
  NSPAIR(_ZN7S9373C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9373C2;
extern VTBL_ENTRY _ZTI7S9373C2[];
extern  VTBL_ENTRY _ZTV7S9373C2[];
static Base_Class bases_S9373C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9373C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9373C1[];
extern void _ZN7S9373C1D1Ev();
extern void _ZN7S9373C1D0Ev();
extern void _ZN7S9373C22v3Ev();
extern void _ZN7S9373C22v4Ev();
extern void _ZN7S9373C22v5Ev();
extern void _ZN7S9373C12v1Ev();
extern void _ZN7S9373C12v2Ev();
static  VTBL_ENTRY vtc_S9373C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9373C1[0]),
  (VTBL_ENTRY)&_ZN7S9373C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9373C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9373C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9373C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9373C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9373C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9373C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9373C1[];
extern  VTBL_ENTRY _ZTV7S9373C1[];
Class_Descriptor cd_S9373C1 = {  "S9373C1", // class name
  bases_S9373C1, 1,
  &(vtc_S9373C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,180), // object size
  NSPAIRA(_ZTI7S9373C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9373C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5069C3  {
  ::S119C13_nt s5069c3f0;
  int s5069c3f1[2];
  char s5069c3f2;
  virtual  ~S5069C3(); // _ZN7S5069C3D1Ev
  virtual void  v4(); // _ZN7S5069C32v4Ev
  virtual void  v5(); // _ZN7S5069C32v5Ev
  virtual void  v6(); // _ZN7S5069C32v6Ev
  S5069C3(); // tgen
};
//SIG(-1 S5069C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5069C3 ::~S5069C3(){ note_dtor("S5069C3", this);}
void  S5069C3 ::v4(){vfunc_called(this, "_ZN7S5069C32v4Ev");}
void  S5069C3 ::v5(){vfunc_called(this, "_ZN7S5069C32v5Ev");}
void  S5069C3 ::v6(){vfunc_called(this, "_ZN7S5069C32v6Ev");}
S5069C3 ::S5069C3(){ note_ctor("S5069C3", this);} // tgen

static void Test_S5069C3()
{
  extern Class_Descriptor cd_S5069C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5069C3, buf);
    S5069C3 *dp, &lv = *(dp=new (buf) S5069C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5069C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5069C3)");
    check_field_offset(lv, s5069c3f0, ABISELECT(8,4), "S5069C3.s5069c3f0");
    check_field_offset(lv, s5069c3f1, ABISELECT(24,16), "S5069C3.s5069c3f1");
    check_field_offset(lv, s5069c3f2, ABISELECT(32,24), "S5069C3.s5069c3f2");
    test_class_info(&lv, &cd_S5069C3);
    dp->~S5069C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5069C3(Test_S5069C3, "S5069C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5069C3C1Ev();
extern void _ZN7S5069C3D1Ev();
Name_Map name_map_S5069C3[] = {
  NSPAIR(_ZN7S5069C3C1Ev),
  NSPAIR(_ZN7S5069C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5069C3[];
extern void _ZN7S5069C3D1Ev();
extern void _ZN7S5069C3D0Ev();
extern void _ZN7S5069C32v4Ev();
extern void _ZN7S5069C32v5Ev();
extern void _ZN7S5069C32v6Ev();
static  VTBL_ENTRY vtc_S5069C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5069C3[0]),
  (VTBL_ENTRY)&_ZN7S5069C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5069C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5069C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5069C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5069C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5069C3[];
extern  VTBL_ENTRY _ZTV7S5069C3[];
Class_Descriptor cd_S5069C3 = {  "S5069C3", // class name
  0,0,//no base classes
  &(vtc_S5069C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5069C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5069C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5069C2  : S5069C3 {
  void *s5069c2f0;
  virtual void  v7(); // _ZN7S5069C22v7Ev
  virtual void  v8(); // _ZN7S5069C22v8Ev
  ~S5069C2(); // tgen
  S5069C2(); // tgen
};
//SIG(-1 S5069C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5069C2 ::v7(){vfunc_called(this, "_ZN7S5069C22v7Ev");}
void  S5069C2 ::v8(){vfunc_called(this, "_ZN7S5069C22v8Ev");}
S5069C2 ::~S5069C2(){ note_dtor("S5069C2", this);} // tgen
S5069C2 ::S5069C2(){ note_ctor("S5069C2", this);} // tgen

static void Test_S5069C2()
{
  extern Class_Descriptor cd_S5069C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5069C2, buf);
    S5069C2 *dp, &lv = *(dp=new (buf) S5069C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5069C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5069C2)");
    check_base_class_offset(lv, (S5069C3*), 0, "S5069C2");
    check_field_offset(lv, s5069c2f0, ABISELECT(40,28), "S5069C2.s5069c2f0");
    test_class_info(&lv, &cd_S5069C2);
    dp->~S5069C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5069C2(Test_S5069C2, "S5069C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5069C2C1Ev();
extern void _ZN7S5069C2D1Ev();
Name_Map name_map_S5069C2[] = {
  NSPAIR(_ZN7S5069C2C1Ev),
  NSPAIR(_ZN7S5069C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5069C3;
extern VTBL_ENTRY _ZTI7S5069C3[];
extern  VTBL_ENTRY _ZTV7S5069C3[];
static Base_Class bases_S5069C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5069C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5069C2[];
extern void _ZN7S5069C2D1Ev();
extern void _ZN7S5069C2D0Ev();
extern void _ZN7S5069C32v4Ev();
extern void _ZN7S5069C32v5Ev();
extern void _ZN7S5069C32v6Ev();
extern void _ZN7S5069C22v7Ev();
extern void _ZN7S5069C22v8Ev();
static  VTBL_ENTRY vtc_S5069C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5069C2[0]),
  (VTBL_ENTRY)&_ZN7S5069C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5069C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5069C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5069C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5069C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5069C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5069C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5069C2[];
extern  VTBL_ENTRY _ZTV7S5069C2[];
Class_Descriptor cd_S5069C2 = {  "S5069C2", // class name
  bases_S5069C2, 1,
  &(vtc_S5069C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5069C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5069C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5069C1  : S5069C2 {
  ::S21927C2_nt s5069c1f0;
  ::S21925C4_nt s5069c1f1;
  ::S2370C11 s5069c1f2;
  void *s5069c1f3[2];
  ::S119C9_nt s5069c1f4;
  int s5069c1f5;
  virtual void  v1(); // _ZN7S5069C12v1Ev
  virtual void  v2(); // _ZN7S5069C12v2Ev
  virtual void  v3(); // _ZN7S5069C12v3Ev
  ~S5069C1(); // tgen
  S5069C1(); // tgen
};
//SIG(1 S5069C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} v1 v2 v3 FC6{ m FL[4]} FC7{ m Fp FC8{ Fi[4]}} FC9{ m FL Fi[2] Fp[5] FC10{ m FL Fi[3] Fp[2] Fi FC11{ BC12{ m Fi FL[2] Fc Fi FC4 FC4 FC13{ BC14{ m Fp Fi[2] FC15{ m Fp}}}} Fc}} Fc[2]} Fp[2] FC16{ m Fp Fi[2] FC17{ m}} Fi}


void  S5069C1 ::v1(){vfunc_called(this, "_ZN7S5069C12v1Ev");}
void  S5069C1 ::v2(){vfunc_called(this, "_ZN7S5069C12v2Ev");}
void  S5069C1 ::v3(){vfunc_called(this, "_ZN7S5069C12v3Ev");}
S5069C1 ::~S5069C1(){ note_dtor("S5069C1", this);} // tgen
S5069C1 ::S5069C1(){ note_ctor("S5069C1", this);} // tgen

static void Test_S5069C1()
{
  extern Class_Descriptor cd_S5069C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,65)];
    init_test(&cd_S5069C1, buf);
    S5069C1 *dp, &lv = *(dp=new (buf) S5069C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,256), "sizeof(S5069C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5069C1)");
    check_base_class_offset(lv, (S5069C3*)(S5069C2*), 0, "S5069C1");
    check_base_class_offset(lv, (S5069C2*), 0, "S5069C1");
    check_field_offset(lv, s5069c1f0, ABISELECT(48,32), "S5069C1.s5069c1f0");
    check_field_offset(lv, s5069c1f1, ABISELECT(80,64), "S5069C1.s5069c1f1");
    check_field_offset(lv, s5069c1f2, ABISELECT(104,84), "S5069C1.s5069c1f2");
    check_field_offset(lv, s5069c1f3, ABISELECT(312,228), "S5069C1.s5069c1f3");
    check_field_offset(lv, s5069c1f4, ABISELECT(328,236), "S5069C1.s5069c1f4");
    check_field_offset(lv, s5069c1f5, ABISELECT(352,252), "S5069C1.s5069c1f5");
    test_class_info(&lv, &cd_S5069C1);
    dp->~S5069C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5069C1(Test_S5069C1, "S5069C1", ABISELECT(360,256));

#else // __cplusplus

extern void _ZN7S5069C1C1Ev();
extern void _ZN7S5069C1D1Ev();
Name_Map name_map_S5069C1[] = {
  NSPAIR(_ZN7S5069C1C1Ev),
  NSPAIR(_ZN7S5069C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5069C3;
extern VTBL_ENTRY _ZTI7S5069C3[];
extern  VTBL_ENTRY _ZTV7S5069C3[];
extern Class_Descriptor cd_S5069C2;
extern VTBL_ENTRY _ZTI7S5069C2[];
extern  VTBL_ENTRY _ZTV7S5069C2[];
static Base_Class bases_S5069C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5069C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5069C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5069C1[];
extern void _ZN7S5069C1D1Ev();
extern void _ZN7S5069C1D0Ev();
extern void _ZN7S5069C32v4Ev();
extern void _ZN7S5069C32v5Ev();
extern void _ZN7S5069C32v6Ev();
extern void _ZN7S5069C22v7Ev();
extern void _ZN7S5069C22v8Ev();
extern void _ZN7S5069C12v1Ev();
extern void _ZN7S5069C12v2Ev();
extern void _ZN7S5069C12v3Ev();
static  VTBL_ENTRY vtc_S5069C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5069C1[0]),
  (VTBL_ENTRY)&_ZN7S5069C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5069C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5069C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5069C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5069C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5069C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5069C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5069C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5069C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5069C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5069C1[];
extern  VTBL_ENTRY _ZTV7S5069C1[];
Class_Descriptor cd_S5069C1 = {  "S5069C1", // class name
  bases_S5069C1, 2,
  &(vtc_S5069C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,256), // object size
  NSPAIRA(_ZTI7S5069C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5069C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9375C2  {
  ::S119C13_nt s9375c2f0;
  int s9375c2f1[2];
  char s9375c2f2;
  virtual  ~S9375C2(); // _ZN7S9375C2D1Ev
  virtual void  v3(); // _ZN7S9375C22v3Ev
  virtual void  v4(); // _ZN7S9375C22v4Ev
  virtual void  v5(); // _ZN7S9375C22v5Ev
  S9375C2(); // tgen
};
//SIG(-1 S9375C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9375C2 ::~S9375C2(){ note_dtor("S9375C2", this);}
void  S9375C2 ::v3(){vfunc_called(this, "_ZN7S9375C22v3Ev");}
void  S9375C2 ::v4(){vfunc_called(this, "_ZN7S9375C22v4Ev");}
void  S9375C2 ::v5(){vfunc_called(this, "_ZN7S9375C22v5Ev");}
S9375C2 ::S9375C2(){ note_ctor("S9375C2", this);} // tgen

static void Test_S9375C2()
{
  extern Class_Descriptor cd_S9375C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9375C2, buf);
    S9375C2 *dp, &lv = *(dp=new (buf) S9375C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9375C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9375C2)");
    check_field_offset(lv, s9375c2f0, ABISELECT(8,4), "S9375C2.s9375c2f0");
    check_field_offset(lv, s9375c2f1, ABISELECT(24,16), "S9375C2.s9375c2f1");
    check_field_offset(lv, s9375c2f2, ABISELECT(32,24), "S9375C2.s9375c2f2");
    test_class_info(&lv, &cd_S9375C2);
    dp->~S9375C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9375C2(Test_S9375C2, "S9375C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9375C2C1Ev();
extern void _ZN7S9375C2D1Ev();
Name_Map name_map_S9375C2[] = {
  NSPAIR(_ZN7S9375C2C1Ev),
  NSPAIR(_ZN7S9375C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9375C2[];
extern void _ZN7S9375C2D1Ev();
extern void _ZN7S9375C2D0Ev();
extern void _ZN7S9375C22v3Ev();
extern void _ZN7S9375C22v4Ev();
extern void _ZN7S9375C22v5Ev();
static  VTBL_ENTRY vtc_S9375C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9375C2[0]),
  (VTBL_ENTRY)&_ZN7S9375C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9375C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9375C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9375C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9375C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9375C2[];
extern  VTBL_ENTRY _ZTV7S9375C2[];
Class_Descriptor cd_S9375C2 = {  "S9375C2", // class name
  0,0,//no base classes
  &(vtc_S9375C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9375C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9375C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9375C1  : S9375C2 {
  void *s9375c1f0;
  int s9375c1f1;
  ::S21927C31 s9375c1f2;
  virtual  ~S9375C1(); // _ZN7S9375C1D1Ev
  virtual void  v1(); // _ZN7S9375C12v1Ev
  virtual void  v2(); // _ZN7S9375C12v2Ev
  S9375C1(); // tgen
};
//SIG(1 S9375C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp Fi FC5{ vd m Fc Fp Fi[4] Fc[2] FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC9{ BC10{ m Fp Fi FC4 FC4}} FC7 Fp Fc[2] Fi[2] FC11{ m Fp[2]} FC12{ m FL[4]} FC13{ m Fp FC14{ Fi[4]}} FC12}}


 S9375C1 ::~S9375C1(){ note_dtor("S9375C1", this);}
void  S9375C1 ::v1(){vfunc_called(this, "_ZN7S9375C12v1Ev");}
void  S9375C1 ::v2(){vfunc_called(this, "_ZN7S9375C12v2Ev");}
S9375C1 ::S9375C1(){ note_ctor("S9375C1", this);} // tgen

static void Test_S9375C1()
{
  extern Class_Descriptor cd_S9375C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S9375C1, buf);
    S9375C1 *dp, &lv = *(dp=new (buf) S9375C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S9375C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9375C1)");
    check_base_class_offset(lv, (S9375C2*), 0, "S9375C1");
    check_field_offset(lv, s9375c1f0, ABISELECT(40,28), "S9375C1.s9375c1f0");
    check_field_offset(lv, s9375c1f1, ABISELECT(48,32), "S9375C1.s9375c1f1");
    check_field_offset(lv, s9375c1f2, ABISELECT(56,36), "S9375C1.s9375c1f2");
    test_class_info(&lv, &cd_S9375C1);
    dp->~S9375C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9375C1(Test_S9375C1, "S9375C1", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S9375C1C1Ev();
extern void _ZN7S9375C1D1Ev();
Name_Map name_map_S9375C1[] = {
  NSPAIR(_ZN7S9375C1C1Ev),
  NSPAIR(_ZN7S9375C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9375C2;
extern VTBL_ENTRY _ZTI7S9375C2[];
extern  VTBL_ENTRY _ZTV7S9375C2[];
static Base_Class bases_S9375C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9375C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9375C1[];
extern void _ZN7S9375C1D1Ev();
extern void _ZN7S9375C1D0Ev();
extern void _ZN7S9375C22v3Ev();
extern void _ZN7S9375C22v4Ev();
extern void _ZN7S9375C22v5Ev();
extern void _ZN7S9375C12v1Ev();
extern void _ZN7S9375C12v2Ev();
static  VTBL_ENTRY vtc_S9375C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9375C1[0]),
  (VTBL_ENTRY)&_ZN7S9375C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9375C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9375C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9375C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9375C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9375C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9375C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9375C1[];
extern  VTBL_ENTRY _ZTV7S9375C1[];
Class_Descriptor cd_S9375C1 = {  "S9375C1", // class name
  bases_S9375C1, 1,
  &(vtc_S9375C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S9375C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9375C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21470C1  {
  ::S119C13_nt s21470c1f0;
  ::S119C13_nt s21470c1f1;
  int s21470c1f2;
  ::S21925C32 s21470c1f3[2];
  void  mf21470c1(); // _ZN8S21470C19mf21470c1Ev
  virtual  ~S21470C1(); // _ZN8S21470C1D1Ev
  S21470C1(); // tgen
};
//SIG(1 S21470C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC5 FC7{ m Fp Fi FC8{ m} FC8} Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FC11{ Fl[4]}} FC12{ m Fp FC13{ Fi[4]}} FC10}[2]}


void  S21470C1 ::mf21470c1(){}
 S21470C1 ::~S21470C1(){ note_dtor("S21470C1", this);}
S21470C1 ::S21470C1(){ note_ctor("S21470C1", this);} // tgen

static void Test_S21470C1()
{
  extern Class_Descriptor cd_S21470C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(63,81)];
    init_test(&cd_S21470C1, buf);
    S21470C1 *dp, &lv = *(dp=new (buf) S21470C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,320), "sizeof(S21470C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21470C1)");
    check_field_offset(lv, s21470c1f0, ABISELECT(8,4), "S21470C1.s21470c1f0");
    check_field_offset(lv, s21470c1f1, ABISELECT(24,16), "S21470C1.s21470c1f1");
    check_field_offset(lv, s21470c1f2, ABISELECT(40,28), "S21470C1.s21470c1f2");
    check_field_offset(lv, s21470c1f3, ABISELECT(48,32), "S21470C1.s21470c1f3");
    test_class_info(&lv, &cd_S21470C1);
    dp->~S21470C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21470C1(Test_S21470C1, "S21470C1", ABISELECT(496,320));

#else // __cplusplus

extern void _ZN8S21470C1C1Ev();
extern void _ZN8S21470C1D1Ev();
Name_Map name_map_S21470C1[] = {
  NSPAIR(_ZN8S21470C1C1Ev),
  NSPAIR(_ZN8S21470C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21470C1[];
extern void _ZN8S21470C1D1Ev();
extern void _ZN8S21470C1D0Ev();
static  VTBL_ENTRY vtc_S21470C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21470C1[0]),
  (VTBL_ENTRY)&_ZN8S21470C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21470C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21470C1[];
extern  VTBL_ENTRY _ZTV8S21470C1[];
Class_Descriptor cd_S21470C1 = {  "S21470C1", // class name
  0,0,//no base classes
  &(vtc_S21470C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,320), // object size
  NSPAIRA(_ZTI8S21470C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21470C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21471C1  {
  ::S119C13_nt s21471c1f0;
  ::S119C13_nt s21471c1f1;
  int s21471c1f2;
  ::S21926C32 s21471c1f3[2];
  void  mf21471c1(); // _ZN8S21471C19mf21471c1Ev
  virtual  ~S21471C1(); // _ZN8S21471C1D1Ev
  S21471C1(); // tgen
};
//SIG(1 S21471C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC7{ BC8{ m Fp Fi FC9{ m} FC9}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FC12{ FL[4]}} FC13{ m Fp FC14{ Fi[4]}} FC11}[2]}


void  S21471C1 ::mf21471c1(){}
 S21471C1 ::~S21471C1(){ note_dtor("S21471C1", this);}
S21471C1 ::S21471C1(){ note_ctor("S21471C1", this);} // tgen

static void Test_S21471C1()
{
  extern Class_Descriptor cd_S21471C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(63,97)];
    init_test(&cd_S21471C1, buf);
    S21471C1 *dp, &lv = *(dp=new (buf) S21471C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,384), "sizeof(S21471C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21471C1)");
    check_field_offset(lv, s21471c1f0, ABISELECT(8,4), "S21471C1.s21471c1f0");
    check_field_offset(lv, s21471c1f1, ABISELECT(24,16), "S21471C1.s21471c1f1");
    check_field_offset(lv, s21471c1f2, ABISELECT(40,28), "S21471C1.s21471c1f2");
    check_field_offset(lv, s21471c1f3, ABISELECT(48,32), "S21471C1.s21471c1f3");
    test_class_info(&lv, &cd_S21471C1);
    dp->~S21471C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21471C1(Test_S21471C1, "S21471C1", ABISELECT(496,384));

#else // __cplusplus

extern void _ZN8S21471C1C1Ev();
extern void _ZN8S21471C1D1Ev();
Name_Map name_map_S21471C1[] = {
  NSPAIR(_ZN8S21471C1C1Ev),
  NSPAIR(_ZN8S21471C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21471C1[];
extern void _ZN8S21471C1D1Ev();
extern void _ZN8S21471C1D0Ev();
static  VTBL_ENTRY vtc_S21471C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21471C1[0]),
  (VTBL_ENTRY)&_ZN8S21471C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21471C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21471C1[];
extern  VTBL_ENTRY _ZTV8S21471C1[];
Class_Descriptor cd_S21471C1 = {  "S21471C1", // class name
  0,0,//no base classes
  &(vtc_S21471C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,384), // object size
  NSPAIRA(_ZTI8S21471C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21471C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21472C1  {
  ::S119C13_nt s21472c1f0;
  ::S119C13_nt s21472c1f1;
  int s21472c1f2;
  ::S21925C32 s21472c1f3;
  void  mf21472c1(); // _ZN8S21472C19mf21472c1Ev
  virtual  ~S21472C1(); // _ZN8S21472C1D1Ev
  S21472C1(); // tgen
};
//SIG(1 S21472C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC5 FC7{ m Fp Fi FC8{ m} FC8} Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FC11{ Fl[4]}} FC12{ m Fp FC13{ Fi[4]}} FC10}}


void  S21472C1 ::mf21472c1(){}
 S21472C1 ::~S21472C1(){ note_dtor("S21472C1", this);}
S21472C1 ::S21472C1(){ note_ctor("S21472C1", this);} // tgen

static void Test_S21472C1()
{
  extern Class_Descriptor cd_S21472C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,45)];
    init_test(&cd_S21472C1, buf);
    S21472C1 *dp, &lv = *(dp=new (buf) S21472C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,176), "sizeof(S21472C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21472C1)");
    check_field_offset(lv, s21472c1f0, ABISELECT(8,4), "S21472C1.s21472c1f0");
    check_field_offset(lv, s21472c1f1, ABISELECT(24,16), "S21472C1.s21472c1f1");
    check_field_offset(lv, s21472c1f2, ABISELECT(40,28), "S21472C1.s21472c1f2");
    check_field_offset(lv, s21472c1f3, ABISELECT(48,32), "S21472C1.s21472c1f3");
    test_class_info(&lv, &cd_S21472C1);
    dp->~S21472C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21472C1(Test_S21472C1, "S21472C1", ABISELECT(272,176));

#else // __cplusplus

extern void _ZN8S21472C1C1Ev();
extern void _ZN8S21472C1D1Ev();
Name_Map name_map_S21472C1[] = {
  NSPAIR(_ZN8S21472C1C1Ev),
  NSPAIR(_ZN8S21472C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21472C1[];
extern void _ZN8S21472C1D1Ev();
extern void _ZN8S21472C1D0Ev();
static  VTBL_ENTRY vtc_S21472C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21472C1[0]),
  (VTBL_ENTRY)&_ZN8S21472C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21472C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21472C1[];
extern  VTBL_ENTRY _ZTV8S21472C1[];
Class_Descriptor cd_S21472C1 = {  "S21472C1", // class name
  0,0,//no base classes
  &(vtc_S21472C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,176), // object size
  NSPAIRA(_ZTI8S21472C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21472C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21473C1  {
  ::S119C13_nt s21473c1f0;
  ::S119C13_nt s21473c1f1;
  int s21473c1f2;
  ::S21926C32 s21473c1f3;
  void  mf21473c1(); // _ZN8S21473C19mf21473c1Ev
  virtual  ~S21473C1(); // _ZN8S21473C1D1Ev
  S21473C1(); // tgen
};
//SIG(1 S21473C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC7{ BC8{ m Fp Fi FC9{ m} FC9}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FC12{ FL[4]}} FC13{ m Fp FC14{ Fi[4]}} FC11}}


void  S21473C1 ::mf21473c1(){}
 S21473C1 ::~S21473C1(){ note_dtor("S21473C1", this);}
S21473C1 ::S21473C1(){ note_ctor("S21473C1", this);} // tgen

static void Test_S21473C1()
{
  extern Class_Descriptor cd_S21473C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,53)];
    init_test(&cd_S21473C1, buf);
    S21473C1 *dp, &lv = *(dp=new (buf) S21473C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,208), "sizeof(S21473C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21473C1)");
    check_field_offset(lv, s21473c1f0, ABISELECT(8,4), "S21473C1.s21473c1f0");
    check_field_offset(lv, s21473c1f1, ABISELECT(24,16), "S21473C1.s21473c1f1");
    check_field_offset(lv, s21473c1f2, ABISELECT(40,28), "S21473C1.s21473c1f2");
    check_field_offset(lv, s21473c1f3, ABISELECT(48,32), "S21473C1.s21473c1f3");
    test_class_info(&lv, &cd_S21473C1);
    dp->~S21473C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21473C1(Test_S21473C1, "S21473C1", ABISELECT(272,208));

#else // __cplusplus

extern void _ZN8S21473C1C1Ev();
extern void _ZN8S21473C1D1Ev();
Name_Map name_map_S21473C1[] = {
  NSPAIR(_ZN8S21473C1C1Ev),
  NSPAIR(_ZN8S21473C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21473C1[];
extern void _ZN8S21473C1D1Ev();
extern void _ZN8S21473C1D0Ev();
static  VTBL_ENTRY vtc_S21473C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21473C1[0]),
  (VTBL_ENTRY)&_ZN8S21473C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21473C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21473C1[];
extern  VTBL_ENTRY _ZTV8S21473C1[];
Class_Descriptor cd_S21473C1 = {  "S21473C1", // class name
  0,0,//no base classes
  &(vtc_S21473C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,208), // object size
  NSPAIRA(_ZTI8S21473C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21473C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21474C1  {
  ::S119C13_nt s21474c1f0;
  ::S119C13_nt s21474c1f1;
  int s21474c1f2;
  ::S21927C31 s21474c1f3[2];
  void  mf21474c1(); // _ZN8S21474C19mf21474c1Ev
  virtual  ~S21474C1(); // _ZN8S21474C1D1Ev
  S21474C1(); // tgen
};
//SIG(1 S21474C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ BC9{ m Fp Fi FC3 FC3}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FL[4]} FC12{ m Fp FC13{ Fi[4]}} FC11}[2]}


void  S21474C1 ::mf21474c1(){}
 S21474C1 ::~S21474C1(){ note_dtor("S21474C1", this);}
S21474C1 ::S21474C1(){ note_ctor("S21474C1", this);} // tgen

static void Test_S21474C1()
{
  extern Class_Descriptor cd_S21474C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(63,97)];
    init_test(&cd_S21474C1, buf);
    S21474C1 *dp, &lv = *(dp=new (buf) S21474C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,384), "sizeof(S21474C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21474C1)");
    check_field_offset(lv, s21474c1f0, ABISELECT(8,4), "S21474C1.s21474c1f0");
    check_field_offset(lv, s21474c1f1, ABISELECT(24,16), "S21474C1.s21474c1f1");
    check_field_offset(lv, s21474c1f2, ABISELECT(40,28), "S21474C1.s21474c1f2");
    check_field_offset(lv, s21474c1f3, ABISELECT(48,32), "S21474C1.s21474c1f3");
    test_class_info(&lv, &cd_S21474C1);
    dp->~S21474C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21474C1(Test_S21474C1, "S21474C1", ABISELECT(496,384));

#else // __cplusplus

extern void _ZN8S21474C1C1Ev();
extern void _ZN8S21474C1D1Ev();
Name_Map name_map_S21474C1[] = {
  NSPAIR(_ZN8S21474C1C1Ev),
  NSPAIR(_ZN8S21474C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21474C1[];
extern void _ZN8S21474C1D1Ev();
extern void _ZN8S21474C1D0Ev();
static  VTBL_ENTRY vtc_S21474C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21474C1[0]),
  (VTBL_ENTRY)&_ZN8S21474C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21474C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21474C1[];
extern  VTBL_ENTRY _ZTV8S21474C1[];
Class_Descriptor cd_S21474C1 = {  "S21474C1", // class name
  0,0,//no base classes
  &(vtc_S21474C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,384), // object size
  NSPAIRA(_ZTI8S21474C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21474C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21475C1  {
  ::S119C13_nt s21475c1f0;
  ::S119C13_nt s21475c1f1;
  int s21475c1f2;
  ::S21927C31 s21475c1f3;
  void  mf21475c1(); // _ZN8S21475C19mf21475c1Ev
  virtual  ~S21475C1(); // _ZN8S21475C1D1Ev
  S21475C1(); // tgen
};
//SIG(1 S21475C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 Fi FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ BC9{ m Fp Fi FC3 FC3}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FL[4]} FC12{ m Fp FC13{ Fi[4]}} FC11}}


void  S21475C1 ::mf21475c1(){}
 S21475C1 ::~S21475C1(){ note_dtor("S21475C1", this);}
S21475C1 ::S21475C1(){ note_ctor("S21475C1", this);} // tgen

static void Test_S21475C1()
{
  extern Class_Descriptor cd_S21475C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,53)];
    init_test(&cd_S21475C1, buf);
    S21475C1 *dp, &lv = *(dp=new (buf) S21475C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,208), "sizeof(S21475C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21475C1)");
    check_field_offset(lv, s21475c1f0, ABISELECT(8,4), "S21475C1.s21475c1f0");
    check_field_offset(lv, s21475c1f1, ABISELECT(24,16), "S21475C1.s21475c1f1");
    check_field_offset(lv, s21475c1f2, ABISELECT(40,28), "S21475C1.s21475c1f2");
    check_field_offset(lv, s21475c1f3, ABISELECT(48,32), "S21475C1.s21475c1f3");
    test_class_info(&lv, &cd_S21475C1);
    dp->~S21475C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21475C1(Test_S21475C1, "S21475C1", ABISELECT(272,208));

#else // __cplusplus

extern void _ZN8S21475C1C1Ev();
extern void _ZN8S21475C1D1Ev();
Name_Map name_map_S21475C1[] = {
  NSPAIR(_ZN8S21475C1C1Ev),
  NSPAIR(_ZN8S21475C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21475C1[];
extern void _ZN8S21475C1D1Ev();
extern void _ZN8S21475C1D0Ev();
static  VTBL_ENTRY vtc_S21475C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21475C1[0]),
  (VTBL_ENTRY)&_ZN8S21475C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21475C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21475C1[];
extern  VTBL_ENTRY _ZTV8S21475C1[];
Class_Descriptor cd_S21475C1 = {  "S21475C1", // class name
  0,0,//no base classes
  &(vtc_S21475C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,208), // object size
  NSPAIRA(_ZTI8S21475C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21475C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21485C1  {
  ::S119C13_nt s21485c1f0;
  ::S21925C32 s21485c1f1;
  void  mf21485c1(); // _ZN8S21485C19mf21485c1Ev
  virtual  ~S21485C1(); // _ZN8S21485C1D1Ev
  S21485C1(); // tgen
};
//SIG(1 S21485C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC5 FC7{ m Fp Fi FC8{ m} FC8} Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FC11{ Fl[4]}} FC12{ m Fp FC13{ Fi[4]}} FC10}}


void  S21485C1 ::mf21485c1(){}
 S21485C1 ::~S21485C1(){ note_dtor("S21485C1", this);}
S21485C1 ::S21485C1(){ note_ctor("S21485C1", this);} // tgen

static void Test_S21485C1()
{
  extern Class_Descriptor cd_S21485C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,41)];
    init_test(&cd_S21485C1, buf);
    S21485C1 *dp, &lv = *(dp=new (buf) S21485C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,160), "sizeof(S21485C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21485C1)");
    check_field_offset(lv, s21485c1f0, ABISELECT(8,4), "S21485C1.s21485c1f0");
    check_field_offset(lv, s21485c1f1, ABISELECT(24,16), "S21485C1.s21485c1f1");
    test_class_info(&lv, &cd_S21485C1);
    dp->~S21485C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21485C1(Test_S21485C1, "S21485C1", ABISELECT(248,160));

#else // __cplusplus

extern void _ZN8S21485C1C1Ev();
extern void _ZN8S21485C1D1Ev();
Name_Map name_map_S21485C1[] = {
  NSPAIR(_ZN8S21485C1C1Ev),
  NSPAIR(_ZN8S21485C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21485C1[];
extern void _ZN8S21485C1D1Ev();
extern void _ZN8S21485C1D0Ev();
static  VTBL_ENTRY vtc_S21485C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21485C1[0]),
  (VTBL_ENTRY)&_ZN8S21485C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21485C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21485C1[];
extern  VTBL_ENTRY _ZTV8S21485C1[];
Class_Descriptor cd_S21485C1 = {  "S21485C1", // class name
  0,0,//no base classes
  &(vtc_S21485C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,160), // object size
  NSPAIRA(_ZTI8S21485C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21485C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21486C1  {
  ::S119C13_nt s21486c1f0;
  ::S21926C32 s21486c1f1;
  void  mf21486c1(); // _ZN8S21486C19mf21486c1Ev
  virtual  ~S21486C1(); // _ZN8S21486C1D1Ev
  S21486C1(); // tgen
};
//SIG(1 S21486C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC7{ BC8{ m Fp Fi FC9{ m} FC9}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FC12{ FL[4]}} FC13{ m Fp FC14{ Fi[4]}} FC11}}


void  S21486C1 ::mf21486c1(){}
 S21486C1 ::~S21486C1(){ note_dtor("S21486C1", this);}
S21486C1 ::S21486C1(){ note_ctor("S21486C1", this);} // tgen

static void Test_S21486C1()
{
  extern Class_Descriptor cd_S21486C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,49)];
    init_test(&cd_S21486C1, buf);
    S21486C1 *dp, &lv = *(dp=new (buf) S21486C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,192), "sizeof(S21486C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21486C1)");
    check_field_offset(lv, s21486c1f0, ABISELECT(8,4), "S21486C1.s21486c1f0");
    check_field_offset(lv, s21486c1f1, ABISELECT(24,16), "S21486C1.s21486c1f1");
    test_class_info(&lv, &cd_S21486C1);
    dp->~S21486C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21486C1(Test_S21486C1, "S21486C1", ABISELECT(248,192));

#else // __cplusplus

extern void _ZN8S21486C1C1Ev();
extern void _ZN8S21486C1D1Ev();
Name_Map name_map_S21486C1[] = {
  NSPAIR(_ZN8S21486C1C1Ev),
  NSPAIR(_ZN8S21486C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21486C1[];
extern void _ZN8S21486C1D1Ev();
extern void _ZN8S21486C1D0Ev();
static  VTBL_ENTRY vtc_S21486C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21486C1[0]),
  (VTBL_ENTRY)&_ZN8S21486C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21486C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21486C1[];
extern  VTBL_ENTRY _ZTV8S21486C1[];
Class_Descriptor cd_S21486C1 = {  "S21486C1", // class name
  0,0,//no base classes
  &(vtc_S21486C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,192), // object size
  NSPAIRA(_ZTI8S21486C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21486C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16258C1  {
  ::S119C13_nt s16258c1f0;
  ::S21926C32 s16258c1f1;
  void  mf16258c1(); // _ZN8S16258C19mf16258c1Ev
};
//SIG(1 S16258C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC7{ BC8{ m Fp Fi FC9{ m} FC9}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FC12{ FL[4]}} FC13{ m Fp FC14{ Fi[4]}} FC11}}


void  S16258C1 ::mf16258c1(){}

static void Test_S16258C1()
{
  {
    init_simple_test("S16258C1");
    S16258C1 lv;
    check2(sizeof(lv), ABISELECT(240,188), "sizeof(S16258C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16258C1)");
    check_field_offset(lv, s16258c1f0, 0, "S16258C1.s16258c1f0");
    check_field_offset(lv, s16258c1f1, ABISELECT(16,12), "S16258C1.s16258c1f1");
  }
}
static Arrange_To_Call_Me vS16258C1(Test_S16258C1, "S16258C1", ABISELECT(240,188));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16257C1  {
  ::S119C13_nt s16257c1f0;
  ::S21925C32 s16257c1f1;
  void  mf16257c1(); // _ZN8S16257C19mf16257c1Ev
};
//SIG(1 S16257C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC3 FC3}} FC5 FC7{ m Fp Fi FC8{ m} FC8} Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FC11{ Fl[4]}} FC12{ m Fp FC13{ Fi[4]}} FC10}}


void  S16257C1 ::mf16257c1(){}

static void Test_S16257C1()
{
  {
    init_simple_test("S16257C1");
    S16257C1 lv;
    check2(sizeof(lv), ABISELECT(240,156), "sizeof(S16257C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16257C1)");
    check_field_offset(lv, s16257c1f0, 0, "S16257C1.s16257c1f0");
    check_field_offset(lv, s16257c1f1, ABISELECT(16,12), "S16257C1.s16257c1f1");
  }
}
static Arrange_To_Call_Me vS16257C1(Test_S16257C1, "S16257C1", ABISELECT(240,156));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21487C1  {
  ::S119C13_nt s21487c1f0;
  ::S21927C31 s21487c1f1;
  void  mf21487c1(); // _ZN8S21487C19mf21487c1Ev
  virtual  ~S21487C1(); // _ZN8S21487C1D1Ev
  S21487C1(); // tgen
};
//SIG(1 S21487C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ BC9{ m Fp Fi FC3 FC3}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FL[4]} FC12{ m Fp FC13{ Fi[4]}} FC11}}


void  S21487C1 ::mf21487c1(){}
 S21487C1 ::~S21487C1(){ note_dtor("S21487C1", this);}
S21487C1 ::S21487C1(){ note_ctor("S21487C1", this);} // tgen

static void Test_S21487C1()
{
  extern Class_Descriptor cd_S21487C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,49)];
    init_test(&cd_S21487C1, buf);
    S21487C1 *dp, &lv = *(dp=new (buf) S21487C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,192), "sizeof(S21487C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21487C1)");
    check_field_offset(lv, s21487c1f0, ABISELECT(8,4), "S21487C1.s21487c1f0");
    check_field_offset(lv, s21487c1f1, ABISELECT(24,16), "S21487C1.s21487c1f1");
    test_class_info(&lv, &cd_S21487C1);
    dp->~S21487C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21487C1(Test_S21487C1, "S21487C1", ABISELECT(248,192));

#else // __cplusplus

extern void _ZN8S21487C1C1Ev();
extern void _ZN8S21487C1D1Ev();
Name_Map name_map_S21487C1[] = {
  NSPAIR(_ZN8S21487C1C1Ev),
  NSPAIR(_ZN8S21487C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21487C1[];
extern void _ZN8S21487C1D1Ev();
extern void _ZN8S21487C1D0Ev();
static  VTBL_ENTRY vtc_S21487C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21487C1[0]),
  (VTBL_ENTRY)&_ZN8S21487C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21487C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21487C1[];
extern  VTBL_ENTRY _ZTV8S21487C1[];
Class_Descriptor cd_S21487C1 = {  "S21487C1", // class name
  0,0,//no base classes
  &(vtc_S21487C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,192), // object size
  NSPAIRA(_ZTI8S21487C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21487C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16259C1  {
  ::S119C13_nt s16259c1f0;
  ::S21927C31 s16259c1f1;
  void  mf16259c1(); // _ZN8S16259C19mf16259c1Ev
};
//SIG(1 S16259C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ vd m Fc Fp Fi[4] Fc[2] FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC8{ BC9{ m Fp Fi FC3 FC3}} FC6 Fp Fc[2] Fi[2] FC10{ m Fp[2]} FC11{ m FL[4]} FC12{ m Fp FC13{ Fi[4]}} FC11}}


void  S16259C1 ::mf16259c1(){}

static void Test_S16259C1()
{
  {
    init_simple_test("S16259C1");
    S16259C1 lv;
    check2(sizeof(lv), ABISELECT(240,188), "sizeof(S16259C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16259C1)");
    check_field_offset(lv, s16259c1f0, 0, "S16259C1.s16259c1f0");
    check_field_offset(lv, s16259c1f1, ABISELECT(16,12), "S16259C1.s16259c1f1");
  }
}
static Arrange_To_Call_Me vS16259C1(Test_S16259C1, "S16259C1", ABISELECT(240,188));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7895C1  : S21926C32 {
  ~S7895C1(); // tgen
  S7895C1(); // tgen
};
//SIG(1 S7895C1) C1{ BC2{ vd m Fc Fp Fi[4] Fc[2] FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC4 Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FC11{ FL[4]}} FC12{ m Fp FC13{ Fi[4]}} FC10}}


S7895C1 ::~S7895C1(){ note_dtor("S7895C1", this);} // tgen
S7895C1 ::S7895C1(){ note_ctor("S7895C1", this);} // tgen

static void Test_S7895C1()
{
  extern Class_Descriptor cd_S7895C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,45)];
    init_test(&cd_S7895C1, buf);
    S7895C1 *dp, &lv = *(dp=new (buf) S7895C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S7895C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7895C1)");
    check_base_class_offset(lv, (S21926C32*), 0, "S7895C1");
    test_class_info(&lv, &cd_S7895C1);
    dp->~S7895C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7895C1(Test_S7895C1, "S7895C1", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN7S7895C1C1Ev();
extern void _ZN7S7895C1D1Ev();
Name_Map name_map_S7895C1[] = {
  NSPAIR(_ZN7S7895C1C1Ev),
  NSPAIR(_ZN7S7895C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21926C32;
extern VTBL_ENTRY _ZTI9S21926C32[];
extern  VTBL_ENTRY _ZTV9S21926C32[];
static Base_Class bases_S7895C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21926C32,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7895C1[];
extern void _ZN7S7895C1D1Ev();
extern void _ZN7S7895C1D0Ev();
static  VTBL_ENTRY vtc_S7895C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7895C1[0]),
  (VTBL_ENTRY)&_ZN7S7895C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7895C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S7895C1[];
extern  VTBL_ENTRY _ZTV7S7895C1[];
Class_Descriptor cd_S7895C1 = {  "S7895C1", // class name
  bases_S7895C1, 1,
  &(vtc_S7895C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI7S7895C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7895C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7894C1  : S21925C32 {
  ~S7894C1(); // tgen
  S7894C1(); // tgen
};
//SIG(1 S7894C1) C1{ BC2{ vd m Fc Fp Fi[4] Fc[2] FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC3 FC6{ m Fp Fi FC7{ m} FC7} Fp Fc[2] Fi[2] FC8{ m Fp[2]} FC9{ m FC10{ Fl[4]}} FC11{ m Fp FC12{ Fi[4]}} FC9}}


S7894C1 ::~S7894C1(){ note_dtor("S7894C1", this);} // tgen
S7894C1 ::S7894C1(){ note_ctor("S7894C1", this);} // tgen

static void Test_S7894C1()
{
  extern Class_Descriptor cd_S7894C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,37)];
    init_test(&cd_S7894C1, buf);
    S7894C1 *dp, &lv = *(dp=new (buf) S7894C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,144), "sizeof(S7894C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7894C1)");
    check_base_class_offset(lv, (S21925C32*), 0, "S7894C1");
    test_class_info(&lv, &cd_S7894C1);
    dp->~S7894C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7894C1(Test_S7894C1, "S7894C1", ABISELECT(224,144));

#else // __cplusplus

extern void _ZN7S7894C1C1Ev();
extern void _ZN7S7894C1D1Ev();
Name_Map name_map_S7894C1[] = {
  NSPAIR(_ZN7S7894C1C1Ev),
  NSPAIR(_ZN7S7894C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21925C32;
extern VTBL_ENTRY _ZTI9S21925C32[];
extern  VTBL_ENTRY _ZTV9S21925C32[];
static Base_Class bases_S7894C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21925C32,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7894C1[];
extern void _ZN7S7894C1D1Ev();
extern void _ZN7S7894C1D0Ev();
static  VTBL_ENTRY vtc_S7894C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7894C1[0]),
  (VTBL_ENTRY)&_ZN7S7894C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7894C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S7894C1[];
extern  VTBL_ENTRY _ZTV7S7894C1[];
Class_Descriptor cd_S7894C1 = {  "S7894C1", // class name
  bases_S7894C1, 1,
  &(vtc_S7894C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,144), // object size
  NSPAIRA(_ZTI7S7894C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7894C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7896C1  : S21927C31 {
  ~S7896C1(); // tgen
  S7896C1(); // tgen
};
//SIG(1 S7896C1) C1{ BC2{ vd m Fc Fp Fi[4] Fc[2] FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC6{ BC7{ m Fp Fi FC8{ m} FC8}} FC4 Fp Fc[2] Fi[2] FC9{ m Fp[2]} FC10{ m FL[4]} FC11{ m Fp FC12{ Fi[4]}} FC10}}


S7896C1 ::~S7896C1(){ note_dtor("S7896C1", this);} // tgen
S7896C1 ::S7896C1(){ note_ctor("S7896C1", this);} // tgen

static void Test_S7896C1()
{
  extern Class_Descriptor cd_S7896C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,45)];
    init_test(&cd_S7896C1, buf);
    S7896C1 *dp, &lv = *(dp=new (buf) S7896C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S7896C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7896C1)");
    check_base_class_offset(lv, (S21927C31*), 0, "S7896C1");
    test_class_info(&lv, &cd_S7896C1);
    dp->~S7896C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7896C1(Test_S7896C1, "S7896C1", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN7S7896C1C1Ev();
extern void _ZN7S7896C1D1Ev();
Name_Map name_map_S7896C1[] = {
  NSPAIR(_ZN7S7896C1C1Ev),
  NSPAIR(_ZN7S7896C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21927C31;
extern VTBL_ENTRY _ZTI9S21927C31[];
extern  VTBL_ENTRY _ZTV9S21927C31[];
static Base_Class bases_S7896C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21927C31,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7896C1[];
extern void _ZN7S7896C1D1Ev();
extern void _ZN7S7896C1D0Ev();
static  VTBL_ENTRY vtc_S7896C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7896C1[0]),
  (VTBL_ENTRY)&_ZN7S7896C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7896C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S7896C1[];
extern  VTBL_ENTRY _ZTV7S7896C1[];
Class_Descriptor cd_S7896C1 = {  "S7896C1", // class name
  bases_S7896C1, 1,
  &(vtc_S7896C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI7S7896C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7896C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8826C2  {
  void *s8826c2f0[3];
  ::S119C9_nt s8826c2f1;
  ::S119C9_nt s8826c2f2;
  char s8826c2f3;
  ::S2370C12 s8826c2f4;
  int s8826c2f5;
  virtual  ~S8826C2(); // _ZN7S8826C2D1Ev
  virtual void  v2(); // _ZN7S8826C22v2Ev
  S8826C2(); // tgen
};
//SIG(-1 S8826C2) C1{ vd v1 Fp[3] FC2{ m Fp Fi[2] FC3{ m}} FC2 Fc FC4{ m FL Fi[3] Fp[2] Fi FC5{ BC6{ m Fi FL[2] Fc Fi FC7{ m Fp Fi FC8{ m}} FC7 FC9{ BC10{ m Fp Fi[2] FC11{ m Fp}}}} Fc}} Fi}


 S8826C2 ::~S8826C2(){ note_dtor("S8826C2", this);}
void  S8826C2 ::v2(){vfunc_called(this, "_ZN7S8826C22v2Ev");}
S8826C2 ::S8826C2(){ note_ctor("S8826C2", this);} // tgen

static void Test_S8826C2()
{
  extern Class_Descriptor cd_S8826C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S8826C2, buf);
    S8826C2 *dp, &lv = *(dp=new (buf) S8826C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S8826C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8826C2)");
    check_field_offset(lv, s8826c2f0, ABISELECT(8,4), "S8826C2.s8826c2f0");
    check_field_offset(lv, s8826c2f1, ABISELECT(32,16), "S8826C2.s8826c2f1");
    check_field_offset(lv, s8826c2f2, ABISELECT(56,32), "S8826C2.s8826c2f2");
    check_field_offset(lv, s8826c2f3, ABISELECT(80,48), "S8826C2.s8826c2f3");
    check_field_offset(lv, s8826c2f4, ABISELECT(88,52), "S8826C2.s8826c2f4");
    check_field_offset(lv, s8826c2f5, ABISELECT(232,156), "S8826C2.s8826c2f5");
    test_class_info(&lv, &cd_S8826C2);
    dp->~S8826C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8826C2(Test_S8826C2, "S8826C2", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S8826C2C1Ev();
extern void _ZN7S8826C2D1Ev();
Name_Map name_map_S8826C2[] = {
  NSPAIR(_ZN7S8826C2C1Ev),
  NSPAIR(_ZN7S8826C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8826C2[];
extern void _ZN7S8826C2D1Ev();
extern void _ZN7S8826C2D0Ev();
extern void _ZN7S8826C22v2Ev();
static  VTBL_ENTRY vtc_S8826C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8826C2[0]),
  (VTBL_ENTRY)&_ZN7S8826C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8826C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8826C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8826C2[];
extern  VTBL_ENTRY _ZTV7S8826C2[];
Class_Descriptor cd_S8826C2 = {  "S8826C2", // class name
  0,0,//no base classes
  &(vtc_S8826C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S8826C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8826C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8826C1  : S8826C2 {
  virtual  ~S8826C1(); // _ZN7S8826C1D1Ev
  virtual void  v1(); // _ZN7S8826C12v1Ev
  S8826C1(); // tgen
};
//SIG(1 S8826C1) C1{ BC2{ vd v2 Fp[3] FC3{ m Fp Fi[2] FC4{ m}} FC3 Fc FC5{ m FL Fi[3] Fp[2] Fi FC6{ BC7{ m Fi FL[2] Fc Fi FC8{ m Fp Fi FC9{ m}} FC8 FC10{ BC11{ m Fp Fi[2] FC12{ m Fp}}}} Fc}} Fi} vd v1}


 S8826C1 ::~S8826C1(){ note_dtor("S8826C1", this);}
void  S8826C1 ::v1(){vfunc_called(this, "_ZN7S8826C12v1Ev");}
S8826C1 ::S8826C1(){ note_ctor("S8826C1", this);} // tgen

static void Test_S8826C1()
{
  extern Class_Descriptor cd_S8826C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S8826C1, buf);
    S8826C1 *dp, &lv = *(dp=new (buf) S8826C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S8826C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8826C1)");
    check_base_class_offset(lv, (S8826C2*), 0, "S8826C1");
    test_class_info(&lv, &cd_S8826C1);
    dp->~S8826C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8826C1(Test_S8826C1, "S8826C1", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S8826C1C1Ev();
extern void _ZN7S8826C1D1Ev();
Name_Map name_map_S8826C1[] = {
  NSPAIR(_ZN7S8826C1C1Ev),
  NSPAIR(_ZN7S8826C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8826C2;
extern VTBL_ENTRY _ZTI7S8826C2[];
extern  VTBL_ENTRY _ZTV7S8826C2[];
static Base_Class bases_S8826C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8826C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8826C1[];
extern void _ZN7S8826C1D1Ev();
extern void _ZN7S8826C1D0Ev();
extern void _ZN7S8826C22v2Ev();
extern void _ZN7S8826C12v1Ev();
static  VTBL_ENTRY vtc_S8826C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8826C1[0]),
  (VTBL_ENTRY)&_ZN7S8826C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8826C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8826C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8826C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8826C1[];
extern  VTBL_ENTRY _ZTV7S8826C1[];
Class_Descriptor cd_S8826C1 = {  "S8826C1", // class name
  bases_S8826C1, 1,
  &(vtc_S8826C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S8826C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8826C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2523C3  {
  int s2523c3f0;
  ::S119C13_nt s2523c3f1;
  void *s2523c3f2;
  int s2523c3f3[2];
  __tsi64 s2523c3f4;
  ::S119C16_nt s2523c3f5;
  int s2523c3f6[2];
  ::S21925C44_nt s2523c3f7;
  int s2523c3f8;
  __tsi64 s2523c3f9;
  void  mf2523c3(); // _ZN7S2523C38mf2523c3Ev
};
//SIG(-1 S2523C3) C1{ m Fi FC2{ m Fp Fi FC3{ m}} Fp Fi[2] FL FC4{ BC5{ m Fp Fi[2] FC6{ m Fp}}} Fi[2] FC7{ m Fp[2]} Fi FL}


void  S2523C3 ::mf2523c3(){}

static void Test_S2523C3()
{
  {
    init_simple_test("S2523C3");
    S2523C3 lv;
    check2(sizeof(lv), ABISELECT(112,80), "sizeof(S2523C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2523C3)");
    check_field_offset(lv, s2523c3f0, 0, "S2523C3.s2523c3f0");
    check_field_offset(lv, s2523c3f1, ABISELECT(8,4), "S2523C3.s2523c3f1");
    check_field_offset(lv, s2523c3f2, ABISELECT(24,16), "S2523C3.s2523c3f2");
    check_field_offset(lv, s2523c3f3, ABISELECT(32,20), "S2523C3.s2523c3f3");
    check_field_offset(lv, s2523c3f4, ABISELECT(40,28), "S2523C3.s2523c3f4");
    check_field_offset(lv, s2523c3f5, ABISELECT(48,36), "S2523C3.s2523c3f5");
    check_field_offset(lv, s2523c3f6, ABISELECT(72,52), "S2523C3.s2523c3f6");
    check_field_offset(lv, s2523c3f7, ABISELECT(80,60), "S2523C3.s2523c3f7");
    check_field_offset(lv, s2523c3f8, ABISELECT(96,68), "S2523C3.s2523c3f8");
    check_field_offset(lv, s2523c3f9, ABISELECT(104,72), "S2523C3.s2523c3f9");
  }
}
static Arrange_To_Call_Me vS2523C3(Test_S2523C3, "S2523C3", ABISELECT(112,80));

#else // __cplusplus

Class_Descriptor cd_S2523C3 = {  "S2523C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(112,80), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2523C2  : S2523C3 {
  __tsi64 s2523c2f0[2];
  ::S119C13_nt s2523c2f1;
  ::S119C13_nt s2523c2f2;
  char s2523c2f3;
  ::S119C13_nt s2523c2f4;
  __tsi64 s2523c2f5;
  void *s2523c2f6;
  __tsi64 s2523c2f7;
  ::S119C13_nt s2523c2f8;
  ::S119C13_nt s2523c2f9;
};
//SIG(-1 S2523C2) C1{ BC2{ m Fi FC3{ m Fp Fi FC4{ m}} Fp Fi[2] FL FC5{ BC6{ m Fp Fi[2] FC7{ m Fp}}} Fi[2] FC8{ m Fp[2]} Fi FL} FL[2] FC3 FC3 Fc FC3 FL Fp FL FC3 FC3}



static void Test_S2523C2()
{
  extern Class_Descriptor cd_S2523C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,46)];
    init_test(&cd_S2523C2, buf);
    S2523C2 &lv = *(new (buf) S2523C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,180), "sizeof(S2523C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2523C2)");
    check_base_class_offset(lv, (S2523C3*), 0, "S2523C2");
    check_field_offset(lv, s2523c2f0, ABISELECT(112,80), "S2523C2.s2523c2f0");
    check_field_offset(lv, s2523c2f1, ABISELECT(128,96), "S2523C2.s2523c2f1");
    check_field_offset(lv, s2523c2f2, ABISELECT(144,108), "S2523C2.s2523c2f2");
    check_field_offset(lv, s2523c2f3, ABISELECT(160,120), "S2523C2.s2523c2f3");
    check_field_offset(lv, s2523c2f4, ABISELECT(168,124), "S2523C2.s2523c2f4");
    check_field_offset(lv, s2523c2f5, ABISELECT(184,136), "S2523C2.s2523c2f5");
    check_field_offset(lv, s2523c2f6, ABISELECT(192,144), "S2523C2.s2523c2f6");
    check_field_offset(lv, s2523c2f7, ABISELECT(200,148), "S2523C2.s2523c2f7");
    check_field_offset(lv, s2523c2f8, ABISELECT(208,156), "S2523C2.s2523c2f8");
    check_field_offset(lv, s2523c2f9, ABISELECT(224,168), "S2523C2.s2523c2f9");
    test_class_info(&lv, &cd_S2523C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2523C2(Test_S2523C2, "S2523C2", ABISELECT(240,180));

#else // __cplusplus

extern Class_Descriptor cd_S2523C3;
static Base_Class bases_S2523C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2523C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2523C2 = {  "S2523C2", // class name
  bases_S2523C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(240,180), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2523C1  : S2523C2 {
  ::S119C13_nt s2523c1f0;
};
//SIG(1 S2523C1) C1{ BC2{ BC3{ m Fi FC4{ m Fp Fi FC5{ m}} Fp Fi[2] FL FC6{ BC7{ m Fp Fi[2] FC8{ m Fp}}} Fi[2] FC9{ m Fp[2]} Fi FL} FL[2] FC4 FC4 Fc FC4 FL Fp FL FC4 FC4} FC4}



static void Test_S2523C1()
{
  extern Class_Descriptor cd_S2523C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,49)];
    init_test(&cd_S2523C1, buf);
    S2523C1 &lv = *(new (buf) S2523C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,192), "sizeof(S2523C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2523C1)");
    check_base_class_offset(lv, (S2523C3*)(S2523C2*), 0, "S2523C1");
    check_base_class_offset(lv, (S2523C2*), 0, "S2523C1");
    check_field_offset(lv, s2523c1f0, ABISELECT(240,180), "S2523C1.s2523c1f0");
    test_class_info(&lv, &cd_S2523C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2523C1(Test_S2523C1, "S2523C1", ABISELECT(256,192));

#else // __cplusplus

extern Class_Descriptor cd_S2523C3;
extern Class_Descriptor cd_S2523C2;
static Base_Class bases_S2523C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2523C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2523C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2523C1 = {  "S2523C1", // class name
  bases_S2523C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(256,192), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5137C3  {
  void *s5137c3f0;
  ::S119C13_nt s5137c3f1;
  void *s5137c3f2;
  ::S21925C41 s5137c3f3;
  ::S119C12_nt s5137c3f4;
  ::S119C12_nt s5137c3f5;
  virtual  ~S5137C3(); // _ZN7S5137C3D1Ev
  virtual void  v4(); // _ZN7S5137C32v4Ev
  virtual void  v5(); // _ZN7S5137C32v5Ev
  virtual void  v6(); // _ZN7S5137C32v6Ev
  virtual void  v7(); // _ZN7S5137C32v7Ev
  S5137C3(); // tgen
};
//SIG(-1 S5137C3) C1{ vd v1 v2 v3 v4 Fp FC2{ m Fp Fi FC3{ m}} Fp FC4{ m Fp Fi FC5{ m} FC5} FC6{ m FC2 Fi} FC6}


 S5137C3 ::~S5137C3(){ note_dtor("S5137C3", this);}
void  S5137C3 ::v4(){vfunc_called(this, "_ZN7S5137C32v4Ev");}
void  S5137C3 ::v5(){vfunc_called(this, "_ZN7S5137C32v5Ev");}
void  S5137C3 ::v6(){vfunc_called(this, "_ZN7S5137C32v6Ev");}
void  S5137C3 ::v7(){vfunc_called(this, "_ZN7S5137C32v7Ev");}
S5137C3 ::S5137C3(){ note_ctor("S5137C3", this);} // tgen

static void Test_S5137C3()
{
  extern Class_Descriptor cd_S5137C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S5137C3, buf);
    S5137C3 *dp, &lv = *(dp=new (buf) S5137C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S5137C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5137C3)");
    check_field_offset(lv, s5137c3f0, ABISELECT(8,4), "S5137C3.s5137c3f0");
    check_field_offset(lv, s5137c3f1, ABISELECT(16,8), "S5137C3.s5137c3f1");
    check_field_offset(lv, s5137c3f2, ABISELECT(32,20), "S5137C3.s5137c3f2");
    check_field_offset(lv, s5137c3f3, ABISELECT(40,24), "S5137C3.s5137c3f3");
    check_field_offset(lv, s5137c3f4, ABISELECT(56,36), "S5137C3.s5137c3f4");
    check_field_offset(lv, s5137c3f5, ABISELECT(80,52), "S5137C3.s5137c3f5");
    test_class_info(&lv, &cd_S5137C3);
    dp->~S5137C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5137C3(Test_S5137C3, "S5137C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S5137C3C1Ev();
extern void _ZN7S5137C3D1Ev();
Name_Map name_map_S5137C3[] = {
  NSPAIR(_ZN7S5137C3C1Ev),
  NSPAIR(_ZN7S5137C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5137C3[];
extern void _ZN7S5137C3D1Ev();
extern void _ZN7S5137C3D0Ev();
extern void _ZN7S5137C32v4Ev();
extern void _ZN7S5137C32v5Ev();
extern void _ZN7S5137C32v6Ev();
extern void _ZN7S5137C32v7Ev();
static  VTBL_ENTRY vtc_S5137C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5137C3[0]),
  (VTBL_ENTRY)&_ZN7S5137C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5137C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5137C3[];
extern  VTBL_ENTRY _ZTV7S5137C3[];
Class_Descriptor cd_S5137C3 = {  "S5137C3", // class name
  0,0,//no base classes
  &(vtc_S5137C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S5137C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5137C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5137C2  : S5137C3 {
  char s5137c2f0;
  void *s5137c2f1[2];
  int s5137c2f2[2];
  ::S119C12_nt s5137c2f3;
  ::S119C12_nt s5137c2f4;
  virtual void  v8(); // _ZN7S5137C22v8Ev
  virtual void  v9(); // _ZN7S5137C22v9Ev
  virtual void  v10(); // _ZN7S5137C23v10Ev
  virtual void  v11(); // _ZN7S5137C23v11Ev
  ~S5137C2(); // tgen
  S5137C2(); // tgen
};
//SIG(-1 S5137C2) C1{ BC2{ vd v5 v6 v7 v8 Fp FC3{ m Fp Fi FC4{ m}} Fp FC5{ m Fp Fi FC6{ m} FC6} FC7{ m FC3 Fi} FC7} v1 v2 v3 v4 Fc Fp[2] Fi[2] FC7 FC7}


void  S5137C2 ::v8(){vfunc_called(this, "_ZN7S5137C22v8Ev");}
void  S5137C2 ::v9(){vfunc_called(this, "_ZN7S5137C22v9Ev");}
void  S5137C2 ::v10(){vfunc_called(this, "_ZN7S5137C23v10Ev");}
void  S5137C2 ::v11(){vfunc_called(this, "_ZN7S5137C23v11Ev");}
S5137C2 ::~S5137C2(){ note_dtor("S5137C2", this);} // tgen
S5137C2 ::S5137C2(){ note_ctor("S5137C2", this);} // tgen

static void Test_S5137C2()
{
  extern Class_Descriptor cd_S5137C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,31)];
    init_test(&cd_S5137C2, buf);
    S5137C2 *dp, &lv = *(dp=new (buf) S5137C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,120), "sizeof(S5137C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5137C2)");
    check_base_class_offset(lv, (S5137C3*), 0, "S5137C2");
    check_field_offset(lv, s5137c2f0, ABISELECT(104,68), "S5137C2.s5137c2f0");
    check_field_offset(lv, s5137c2f1, ABISELECT(112,72), "S5137C2.s5137c2f1");
    check_field_offset(lv, s5137c2f2, ABISELECT(128,80), "S5137C2.s5137c2f2");
    check_field_offset(lv, s5137c2f3, ABISELECT(136,88), "S5137C2.s5137c2f3");
    check_field_offset(lv, s5137c2f4, ABISELECT(160,104), "S5137C2.s5137c2f4");
    test_class_info(&lv, &cd_S5137C2);
    dp->~S5137C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5137C2(Test_S5137C2, "S5137C2", ABISELECT(184,120));

#else // __cplusplus

extern void _ZN7S5137C2C1Ev();
extern void _ZN7S5137C2D1Ev();
Name_Map name_map_S5137C2[] = {
  NSPAIR(_ZN7S5137C2C1Ev),
  NSPAIR(_ZN7S5137C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5137C3;
extern VTBL_ENTRY _ZTI7S5137C3[];
extern  VTBL_ENTRY _ZTV7S5137C3[];
static Base_Class bases_S5137C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5137C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5137C2[];
extern void _ZN7S5137C2D1Ev();
extern void _ZN7S5137C2D0Ev();
extern void _ZN7S5137C32v4Ev();
extern void _ZN7S5137C32v5Ev();
extern void _ZN7S5137C32v6Ev();
extern void _ZN7S5137C32v7Ev();
extern void _ZN7S5137C22v8Ev();
extern void _ZN7S5137C22v9Ev();
extern void _ZN7S5137C23v10Ev();
extern void _ZN7S5137C23v11Ev();
static  VTBL_ENTRY vtc_S5137C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5137C2[0]),
  (VTBL_ENTRY)&_ZN7S5137C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5137C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5137C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5137C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5137C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5137C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S5137C2[];
extern  VTBL_ENTRY _ZTV7S5137C2[];
Class_Descriptor cd_S5137C2 = {  "S5137C2", // class name
  bases_S5137C2, 1,
  &(vtc_S5137C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,120), // object size
  NSPAIRA(_ZTI7S5137C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5137C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5137C1  : S5137C2 {
  virtual void  v1(); // _ZN7S5137C12v1Ev
  virtual void  v2(); // _ZN7S5137C12v2Ev
  virtual void  v3(); // _ZN7S5137C12v3Ev
  ~S5137C1(); // tgen
  S5137C1(); // tgen
};
//SIG(1 S5137C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 Fp FC4{ m Fp Fi FC5{ m}} Fp FC6{ m Fp Fi FC7{ m} FC7} FC8{ m FC4 Fi} FC8} v8 v9 v10 v11 Fc Fp[2] Fi[2] FC8 FC8} v1 v2 v3}


void  S5137C1 ::v1(){vfunc_called(this, "_ZN7S5137C12v1Ev");}
void  S5137C1 ::v2(){vfunc_called(this, "_ZN7S5137C12v2Ev");}
void  S5137C1 ::v3(){vfunc_called(this, "_ZN7S5137C12v3Ev");}
S5137C1 ::~S5137C1(){ note_dtor("S5137C1", this);} // tgen
S5137C1 ::S5137C1(){ note_ctor("S5137C1", this);} // tgen

static void Test_S5137C1()
{
  extern Class_Descriptor cd_S5137C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,31)];
    init_test(&cd_S5137C1, buf);
    S5137C1 *dp, &lv = *(dp=new (buf) S5137C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,120), "sizeof(S5137C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5137C1)");
    check_base_class_offset(lv, (S5137C3*)(S5137C2*), 0, "S5137C1");
    check_base_class_offset(lv, (S5137C2*), 0, "S5137C1");
    test_class_info(&lv, &cd_S5137C1);
    dp->~S5137C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5137C1(Test_S5137C1, "S5137C1", ABISELECT(184,120));

#else // __cplusplus

extern void _ZN7S5137C1C1Ev();
extern void _ZN7S5137C1D1Ev();
Name_Map name_map_S5137C1[] = {
  NSPAIR(_ZN7S5137C1C1Ev),
  NSPAIR(_ZN7S5137C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5137C3;
extern VTBL_ENTRY _ZTI7S5137C3[];
extern  VTBL_ENTRY _ZTV7S5137C3[];
extern Class_Descriptor cd_S5137C2;
extern VTBL_ENTRY _ZTI7S5137C2[];
extern  VTBL_ENTRY _ZTV7S5137C2[];
static Base_Class bases_S5137C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5137C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5137C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5137C1[];
extern void _ZN7S5137C1D1Ev();
extern void _ZN7S5137C1D0Ev();
extern void _ZN7S5137C32v4Ev();
extern void _ZN7S5137C32v5Ev();
extern void _ZN7S5137C32v6Ev();
extern void _ZN7S5137C32v7Ev();
extern void _ZN7S5137C22v8Ev();
extern void _ZN7S5137C22v9Ev();
extern void _ZN7S5137C23v10Ev();
extern void _ZN7S5137C23v11Ev();
extern void _ZN7S5137C12v1Ev();
extern void _ZN7S5137C12v2Ev();
extern void _ZN7S5137C12v3Ev();
static  VTBL_ENTRY vtc_S5137C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5137C1[0]),
  (VTBL_ENTRY)&_ZN7S5137C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5137C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5137C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5137C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5137C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5137C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5137C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5137C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5137C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5137C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5137C1[];
extern  VTBL_ENTRY _ZTV7S5137C1[];
Class_Descriptor cd_S5137C1 = {  "S5137C1", // class name
  bases_S5137C1, 2,
  &(vtc_S5137C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,120), // object size
  NSPAIRA(_ZTI7S5137C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5137C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5748C9  {
  __tsi64 s5748c9f0;
  int s5748c9f1;
  ::S119C13_nt s5748c9f2;
  ::S119C13_nt s5748c9f3;
  int s5748c9f4[2];
  ::S119C13_nt s5748c9f5;
  void  mf5748c9(); // _ZN7S5748C98mf5748c9Ev
};
//SIG(-1 S5748C9) C1{ m FL Fi FC2{ m Fp Fi FC3{ m}} FC2 Fi[2] FC2}


void  S5748C9 ::mf5748c9(){}

static void Test_S5748C9()
{
  {
    init_simple_test("S5748C9");
    S5748C9 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S5748C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5748C9)");
    check_field_offset(lv, s5748c9f0, 0, "S5748C9.s5748c9f0");
    check_field_offset(lv, s5748c9f1, 8, "S5748C9.s5748c9f1");
    check_field_offset(lv, s5748c9f2, ABISELECT(16,12), "S5748C9.s5748c9f2");
    check_field_offset(lv, s5748c9f3, ABISELECT(32,24), "S5748C9.s5748c9f3");
    check_field_offset(lv, s5748c9f4, ABISELECT(48,36), "S5748C9.s5748c9f4");
    check_field_offset(lv, s5748c9f5, ABISELECT(56,44), "S5748C9.s5748c9f5");
  }
}
static Arrange_To_Call_Me vS5748C9(Test_S5748C9, "S5748C9", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5748C1  : S2523C3 {
  __tsi64 s5748c1f0[3];
  ::S5748C9 s5748c1f1;
  int s5748c1f2;
};
//SIG(1 S5748C1) C1{ BC2{ m Fi FC3{ m Fp Fi FC4{ m}} Fp Fi[2] FL FC5{ BC6{ m Fp Fi[2] FC7{ m Fp}}} Fi[2] FC8{ m Fp[2]} Fi FL} FL[3] FC9{ m FL Fi FC3 FC3 Fi[2] FC3} Fi}



static void Test_S5748C1()
{
  extern Class_Descriptor cd_S5748C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,42)];
    init_test(&cd_S5748C1, buf);
    S5748C1 &lv = *(new (buf) S5748C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,164), "sizeof(S5748C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5748C1)");
    check_base_class_offset(lv, (S2523C3*), 0, "S5748C1");
    check_field_offset(lv, s5748c1f0, ABISELECT(112,80), "S5748C1.s5748c1f0");
    check_field_offset(lv, s5748c1f1, ABISELECT(136,104), "S5748C1.s5748c1f1");
    check_field_offset(lv, s5748c1f2, ABISELECT(208,160), "S5748C1.s5748c1f2");
    test_class_info(&lv, &cd_S5748C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5748C1(Test_S5748C1, "S5748C1", ABISELECT(216,164));

#else // __cplusplus

extern Class_Descriptor cd_S2523C3;
static Base_Class bases_S5748C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2523C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5748C1 = {  "S5748C1", // class name
  bases_S5748C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(216,164), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9289C2  {
  ::S119C13_nt s9289c2f0;
  int s9289c2f1[2];
  char s9289c2f2;
  virtual  ~S9289C2(); // _ZN7S9289C2D1Ev
  virtual void  v3(); // _ZN7S9289C22v3Ev
  virtual void  v4(); // _ZN7S9289C22v4Ev
  virtual void  v5(); // _ZN7S9289C22v5Ev
  S9289C2(); // tgen
};
//SIG(-1 S9289C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9289C2 ::~S9289C2(){ note_dtor("S9289C2", this);}
void  S9289C2 ::v3(){vfunc_called(this, "_ZN7S9289C22v3Ev");}
void  S9289C2 ::v4(){vfunc_called(this, "_ZN7S9289C22v4Ev");}
void  S9289C2 ::v5(){vfunc_called(this, "_ZN7S9289C22v5Ev");}
S9289C2 ::S9289C2(){ note_ctor("S9289C2", this);} // tgen

static void Test_S9289C2()
{
  extern Class_Descriptor cd_S9289C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9289C2, buf);
    S9289C2 *dp, &lv = *(dp=new (buf) S9289C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9289C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9289C2)");
    check_field_offset(lv, s9289c2f0, ABISELECT(8,4), "S9289C2.s9289c2f0");
    check_field_offset(lv, s9289c2f1, ABISELECT(24,16), "S9289C2.s9289c2f1");
    check_field_offset(lv, s9289c2f2, ABISELECT(32,24), "S9289C2.s9289c2f2");
    test_class_info(&lv, &cd_S9289C2);
    dp->~S9289C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9289C2(Test_S9289C2, "S9289C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9289C2C1Ev();
extern void _ZN7S9289C2D1Ev();
Name_Map name_map_S9289C2[] = {
  NSPAIR(_ZN7S9289C2C1Ev),
  NSPAIR(_ZN7S9289C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9289C2[];
extern void _ZN7S9289C2D1Ev();
extern void _ZN7S9289C2D0Ev();
extern void _ZN7S9289C22v3Ev();
extern void _ZN7S9289C22v4Ev();
extern void _ZN7S9289C22v5Ev();
static  VTBL_ENTRY vtc_S9289C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9289C2[0]),
  (VTBL_ENTRY)&_ZN7S9289C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9289C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9289C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9289C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9289C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9289C2[];
extern  VTBL_ENTRY _ZTV7S9289C2[];
Class_Descriptor cd_S9289C2 = {  "S9289C2", // class name
  0,0,//no base classes
  &(vtc_S9289C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9289C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9289C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9289C1  : S9289C2 {
  ::S772C10 s9289c1f0;
  __tsi64 s9289c1f1;
  int s9289c1f2[2];
  void *s9289c1f3;
  ::S119C11_nt s9289c1f4;
  int s9289c1f5;
  char s9289c1f6;
  virtual  ~S9289C1(); // _ZN7S9289C1D1Ev
  virtual void  v1(); // _ZN7S9289C12v1Ev
  virtual void  v2(); // _ZN7S9289C12v2Ev
  S9289C1(); // tgen
};
//SIG(1 S9289C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FC5{ m FC3 FC3 FL Fi Fc[3] Fi[3] FC3 FC3 Fi Fc[2] FL} FL Fi[2] Fp FC6{ m Fp} Fi Fc}


 S9289C1 ::~S9289C1(){ note_dtor("S9289C1", this);}
void  S9289C1 ::v1(){vfunc_called(this, "_ZN7S9289C12v1Ev");}
void  S9289C1 ::v2(){vfunc_called(this, "_ZN7S9289C12v2Ev");}
S9289C1 ::S9289C1(){ note_ctor("S9289C1", this);} // tgen

static void Test_S9289C1()
{
  extern Class_Descriptor cd_S9289C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,39)];
    init_test(&cd_S9289C1, buf);
    S9289C1 *dp, &lv = *(dp=new (buf) S9289C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,152), "sizeof(S9289C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9289C1)");
    check_base_class_offset(lv, (S9289C2*), 0, "S9289C1");
    check_field_offset(lv, s9289c1f0, ABISELECT(40,28), "S9289C1.s9289c1f0");
    check_field_offset(lv, s9289c1f1, ABISELECT(152,120), "S9289C1.s9289c1f1");
    check_field_offset(lv, s9289c1f2, ABISELECT(160,128), "S9289C1.s9289c1f2");
    check_field_offset(lv, s9289c1f3, ABISELECT(168,136), "S9289C1.s9289c1f3");
    check_field_offset(lv, s9289c1f4, ABISELECT(176,140), "S9289C1.s9289c1f4");
    check_field_offset(lv, s9289c1f5, ABISELECT(184,144), "S9289C1.s9289c1f5");
    check_field_offset(lv, s9289c1f6, ABISELECT(188,148), "S9289C1.s9289c1f6");
    test_class_info(&lv, &cd_S9289C1);
    dp->~S9289C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9289C1(Test_S9289C1, "S9289C1", ABISELECT(192,152));

#else // __cplusplus

extern void _ZN7S9289C1C1Ev();
extern void _ZN7S9289C1D1Ev();
Name_Map name_map_S9289C1[] = {
  NSPAIR(_ZN7S9289C1C1Ev),
  NSPAIR(_ZN7S9289C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9289C2;
extern VTBL_ENTRY _ZTI7S9289C2[];
extern  VTBL_ENTRY _ZTV7S9289C2[];
static Base_Class bases_S9289C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9289C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9289C1[];
extern void _ZN7S9289C1D1Ev();
extern void _ZN7S9289C1D0Ev();
extern void _ZN7S9289C22v3Ev();
extern void _ZN7S9289C22v4Ev();
extern void _ZN7S9289C22v5Ev();
extern void _ZN7S9289C12v1Ev();
extern void _ZN7S9289C12v2Ev();
static  VTBL_ENTRY vtc_S9289C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9289C1[0]),
  (VTBL_ENTRY)&_ZN7S9289C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9289C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9289C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9289C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9289C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9289C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9289C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9289C1[];
extern  VTBL_ENTRY _ZTV7S9289C1[];
Class_Descriptor cd_S9289C1 = {  "S9289C1", // class name
  bases_S9289C1, 1,
  &(vtc_S9289C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,152), // object size
  NSPAIRA(_ZTI7S9289C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9289C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4909C3  {
  void *s4909c3f0;
  ::S119C13_nt s4909c3f1;
  void *s4909c3f2;
  ::S21925C41 s4909c3f3;
  ::S119C12_nt s4909c3f4;
  ::S119C12_nt s4909c3f5;
  virtual  ~S4909C3(); // _ZN7S4909C3D1Ev
  virtual void  v3(); // _ZN7S4909C32v3Ev
  virtual void  v4(); // _ZN7S4909C32v4Ev
  virtual void  v5(); // _ZN7S4909C32v5Ev
  virtual void  v6(); // _ZN7S4909C32v6Ev
  S4909C3(); // tgen
};
//SIG(-1 S4909C3) C1{ vd v1 v2 v3 v4 Fp FC2{ m Fp Fi FC3{ m}} Fp FC4{ m Fp Fi FC5{ m} FC5} FC6{ m FC2 Fi} FC6}


 S4909C3 ::~S4909C3(){ note_dtor("S4909C3", this);}
void  S4909C3 ::v3(){vfunc_called(this, "_ZN7S4909C32v3Ev");}
void  S4909C3 ::v4(){vfunc_called(this, "_ZN7S4909C32v4Ev");}
void  S4909C3 ::v5(){vfunc_called(this, "_ZN7S4909C32v5Ev");}
void  S4909C3 ::v6(){vfunc_called(this, "_ZN7S4909C32v6Ev");}
S4909C3 ::S4909C3(){ note_ctor("S4909C3", this);} // tgen

static void Test_S4909C3()
{
  extern Class_Descriptor cd_S4909C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4909C3, buf);
    S4909C3 *dp, &lv = *(dp=new (buf) S4909C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4909C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4909C3)");
    check_field_offset(lv, s4909c3f0, ABISELECT(8,4), "S4909C3.s4909c3f0");
    check_field_offset(lv, s4909c3f1, ABISELECT(16,8), "S4909C3.s4909c3f1");
    check_field_offset(lv, s4909c3f2, ABISELECT(32,20), "S4909C3.s4909c3f2");
    check_field_offset(lv, s4909c3f3, ABISELECT(40,24), "S4909C3.s4909c3f3");
    check_field_offset(lv, s4909c3f4, ABISELECT(56,36), "S4909C3.s4909c3f4");
    check_field_offset(lv, s4909c3f5, ABISELECT(80,52), "S4909C3.s4909c3f5");
    test_class_info(&lv, &cd_S4909C3);
    dp->~S4909C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4909C3(Test_S4909C3, "S4909C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4909C3C1Ev();
extern void _ZN7S4909C3D1Ev();
Name_Map name_map_S4909C3[] = {
  NSPAIR(_ZN7S4909C3C1Ev),
  NSPAIR(_ZN7S4909C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4909C3[];
extern void _ZN7S4909C3D1Ev();
extern void _ZN7S4909C3D0Ev();
extern void _ZN7S4909C32v3Ev();
extern void _ZN7S4909C32v4Ev();
extern void _ZN7S4909C32v5Ev();
extern void _ZN7S4909C32v6Ev();
static  VTBL_ENTRY vtc_S4909C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4909C3[0]),
  (VTBL_ENTRY)&_ZN7S4909C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4909C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S4909C3[];
extern  VTBL_ENTRY _ZTV7S4909C3[];
Class_Descriptor cd_S4909C3 = {  "S4909C3", // class name
  0,0,//no base classes
  &(vtc_S4909C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4909C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4909C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4909C2  : S4909C3 {
  char s4909c2f0;
  void *s4909c2f1[2];
  int s4909c2f2[2];
  ::S119C12_nt s4909c2f3;
  ::S119C12_nt s4909c2f4;
  virtual void  v7(); // _ZN7S4909C22v7Ev
  virtual void  v8(); // _ZN7S4909C22v8Ev
  virtual void  v9(); // _ZN7S4909C22v9Ev
  virtual void  v10(); // _ZN7S4909C23v10Ev
  ~S4909C2(); // tgen
  S4909C2(); // tgen
};
//SIG(-1 S4909C2) C1{ BC2{ vd v5 v6 v7 v8 Fp FC3{ m Fp Fi FC4{ m}} Fp FC5{ m Fp Fi FC6{ m} FC6} FC7{ m FC3 Fi} FC7} v1 v2 v3 v4 Fc Fp[2] Fi[2] FC7 FC7}


void  S4909C2 ::v7(){vfunc_called(this, "_ZN7S4909C22v7Ev");}
void  S4909C2 ::v8(){vfunc_called(this, "_ZN7S4909C22v8Ev");}
void  S4909C2 ::v9(){vfunc_called(this, "_ZN7S4909C22v9Ev");}
void  S4909C2 ::v10(){vfunc_called(this, "_ZN7S4909C23v10Ev");}
S4909C2 ::~S4909C2(){ note_dtor("S4909C2", this);} // tgen
S4909C2 ::S4909C2(){ note_ctor("S4909C2", this);} // tgen

static void Test_S4909C2()
{
  extern Class_Descriptor cd_S4909C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,31)];
    init_test(&cd_S4909C2, buf);
    S4909C2 *dp, &lv = *(dp=new (buf) S4909C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,120), "sizeof(S4909C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4909C2)");
    check_base_class_offset(lv, (S4909C3*), 0, "S4909C2");
    check_field_offset(lv, s4909c2f0, ABISELECT(104,68), "S4909C2.s4909c2f0");
    check_field_offset(lv, s4909c2f1, ABISELECT(112,72), "S4909C2.s4909c2f1");
    check_field_offset(lv, s4909c2f2, ABISELECT(128,80), "S4909C2.s4909c2f2");
    check_field_offset(lv, s4909c2f3, ABISELECT(136,88), "S4909C2.s4909c2f3");
    check_field_offset(lv, s4909c2f4, ABISELECT(160,104), "S4909C2.s4909c2f4");
    test_class_info(&lv, &cd_S4909C2);
    dp->~S4909C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4909C2(Test_S4909C2, "S4909C2", ABISELECT(184,120));

#else // __cplusplus

extern void _ZN7S4909C2C1Ev();
extern void _ZN7S4909C2D1Ev();
Name_Map name_map_S4909C2[] = {
  NSPAIR(_ZN7S4909C2C1Ev),
  NSPAIR(_ZN7S4909C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4909C3;
extern VTBL_ENTRY _ZTI7S4909C3[];
extern  VTBL_ENTRY _ZTV7S4909C3[];
static Base_Class bases_S4909C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4909C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4909C2[];
extern void _ZN7S4909C2D1Ev();
extern void _ZN7S4909C2D0Ev();
extern void _ZN7S4909C32v3Ev();
extern void _ZN7S4909C32v4Ev();
extern void _ZN7S4909C32v5Ev();
extern void _ZN7S4909C32v6Ev();
extern void _ZN7S4909C22v7Ev();
extern void _ZN7S4909C22v8Ev();
extern void _ZN7S4909C22v9Ev();
extern void _ZN7S4909C23v10Ev();
static  VTBL_ENTRY vtc_S4909C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4909C2[0]),
  (VTBL_ENTRY)&_ZN7S4909C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4909C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4909C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4909C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4909C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4909C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S4909C2[];
extern  VTBL_ENTRY _ZTV7S4909C2[];
Class_Descriptor cd_S4909C2 = {  "S4909C2", // class name
  bases_S4909C2, 1,
  &(vtc_S4909C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,120), // object size
  NSPAIRA(_ZTI7S4909C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4909C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4909C1  : S4909C2 {
  virtual void  v1(); // _ZN7S4909C12v1Ev
  virtual void  v2(); // _ZN7S4909C12v2Ev
  ~S4909C1(); // tgen
  S4909C1(); // tgen
};
//SIG(1 S4909C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 Fp FC4{ m Fp Fi FC5{ m}} Fp FC6{ m Fp Fi FC7{ m} FC7} FC8{ m FC4 Fi} FC8} v7 v8 v9 v10 Fc Fp[2] Fi[2] FC8 FC8} v1 v2}


void  S4909C1 ::v1(){vfunc_called(this, "_ZN7S4909C12v1Ev");}
void  S4909C1 ::v2(){vfunc_called(this, "_ZN7S4909C12v2Ev");}
S4909C1 ::~S4909C1(){ note_dtor("S4909C1", this);} // tgen
S4909C1 ::S4909C1(){ note_ctor("S4909C1", this);} // tgen

static void Test_S4909C1()
{
  extern Class_Descriptor cd_S4909C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,31)];
    init_test(&cd_S4909C1, buf);
    S4909C1 *dp, &lv = *(dp=new (buf) S4909C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,120), "sizeof(S4909C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4909C1)");
    check_base_class_offset(lv, (S4909C3*)(S4909C2*), 0, "S4909C1");
    check_base_class_offset(lv, (S4909C2*), 0, "S4909C1");
    test_class_info(&lv, &cd_S4909C1);
    dp->~S4909C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4909C1(Test_S4909C1, "S4909C1", ABISELECT(184,120));

#else // __cplusplus

extern void _ZN7S4909C1C1Ev();
extern void _ZN7S4909C1D1Ev();
Name_Map name_map_S4909C1[] = {
  NSPAIR(_ZN7S4909C1C1Ev),
  NSPAIR(_ZN7S4909C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4909C3;
extern VTBL_ENTRY _ZTI7S4909C3[];
extern  VTBL_ENTRY _ZTV7S4909C3[];
extern Class_Descriptor cd_S4909C2;
extern VTBL_ENTRY _ZTI7S4909C2[];
extern  VTBL_ENTRY _ZTV7S4909C2[];
static Base_Class bases_S4909C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4909C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4909C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4909C1[];
extern void _ZN7S4909C1D1Ev();
extern void _ZN7S4909C1D0Ev();
extern void _ZN7S4909C32v3Ev();
extern void _ZN7S4909C32v4Ev();
extern void _ZN7S4909C32v5Ev();
extern void _ZN7S4909C32v6Ev();
extern void _ZN7S4909C22v7Ev();
extern void _ZN7S4909C22v8Ev();
extern void _ZN7S4909C22v9Ev();
extern void _ZN7S4909C23v10Ev();
extern void _ZN7S4909C12v1Ev();
extern void _ZN7S4909C12v2Ev();
static  VTBL_ENTRY vtc_S4909C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4909C1[0]),
  (VTBL_ENTRY)&_ZN7S4909C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4909C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4909C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4909C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4909C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4909C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4909C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4909C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4909C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4909C1[];
extern  VTBL_ENTRY _ZTV7S4909C1[];
Class_Descriptor cd_S4909C1 = {  "S4909C1", // class name
  bases_S4909C1, 2,
  &(vtc_S4909C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,120), // object size
  NSPAIRA(_ZTI7S4909C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4909C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15068C2_nt  {
  void *s15068c2f0;
  int s15068c2f1;
  void  mf15068c2(); // _ZN11S15068C2_nt9mf15068c2Ev
};
//SIG(-1 S15068C2_nt) C1{ m Fp Fi}


void  S15068C2_nt ::mf15068c2(){}

//skip512 S15068C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15068C6_nt  {
  void *s15068c6f0[8];
};
//SIG(-1 S15068C6_nt) C1{ Fp[8]}



//skip512 S15068C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15068C1  {
  char s15068c1f0;
  ::S15068C2_nt s15068c1f1;
  ::S15068C2_nt s15068c1f2;
  ::S15068C2_nt s15068c1f3;
  ::S119C12_nt s15068c1f4;
  ::S119C12_nt s15068c1f5;
  ::S15068C6_nt s15068c1f6;
  void *s15068c1f7[5];
  ::S21925C41 s15068c1f8;
  ::S21925C34_nt s15068c1f9;
  void *s15068c1f10;
  void  mf15068c1(); // _ZN8S15068C19mf15068c1Ev
};
//SIG(1 S15068C1) C1{ m Fc FC2{ m Fp Fi} FC2 FC2 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC3 FC6{ Fp[8]} Fp[5] FC7{ m Fp Fi FC8{ m} FC8} FC9{ m Fp Fi FC5 FC5} Fp}


void  S15068C1 ::mf15068c1(){}

static void Test_S15068C1()
{
  {
    init_simple_test("S15068C1");
    S15068C1 lv;
    check2(sizeof(lv), ABISELECT(248,140), "sizeof(S15068C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15068C1)");
    check_field_offset(lv, s15068c1f0, 0, "S15068C1.s15068c1f0");
    check_field_offset(lv, s15068c1f1, ABISELECT(8,4), "S15068C1.s15068c1f1");
    check_field_offset(lv, s15068c1f2, ABISELECT(24,12), "S15068C1.s15068c1f2");
    check_field_offset(lv, s15068c1f3, ABISELECT(40,20), "S15068C1.s15068c1f3");
    check_field_offset(lv, s15068c1f4, ABISELECT(56,28), "S15068C1.s15068c1f4");
    check_field_offset(lv, s15068c1f5, ABISELECT(80,44), "S15068C1.s15068c1f5");
    check_field_offset(lv, s15068c1f6, ABISELECT(104,60), "S15068C1.s15068c1f6");
    check_field_offset(lv, s15068c1f7, ABISELECT(168,92), "S15068C1.s15068c1f7");
    check_field_offset(lv, s15068c1f8, ABISELECT(208,112), "S15068C1.s15068c1f8");
    check_field_offset(lv, s15068c1f9, ABISELECT(224,124), "S15068C1.s15068c1f9");
    check_field_offset(lv, s15068c1f10, ABISELECT(240,136), "S15068C1.s15068c1f10");
  }
}
static Arrange_To_Call_Me vS15068C1(Test_S15068C1, "S15068C1", ABISELECT(248,140));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4508C3  {
  void *s4508c3f0;
  ::S119C13_nt s4508c3f1;
  void *s4508c3f2;
  ::S21925C41 s4508c3f3;
  ::S119C12_nt s4508c3f4;
  ::S119C12_nt s4508c3f5;
  virtual  ~S4508C3(); // _ZN7S4508C3D1Ev
  virtual void  v2(); // _ZN7S4508C32v2Ev
  virtual void  v3(); // _ZN7S4508C32v3Ev
  virtual void  v4(); // _ZN7S4508C32v4Ev
  virtual void  v5(); // _ZN7S4508C32v5Ev
  S4508C3(); // tgen
};
//SIG(-1 S4508C3) C1{ vd v1 v2 v3 v4 Fp FC2{ m Fp Fi FC3{ m}} Fp FC4{ m Fp Fi FC5{ m} FC5} FC6{ m FC2 Fi} FC6}


 S4508C3 ::~S4508C3(){ note_dtor("S4508C3", this);}
void  S4508C3 ::v2(){vfunc_called(this, "_ZN7S4508C32v2Ev");}
void  S4508C3 ::v3(){vfunc_called(this, "_ZN7S4508C32v3Ev");}
void  S4508C3 ::v4(){vfunc_called(this, "_ZN7S4508C32v4Ev");}
void  S4508C3 ::v5(){vfunc_called(this, "_ZN7S4508C32v5Ev");}
S4508C3 ::S4508C3(){ note_ctor("S4508C3", this);} // tgen

static void Test_S4508C3()
{
  extern Class_Descriptor cd_S4508C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4508C3, buf);
    S4508C3 *dp, &lv = *(dp=new (buf) S4508C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4508C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4508C3)");
    check_field_offset(lv, s4508c3f0, ABISELECT(8,4), "S4508C3.s4508c3f0");
    check_field_offset(lv, s4508c3f1, ABISELECT(16,8), "S4508C3.s4508c3f1");
    check_field_offset(lv, s4508c3f2, ABISELECT(32,20), "S4508C3.s4508c3f2");
    check_field_offset(lv, s4508c3f3, ABISELECT(40,24), "S4508C3.s4508c3f3");
    check_field_offset(lv, s4508c3f4, ABISELECT(56,36), "S4508C3.s4508c3f4");
    check_field_offset(lv, s4508c3f5, ABISELECT(80,52), "S4508C3.s4508c3f5");
    test_class_info(&lv, &cd_S4508C3);
    dp->~S4508C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4508C3(Test_S4508C3, "S4508C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4508C3C1Ev();
extern void _ZN7S4508C3D1Ev();
Name_Map name_map_S4508C3[] = {
  NSPAIR(_ZN7S4508C3C1Ev),
  NSPAIR(_ZN7S4508C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4508C3[];
extern void _ZN7S4508C3D1Ev();
extern void _ZN7S4508C3D0Ev();
extern void _ZN7S4508C32v2Ev();
extern void _ZN7S4508C32v3Ev();
extern void _ZN7S4508C32v4Ev();
extern void _ZN7S4508C32v5Ev();
static  VTBL_ENTRY vtc_S4508C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4508C3[0]),
  (VTBL_ENTRY)&_ZN7S4508C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4508C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4508C3[];
extern  VTBL_ENTRY _ZTV7S4508C3[];
Class_Descriptor cd_S4508C3 = {  "S4508C3", // class name
  0,0,//no base classes
  &(vtc_S4508C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4508C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4508C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4508C2  : S4508C3 {
  char s4508c2f0;
  void *s4508c2f1[2];
  int s4508c2f2[2];
  ::S119C12_nt s4508c2f3;
  ::S119C12_nt s4508c2f4;
  virtual void  v6(); // _ZN7S4508C22v6Ev
  virtual void  v7(); // _ZN7S4508C22v7Ev
  virtual void  v8(); // _ZN7S4508C22v8Ev
  virtual void  v9(); // _ZN7S4508C22v9Ev
  ~S4508C2(); // tgen
  S4508C2(); // tgen
};
//SIG(-1 S4508C2) C1{ BC2{ vd v5 v6 v7 v8 Fp FC3{ m Fp Fi FC4{ m}} Fp FC5{ m Fp Fi FC6{ m} FC6} FC7{ m FC3 Fi} FC7} v1 v2 v3 v4 Fc Fp[2] Fi[2] FC7 FC7}


void  S4508C2 ::v6(){vfunc_called(this, "_ZN7S4508C22v6Ev");}
void  S4508C2 ::v7(){vfunc_called(this, "_ZN7S4508C22v7Ev");}
void  S4508C2 ::v8(){vfunc_called(this, "_ZN7S4508C22v8Ev");}
void  S4508C2 ::v9(){vfunc_called(this, "_ZN7S4508C22v9Ev");}
S4508C2 ::~S4508C2(){ note_dtor("S4508C2", this);} // tgen
S4508C2 ::S4508C2(){ note_ctor("S4508C2", this);} // tgen

static void Test_S4508C2()
{
  extern Class_Descriptor cd_S4508C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,31)];
    init_test(&cd_S4508C2, buf);
    S4508C2 *dp, &lv = *(dp=new (buf) S4508C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,120), "sizeof(S4508C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4508C2)");
    check_base_class_offset(lv, (S4508C3*), 0, "S4508C2");
    check_field_offset(lv, s4508c2f0, ABISELECT(104,68), "S4508C2.s4508c2f0");
    check_field_offset(lv, s4508c2f1, ABISELECT(112,72), "S4508C2.s4508c2f1");
    check_field_offset(lv, s4508c2f2, ABISELECT(128,80), "S4508C2.s4508c2f2");
    check_field_offset(lv, s4508c2f3, ABISELECT(136,88), "S4508C2.s4508c2f3");
    check_field_offset(lv, s4508c2f4, ABISELECT(160,104), "S4508C2.s4508c2f4");
    test_class_info(&lv, &cd_S4508C2);
    dp->~S4508C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4508C2(Test_S4508C2, "S4508C2", ABISELECT(184,120));

#else // __cplusplus

extern void _ZN7S4508C2C1Ev();
extern void _ZN7S4508C2D1Ev();
Name_Map name_map_S4508C2[] = {
  NSPAIR(_ZN7S4508C2C1Ev),
  NSPAIR(_ZN7S4508C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4508C3;
extern VTBL_ENTRY _ZTI7S4508C3[];
extern  VTBL_ENTRY _ZTV7S4508C3[];
static Base_Class bases_S4508C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4508C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4508C2[];
extern void _ZN7S4508C2D1Ev();
extern void _ZN7S4508C2D0Ev();
extern void _ZN7S4508C32v2Ev();
extern void _ZN7S4508C32v3Ev();
extern void _ZN7S4508C32v4Ev();
extern void _ZN7S4508C32v5Ev();
extern void _ZN7S4508C22v6Ev();
extern void _ZN7S4508C22v7Ev();
extern void _ZN7S4508C22v8Ev();
extern void _ZN7S4508C22v9Ev();
static  VTBL_ENTRY vtc_S4508C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4508C2[0]),
  (VTBL_ENTRY)&_ZN7S4508C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4508C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4508C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4508C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4508C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4508C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4508C2[];
extern  VTBL_ENTRY _ZTV7S4508C2[];
Class_Descriptor cd_S4508C2 = {  "S4508C2", // class name
  bases_S4508C2, 1,
  &(vtc_S4508C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,120), // object size
  NSPAIRA(_ZTI7S4508C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4508C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4508C1  : S4508C2 {
  virtual void  v1(); // _ZN7S4508C12v1Ev
  ~S4508C1(); // tgen
  S4508C1(); // tgen
};
//SIG(1 S4508C1) C1{ BC2{ BC3{ vd v2 v3 v4 v5 Fp FC4{ m Fp Fi FC5{ m}} Fp FC6{ m Fp Fi FC7{ m} FC7} FC8{ m FC4 Fi} FC8} v6 v7 v8 v9 Fc Fp[2] Fi[2] FC8 FC8} v1}


void  S4508C1 ::v1(){vfunc_called(this, "_ZN7S4508C12v1Ev");}
S4508C1 ::~S4508C1(){ note_dtor("S4508C1", this);} // tgen
S4508C1 ::S4508C1(){ note_ctor("S4508C1", this);} // tgen

static void Test_S4508C1()
{
  extern Class_Descriptor cd_S4508C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,31)];
    init_test(&cd_S4508C1, buf);
    S4508C1 *dp, &lv = *(dp=new (buf) S4508C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,120), "sizeof(S4508C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4508C1)");
    check_base_class_offset(lv, (S4508C3*)(S4508C2*), 0, "S4508C1");
    check_base_class_offset(lv, (S4508C2*), 0, "S4508C1");
    test_class_info(&lv, &cd_S4508C1);
    dp->~S4508C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4508C1(Test_S4508C1, "S4508C1", ABISELECT(184,120));

#else // __cplusplus

extern void _ZN7S4508C1C1Ev();
extern void _ZN7S4508C1D1Ev();
Name_Map name_map_S4508C1[] = {
  NSPAIR(_ZN7S4508C1C1Ev),
  NSPAIR(_ZN7S4508C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4508C3;
extern VTBL_ENTRY _ZTI7S4508C3[];
extern  VTBL_ENTRY _ZTV7S4508C3[];
extern Class_Descriptor cd_S4508C2;
extern VTBL_ENTRY _ZTI7S4508C2[];
extern  VTBL_ENTRY _ZTV7S4508C2[];
static Base_Class bases_S4508C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4508C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4508C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4508C1[];
extern void _ZN7S4508C1D1Ev();
extern void _ZN7S4508C1D0Ev();
extern void _ZN7S4508C32v2Ev();
extern void _ZN7S4508C32v3Ev();
extern void _ZN7S4508C32v4Ev();
extern void _ZN7S4508C32v5Ev();
extern void _ZN7S4508C22v6Ev();
extern void _ZN7S4508C22v7Ev();
extern void _ZN7S4508C22v8Ev();
extern void _ZN7S4508C22v9Ev();
extern void _ZN7S4508C12v1Ev();
static  VTBL_ENTRY vtc_S4508C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4508C1[0]),
  (VTBL_ENTRY)&_ZN7S4508C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4508C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4508C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4508C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4508C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4508C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4508C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4508C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4508C1[];
extern  VTBL_ENTRY _ZTV7S4508C1[];
Class_Descriptor cd_S4508C1 = {  "S4508C1", // class name
  bases_S4508C1, 2,
  &(vtc_S4508C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,120), // object size
  NSPAIRA(_ZTI7S4508C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4508C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1146C5_nt  {
  void *s1146c5f0;
  void  mf1146c5(); // _ZN10S1146C5_nt8mf1146c5Ev
};
//SIG(-1 S1146C5_nt) C1{ m Fp}


void  S1146C5_nt ::mf1146c5(){}

//skip512 S1146C5_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S1146C5_nt[];
VTBL_ENTRY *P__ZTI10S1146C5_nt = _ZTI10S1146C5_nt; 
Class_Descriptor cd_S1146C5_nt = {  "S1146C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1146C5_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1146C3_nt  : S119C11_nt , S1146C5_nt {
  ::S119C12_nt s1146c3f0;
  int s1146c3f1;
  void *s1146c3f2;
  char s1146c3f3;
  int s1146c3f4;
  virtual  ~S1146C3_nt(); // _ZN10S1146C3_ntD1Ev
  virtual void  v4(); // _ZN10S1146C3_nt2v4Ev
  virtual void  v5(); // _ZN10S1146C3_nt2v5Ev
  virtual void  v6(); // _ZN10S1146C3_nt2v6Ev
  virtual void  v7(); // _ZN10S1146C3_nt2v7Ev
  S1146C3_nt(); // tgen
};
//SIG(-1 S1146C3_nt) C1{ BC2{ m Fp} BC3{ m Fp} vd v1 v2 v3 v4 FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fi Fp Fc Fi}


 S1146C3_nt ::~S1146C3_nt(){ note_dtor("S1146C3_nt", this);}
void  S1146C3_nt ::v4(){vfunc_called(this, "_ZN10S1146C3_nt2v4Ev");}
void  S1146C3_nt ::v5(){vfunc_called(this, "_ZN10S1146C3_nt2v5Ev");}
void  S1146C3_nt ::v6(){vfunc_called(this, "_ZN10S1146C3_nt2v6Ev");}
void  S1146C3_nt ::v7(){vfunc_called(this, "_ZN10S1146C3_nt2v7Ev");}
S1146C3_nt ::S1146C3_nt(){ note_ctor("S1146C3_nt", this);} // tgen

//skip512 S1146C3_nt

#else // __cplusplus

extern void _ZN10S1146C3_ntC1Ev();
extern void _ZN10S1146C3_ntD1Ev();
Name_Map name_map_S1146C3_nt[] = {
  NSPAIR(_ZN10S1146C3_ntC1Ev),
  NSPAIR(_ZN10S1146C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C11_nt;
extern VTBL_ENTRY _ZTI10S119C11_nt[];
extern Class_Descriptor cd_S1146C5_nt;
extern VTBL_ENTRY _ZTI10S1146C5_nt[];
static Base_Class bases_S1146C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C11_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1146C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1146C3_nt[];
extern void _ZN10S1146C3_ntD1Ev();
extern void _ZN10S1146C3_ntD0Ev();
extern void _ZN10S1146C3_nt2v4Ev();
extern void _ZN10S1146C3_nt2v5Ev();
extern void _ZN10S1146C3_nt2v6Ev();
extern void _ZN10S1146C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S1146C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1146C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1146C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S1146C3_nt[];
VTBL_ENTRY *P__ZTI10S1146C3_nt = _ZTI10S1146C3_nt; 
extern  VTBL_ENTRY _ZTV10S1146C3_nt[];
Class_Descriptor cd_S1146C3_nt = {  "S1146C3_nt", // class name
  bases_S1146C3_nt, 2,
  &(vtc_S1146C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI10S1146C3_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S1146C3_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1146C2_nt  : S1146C3_nt {
  char s1146c2f0;
  virtual  ~S1146C2_nt(); // _ZN10S1146C2_ntD1Ev
  virtual void  v8(); // _ZN10S1146C2_nt2v8Ev
  virtual void  v9(); // _ZN10S1146C2_nt2v9Ev
  virtual void  v10(); // _ZN10S1146C2_nt3v10Ev
  virtual void  v11(); // _ZN10S1146C2_nt3v11Ev
  S1146C2_nt(); // tgen
};
//SIG(-1 S1146C2_nt) C1{ BC2{ BC3{ m Fp} BC4{ m Fp} vd v5 v6 v7 v8 FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fi Fp Fc Fi} vd v1 v2 v3 v4 Fc}


 S1146C2_nt ::~S1146C2_nt(){ note_dtor("S1146C2_nt", this);}
void  S1146C2_nt ::v8(){vfunc_called(this, "_ZN10S1146C2_nt2v8Ev");}
void  S1146C2_nt ::v9(){vfunc_called(this, "_ZN10S1146C2_nt2v9Ev");}
void  S1146C2_nt ::v10(){vfunc_called(this, "_ZN10S1146C2_nt3v10Ev");}
void  S1146C2_nt ::v11(){vfunc_called(this, "_ZN10S1146C2_nt3v11Ev");}
S1146C2_nt ::S1146C2_nt(){ note_ctor("S1146C2_nt", this);} // tgen

//skip512 S1146C2_nt

#else // __cplusplus

extern void _ZN10S1146C2_ntC1Ev();
extern void _ZN10S1146C2_ntD1Ev();
Name_Map name_map_S1146C2_nt[] = {
  NSPAIR(_ZN10S1146C2_ntC1Ev),
  NSPAIR(_ZN10S1146C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C11_nt;
extern VTBL_ENTRY _ZTI10S119C11_nt[];
extern Class_Descriptor cd_S1146C5_nt;
extern VTBL_ENTRY _ZTI10S1146C5_nt[];
extern Class_Descriptor cd_S1146C3_nt;
extern VTBL_ENTRY _ZTI10S1146C3_nt[];
extern  VTBL_ENTRY _ZTV10S1146C3_nt[];
static Base_Class bases_S1146C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C11_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1146C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1146C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1146C2_nt[];
extern void _ZN10S1146C2_ntD1Ev();
extern void _ZN10S1146C2_ntD0Ev();
extern void _ZN10S1146C3_nt2v4Ev();
extern void _ZN10S1146C3_nt2v5Ev();
extern void _ZN10S1146C3_nt2v6Ev();
extern void _ZN10S1146C3_nt2v7Ev();
extern void _ZN10S1146C2_nt2v8Ev();
extern void _ZN10S1146C2_nt2v9Ev();
extern void _ZN10S1146C2_nt3v10Ev();
extern void _ZN10S1146C2_nt3v11Ev();
static  VTBL_ENTRY vtc_S1146C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1146C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1146C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1146C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1146C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1146C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1146C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1146C2_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI10S1146C2_nt[];
VTBL_ENTRY *P__ZTI10S1146C2_nt = _ZTI10S1146C2_nt; 
extern  VTBL_ENTRY _ZTV10S1146C2_nt[];
Class_Descriptor cd_S1146C2_nt = {  "S1146C2_nt", // class name
  bases_S1146C2_nt, 3,
  &(vtc_S1146C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI10S1146C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1146C2_nt),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1146C1  : S1146C2_nt {
  void *s1146c1f0[4];
  virtual  ~S1146C1(); // _ZN7S1146C1D1Ev
  virtual void  v1(); // _ZN7S1146C12v1Ev
  virtual void  v2(); // _ZN7S1146C12v2Ev
  virtual void  v3(); // _ZN7S1146C12v3Ev
  S1146C1(); // tgen
};
//SIG(1 S1146C1) C1{ BC2{ BC3{ BC4{ m Fp} BC5{ m Fp} vd v4 v5 v6 v7 FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fi Fp Fc Fi} vd v8 v9 v10 v11 Fc} vd v1 v2 v3 Fp[4]}


 S1146C1 ::~S1146C1(){ note_dtor("S1146C1", this);}
void  S1146C1 ::v1(){vfunc_called(this, "_ZN7S1146C12v1Ev");}
void  S1146C1 ::v2(){vfunc_called(this, "_ZN7S1146C12v2Ev");}
void  S1146C1 ::v3(){vfunc_called(this, "_ZN7S1146C12v3Ev");}
S1146C1 ::S1146C1(){ note_ctor("S1146C1", this);} // tgen

static void Test_S1146C1()
{
  extern Class_Descriptor cd_S1146C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S1146C1, buf);
    S1146C1 *dp, &lv = *(dp=new (buf) S1146C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S1146C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1146C1)");
    check_base_class_offset(lv, (S119C11_nt*)(S1146C3_nt*)(S1146C2_nt*), ABISELECT(8,4), "S1146C1");
    check_base_class_offset(lv, (S1146C5_nt*)(S1146C3_nt*)(S1146C2_nt*), ABISELECT(16,8), "S1146C1");
    check_base_class_offset(lv, (S1146C3_nt*)(S1146C2_nt*), 0, "S1146C1");
    check_base_class_offset(lv, (S1146C2_nt*), 0, "S1146C1");
    check_field_offset(lv, s1146c1f0, ABISELECT(80,48), "S1146C1.s1146c1f0");
    test_class_info(&lv, &cd_S1146C1);
    dp->~S1146C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1146C1(Test_S1146C1, "S1146C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S1146C1C1Ev();
extern void _ZN7S1146C1D1Ev();
Name_Map name_map_S1146C1[] = {
  NSPAIR(_ZN7S1146C1C1Ev),
  NSPAIR(_ZN7S1146C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C11_nt;
extern VTBL_ENTRY _ZTI10S119C11_nt[];
extern Class_Descriptor cd_S1146C5_nt;
extern VTBL_ENTRY _ZTI10S1146C5_nt[];
extern Class_Descriptor cd_S1146C3_nt;
extern VTBL_ENTRY _ZTI10S1146C3_nt[];
extern  VTBL_ENTRY _ZTV10S1146C3_nt[];
extern Class_Descriptor cd_S1146C2_nt;
extern VTBL_ENTRY _ZTI10S1146C2_nt[];
extern  VTBL_ENTRY _ZTV10S1146C2_nt[];
static Base_Class bases_S1146C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C11_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1146C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1146C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1146C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1146C1[];
extern void _ZN7S1146C1D1Ev();
extern void _ZN7S1146C1D0Ev();
extern void _ZN10S1146C3_nt2v4Ev();
extern void _ZN10S1146C3_nt2v5Ev();
extern void _ZN10S1146C3_nt2v6Ev();
extern void _ZN10S1146C3_nt2v7Ev();
extern void _ZN10S1146C2_nt2v8Ev();
extern void _ZN10S1146C2_nt2v9Ev();
extern void _ZN10S1146C2_nt3v10Ev();
extern void _ZN10S1146C2_nt3v11Ev();
extern void _ZN7S1146C12v1Ev();
extern void _ZN7S1146C12v2Ev();
extern void _ZN7S1146C12v3Ev();
static  VTBL_ENTRY vtc_S1146C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1146C1[0]),
  (VTBL_ENTRY)&_ZN7S1146C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1146C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1146C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1146C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1146C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1146C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1146C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S1146C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1146C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1146C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1146C1[];
extern  VTBL_ENTRY _ZTV7S1146C1[];
Class_Descriptor cd_S1146C1 = {  "S1146C1", // class name
  bases_S1146C1, 4,
  &(vtc_S1146C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S1146C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1146C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5235C3_nt  {
  void *s5235c3f0;
  int s5235c3f1;
  virtual  ~S5235C3_nt(); // _ZN10S5235C3_ntD1Ev
  virtual void  v5(); // _ZN10S5235C3_nt2v5Ev
  virtual void  v6(); // _ZN10S5235C3_nt2v6Ev
  virtual void  v7(); // _ZN10S5235C3_nt2v7Ev
  S5235C3_nt(); // tgen
};
//SIG(-1 S5235C3_nt) C1{ vd v1 v2 v3 Fp Fi}


 S5235C3_nt ::~S5235C3_nt(){ note_dtor("S5235C3_nt", this);}
void  S5235C3_nt ::v5(){vfunc_called(this, "_ZN10S5235C3_nt2v5Ev");}
void  S5235C3_nt ::v6(){vfunc_called(this, "_ZN10S5235C3_nt2v6Ev");}
void  S5235C3_nt ::v7(){vfunc_called(this, "_ZN10S5235C3_nt2v7Ev");}
S5235C3_nt ::S5235C3_nt(){ note_ctor("S5235C3_nt", this);} // tgen

//skip512 S5235C3_nt

#else // __cplusplus

extern void _ZN10S5235C3_ntC1Ev();
extern void _ZN10S5235C3_ntD1Ev();
Name_Map name_map_S5235C3_nt[] = {
  NSPAIR(_ZN10S5235C3_ntC1Ev),
  NSPAIR(_ZN10S5235C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5235C3_nt[];
extern void _ZN10S5235C3_ntD1Ev();
extern void _ZN10S5235C3_ntD0Ev();
extern void _ZN10S5235C3_nt2v5Ev();
extern void _ZN10S5235C3_nt2v6Ev();
extern void _ZN10S5235C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S5235C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5235C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5235C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5235C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5235C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5235C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5235C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S5235C3_nt[];
VTBL_ENTRY *P__ZTI10S5235C3_nt = _ZTI10S5235C3_nt; 
extern  VTBL_ENTRY _ZTV10S5235C3_nt[];
Class_Descriptor cd_S5235C3_nt = {  "S5235C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5235C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S5235C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5235C3_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5235C2_nt  : S5235C3_nt {
  ::S119C12_nt s5235c2f0;
  void *s5235c2f1;
  virtual  ~S5235C2_nt(); // _ZN10S5235C2_ntD1Ev
  virtual void  v8(); // _ZN10S5235C2_nt2v8Ev
  virtual void  v9(); // _ZN10S5235C2_nt2v9Ev
  virtual void  v10(); // _ZN10S5235C2_nt3v10Ev
  virtual void  v11(); // _ZN10S5235C2_nt3v11Ev
  virtual void  v12(); // _ZN10S5235C2_nt3v12Ev
  virtual void  v13(); // _ZN10S5235C2_nt3v13Ev
  virtual void  v14(); // _ZN10S5235C2_nt3v14Ev
  virtual void  v15(); // _ZN10S5235C2_nt3v15Ev
  S5235C2_nt(); // tgen
};
//SIG(-1 S5235C2_nt) C1{ BC2{ vd v9 v10 v11 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp}


 S5235C2_nt ::~S5235C2_nt(){ note_dtor("S5235C2_nt", this);}
void  S5235C2_nt ::v8(){vfunc_called(this, "_ZN10S5235C2_nt2v8Ev");}
void  S5235C2_nt ::v9(){vfunc_called(this, "_ZN10S5235C2_nt2v9Ev");}
void  S5235C2_nt ::v10(){vfunc_called(this, "_ZN10S5235C2_nt3v10Ev");}
void  S5235C2_nt ::v11(){vfunc_called(this, "_ZN10S5235C2_nt3v11Ev");}
void  S5235C2_nt ::v12(){vfunc_called(this, "_ZN10S5235C2_nt3v12Ev");}
void  S5235C2_nt ::v13(){vfunc_called(this, "_ZN10S5235C2_nt3v13Ev");}
void  S5235C2_nt ::v14(){vfunc_called(this, "_ZN10S5235C2_nt3v14Ev");}
void  S5235C2_nt ::v15(){vfunc_called(this, "_ZN10S5235C2_nt3v15Ev");}
S5235C2_nt ::S5235C2_nt(){ note_ctor("S5235C2_nt", this);} // tgen

//skip512 S5235C2_nt

#else // __cplusplus

extern void _ZN10S5235C2_ntC1Ev();
extern void _ZN10S5235C2_ntD1Ev();
Name_Map name_map_S5235C2_nt[] = {
  NSPAIR(_ZN10S5235C2_ntC1Ev),
  NSPAIR(_ZN10S5235C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5235C3_nt;
extern VTBL_ENTRY _ZTI10S5235C3_nt[];
extern  VTBL_ENTRY _ZTV10S5235C3_nt[];
static Base_Class bases_S5235C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5235C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5235C2_nt[];
extern void _ZN10S5235C2_ntD1Ev();
extern void _ZN10S5235C2_ntD0Ev();
extern void _ZN10S5235C3_nt2v5Ev();
extern void _ZN10S5235C3_nt2v6Ev();
extern void _ZN10S5235C3_nt2v7Ev();
extern void _ZN10S5235C2_nt2v8Ev();
extern void _ZN10S5235C2_nt2v9Ev();
extern void _ZN10S5235C2_nt3v10Ev();
extern void _ZN10S5235C2_nt3v11Ev();
extern void _ZN10S5235C2_nt3v12Ev();
extern void _ZN10S5235C2_nt3v13Ev();
extern void _ZN10S5235C2_nt3v14Ev();
extern void _ZN10S5235C2_nt3v15Ev();
static  VTBL_ENTRY vtc_S5235C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5235C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5235C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5235C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5235C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5235C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI10S5235C2_nt[];
VTBL_ENTRY *P__ZTI10S5235C2_nt = _ZTI10S5235C2_nt; 
extern  VTBL_ENTRY _ZTV10S5235C2_nt[];
Class_Descriptor cd_S5235C2_nt = {  "S5235C2_nt", // class name
  bases_S5235C2_nt, 1,
  &(vtc_S5235C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI10S5235C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5235C2_nt),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5235C7_nt  {
  void *s5235c7f0;
  void  mf5235c7(); // _ZN10S5235C7_nt8mf5235c7Ev
  virtual  ~S5235C7_nt(); // _ZN10S5235C7_ntD1Ev
  S5235C7_nt(); // tgen
};
//SIG(-1 S5235C7_nt) C1{ vd m Fp}


void  S5235C7_nt ::mf5235c7(){}
 S5235C7_nt ::~S5235C7_nt(){ note_dtor("S5235C7_nt", this);}
S5235C7_nt ::S5235C7_nt(){ note_ctor("S5235C7_nt", this);} // tgen

//skip512 S5235C7_nt

#else // __cplusplus

extern void _ZN10S5235C7_ntC1Ev();
extern void _ZN10S5235C7_ntD1Ev();
Name_Map name_map_S5235C7_nt[] = {
  NSPAIR(_ZN10S5235C7_ntC1Ev),
  NSPAIR(_ZN10S5235C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5235C7_nt[];
extern void _ZN10S5235C7_ntD1Ev();
extern void _ZN10S5235C7_ntD0Ev();
static  VTBL_ENTRY vtc_S5235C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5235C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S5235C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5235C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S5235C7_nt[];
VTBL_ENTRY *P__ZTI10S5235C7_nt = _ZTI10S5235C7_nt; 
extern  VTBL_ENTRY _ZTV10S5235C7_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5235C1  : S5235C2_nt {
  ::S5235C7_nt s5235c1f0;
  virtual  ~S5235C1(); // _ZN7S5235C1D1Ev
  virtual void  v1(); // _ZN7S5235C12v1Ev
  virtual void  v2(); // _ZN7S5235C12v2Ev
  virtual void  v3(); // _ZN7S5235C12v3Ev
  virtual void  v4(); // _ZN7S5235C12v4Ev
  S5235C1(); // tgen
};
//SIG(1 S5235C1) C1{ BC2{ BC3{ vd v5 v6 v7 Fp Fi} vd v8 v9 v10 v11 v12 v13 v14 v15 FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fp} vd v1 v2 v3 v4 FC7{ vd m Fp}}


 S5235C1 ::~S5235C1(){ note_dtor("S5235C1", this);}
void  S5235C1 ::v1(){vfunc_called(this, "_ZN7S5235C12v1Ev");}
void  S5235C1 ::v2(){vfunc_called(this, "_ZN7S5235C12v2Ev");}
void  S5235C1 ::v3(){vfunc_called(this, "_ZN7S5235C12v3Ev");}
void  S5235C1 ::v4(){vfunc_called(this, "_ZN7S5235C12v4Ev");}
S5235C1 ::S5235C1(){ note_ctor("S5235C1", this);} // tgen

static void Test_S5235C1()
{
  extern Class_Descriptor cd_S5235C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S5235C1, buf);
    S5235C1 *dp, &lv = *(dp=new (buf) S5235C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S5235C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5235C1)");
    check_base_class_offset(lv, (S5235C3_nt*)(S5235C2_nt*), 0, "S5235C1");
    check_base_class_offset(lv, (S5235C2_nt*), 0, "S5235C1");
    check_field_offset(lv, s5235c1f0, ABISELECT(56,32), "S5235C1.s5235c1f0");
    test_class_info(&lv, &cd_S5235C1);
    dp->~S5235C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5235C1(Test_S5235C1, "S5235C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S5235C1C1Ev();
extern void _ZN7S5235C1D1Ev();
Name_Map name_map_S5235C1[] = {
  NSPAIR(_ZN7S5235C1C1Ev),
  NSPAIR(_ZN7S5235C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5235C3_nt;
extern VTBL_ENTRY _ZTI10S5235C3_nt[];
extern  VTBL_ENTRY _ZTV10S5235C3_nt[];
extern Class_Descriptor cd_S5235C2_nt;
extern VTBL_ENTRY _ZTI10S5235C2_nt[];
extern  VTBL_ENTRY _ZTV10S5235C2_nt[];
static Base_Class bases_S5235C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5235C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5235C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5235C1[];
extern void _ZN7S5235C1D1Ev();
extern void _ZN7S5235C1D0Ev();
extern void _ZN10S5235C3_nt2v5Ev();
extern void _ZN10S5235C3_nt2v6Ev();
extern void _ZN10S5235C3_nt2v7Ev();
extern void _ZN10S5235C2_nt2v8Ev();
extern void _ZN10S5235C2_nt2v9Ev();
extern void _ZN10S5235C2_nt3v10Ev();
extern void _ZN10S5235C2_nt3v11Ev();
extern void _ZN10S5235C2_nt3v12Ev();
extern void _ZN10S5235C2_nt3v13Ev();
extern void _ZN10S5235C2_nt3v14Ev();
extern void _ZN10S5235C2_nt3v15Ev();
extern void _ZN7S5235C12v1Ev();
extern void _ZN7S5235C12v2Ev();
extern void _ZN7S5235C12v3Ev();
extern void _ZN7S5235C12v4Ev();
static  VTBL_ENTRY vtc_S5235C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5235C1[0]),
  (VTBL_ENTRY)&_ZN7S5235C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5235C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5235C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5235C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5235C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5235C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN7S5235C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5235C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5235C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5235C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5235C1[];
extern  VTBL_ENTRY _ZTV7S5235C1[];
Class_Descriptor cd_S5235C1 = {  "S5235C1", // class name
  bases_S5235C1, 2,
  &(vtc_S5235C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S5235C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5235C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6741C2_nt  {
  virtual  ~S6741C2_nt(); // _ZN10S6741C2_ntD1Ev
  virtual void  v3(); // _ZN10S6741C2_nt2v3Ev
  virtual void  v4(); // _ZN10S6741C2_nt2v4Ev
  S6741C2_nt(); // tgen
};
//SIG(-1 S6741C2_nt) C1{ vd v1 v2}


 S6741C2_nt ::~S6741C2_nt(){ note_dtor("S6741C2_nt", this);}
void  S6741C2_nt ::v3(){vfunc_called(this, "_ZN10S6741C2_nt2v3Ev");}
void  S6741C2_nt ::v4(){vfunc_called(this, "_ZN10S6741C2_nt2v4Ev");}
S6741C2_nt ::S6741C2_nt(){ note_ctor("S6741C2_nt", this);} // tgen

//skip512 S6741C2_nt

#else // __cplusplus

extern void _ZN10S6741C2_ntC1Ev();
extern void _ZN10S6741C2_ntD1Ev();
Name_Map name_map_S6741C2_nt[] = {
  NSPAIR(_ZN10S6741C2_ntC1Ev),
  NSPAIR(_ZN10S6741C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6741C2_nt[];
extern void _ZN10S6741C2_ntD1Ev();
extern void _ZN10S6741C2_ntD0Ev();
extern void _ZN10S6741C2_nt2v3Ev();
extern void _ZN10S6741C2_nt2v4Ev();
static  VTBL_ENTRY vtc_S6741C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6741C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6741C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6741C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6741C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6741C2_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S6741C2_nt[];
VTBL_ENTRY *P__ZTI10S6741C2_nt = _ZTI10S6741C2_nt; 
extern  VTBL_ENTRY _ZTV10S6741C2_nt[];
Class_Descriptor cd_S6741C2_nt = {  "S6741C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6741C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6741C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6741C2_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6741C8_nt  {
  __tsi64 s6741c8f0[2];
  void  mf6741c8(); // _ZN10S6741C8_nt8mf6741c8Ev
};
//SIG(-1 S6741C8_nt) C1{ m FL[2]}


void  S6741C8_nt ::mf6741c8(){}

//skip512 S6741C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6741C7_nt  {
  ::S6741C8_nt s6741c7f0;
  void  mf6741c7(); // _ZN10S6741C7_nt8mf6741c7Ev
};
//SIG(-1 S6741C7_nt) C1{ m FC2{ m FL[2]}}


void  S6741C7_nt ::mf6741c7(){}

//skip512 S6741C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6741C9_nt  {
  void *s6741c9f0;
  int s6741c9f1;
  ::S21925C42 s6741c9f2;
  void  mf6741c9(); // _ZN10S6741C9_nt8mf6741c9Ev
};
//SIG(-1 S6741C9_nt) C1{ m Fp Fi FC2{ m}}


void  S6741C9_nt ::mf6741c9(){}

//skip512 S6741C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6741C3  {
  void *s6741c3f0;
  ::S119C12_nt s6741c3f1;
  ::S119C12_nt s6741c3f2;
  ::S6741C7_nt s6741c3f3;
  int s6741c3f4[2];
  ::S119C13_nt s6741c3f5;
  ::S6741C9_nt s6741c3f6;
  void *s6741c3f7[10];
  void  mf6741c3(); // _ZN7S6741C38mf6741c3Ev
};
//SIG(-1 S6741C3) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC5{ m FC6{ m FL[2]}} Fi[2] FC3 FC7{ m Fp Fi FC8{ m}} Fp[10]}


void  S6741C3 ::mf6741c3(){}

static void Test_S6741C3()
{
  {
    init_simple_test("S6741C3");
    S6741C3 lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S6741C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6741C3)");
    check_field_offset(lv, s6741c3f0, 0, "S6741C3.s6741c3f0");
    check_field_offset(lv, s6741c3f1, ABISELECT(8,4), "S6741C3.s6741c3f1");
    check_field_offset(lv, s6741c3f2, ABISELECT(32,20), "S6741C3.s6741c3f2");
    check_field_offset(lv, s6741c3f3, ABISELECT(56,36), "S6741C3.s6741c3f3");
    check_field_offset(lv, s6741c3f4, ABISELECT(72,52), "S6741C3.s6741c3f4");
    check_field_offset(lv, s6741c3f5, ABISELECT(80,60), "S6741C3.s6741c3f5");
    check_field_offset(lv, s6741c3f6, ABISELECT(96,72), "S6741C3.s6741c3f6");
    check_field_offset(lv, s6741c3f7, ABISELECT(112,84), "S6741C3.s6741c3f7");
  }
}
static Arrange_To_Call_Me vS6741C3(Test_S6741C3, "S6741C3", ABISELECT(192,124));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6741C1  : S6741C2_nt {
  ::S6741C3 s6741c1f0;
  virtual void  v1(); // _ZN7S6741C12v1Ev
  virtual void  v2(); // _ZN7S6741C12v2Ev
  ~S6741C1(); // tgen
  S6741C1(); // tgen
};
//SIG(1 S6741C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC7{ m FC8{ m FL[2]}} Fi[2] FC5 FC9{ m Fp Fi FC10{ m}} Fp[10]}}


void  S6741C1 ::v1(){vfunc_called(this, "_ZN7S6741C12v1Ev");}
void  S6741C1 ::v2(){vfunc_called(this, "_ZN7S6741C12v2Ev");}
S6741C1 ::~S6741C1(){ note_dtor("S6741C1", this);} // tgen
S6741C1 ::S6741C1(){ note_ctor("S6741C1", this);} // tgen

static void Test_S6741C1()
{
  extern Class_Descriptor cd_S6741C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,33)];
    init_test(&cd_S6741C1, buf);
    S6741C1 *dp, &lv = *(dp=new (buf) S6741C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,128), "sizeof(S6741C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6741C1)");
    check_base_class_offset(lv, (S6741C2_nt*), 0, "S6741C1");
    check_field_offset(lv, s6741c1f0, ABISELECT(8,4), "S6741C1.s6741c1f0");
    test_class_info(&lv, &cd_S6741C1);
    dp->~S6741C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6741C1(Test_S6741C1, "S6741C1", ABISELECT(200,128));

#else // __cplusplus

extern void _ZN7S6741C1C1Ev();
extern void _ZN7S6741C1D1Ev();
Name_Map name_map_S6741C1[] = {
  NSPAIR(_ZN7S6741C1C1Ev),
  NSPAIR(_ZN7S6741C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6741C2_nt;
extern VTBL_ENTRY _ZTI10S6741C2_nt[];
extern  VTBL_ENTRY _ZTV10S6741C2_nt[];
static Base_Class bases_S6741C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6741C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6741C1[];
extern void _ZN7S6741C1D1Ev();
extern void _ZN7S6741C1D0Ev();
extern void _ZN10S6741C2_nt2v3Ev();
extern void _ZN10S6741C2_nt2v4Ev();
extern void _ZN7S6741C12v1Ev();
extern void _ZN7S6741C12v2Ev();
static  VTBL_ENTRY vtc_S6741C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6741C1[0]),
  (VTBL_ENTRY)&_ZN7S6741C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6741C1D0Ev,
  (VTBL_ENTRY)&_ZN10S6741C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6741C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S6741C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6741C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6741C1[];
extern  VTBL_ENTRY _ZTV7S6741C1[];
Class_Descriptor cd_S6741C1 = {  "S6741C1", // class name
  bases_S6741C1, 1,
  &(vtc_S6741C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,128), // object size
  NSPAIRA(_ZTI7S6741C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6741C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18115C5  {
  int s18115c5f0;
  ::S1146C5_nt s18115c5f1;
  ::S6741C7_nt s18115c5f2;
  void  mf18115c5(); // _ZN8S18115C59mf18115c5Ev
};
//SIG(-1 S18115C5) C1{ m Fi FC2{ m Fp} FC3{ m FC4{ m FL[2]}}}


void  S18115C5 ::mf18115c5(){}

static void Test_S18115C5()
{
  {
    init_simple_test("S18115C5");
    S18115C5 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S18115C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18115C5)");
    check_field_offset(lv, s18115c5f0, 0, "S18115C5.s18115c5f0");
    check_field_offset(lv, s18115c5f1, ABISELECT(8,4), "S18115C5.s18115c5f1");
    check_field_offset(lv, s18115c5f2, ABISELECT(16,8), "S18115C5.s18115c5f2");
  }
}
static Arrange_To_Call_Me vS18115C5(Test_S18115C5, "S18115C5", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18115C9  {
  ::S119C12_nt s18115c9f0;
  int s18115c9f1[2];
  void *s18115c9f2;
  void  mf18115c9(); // _ZN8S18115C99mf18115c9Ev
};
//SIG(-1 S18115C9) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi[2] Fp}


void  S18115C9 ::mf18115c9(){}

static void Test_S18115C9()
{
  {
    init_simple_test("S18115C9");
    S18115C9 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S18115C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18115C9)");
    check_field_offset(lv, s18115c9f0, 0, "S18115C9.s18115c9f0");
    check_field_offset(lv, s18115c9f1, ABISELECT(24,16), "S18115C9.s18115c9f1");
    check_field_offset(lv, s18115c9f2, ABISELECT(32,24), "S18115C9.s18115c9f2");
  }
}
static Arrange_To_Call_Me vS18115C9(Test_S18115C9, "S18115C9", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18115C1  {
  void *s18115c1f0[2];
  int s18115c1f1[4];
  ::S119C12_nt s18115c1f2;
  ::S119C12_nt s18115c1f3;
  ::S119C12_nt s18115c1f4;
  void *s18115c1f5[2];
  ::S18115C5 s18115c1f6;
  ::S18115C9 s18115c1f7;
  void  mf18115c1(); // _ZN8S18115C19mf18115c1Ev
};
//SIG(1 S18115C1) C1{ m Fp[2] Fi[4] FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC2 Fp[2] FC5{ m Fi FC6{ m Fp} FC7{ m FC8{ m FL[2]}}} FC9{ m FC2 Fi[2] Fp}}


void  S18115C1 ::mf18115c1(){}

static void Test_S18115C1()
{
  {
    init_simple_test("S18115C1");
    S18115C1 lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S18115C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18115C1)");
    check_field_offset(lv, s18115c1f0, 0, "S18115C1.s18115c1f0");
    check_field_offset(lv, s18115c1f1, ABISELECT(16,8), "S18115C1.s18115c1f1");
    check_field_offset(lv, s18115c1f2, ABISELECT(32,24), "S18115C1.s18115c1f2");
    check_field_offset(lv, s18115c1f3, ABISELECT(56,40), "S18115C1.s18115c1f3");
    check_field_offset(lv, s18115c1f4, ABISELECT(80,56), "S18115C1.s18115c1f4");
    check_field_offset(lv, s18115c1f5, ABISELECT(104,72), "S18115C1.s18115c1f5");
    check_field_offset(lv, s18115c1f6, ABISELECT(120,80), "S18115C1.s18115c1f6");
    check_field_offset(lv, s18115c1f7, ABISELECT(152,104), "S18115C1.s18115c1f7");
  }
}
static Arrange_To_Call_Me vS18115C1(Test_S18115C1, "S18115C1", ABISELECT(192,132));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3076C3  {
  virtual  ~S3076C3(); // _ZN7S3076C3D1Ev
  virtual void  v2(); // _ZN7S3076C32v2Ev
  virtual void  v3(); // _ZN7S3076C32v3Ev
  S3076C3(); // tgen
};
//SIG(-1 S3076C3) C1{ vd v1 v2}


 S3076C3 ::~S3076C3(){ note_dtor("S3076C3", this);}
void  S3076C3 ::v2(){vfunc_called(this, "_ZN7S3076C32v2Ev");}
void  S3076C3 ::v3(){vfunc_called(this, "_ZN7S3076C32v3Ev");}
S3076C3 ::S3076C3(){ note_ctor("S3076C3", this);} // tgen

static void Test_S3076C3()
{
  extern Class_Descriptor cd_S3076C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3076C3, buf);
    S3076C3 *dp, &lv = *(dp=new (buf) S3076C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3076C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3076C3)");
    test_class_info(&lv, &cd_S3076C3);
    dp->~S3076C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3076C3(Test_S3076C3, "S3076C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3076C3C1Ev();
extern void _ZN7S3076C3D1Ev();
Name_Map name_map_S3076C3[] = {
  NSPAIR(_ZN7S3076C3C1Ev),
  NSPAIR(_ZN7S3076C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3076C3[];
extern void _ZN7S3076C3D1Ev();
extern void _ZN7S3076C3D0Ev();
extern void _ZN7S3076C32v2Ev();
extern void _ZN7S3076C32v3Ev();
static  VTBL_ENTRY vtc_S3076C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3076C3[0]),
  (VTBL_ENTRY)&_ZN7S3076C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3076C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3076C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3076C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S3076C3[];
extern  VTBL_ENTRY _ZTV7S3076C3[];
Class_Descriptor cd_S3076C3 = {  "S3076C3", // class name
  0,0,//no base classes
  &(vtc_S3076C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3076C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3076C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3076C4  {
  void *s3076c4f0;
  ::S119C12_nt s3076c4f1;
  ::S119C12_nt s3076c4f2;
  ::S6741C7_nt s3076c4f3;
  int s3076c4f4;
  ::S6741C9_nt s3076c4f5;
  void *s3076c4f6[6];
  ::S119C12_nt s3076c4f7;
  void *s3076c4f8;
  void  mf3076c4(); // _ZN7S3076C48mf3076c4Ev
};
//SIG(-1 S3076C4) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC5{ m FC6{ m FL[2]}} Fi FC7{ m Fp Fi FC8{ m}} Fp[6] FC2 Fp}


void  S3076C4 ::mf3076c4(){}

static void Test_S3076C4()
{
  {
    init_simple_test("S3076C4");
    S3076C4 lv;
    check2(sizeof(lv), ABISELECT(176,112), "sizeof(S3076C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3076C4)");
    check_field_offset(lv, s3076c4f0, 0, "S3076C4.s3076c4f0");
    check_field_offset(lv, s3076c4f1, ABISELECT(8,4), "S3076C4.s3076c4f1");
    check_field_offset(lv, s3076c4f2, ABISELECT(32,20), "S3076C4.s3076c4f2");
    check_field_offset(lv, s3076c4f3, ABISELECT(56,36), "S3076C4.s3076c4f3");
    check_field_offset(lv, s3076c4f4, ABISELECT(72,52), "S3076C4.s3076c4f4");
    check_field_offset(lv, s3076c4f5, ABISELECT(80,56), "S3076C4.s3076c4f5");
    check_field_offset(lv, s3076c4f6, ABISELECT(96,68), "S3076C4.s3076c4f6");
    check_field_offset(lv, s3076c4f7, ABISELECT(144,92), "S3076C4.s3076c4f7");
    check_field_offset(lv, s3076c4f8, ABISELECT(168,108), "S3076C4.s3076c4f8");
  }
}
static Arrange_To_Call_Me vS3076C4(Test_S3076C4, "S3076C4", ABISELECT(176,112));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3076C2  : S3076C3 {
  ::S3076C4 s3076c2f0;
  virtual void  v4(); // _ZN7S3076C22v4Ev
  virtual void  v5(); // _ZN7S3076C22v5Ev
  ~S3076C2(); // tgen
  S3076C2(); // tgen
};
//SIG(-1 S3076C2) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC7{ m FC8{ m FL[2]}} Fi FC9{ m Fp Fi FC10{ m}} Fp[6] FC4 Fp}}


void  S3076C2 ::v4(){vfunc_called(this, "_ZN7S3076C22v4Ev");}
void  S3076C2 ::v5(){vfunc_called(this, "_ZN7S3076C22v5Ev");}
S3076C2 ::~S3076C2(){ note_dtor("S3076C2", this);} // tgen
S3076C2 ::S3076C2(){ note_ctor("S3076C2", this);} // tgen

static void Test_S3076C2()
{
  extern Class_Descriptor cd_S3076C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S3076C2, buf);
    S3076C2 *dp, &lv = *(dp=new (buf) S3076C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S3076C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3076C2)");
    check_base_class_offset(lv, (S3076C3*), 0, "S3076C2");
    check_field_offset(lv, s3076c2f0, ABISELECT(8,4), "S3076C2.s3076c2f0");
    test_class_info(&lv, &cd_S3076C2);
    dp->~S3076C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3076C2(Test_S3076C2, "S3076C2", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN7S3076C2C1Ev();
extern void _ZN7S3076C2D1Ev();
Name_Map name_map_S3076C2[] = {
  NSPAIR(_ZN7S3076C2C1Ev),
  NSPAIR(_ZN7S3076C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3076C3;
extern VTBL_ENTRY _ZTI7S3076C3[];
extern  VTBL_ENTRY _ZTV7S3076C3[];
static Base_Class bases_S3076C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3076C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3076C2[];
extern void _ZN7S3076C2D1Ev();
extern void _ZN7S3076C2D0Ev();
extern void _ZN7S3076C32v2Ev();
extern void _ZN7S3076C32v3Ev();
extern void _ZN7S3076C22v4Ev();
extern void _ZN7S3076C22v5Ev();
static  VTBL_ENTRY vtc_S3076C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3076C2[0]),
  (VTBL_ENTRY)&_ZN7S3076C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3076C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3076C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3076C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3076C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3076C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S3076C2[];
extern  VTBL_ENTRY _ZTV7S3076C2[];
Class_Descriptor cd_S3076C2 = {  "S3076C2", // class name
  bases_S3076C2, 1,
  &(vtc_S3076C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI7S3076C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3076C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3076C1  : S3076C2 {
  ::S119C12_nt s3076c1f0;
  virtual void  v1(); // _ZN7S3076C12v1Ev
  ~S3076C1(); // tgen
  S3076C1(); // tgen
};
//SIG(1 S3076C1) C1{ BC2{ BC3{ vd v2 v3} v4 v5 FC4{ m Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} FC5 FC8{ m FC9{ m FL[2]}} Fi FC10{ m Fp Fi FC11{ m}} Fp[6] FC5 Fp}} v1 FC5}


void  S3076C1 ::v1(){vfunc_called(this, "_ZN7S3076C12v1Ev");}
S3076C1 ::~S3076C1(){ note_dtor("S3076C1", this);} // tgen
S3076C1 ::S3076C1(){ note_ctor("S3076C1", this);} // tgen

static void Test_S3076C1()
{
  extern Class_Descriptor cd_S3076C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,34)];
    init_test(&cd_S3076C1, buf);
    S3076C1 *dp, &lv = *(dp=new (buf) S3076C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S3076C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3076C1)");
    check_base_class_offset(lv, (S3076C3*)(S3076C2*), 0, "S3076C1");
    check_base_class_offset(lv, (S3076C2*), 0, "S3076C1");
    check_field_offset(lv, s3076c1f0, ABISELECT(184,116), "S3076C1.s3076c1f0");
    test_class_info(&lv, &cd_S3076C1);
    dp->~S3076C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3076C1(Test_S3076C1, "S3076C1", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN7S3076C1C1Ev();
extern void _ZN7S3076C1D1Ev();
Name_Map name_map_S3076C1[] = {
  NSPAIR(_ZN7S3076C1C1Ev),
  NSPAIR(_ZN7S3076C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3076C3;
extern VTBL_ENTRY _ZTI7S3076C3[];
extern  VTBL_ENTRY _ZTV7S3076C3[];
extern Class_Descriptor cd_S3076C2;
extern VTBL_ENTRY _ZTI7S3076C2[];
extern  VTBL_ENTRY _ZTV7S3076C2[];
static Base_Class bases_S3076C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3076C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3076C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3076C1[];
extern void _ZN7S3076C1D1Ev();
extern void _ZN7S3076C1D0Ev();
extern void _ZN7S3076C32v2Ev();
extern void _ZN7S3076C32v3Ev();
extern void _ZN7S3076C22v4Ev();
extern void _ZN7S3076C22v5Ev();
extern void _ZN7S3076C12v1Ev();
static  VTBL_ENTRY vtc_S3076C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3076C1[0]),
  (VTBL_ENTRY)&_ZN7S3076C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3076C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3076C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3076C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3076C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3076C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3076C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3076C1[];
extern  VTBL_ENTRY _ZTV7S3076C1[];
Class_Descriptor cd_S3076C1 = {  "S3076C1", // class name
  bases_S3076C1, 2,
  &(vtc_S3076C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI7S3076C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3076C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5148C3_nt  {
  ::S119C12_nt s5148c3f0;
  void *s5148c3f1;
  int s5148c3f2;
  virtual  ~S5148C3_nt(); // _ZN10S5148C3_ntD1Ev
  virtual void  v4(); // _ZN10S5148C3_nt2v4Ev
  virtual void  v5(); // _ZN10S5148C3_nt2v5Ev
  virtual void  v6(); // _ZN10S5148C3_nt2v6Ev
  virtual void  v7(); // _ZN10S5148C3_nt2v7Ev
  virtual void  v8(); // _ZN10S5148C3_nt2v8Ev
  virtual void  v9(); // _ZN10S5148C3_nt2v9Ev
  virtual void  v10(); // _ZN10S5148C3_nt3v10Ev
  S5148C3_nt(); // tgen
};
//SIG(-1 S5148C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S5148C3_nt ::~S5148C3_nt(){ note_dtor("S5148C3_nt", this);}
void  S5148C3_nt ::v4(){vfunc_called(this, "_ZN10S5148C3_nt2v4Ev");}
void  S5148C3_nt ::v5(){vfunc_called(this, "_ZN10S5148C3_nt2v5Ev");}
void  S5148C3_nt ::v6(){vfunc_called(this, "_ZN10S5148C3_nt2v6Ev");}
void  S5148C3_nt ::v7(){vfunc_called(this, "_ZN10S5148C3_nt2v7Ev");}
void  S5148C3_nt ::v8(){vfunc_called(this, "_ZN10S5148C3_nt2v8Ev");}
void  S5148C3_nt ::v9(){vfunc_called(this, "_ZN10S5148C3_nt2v9Ev");}
void  S5148C3_nt ::v10(){vfunc_called(this, "_ZN10S5148C3_nt3v10Ev");}
S5148C3_nt ::S5148C3_nt(){ note_ctor("S5148C3_nt", this);} // tgen

//skip512 S5148C3_nt

#else // __cplusplus

extern void _ZN10S5148C3_ntC1Ev();
extern void _ZN10S5148C3_ntD1Ev();
Name_Map name_map_S5148C3_nt[] = {
  NSPAIR(_ZN10S5148C3_ntC1Ev),
  NSPAIR(_ZN10S5148C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5148C3_nt[];
extern void _ZN10S5148C3_ntD1Ev();
extern void _ZN10S5148C3_ntD0Ev();
extern void _ZN10S5148C3_nt2v4Ev();
extern void _ZN10S5148C3_nt2v5Ev();
extern void _ZN10S5148C3_nt2v6Ev();
extern void _ZN10S5148C3_nt2v7Ev();
extern void _ZN10S5148C3_nt2v8Ev();
extern void _ZN10S5148C3_nt2v9Ev();
extern void _ZN10S5148C3_nt3v10Ev();
static  VTBL_ENTRY vtc_S5148C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5148C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5148C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S5148C3_nt[];
VTBL_ENTRY *P__ZTI10S5148C3_nt = _ZTI10S5148C3_nt; 
extern  VTBL_ENTRY _ZTV10S5148C3_nt[];
Class_Descriptor cd_S5148C3_nt = {  "S5148C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5148C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI10S5148C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5148C3_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5148C2  : S5148C3_nt {
  int s5148c2f0;
  char s5148c2f1[2];
  virtual  ~S5148C2(); // _ZN7S5148C2D1Ev
  virtual void  v11(); // _ZN7S5148C23v11Ev
  virtual void  v12(); // _ZN7S5148C23v12Ev
  virtual void  v13(); // _ZN7S5148C23v13Ev
  virtual void  v14(); // _ZN7S5148C23v14Ev
  S5148C2(); // tgen
};
//SIG(-1 S5148C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} vd v1 v2 v3 v4 Fi Fc[2]}


 S5148C2 ::~S5148C2(){ note_dtor("S5148C2", this);}
void  S5148C2 ::v11(){vfunc_called(this, "_ZN7S5148C23v11Ev");}
void  S5148C2 ::v12(){vfunc_called(this, "_ZN7S5148C23v12Ev");}
void  S5148C2 ::v13(){vfunc_called(this, "_ZN7S5148C23v13Ev");}
void  S5148C2 ::v14(){vfunc_called(this, "_ZN7S5148C23v14Ev");}
S5148C2 ::S5148C2(){ note_ctor("S5148C2", this);} // tgen

static void Test_S5148C2()
{
  extern Class_Descriptor cd_S5148C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S5148C2, buf);
    S5148C2 *dp, &lv = *(dp=new (buf) S5148C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S5148C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5148C2)");
    check_base_class_offset(lv, (S5148C3_nt*), 0, "S5148C2");
    check_field_offset(lv, s5148c2f0, ABISELECT(44,28), "S5148C2.s5148c2f0");
    check_field_offset(lv, s5148c2f1, ABISELECT(48,32), "S5148C2.s5148c2f1");
    test_class_info(&lv, &cd_S5148C2);
    dp->~S5148C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5148C2(Test_S5148C2, "S5148C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S5148C2C1Ev();
extern void _ZN7S5148C2D1Ev();
Name_Map name_map_S5148C2[] = {
  NSPAIR(_ZN7S5148C2C1Ev),
  NSPAIR(_ZN7S5148C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5148C3_nt;
extern VTBL_ENTRY _ZTI10S5148C3_nt[];
extern  VTBL_ENTRY _ZTV10S5148C3_nt[];
static Base_Class bases_S5148C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5148C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5148C2[];
extern void _ZN7S5148C2D1Ev();
extern void _ZN7S5148C2D0Ev();
extern void _ZN10S5148C3_nt2v4Ev();
extern void _ZN10S5148C3_nt2v5Ev();
extern void _ZN10S5148C3_nt2v6Ev();
extern void _ZN10S5148C3_nt2v7Ev();
extern void _ZN10S5148C3_nt2v8Ev();
extern void _ZN10S5148C3_nt2v9Ev();
extern void _ZN10S5148C3_nt3v10Ev();
extern void _ZN7S5148C23v11Ev();
extern void _ZN7S5148C23v12Ev();
extern void _ZN7S5148C23v13Ev();
extern void _ZN7S5148C23v14Ev();
static  VTBL_ENTRY vtc_S5148C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5148C2[0]),
  (VTBL_ENTRY)&_ZN7S5148C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5148C2D0Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S5148C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5148C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5148C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5148C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S5148C2[];
extern  VTBL_ENTRY _ZTV7S5148C2[];
Class_Descriptor cd_S5148C2 = {  "S5148C2", // class name
  bases_S5148C2, 1,
  &(vtc_S5148C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S5148C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5148C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5148C1  : S5148C2 {
  void *s5148c1f0;
  virtual void  v1(); // _ZN7S5148C12v1Ev
  virtual void  v2(); // _ZN7S5148C12v2Ev
  virtual void  v3(); // _ZN7S5148C12v3Ev
  ~S5148C1(); // tgen
  S5148C1(); // tgen
};
//SIG(1 S5148C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fp Fi} vd v11 v12 v13 v14 Fi Fc[2]} v1 v2 v3 Fp}


void  S5148C1 ::v1(){vfunc_called(this, "_ZN7S5148C12v1Ev");}
void  S5148C1 ::v2(){vfunc_called(this, "_ZN7S5148C12v2Ev");}
void  S5148C1 ::v3(){vfunc_called(this, "_ZN7S5148C12v3Ev");}
S5148C1 ::~S5148C1(){ note_dtor("S5148C1", this);} // tgen
S5148C1 ::S5148C1(){ note_ctor("S5148C1", this);} // tgen

static void Test_S5148C1()
{
  extern Class_Descriptor cd_S5148C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S5148C1, buf);
    S5148C1 *dp, &lv = *(dp=new (buf) S5148C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S5148C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5148C1)");
    check_base_class_offset(lv, (S5148C3_nt*)(S5148C2*), 0, "S5148C1");
    check_base_class_offset(lv, (S5148C2*), 0, "S5148C1");
    check_field_offset(lv, s5148c1f0, ABISELECT(56,36), "S5148C1.s5148c1f0");
    test_class_info(&lv, &cd_S5148C1);
    dp->~S5148C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5148C1(Test_S5148C1, "S5148C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S5148C1C1Ev();
extern void _ZN7S5148C1D1Ev();
Name_Map name_map_S5148C1[] = {
  NSPAIR(_ZN7S5148C1C1Ev),
  NSPAIR(_ZN7S5148C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5148C3_nt;
extern VTBL_ENTRY _ZTI10S5148C3_nt[];
extern  VTBL_ENTRY _ZTV10S5148C3_nt[];
extern Class_Descriptor cd_S5148C2;
extern VTBL_ENTRY _ZTI7S5148C2[];
extern  VTBL_ENTRY _ZTV7S5148C2[];
static Base_Class bases_S5148C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5148C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5148C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5148C1[];
extern void _ZN7S5148C1D1Ev();
extern void _ZN7S5148C1D0Ev();
extern void _ZN10S5148C3_nt2v4Ev();
extern void _ZN10S5148C3_nt2v5Ev();
extern void _ZN10S5148C3_nt2v6Ev();
extern void _ZN10S5148C3_nt2v7Ev();
extern void _ZN10S5148C3_nt2v8Ev();
extern void _ZN10S5148C3_nt2v9Ev();
extern void _ZN10S5148C3_nt3v10Ev();
extern void _ZN7S5148C23v11Ev();
extern void _ZN7S5148C23v12Ev();
extern void _ZN7S5148C23v13Ev();
extern void _ZN7S5148C23v14Ev();
extern void _ZN7S5148C12v1Ev();
extern void _ZN7S5148C12v2Ev();
extern void _ZN7S5148C12v3Ev();
static  VTBL_ENTRY vtc_S5148C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5148C1[0]),
  (VTBL_ENTRY)&_ZN7S5148C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5148C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5148C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S5148C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5148C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5148C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5148C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5148C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5148C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5148C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5148C1[];
extern  VTBL_ENTRY _ZTV7S5148C1[];
Class_Descriptor cd_S5148C1 = {  "S5148C1", // class name
  bases_S5148C1, 2,
  &(vtc_S5148C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S5148C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5148C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9649C2_nt  {
  void *s9649c2f0;
  virtual  ~S9649C2_nt(); // _ZN10S9649C2_ntD1Ev
  virtual void  v4(); // _ZN10S9649C2_nt2v4Ev
  virtual void  v5(); // _ZN10S9649C2_nt2v5Ev
  S9649C2_nt(); // tgen
};
//SIG(-1 S9649C2_nt) C1{ vd v1 v2 Fp}


 S9649C2_nt ::~S9649C2_nt(){ note_dtor("S9649C2_nt", this);}
void  S9649C2_nt ::v4(){vfunc_called(this, "_ZN10S9649C2_nt2v4Ev");}
void  S9649C2_nt ::v5(){vfunc_called(this, "_ZN10S9649C2_nt2v5Ev");}
S9649C2_nt ::S9649C2_nt(){ note_ctor("S9649C2_nt", this);} // tgen

//skip512 S9649C2_nt

#else // __cplusplus

extern void _ZN10S9649C2_ntC1Ev();
extern void _ZN10S9649C2_ntD1Ev();
Name_Map name_map_S9649C2_nt[] = {
  NSPAIR(_ZN10S9649C2_ntC1Ev),
  NSPAIR(_ZN10S9649C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9649C2_nt[];
extern void _ZN10S9649C2_ntD1Ev();
extern void _ZN10S9649C2_ntD0Ev();
extern void _ZN10S9649C2_nt2v4Ev();
extern void _ZN10S9649C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S9649C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9649C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9649C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9649C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9649C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9649C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S9649C2_nt[];
VTBL_ENTRY *P__ZTI10S9649C2_nt = _ZTI10S9649C2_nt; 
extern  VTBL_ENTRY _ZTV10S9649C2_nt[];
Class_Descriptor cd_S9649C2_nt = {  "S9649C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9649C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S9649C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9649C2_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9649C3_nt  {
  virtual  ~S9649C3_nt(); // _ZN10S9649C3_ntD1Ev
  virtual void  v6(); // _ZN10S9649C3_nt2v6Ev
  S9649C3_nt(); // tgen
};
//SIG(-1 S9649C3_nt) C1{ vd v1}


 S9649C3_nt ::~S9649C3_nt(){ note_dtor("S9649C3_nt", this);}
void  S9649C3_nt ::v6(){vfunc_called(this, "_ZN10S9649C3_nt2v6Ev");}
S9649C3_nt ::S9649C3_nt(){ note_ctor("S9649C3_nt", this);} // tgen

//skip512 S9649C3_nt

#else // __cplusplus

extern void _ZN10S9649C3_ntC1Ev();
extern void _ZN10S9649C3_ntD1Ev();
Name_Map name_map_S9649C3_nt[] = {
  NSPAIR(_ZN10S9649C3_ntC1Ev),
  NSPAIR(_ZN10S9649C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9649C3_nt[];
extern void _ZN10S9649C3_ntD1Ev();
extern void _ZN10S9649C3_ntD0Ev();
extern void _ZN10S9649C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S9649C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9649C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S9649C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9649C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9649C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S9649C3_nt[];
VTBL_ENTRY *P__ZTI10S9649C3_nt = _ZTI10S9649C3_nt; 
extern  VTBL_ENTRY _ZTV10S9649C3_nt[];
Class_Descriptor cd_S9649C3_nt = {  "S9649C3_nt", // class name
  0,0,//no base classes
  &(vtc_S9649C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9649C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9649C3_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9649C1  : S9649C2_nt , S9649C3_nt {
  int s9649c1f0;
  void *s9649c1f1[2];
  char s9649c1f2;
  int s9649c1f3;
  ::S119C9_nt s9649c1f4;
  ::S119C12_nt s9649c1f5;
  ::S119C12_nt s9649c1f6;
  virtual  ~S9649C1(); // _ZN7S9649C1D1Ev
  virtual void  v1(); // _ZN7S9649C12v1Ev
  virtual void  v2(); // _ZN7S9649C12v2Ev
  virtual void  v3(); // _ZN7S9649C12v3Ev
  S9649C1(); // tgen
};
//SIG(1 S9649C1) C1{ BC2{ vd v4 v5 Fp} BC3{ vd v6} vd v1 v2 v3 Fi Fp[2] Fc Fi FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} FC6}


 S9649C1 ::~S9649C1(){ note_dtor("S9649C1", this);}
void  S9649C1 ::v1(){vfunc_called(this, "_ZN7S9649C12v1Ev");}
void  S9649C1 ::v2(){vfunc_called(this, "_ZN7S9649C12v2Ev");}
void  S9649C1 ::v3(){vfunc_called(this, "_ZN7S9649C12v3Ev");}
S9649C1 ::S9649C1(){ note_ctor("S9649C1", this);} // tgen

static void Test_S9649C1()
{
  extern Class_Descriptor cd_S9649C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S9649C1, buf);
    S9649C1 *dp, &lv = *(dp=new (buf) S9649C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S9649C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9649C1)");
    check_base_class_offset(lv, (S9649C2_nt*), 0, "S9649C1");
    check_base_class_offset(lv, (S9649C3_nt*), ABISELECT(16,8), "S9649C1");
    check_field_offset(lv, s9649c1f0, ABISELECT(24,12), "S9649C1.s9649c1f0");
    check_field_offset(lv, s9649c1f1, ABISELECT(32,16), "S9649C1.s9649c1f1");
    check_field_offset(lv, s9649c1f2, ABISELECT(48,24), "S9649C1.s9649c1f2");
    check_field_offset(lv, s9649c1f3, ABISELECT(52,28), "S9649C1.s9649c1f3");
    check_field_offset(lv, s9649c1f4, ABISELECT(56,32), "S9649C1.s9649c1f4");
    check_field_offset(lv, s9649c1f5, ABISELECT(80,48), "S9649C1.s9649c1f5");
    check_field_offset(lv, s9649c1f6, ABISELECT(104,64), "S9649C1.s9649c1f6");
    test_class_info(&lv, &cd_S9649C1);
    dp->~S9649C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9649C1(Test_S9649C1, "S9649C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S9649C1C1Ev();
extern void _ZN7S9649C1D1Ev();
Name_Map name_map_S9649C1[] = {
  NSPAIR(_ZN7S9649C1C1Ev),
  NSPAIR(_ZN7S9649C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9649C2_nt;
extern VTBL_ENTRY _ZTI10S9649C2_nt[];
extern  VTBL_ENTRY _ZTV10S9649C2_nt[];
extern Class_Descriptor cd_S9649C3_nt;
extern VTBL_ENTRY _ZTI10S9649C3_nt[];
extern  VTBL_ENTRY _ZTV10S9649C3_nt[];
static Base_Class bases_S9649C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9649C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S9649C3_nt,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9649C1[];
extern void _ZN7S9649C1D1Ev();
extern void _ZN7S9649C1D0Ev();
extern void _ZN10S9649C2_nt2v4Ev();
extern void _ZN10S9649C2_nt2v5Ev();
extern void _ZN7S9649C12v1Ev();
extern void _ZN7S9649C12v2Ev();
extern void _ZN7S9649C12v3Ev();
extern void ABISELECT(_ZThn16_N7S9649C1D1Ev,_ZThn8_N7S9649C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S9649C1D0Ev,_ZThn8_N7S9649C1D0Ev)();
extern void _ZN10S9649C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S9649C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9649C1[0]),
  (VTBL_ENTRY)&_ZN7S9649C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9649C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9649C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9649C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S9649C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9649C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9649C12v3Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S9649C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S9649C1D1Ev,_ZThn8_N7S9649C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S9649C1D0Ev,_ZThn8_N7S9649C1D0Ev),
  (VTBL_ENTRY)&_ZN10S9649C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI7S9649C1[];
extern  VTBL_ENTRY _ZTV7S9649C1[];
Class_Descriptor cd_S9649C1 = {  "S9649C1", // class name
  bases_S9649C1, 2,
  &(vtc_S9649C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S9649C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9649C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5149C3  {
  ::S119C12_nt s5149c3f0;
  void *s5149c3f1;
  int s5149c3f2;
  virtual  ~S5149C3(); // _ZN7S5149C3D1Ev
  virtual void  v4(); // _ZN7S5149C32v4Ev
  virtual void  v5(); // _ZN7S5149C32v5Ev
  virtual void  v6(); // _ZN7S5149C32v6Ev
  virtual void  v7(); // _ZN7S5149C32v7Ev
  virtual void  v8(); // _ZN7S5149C32v8Ev
  virtual void  v9(); // _ZN7S5149C32v9Ev
  virtual void  v10(); // _ZN7S5149C33v10Ev
  S5149C3(); // tgen
};
//SIG(-1 S5149C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S5149C3 ::~S5149C3(){ note_dtor("S5149C3", this);}
void  S5149C3 ::v4(){vfunc_called(this, "_ZN7S5149C32v4Ev");}
void  S5149C3 ::v5(){vfunc_called(this, "_ZN7S5149C32v5Ev");}
void  S5149C3 ::v6(){vfunc_called(this, "_ZN7S5149C32v6Ev");}
void  S5149C3 ::v7(){vfunc_called(this, "_ZN7S5149C32v7Ev");}
void  S5149C3 ::v8(){vfunc_called(this, "_ZN7S5149C32v8Ev");}
void  S5149C3 ::v9(){vfunc_called(this, "_ZN7S5149C32v9Ev");}
void  S5149C3 ::v10(){vfunc_called(this, "_ZN7S5149C33v10Ev");}
S5149C3 ::S5149C3(){ note_ctor("S5149C3", this);} // tgen

static void Test_S5149C3()
{
  extern Class_Descriptor cd_S5149C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S5149C3, buf);
    S5149C3 *dp, &lv = *(dp=new (buf) S5149C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S5149C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5149C3)");
    check_field_offset(lv, s5149c3f0, ABISELECT(8,4), "S5149C3.s5149c3f0");
    check_field_offset(lv, s5149c3f1, ABISELECT(32,20), "S5149C3.s5149c3f1");
    check_field_offset(lv, s5149c3f2, ABISELECT(40,24), "S5149C3.s5149c3f2");
    test_class_info(&lv, &cd_S5149C3);
    dp->~S5149C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5149C3(Test_S5149C3, "S5149C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S5149C3C1Ev();
extern void _ZN7S5149C3D1Ev();
Name_Map name_map_S5149C3[] = {
  NSPAIR(_ZN7S5149C3C1Ev),
  NSPAIR(_ZN7S5149C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5149C3[];
extern void _ZN7S5149C3D1Ev();
extern void _ZN7S5149C3D0Ev();
extern void _ZN7S5149C32v4Ev();
extern void _ZN7S5149C32v5Ev();
extern void _ZN7S5149C32v6Ev();
extern void _ZN7S5149C32v7Ev();
extern void _ZN7S5149C32v8Ev();
extern void _ZN7S5149C32v9Ev();
extern void _ZN7S5149C33v10Ev();
static  VTBL_ENTRY vtc_S5149C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5149C3[0]),
  (VTBL_ENTRY)&_ZN7S5149C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5149C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5149C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S5149C3[];
extern  VTBL_ENTRY _ZTV7S5149C3[];
Class_Descriptor cd_S5149C3 = {  "S5149C3", // class name
  0,0,//no base classes
  &(vtc_S5149C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S5149C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5149C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5149C2  : S5149C3 {
  int s5149c2f0;
  char s5149c2f1[2];
  virtual  ~S5149C2(); // _ZN7S5149C2D1Ev
  virtual void  v11(); // _ZN7S5149C23v11Ev
  virtual void  v12(); // _ZN7S5149C23v12Ev
  virtual void  v13(); // _ZN7S5149C23v13Ev
  virtual void  v14(); // _ZN7S5149C23v14Ev
  S5149C2(); // tgen
};
//SIG(-1 S5149C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} vd v1 v2 v3 v4 Fi Fc[2]}


 S5149C2 ::~S5149C2(){ note_dtor("S5149C2", this);}
void  S5149C2 ::v11(){vfunc_called(this, "_ZN7S5149C23v11Ev");}
void  S5149C2 ::v12(){vfunc_called(this, "_ZN7S5149C23v12Ev");}
void  S5149C2 ::v13(){vfunc_called(this, "_ZN7S5149C23v13Ev");}
void  S5149C2 ::v14(){vfunc_called(this, "_ZN7S5149C23v14Ev");}
S5149C2 ::S5149C2(){ note_ctor("S5149C2", this);} // tgen

static void Test_S5149C2()
{
  extern Class_Descriptor cd_S5149C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S5149C2, buf);
    S5149C2 *dp, &lv = *(dp=new (buf) S5149C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S5149C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5149C2)");
    check_base_class_offset(lv, (S5149C3*), 0, "S5149C2");
    check_field_offset(lv, s5149c2f0, ABISELECT(44,28), "S5149C2.s5149c2f0");
    check_field_offset(lv, s5149c2f1, ABISELECT(48,32), "S5149C2.s5149c2f1");
    test_class_info(&lv, &cd_S5149C2);
    dp->~S5149C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5149C2(Test_S5149C2, "S5149C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S5149C2C1Ev();
extern void _ZN7S5149C2D1Ev();
Name_Map name_map_S5149C2[] = {
  NSPAIR(_ZN7S5149C2C1Ev),
  NSPAIR(_ZN7S5149C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5149C3;
extern VTBL_ENTRY _ZTI7S5149C3[];
extern  VTBL_ENTRY _ZTV7S5149C3[];
static Base_Class bases_S5149C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5149C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5149C2[];
extern void _ZN7S5149C2D1Ev();
extern void _ZN7S5149C2D0Ev();
extern void _ZN7S5149C32v4Ev();
extern void _ZN7S5149C32v5Ev();
extern void _ZN7S5149C32v6Ev();
extern void _ZN7S5149C32v7Ev();
extern void _ZN7S5149C32v8Ev();
extern void _ZN7S5149C32v9Ev();
extern void _ZN7S5149C33v10Ev();
extern void _ZN7S5149C23v11Ev();
extern void _ZN7S5149C23v12Ev();
extern void _ZN7S5149C23v13Ev();
extern void _ZN7S5149C23v14Ev();
static  VTBL_ENTRY vtc_S5149C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5149C2[0]),
  (VTBL_ENTRY)&_ZN7S5149C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5149C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5149C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5149C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5149C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5149C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5149C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S5149C2[];
extern  VTBL_ENTRY _ZTV7S5149C2[];
Class_Descriptor cd_S5149C2 = {  "S5149C2", // class name
  bases_S5149C2, 1,
  &(vtc_S5149C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S5149C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5149C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5149C1  : S5149C2 {
  virtual void  v1(); // _ZN7S5149C12v1Ev
  virtual void  v2(); // _ZN7S5149C12v2Ev
  virtual void  v3(); // _ZN7S5149C12v3Ev
  ~S5149C1(); // tgen
  S5149C1(); // tgen
};
//SIG(1 S5149C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fp Fi} vd v11 v12 v13 v14 Fi Fc[2]} v1 v2 v3}


void  S5149C1 ::v1(){vfunc_called(this, "_ZN7S5149C12v1Ev");}
void  S5149C1 ::v2(){vfunc_called(this, "_ZN7S5149C12v2Ev");}
void  S5149C1 ::v3(){vfunc_called(this, "_ZN7S5149C12v3Ev");}
S5149C1 ::~S5149C1(){ note_dtor("S5149C1", this);} // tgen
S5149C1 ::S5149C1(){ note_ctor("S5149C1", this);} // tgen

static void Test_S5149C1()
{
  extern Class_Descriptor cd_S5149C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S5149C1, buf);
    S5149C1 *dp, &lv = *(dp=new (buf) S5149C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S5149C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5149C1)");
    check_base_class_offset(lv, (S5149C3*)(S5149C2*), 0, "S5149C1");
    check_base_class_offset(lv, (S5149C2*), 0, "S5149C1");
    test_class_info(&lv, &cd_S5149C1);
    dp->~S5149C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5149C1(Test_S5149C1, "S5149C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S5149C1C1Ev();
extern void _ZN7S5149C1D1Ev();
Name_Map name_map_S5149C1[] = {
  NSPAIR(_ZN7S5149C1C1Ev),
  NSPAIR(_ZN7S5149C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5149C3;
extern VTBL_ENTRY _ZTI7S5149C3[];
extern  VTBL_ENTRY _ZTV7S5149C3[];
extern Class_Descriptor cd_S5149C2;
extern VTBL_ENTRY _ZTI7S5149C2[];
extern  VTBL_ENTRY _ZTV7S5149C2[];
static Base_Class bases_S5149C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5149C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5149C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5149C1[];
extern void _ZN7S5149C1D1Ev();
extern void _ZN7S5149C1D0Ev();
extern void _ZN7S5149C32v4Ev();
extern void _ZN7S5149C32v5Ev();
extern void _ZN7S5149C32v6Ev();
extern void _ZN7S5149C32v7Ev();
extern void _ZN7S5149C32v8Ev();
extern void _ZN7S5149C32v9Ev();
extern void _ZN7S5149C33v10Ev();
extern void _ZN7S5149C23v11Ev();
extern void _ZN7S5149C23v12Ev();
extern void _ZN7S5149C23v13Ev();
extern void _ZN7S5149C23v14Ev();
extern void _ZN7S5149C12v1Ev();
extern void _ZN7S5149C12v2Ev();
extern void _ZN7S5149C12v3Ev();
static  VTBL_ENTRY vtc_S5149C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5149C1[0]),
  (VTBL_ENTRY)&_ZN7S5149C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5149C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5149C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5149C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5149C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5149C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5149C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5149C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5149C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5149C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5149C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5149C1[];
extern  VTBL_ENTRY _ZTV7S5149C1[];
Class_Descriptor cd_S5149C1 = {  "S5149C1", // class name
  bases_S5149C1, 2,
  &(vtc_S5149C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S5149C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5149C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9658C2  {
  ::S6741C9_nt s9658c2f0;
  int s9658c2f1[2];
  char s9658c2f2;
  virtual  ~S9658C2(); // _ZN7S9658C2D1Ev
  virtual void  v4(); // _ZN7S9658C22v4Ev
  virtual void  v5(); // _ZN7S9658C22v5Ev
  virtual void  v6(); // _ZN7S9658C22v6Ev
  S9658C2(); // tgen
};
//SIG(-1 S9658C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9658C2 ::~S9658C2(){ note_dtor("S9658C2", this);}
void  S9658C2 ::v4(){vfunc_called(this, "_ZN7S9658C22v4Ev");}
void  S9658C2 ::v5(){vfunc_called(this, "_ZN7S9658C22v5Ev");}
void  S9658C2 ::v6(){vfunc_called(this, "_ZN7S9658C22v6Ev");}
S9658C2 ::S9658C2(){ note_ctor("S9658C2", this);} // tgen

static void Test_S9658C2()
{
  extern Class_Descriptor cd_S9658C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9658C2, buf);
    S9658C2 *dp, &lv = *(dp=new (buf) S9658C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9658C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9658C2)");
    check_field_offset(lv, s9658c2f0, ABISELECT(8,4), "S9658C2.s9658c2f0");
    check_field_offset(lv, s9658c2f1, ABISELECT(24,16), "S9658C2.s9658c2f1");
    check_field_offset(lv, s9658c2f2, ABISELECT(32,24), "S9658C2.s9658c2f2");
    test_class_info(&lv, &cd_S9658C2);
    dp->~S9658C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9658C2(Test_S9658C2, "S9658C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9658C2C1Ev();
extern void _ZN7S9658C2D1Ev();
Name_Map name_map_S9658C2[] = {
  NSPAIR(_ZN7S9658C2C1Ev),
  NSPAIR(_ZN7S9658C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9658C2[];
extern void _ZN7S9658C2D1Ev();
extern void _ZN7S9658C2D0Ev();
extern void _ZN7S9658C22v4Ev();
extern void _ZN7S9658C22v5Ev();
extern void _ZN7S9658C22v6Ev();
static  VTBL_ENTRY vtc_S9658C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9658C2[0]),
  (VTBL_ENTRY)&_ZN7S9658C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9658C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9658C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9658C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9658C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9658C2[];
extern  VTBL_ENTRY _ZTV7S9658C2[];
Class_Descriptor cd_S9658C2 = {  "S9658C2", // class name
  0,0,//no base classes
  &(vtc_S9658C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9658C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9658C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9658C1  : S9658C2 {
  ::S6741C9_nt s9658c1f0;
  ::S1146C5_nt s9658c1f1;
  ::S21925C44_nt s9658c1f2;
  void *s9658c1f3;
  ::S119C12_nt s9658c1f4;
  ::S1146C5_nt s9658c1f5;
  char s9658c1f6;
  virtual  ~S9658C1(); // _ZN7S9658C1D1Ev
  virtual void  v1(); // _ZN7S9658C12v1Ev
  virtual void  v2(); // _ZN7S9658C12v2Ev
  virtual void  v3(); // _ZN7S9658C12v3Ev
  S9658C1(); // tgen
};
//SIG(1 S9658C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 FC3 FC5{ m Fp} FC6{ m Fp[2]} Fp FC7{ m FC8{ m Fp Fi FC9{ m}} Fi} FC5 Fc}


 S9658C1 ::~S9658C1(){ note_dtor("S9658C1", this);}
void  S9658C1 ::v1(){vfunc_called(this, "_ZN7S9658C12v1Ev");}
void  S9658C1 ::v2(){vfunc_called(this, "_ZN7S9658C12v2Ev");}
void  S9658C1 ::v3(){vfunc_called(this, "_ZN7S9658C12v3Ev");}
S9658C1 ::S9658C1(){ note_ctor("S9658C1", this);} // tgen

static void Test_S9658C1()
{
  extern Class_Descriptor cd_S9658C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S9658C1, buf);
    S9658C1 *dp, &lv = *(dp=new (buf) S9658C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S9658C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9658C1)");
    check_base_class_offset(lv, (S9658C2*), 0, "S9658C1");
    check_field_offset(lv, s9658c1f0, ABISELECT(40,28), "S9658C1.s9658c1f0");
    check_field_offset(lv, s9658c1f1, ABISELECT(56,40), "S9658C1.s9658c1f1");
    check_field_offset(lv, s9658c1f2, ABISELECT(64,44), "S9658C1.s9658c1f2");
    check_field_offset(lv, s9658c1f3, ABISELECT(80,52), "S9658C1.s9658c1f3");
    check_field_offset(lv, s9658c1f4, ABISELECT(88,56), "S9658C1.s9658c1f4");
    check_field_offset(lv, s9658c1f5, ABISELECT(112,72), "S9658C1.s9658c1f5");
    check_field_offset(lv, s9658c1f6, ABISELECT(120,76), "S9658C1.s9658c1f6");
    test_class_info(&lv, &cd_S9658C1);
    dp->~S9658C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9658C1(Test_S9658C1, "S9658C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S9658C1C1Ev();
extern void _ZN7S9658C1D1Ev();
Name_Map name_map_S9658C1[] = {
  NSPAIR(_ZN7S9658C1C1Ev),
  NSPAIR(_ZN7S9658C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9658C2;
extern VTBL_ENTRY _ZTI7S9658C2[];
extern  VTBL_ENTRY _ZTV7S9658C2[];
static Base_Class bases_S9658C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9658C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9658C1[];
extern void _ZN7S9658C1D1Ev();
extern void _ZN7S9658C1D0Ev();
extern void _ZN7S9658C22v4Ev();
extern void _ZN7S9658C22v5Ev();
extern void _ZN7S9658C22v6Ev();
extern void _ZN7S9658C12v1Ev();
extern void _ZN7S9658C12v2Ev();
extern void _ZN7S9658C12v3Ev();
static  VTBL_ENTRY vtc_S9658C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9658C1[0]),
  (VTBL_ENTRY)&_ZN7S9658C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9658C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9658C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9658C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9658C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9658C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9658C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9658C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9658C1[];
extern  VTBL_ENTRY _ZTV7S9658C1[];
Class_Descriptor cd_S9658C1 = {  "S9658C1", // class name
  bases_S9658C1, 1,
  &(vtc_S9658C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S9658C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9658C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6735C2  {
  virtual  ~S6735C2(); // _ZN7S6735C2D1Ev
  virtual void  v3(); // _ZN7S6735C22v3Ev
  virtual void  v4(); // _ZN7S6735C22v4Ev
  S6735C2(); // tgen
};
//SIG(-1 S6735C2) C1{ vd v1 v2}


 S6735C2 ::~S6735C2(){ note_dtor("S6735C2", this);}
void  S6735C2 ::v3(){vfunc_called(this, "_ZN7S6735C22v3Ev");}
void  S6735C2 ::v4(){vfunc_called(this, "_ZN7S6735C22v4Ev");}
S6735C2 ::S6735C2(){ note_ctor("S6735C2", this);} // tgen

static void Test_S6735C2()
{
  extern Class_Descriptor cd_S6735C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6735C2, buf);
    S6735C2 *dp, &lv = *(dp=new (buf) S6735C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6735C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6735C2)");
    test_class_info(&lv, &cd_S6735C2);
    dp->~S6735C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6735C2(Test_S6735C2, "S6735C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6735C2C1Ev();
extern void _ZN7S6735C2D1Ev();
Name_Map name_map_S6735C2[] = {
  NSPAIR(_ZN7S6735C2C1Ev),
  NSPAIR(_ZN7S6735C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6735C2[];
extern void _ZN7S6735C2D1Ev();
extern void _ZN7S6735C2D0Ev();
extern void _ZN7S6735C22v3Ev();
extern void _ZN7S6735C22v4Ev();
static  VTBL_ENTRY vtc_S6735C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6735C2[0]),
  (VTBL_ENTRY)&_ZN7S6735C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6735C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6735C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6735C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6735C2[];
extern  VTBL_ENTRY _ZTV7S6735C2[];
Class_Descriptor cd_S6735C2 = {  "S6735C2", // class name
  0,0,//no base classes
  &(vtc_S6735C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6735C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6735C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6735C3  {
  void *s6735c3f0;
  ::S119C12_nt s6735c3f1;
  ::S119C12_nt s6735c3f2;
  ::S6741C7_nt s6735c3f3;
  int s6735c3f4;
  ::S6741C9_nt s6735c3f5;
  void *s6735c3f6[4];
  int s6735c3f7[2];
  char s6735c3f8;
  void  mf6735c3(); // _ZN7S6735C38mf6735c3Ev
};
//SIG(-1 S6735C3) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC5{ m FC6{ m FL[2]}} Fi FC7{ m Fp Fi FC8{ m}} Fp[4] Fi[2] Fc}


void  S6735C3 ::mf6735c3(){}

static void Test_S6735C3()
{
  {
    init_simple_test("S6735C3");
    S6735C3 lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S6735C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6735C3)");
    check_field_offset(lv, s6735c3f0, 0, "S6735C3.s6735c3f0");
    check_field_offset(lv, s6735c3f1, ABISELECT(8,4), "S6735C3.s6735c3f1");
    check_field_offset(lv, s6735c3f2, ABISELECT(32,20), "S6735C3.s6735c3f2");
    check_field_offset(lv, s6735c3f3, ABISELECT(56,36), "S6735C3.s6735c3f3");
    check_field_offset(lv, s6735c3f4, ABISELECT(72,52), "S6735C3.s6735c3f4");
    check_field_offset(lv, s6735c3f5, ABISELECT(80,56), "S6735C3.s6735c3f5");
    check_field_offset(lv, s6735c3f6, ABISELECT(96,68), "S6735C3.s6735c3f6");
    check_field_offset(lv, s6735c3f7, ABISELECT(128,84), "S6735C3.s6735c3f7");
    check_field_offset(lv, s6735c3f8, ABISELECT(136,92), "S6735C3.s6735c3f8");
  }
}
static Arrange_To_Call_Me vS6735C3(Test_S6735C3, "S6735C3", ABISELECT(144,96));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6735C1  : S6735C2 {
  ::S6735C3 s6735c1f0;
  virtual void  v1(); // _ZN7S6735C12v1Ev
  virtual void  v2(); // _ZN7S6735C12v2Ev
  ~S6735C1(); // tgen
  S6735C1(); // tgen
};
//SIG(1 S6735C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC7{ m FC8{ m FL[2]}} Fi FC9{ m Fp Fi FC10{ m}} Fp[4] Fi[2] Fc}}


void  S6735C1 ::v1(){vfunc_called(this, "_ZN7S6735C12v1Ev");}
void  S6735C1 ::v2(){vfunc_called(this, "_ZN7S6735C12v2Ev");}
S6735C1 ::~S6735C1(){ note_dtor("S6735C1", this);} // tgen
S6735C1 ::S6735C1(){ note_ctor("S6735C1", this);} // tgen

static void Test_S6735C1()
{
  extern Class_Descriptor cd_S6735C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,26)];
    init_test(&cd_S6735C1, buf);
    S6735C1 *dp, &lv = *(dp=new (buf) S6735C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,100), "sizeof(S6735C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6735C1)");
    check_base_class_offset(lv, (S6735C2*), 0, "S6735C1");
    check_field_offset(lv, s6735c1f0, ABISELECT(8,4), "S6735C1.s6735c1f0");
    test_class_info(&lv, &cd_S6735C1);
    dp->~S6735C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6735C1(Test_S6735C1, "S6735C1", ABISELECT(152,100));

#else // __cplusplus

extern void _ZN7S6735C1C1Ev();
extern void _ZN7S6735C1D1Ev();
Name_Map name_map_S6735C1[] = {
  NSPAIR(_ZN7S6735C1C1Ev),
  NSPAIR(_ZN7S6735C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6735C2;
extern VTBL_ENTRY _ZTI7S6735C2[];
extern  VTBL_ENTRY _ZTV7S6735C2[];
static Base_Class bases_S6735C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6735C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6735C1[];
extern void _ZN7S6735C1D1Ev();
extern void _ZN7S6735C1D0Ev();
extern void _ZN7S6735C22v3Ev();
extern void _ZN7S6735C22v4Ev();
extern void _ZN7S6735C12v1Ev();
extern void _ZN7S6735C12v2Ev();
static  VTBL_ENTRY vtc_S6735C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6735C1[0]),
  (VTBL_ENTRY)&_ZN7S6735C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6735C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6735C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6735C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6735C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6735C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6735C1[];
extern  VTBL_ENTRY _ZTV7S6735C1[];
Class_Descriptor cd_S6735C1 = {  "S6735C1", // class name
  bases_S6735C1, 1,
  &(vtc_S6735C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,100), // object size
  NSPAIRA(_ZTI7S6735C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6735C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3156C3_nt  {
  virtual  ~S3156C3_nt(); // _ZN10S3156C3_ntD1Ev
  virtual void  v3(); // _ZN10S3156C3_nt2v3Ev
  virtual void  v4(); // _ZN10S3156C3_nt2v4Ev
  virtual void  v5(); // _ZN10S3156C3_nt2v5Ev
  S3156C3_nt(); // tgen
};
//SIG(-1 S3156C3_nt) C1{ vd v1 v2 v3}


 S3156C3_nt ::~S3156C3_nt(){ note_dtor("S3156C3_nt", this);}
void  S3156C3_nt ::v3(){vfunc_called(this, "_ZN10S3156C3_nt2v3Ev");}
void  S3156C3_nt ::v4(){vfunc_called(this, "_ZN10S3156C3_nt2v4Ev");}
void  S3156C3_nt ::v5(){vfunc_called(this, "_ZN10S3156C3_nt2v5Ev");}
S3156C3_nt ::S3156C3_nt(){ note_ctor("S3156C3_nt", this);} // tgen

//skip512 S3156C3_nt

#else // __cplusplus

extern void _ZN10S3156C3_ntC1Ev();
extern void _ZN10S3156C3_ntD1Ev();
Name_Map name_map_S3156C3_nt[] = {
  NSPAIR(_ZN10S3156C3_ntC1Ev),
  NSPAIR(_ZN10S3156C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3156C3_nt[];
extern void _ZN10S3156C3_ntD1Ev();
extern void _ZN10S3156C3_ntD0Ev();
extern void _ZN10S3156C3_nt2v3Ev();
extern void _ZN10S3156C3_nt2v4Ev();
extern void _ZN10S3156C3_nt2v5Ev();
static  VTBL_ENTRY vtc_S3156C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3156C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3156C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3156C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3156C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S3156C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3156C3_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S3156C3_nt[];
VTBL_ENTRY *P__ZTI10S3156C3_nt = _ZTI10S3156C3_nt; 
extern  VTBL_ENTRY _ZTV10S3156C3_nt[];
Class_Descriptor cd_S3156C3_nt = {  "S3156C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3156C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S3156C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3156C3_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3156C4  {
  void *s3156c4f0;
  ::S119C12_nt s3156c4f1;
  ::S119C12_nt s3156c4f2;
  ::S119C12_nt s3156c4f3;
  ::S6741C7_nt s3156c4f4;
  void *s3156c4f5[2];
  void  mf3156c4(); // _ZN7S3156C48mf3156c4Ev
};
//SIG(-1 S3156C4) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC2 FC5{ m FC6{ m FL[2]}} Fp[2]}


void  S3156C4 ::mf3156c4(){}

static void Test_S3156C4()
{
  {
    init_simple_test("S3156C4");
    S3156C4 lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3156C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3156C4)");
    check_field_offset(lv, s3156c4f0, 0, "S3156C4.s3156c4f0");
    check_field_offset(lv, s3156c4f1, ABISELECT(8,4), "S3156C4.s3156c4f1");
    check_field_offset(lv, s3156c4f2, ABISELECT(32,20), "S3156C4.s3156c4f2");
    check_field_offset(lv, s3156c4f3, ABISELECT(56,36), "S3156C4.s3156c4f3");
    check_field_offset(lv, s3156c4f4, ABISELECT(80,52), "S3156C4.s3156c4f4");
    check_field_offset(lv, s3156c4f5, ABISELECT(96,68), "S3156C4.s3156c4f5");
  }
}
static Arrange_To_Call_Me vS3156C4(Test_S3156C4, "S3156C4", ABISELECT(112,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3156C2  : S3156C3_nt {
  ::S3156C4 s3156c2f0;
  void *s3156c2f1;
  virtual void  v6(); // _ZN7S3156C22v6Ev
  ~S3156C2(); // tgen
  S3156C2(); // tgen
};
//SIG(-1 S3156C2) C1{ BC2{ vd v2 v3 v4} v1 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC4 FC7{ m FC8{ m FL[2]}} Fp[2]} Fp}


void  S3156C2 ::v6(){vfunc_called(this, "_ZN7S3156C22v6Ev");}
S3156C2 ::~S3156C2(){ note_dtor("S3156C2", this);} // tgen
S3156C2 ::S3156C2(){ note_ctor("S3156C2", this);} // tgen

static void Test_S3156C2()
{
  extern Class_Descriptor cd_S3156C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S3156C2, buf);
    S3156C2 *dp, &lv = *(dp=new (buf) S3156C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S3156C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3156C2)");
    check_base_class_offset(lv, (S3156C3_nt*), 0, "S3156C2");
    check_field_offset(lv, s3156c2f0, ABISELECT(8,4), "S3156C2.s3156c2f0");
    check_field_offset(lv, s3156c2f1, ABISELECT(120,80), "S3156C2.s3156c2f1");
    test_class_info(&lv, &cd_S3156C2);
    dp->~S3156C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3156C2(Test_S3156C2, "S3156C2", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S3156C2C1Ev();
extern void _ZN7S3156C2D1Ev();
Name_Map name_map_S3156C2[] = {
  NSPAIR(_ZN7S3156C2C1Ev),
  NSPAIR(_ZN7S3156C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3156C3_nt;
extern VTBL_ENTRY _ZTI10S3156C3_nt[];
extern  VTBL_ENTRY _ZTV10S3156C3_nt[];
static Base_Class bases_S3156C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3156C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3156C2[];
extern void _ZN7S3156C2D1Ev();
extern void _ZN7S3156C2D0Ev();
extern void _ZN10S3156C3_nt2v3Ev();
extern void _ZN10S3156C3_nt2v4Ev();
extern void _ZN10S3156C3_nt2v5Ev();
extern void _ZN7S3156C22v6Ev();
static  VTBL_ENTRY vtc_S3156C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3156C2[0]),
  (VTBL_ENTRY)&_ZN7S3156C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3156C2D0Ev,
  (VTBL_ENTRY)&_ZN10S3156C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S3156C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3156C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S3156C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S3156C2[];
extern  VTBL_ENTRY _ZTV7S3156C2[];
Class_Descriptor cd_S3156C2 = {  "S3156C2", // class name
  bases_S3156C2, 1,
  &(vtc_S3156C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S3156C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3156C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3156C1  : S3156C2 {
  virtual void  v1(); // _ZN7S3156C12v1Ev
  virtual void  v2(); // _ZN7S3156C12v2Ev
  ~S3156C1(); // tgen
  S3156C1(); // tgen
};
//SIG(1 S3156C1) C1{ BC2{ BC3{ vd v3 v4 v5} v6 FC4{ m Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} FC5 FC5 FC8{ m FC9{ m FL[2]}} Fp[2]} Fp} v1 v2}


void  S3156C1 ::v1(){vfunc_called(this, "_ZN7S3156C12v1Ev");}
void  S3156C1 ::v2(){vfunc_called(this, "_ZN7S3156C12v2Ev");}
S3156C1 ::~S3156C1(){ note_dtor("S3156C1", this);} // tgen
S3156C1 ::S3156C1(){ note_ctor("S3156C1", this);} // tgen

static void Test_S3156C1()
{
  extern Class_Descriptor cd_S3156C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S3156C1, buf);
    S3156C1 *dp, &lv = *(dp=new (buf) S3156C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S3156C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3156C1)");
    check_base_class_offset(lv, (S3156C3_nt*)(S3156C2*), 0, "S3156C1");
    check_base_class_offset(lv, (S3156C2*), 0, "S3156C1");
    test_class_info(&lv, &cd_S3156C1);
    dp->~S3156C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3156C1(Test_S3156C1, "S3156C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S3156C1C1Ev();
extern void _ZN7S3156C1D1Ev();
Name_Map name_map_S3156C1[] = {
  NSPAIR(_ZN7S3156C1C1Ev),
  NSPAIR(_ZN7S3156C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3156C3_nt;
extern VTBL_ENTRY _ZTI10S3156C3_nt[];
extern  VTBL_ENTRY _ZTV10S3156C3_nt[];
extern Class_Descriptor cd_S3156C2;
extern VTBL_ENTRY _ZTI7S3156C2[];
extern  VTBL_ENTRY _ZTV7S3156C2[];
static Base_Class bases_S3156C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3156C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3156C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3156C1[];
extern void _ZN7S3156C1D1Ev();
extern void _ZN7S3156C1D0Ev();
extern void _ZN10S3156C3_nt2v3Ev();
extern void _ZN10S3156C3_nt2v4Ev();
extern void _ZN10S3156C3_nt2v5Ev();
extern void _ZN7S3156C22v6Ev();
extern void _ZN7S3156C12v1Ev();
extern void _ZN7S3156C12v2Ev();
static  VTBL_ENTRY vtc_S3156C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3156C1[0]),
  (VTBL_ENTRY)&_ZN7S3156C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3156C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3156C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S3156C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3156C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S3156C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3156C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3156C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S3156C1[];
extern  VTBL_ENTRY _ZTV7S3156C1[];
Class_Descriptor cd_S3156C1 = {  "S3156C1", // class name
  bases_S3156C1, 2,
  &(vtc_S3156C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S3156C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3156C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21799C2  {
  ::S119C12_nt s21799c2f0;
  ::S6741C7_nt s21799c2f1;
  ::S6741C7_nt s21799c2f2;
  ::S119C12_nt s21799c2f3;
  ::S6741C7_nt s21799c2f4;
  ::S6741C7_nt s21799c2f5;
  ::S6741C7_nt s21799c2f6;
  int s21799c2f7[3];
  char s21799c2f8[3];
  void  mf21799c2(); // _ZN8S21799C29mf21799c2Ev
  virtual  ~S21799C2(); // _ZN8S21799C2D1Ev
  S21799C2(); // tgen
};
//SIG(-1 S21799C2) C1{ vd m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m FC6{ m FL[2]}} FC5 FC2 FC5 FC5 FC5 Fi[3] Fc[3]}


void  S21799C2 ::mf21799c2(){}
 S21799C2 ::~S21799C2(){ note_dtor("S21799C2", this);}
S21799C2 ::S21799C2(){ note_ctor("S21799C2", this);} // tgen

static void Test_S21799C2()
{
  extern Class_Descriptor cd_S21799C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,34)];
    init_test(&cd_S21799C2, buf);
    S21799C2 *dp, &lv = *(dp=new (buf) S21799C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,132), "sizeof(S21799C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21799C2)");
    check_field_offset(lv, s21799c2f0, ABISELECT(8,4), "S21799C2.s21799c2f0");
    check_field_offset(lv, s21799c2f1, ABISELECT(32,20), "S21799C2.s21799c2f1");
    check_field_offset(lv, s21799c2f2, ABISELECT(48,36), "S21799C2.s21799c2f2");
    check_field_offset(lv, s21799c2f3, ABISELECT(64,52), "S21799C2.s21799c2f3");
    check_field_offset(lv, s21799c2f4, ABISELECT(88,68), "S21799C2.s21799c2f4");
    check_field_offset(lv, s21799c2f5, ABISELECT(104,84), "S21799C2.s21799c2f5");
    check_field_offset(lv, s21799c2f6, ABISELECT(120,100), "S21799C2.s21799c2f6");
    check_field_offset(lv, s21799c2f7, ABISELECT(136,116), "S21799C2.s21799c2f7");
    check_field_offset(lv, s21799c2f8, ABISELECT(148,128), "S21799C2.s21799c2f8");
    test_class_info(&lv, &cd_S21799C2);
    dp->~S21799C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21799C2(Test_S21799C2, "S21799C2", ABISELECT(152,132));

#else // __cplusplus

extern void _ZN8S21799C2C1Ev();
extern void _ZN8S21799C2D1Ev();
Name_Map name_map_S21799C2[] = {
  NSPAIR(_ZN8S21799C2C1Ev),
  NSPAIR(_ZN8S21799C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21799C2[];
extern void _ZN8S21799C2D1Ev();
extern void _ZN8S21799C2D0Ev();
static  VTBL_ENTRY vtc_S21799C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21799C2[0]),
  (VTBL_ENTRY)&_ZN8S21799C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21799C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S21799C2[];
extern  VTBL_ENTRY _ZTV8S21799C2[];
Class_Descriptor cd_S21799C2 = {  "S21799C2", // class name
  0,0,//no base classes
  &(vtc_S21799C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,132), // object size
  NSPAIRA(_ZTI8S21799C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21799C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21799C1  {
  void *s21799c1f0[2];
  ::S21799C2 s21799c1f1;
  void  mf21799c1(); // _ZN8S21799C19mf21799c1Ev
  virtual  ~S21799C1(); // _ZN8S21799C1D1Ev
  S21799C1(); // tgen
};
//SIG(1 S21799C1) C1{ vd m Fp[2] FC2{ vd m FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC6{ m FC7{ m FL[2]}} FC6 FC3 FC6 FC6 FC6 Fi[3] Fc[3]}}


void  S21799C1 ::mf21799c1(){}
 S21799C1 ::~S21799C1(){ note_dtor("S21799C1", this);}
S21799C1 ::S21799C1(){ note_ctor("S21799C1", this);} // tgen

static void Test_S21799C1()
{
  extern Class_Descriptor cd_S21799C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,37)];
    init_test(&cd_S21799C1, buf);
    S21799C1 *dp, &lv = *(dp=new (buf) S21799C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,144), "sizeof(S21799C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21799C1)");
    check_field_offset(lv, s21799c1f0, ABISELECT(8,4), "S21799C1.s21799c1f0");
    check_field_offset(lv, s21799c1f1, ABISELECT(24,12), "S21799C1.s21799c1f1");
    test_class_info(&lv, &cd_S21799C1);
    dp->~S21799C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21799C1(Test_S21799C1, "S21799C1", ABISELECT(176,144));

#else // __cplusplus

extern void _ZN8S21799C1C1Ev();
extern void _ZN8S21799C1D1Ev();
Name_Map name_map_S21799C1[] = {
  NSPAIR(_ZN8S21799C1C1Ev),
  NSPAIR(_ZN8S21799C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21799C1[];
extern void _ZN8S21799C1D1Ev();
extern void _ZN8S21799C1D0Ev();
static  VTBL_ENTRY vtc_S21799C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21799C1[0]),
  (VTBL_ENTRY)&_ZN8S21799C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21799C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21799C1[];
extern  VTBL_ENTRY _ZTV8S21799C1[];
Class_Descriptor cd_S21799C1 = {  "S21799C1", // class name
  0,0,//no base classes
  &(vtc_S21799C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,144), // object size
  NSPAIRA(_ZTI8S21799C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21799C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4925C3  {
  ::S119C12_nt s4925c3f0;
  void *s4925c3f1;
  int s4925c3f2;
  virtual  ~S4925C3(); // _ZN7S4925C3D1Ev
  virtual void  v3(); // _ZN7S4925C32v3Ev
  virtual void  v4(); // _ZN7S4925C32v4Ev
  virtual void  v5(); // _ZN7S4925C32v5Ev
  virtual void  v6(); // _ZN7S4925C32v6Ev
  virtual void  v7(); // _ZN7S4925C32v7Ev
  virtual void  v8(); // _ZN7S4925C32v8Ev
  virtual void  v9(); // _ZN7S4925C32v9Ev
  S4925C3(); // tgen
};
//SIG(-1 S4925C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S4925C3 ::~S4925C3(){ note_dtor("S4925C3", this);}
void  S4925C3 ::v3(){vfunc_called(this, "_ZN7S4925C32v3Ev");}
void  S4925C3 ::v4(){vfunc_called(this, "_ZN7S4925C32v4Ev");}
void  S4925C3 ::v5(){vfunc_called(this, "_ZN7S4925C32v5Ev");}
void  S4925C3 ::v6(){vfunc_called(this, "_ZN7S4925C32v6Ev");}
void  S4925C3 ::v7(){vfunc_called(this, "_ZN7S4925C32v7Ev");}
void  S4925C3 ::v8(){vfunc_called(this, "_ZN7S4925C32v8Ev");}
void  S4925C3 ::v9(){vfunc_called(this, "_ZN7S4925C32v9Ev");}
S4925C3 ::S4925C3(){ note_ctor("S4925C3", this);} // tgen

static void Test_S4925C3()
{
  extern Class_Descriptor cd_S4925C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S4925C3, buf);
    S4925C3 *dp, &lv = *(dp=new (buf) S4925C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S4925C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4925C3)");
    check_field_offset(lv, s4925c3f0, ABISELECT(8,4), "S4925C3.s4925c3f0");
    check_field_offset(lv, s4925c3f1, ABISELECT(32,20), "S4925C3.s4925c3f1");
    check_field_offset(lv, s4925c3f2, ABISELECT(40,24), "S4925C3.s4925c3f2");
    test_class_info(&lv, &cd_S4925C3);
    dp->~S4925C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4925C3(Test_S4925C3, "S4925C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S4925C3C1Ev();
extern void _ZN7S4925C3D1Ev();
Name_Map name_map_S4925C3[] = {
  NSPAIR(_ZN7S4925C3C1Ev),
  NSPAIR(_ZN7S4925C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4925C3[];
extern void _ZN7S4925C3D1Ev();
extern void _ZN7S4925C3D0Ev();
extern void _ZN7S4925C32v3Ev();
extern void _ZN7S4925C32v4Ev();
extern void _ZN7S4925C32v5Ev();
extern void _ZN7S4925C32v6Ev();
extern void _ZN7S4925C32v7Ev();
extern void _ZN7S4925C32v8Ev();
extern void _ZN7S4925C32v9Ev();
static  VTBL_ENTRY vtc_S4925C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4925C3[0]),
  (VTBL_ENTRY)&_ZN7S4925C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4925C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S4925C3[];
extern  VTBL_ENTRY _ZTV7S4925C3[];
Class_Descriptor cd_S4925C3 = {  "S4925C3", // class name
  0,0,//no base classes
  &(vtc_S4925C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S4925C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4925C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4925C2  : S4925C3 {
  int s4925c2f0;
  char s4925c2f1[2];
  virtual  ~S4925C2(); // _ZN7S4925C2D1Ev
  virtual void  v10(); // _ZN7S4925C23v10Ev
  virtual void  v11(); // _ZN7S4925C23v11Ev
  virtual void  v12(); // _ZN7S4925C23v12Ev
  virtual void  v13(); // _ZN7S4925C23v13Ev
  S4925C2(); // tgen
};
//SIG(-1 S4925C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} vd v1 v2 v3 v4 Fi Fc[2]}


 S4925C2 ::~S4925C2(){ note_dtor("S4925C2", this);}
void  S4925C2 ::v10(){vfunc_called(this, "_ZN7S4925C23v10Ev");}
void  S4925C2 ::v11(){vfunc_called(this, "_ZN7S4925C23v11Ev");}
void  S4925C2 ::v12(){vfunc_called(this, "_ZN7S4925C23v12Ev");}
void  S4925C2 ::v13(){vfunc_called(this, "_ZN7S4925C23v13Ev");}
S4925C2 ::S4925C2(){ note_ctor("S4925C2", this);} // tgen

static void Test_S4925C2()
{
  extern Class_Descriptor cd_S4925C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4925C2, buf);
    S4925C2 *dp, &lv = *(dp=new (buf) S4925C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4925C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4925C2)");
    check_base_class_offset(lv, (S4925C3*), 0, "S4925C2");
    check_field_offset(lv, s4925c2f0, ABISELECT(44,28), "S4925C2.s4925c2f0");
    check_field_offset(lv, s4925c2f1, ABISELECT(48,32), "S4925C2.s4925c2f1");
    test_class_info(&lv, &cd_S4925C2);
    dp->~S4925C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4925C2(Test_S4925C2, "S4925C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4925C2C1Ev();
extern void _ZN7S4925C2D1Ev();
Name_Map name_map_S4925C2[] = {
  NSPAIR(_ZN7S4925C2C1Ev),
  NSPAIR(_ZN7S4925C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4925C3;
extern VTBL_ENTRY _ZTI7S4925C3[];
extern  VTBL_ENTRY _ZTV7S4925C3[];
static Base_Class bases_S4925C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4925C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4925C2[];
extern void _ZN7S4925C2D1Ev();
extern void _ZN7S4925C2D0Ev();
extern void _ZN7S4925C32v3Ev();
extern void _ZN7S4925C32v4Ev();
extern void _ZN7S4925C32v5Ev();
extern void _ZN7S4925C32v6Ev();
extern void _ZN7S4925C32v7Ev();
extern void _ZN7S4925C32v8Ev();
extern void _ZN7S4925C32v9Ev();
extern void _ZN7S4925C23v10Ev();
extern void _ZN7S4925C23v11Ev();
extern void _ZN7S4925C23v12Ev();
extern void _ZN7S4925C23v13Ev();
static  VTBL_ENTRY vtc_S4925C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4925C2[0]),
  (VTBL_ENTRY)&_ZN7S4925C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4925C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4925C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4925C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4925C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4925C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S4925C2[];
extern  VTBL_ENTRY _ZTV7S4925C2[];
Class_Descriptor cd_S4925C2 = {  "S4925C2", // class name
  bases_S4925C2, 1,
  &(vtc_S4925C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4925C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4925C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4925C1  : S4925C2 {
  virtual void  v1(); // _ZN7S4925C12v1Ev
  virtual void  v2(); // _ZN7S4925C12v2Ev
  ~S4925C1(); // tgen
  S4925C1(); // tgen
};
//SIG(1 S4925C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 v7 v8 v9 FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fp Fi} vd v10 v11 v12 v13 Fi Fc[2]} v1 v2}


void  S4925C1 ::v1(){vfunc_called(this, "_ZN7S4925C12v1Ev");}
void  S4925C1 ::v2(){vfunc_called(this, "_ZN7S4925C12v2Ev");}
S4925C1 ::~S4925C1(){ note_dtor("S4925C1", this);} // tgen
S4925C1 ::S4925C1(){ note_ctor("S4925C1", this);} // tgen

static void Test_S4925C1()
{
  extern Class_Descriptor cd_S4925C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4925C1, buf);
    S4925C1 *dp, &lv = *(dp=new (buf) S4925C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4925C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4925C1)");
    check_base_class_offset(lv, (S4925C3*)(S4925C2*), 0, "S4925C1");
    check_base_class_offset(lv, (S4925C2*), 0, "S4925C1");
    test_class_info(&lv, &cd_S4925C1);
    dp->~S4925C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4925C1(Test_S4925C1, "S4925C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4925C1C1Ev();
extern void _ZN7S4925C1D1Ev();
Name_Map name_map_S4925C1[] = {
  NSPAIR(_ZN7S4925C1C1Ev),
  NSPAIR(_ZN7S4925C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4925C3;
extern VTBL_ENTRY _ZTI7S4925C3[];
extern  VTBL_ENTRY _ZTV7S4925C3[];
extern Class_Descriptor cd_S4925C2;
extern VTBL_ENTRY _ZTI7S4925C2[];
extern  VTBL_ENTRY _ZTV7S4925C2[];
static Base_Class bases_S4925C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4925C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4925C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4925C1[];
extern void _ZN7S4925C1D1Ev();
extern void _ZN7S4925C1D0Ev();
extern void _ZN7S4925C32v3Ev();
extern void _ZN7S4925C32v4Ev();
extern void _ZN7S4925C32v5Ev();
extern void _ZN7S4925C32v6Ev();
extern void _ZN7S4925C32v7Ev();
extern void _ZN7S4925C32v8Ev();
extern void _ZN7S4925C32v9Ev();
extern void _ZN7S4925C23v10Ev();
extern void _ZN7S4925C23v11Ev();
extern void _ZN7S4925C23v12Ev();
extern void _ZN7S4925C23v13Ev();
extern void _ZN7S4925C12v1Ev();
extern void _ZN7S4925C12v2Ev();
static  VTBL_ENTRY vtc_S4925C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4925C1[0]),
  (VTBL_ENTRY)&_ZN7S4925C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4925C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4925C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4925C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4925C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4925C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4925C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4925C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4925C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4925C1[];
extern  VTBL_ENTRY _ZTV7S4925C1[];
Class_Descriptor cd_S4925C1 = {  "S4925C1", // class name
  bases_S4925C1, 2,
  &(vtc_S4925C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4925C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4925C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6733C2  {
  virtual  ~S6733C2(); // _ZN7S6733C2D1Ev
  virtual void  v3(); // _ZN7S6733C22v3Ev
  virtual void  v4(); // _ZN7S6733C22v4Ev
  S6733C2(); // tgen
};
//SIG(-1 S6733C2) C1{ vd v1 v2}


 S6733C2 ::~S6733C2(){ note_dtor("S6733C2", this);}
void  S6733C2 ::v3(){vfunc_called(this, "_ZN7S6733C22v3Ev");}
void  S6733C2 ::v4(){vfunc_called(this, "_ZN7S6733C22v4Ev");}
S6733C2 ::S6733C2(){ note_ctor("S6733C2", this);} // tgen

static void Test_S6733C2()
{
  extern Class_Descriptor cd_S6733C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6733C2, buf);
    S6733C2 *dp, &lv = *(dp=new (buf) S6733C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6733C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6733C2)");
    test_class_info(&lv, &cd_S6733C2);
    dp->~S6733C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6733C2(Test_S6733C2, "S6733C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6733C2C1Ev();
extern void _ZN7S6733C2D1Ev();
Name_Map name_map_S6733C2[] = {
  NSPAIR(_ZN7S6733C2C1Ev),
  NSPAIR(_ZN7S6733C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6733C2[];
extern void _ZN7S6733C2D1Ev();
extern void _ZN7S6733C2D0Ev();
extern void _ZN7S6733C22v3Ev();
extern void _ZN7S6733C22v4Ev();
static  VTBL_ENTRY vtc_S6733C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6733C2[0]),
  (VTBL_ENTRY)&_ZN7S6733C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6733C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6733C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6733C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6733C2[];
extern  VTBL_ENTRY _ZTV7S6733C2[];
Class_Descriptor cd_S6733C2 = {  "S6733C2", // class name
  0,0,//no base classes
  &(vtc_S6733C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6733C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6733C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6733C3  {
  void *s6733c3f0;
  ::S119C12_nt s6733c3f1;
  ::S119C12_nt s6733c3f2;
  ::S6741C7_nt s6733c3f3;
  int s6733c3f4;
  ::S6741C9_nt s6733c3f5;
  void *s6733c3f6[2];
  int s6733c3f7[2];
  void  mf6733c3(); // _ZN7S6733C38mf6733c3Ev
};
//SIG(-1 S6733C3) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC5{ m FC6{ m FL[2]}} Fi FC7{ m Fp Fi FC8{ m}} Fp[2] Fi[2]}


void  S6733C3 ::mf6733c3(){}

static void Test_S6733C3()
{
  {
    init_simple_test("S6733C3");
    S6733C3 lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S6733C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6733C3)");
    check_field_offset(lv, s6733c3f0, 0, "S6733C3.s6733c3f0");
    check_field_offset(lv, s6733c3f1, ABISELECT(8,4), "S6733C3.s6733c3f1");
    check_field_offset(lv, s6733c3f2, ABISELECT(32,20), "S6733C3.s6733c3f2");
    check_field_offset(lv, s6733c3f3, ABISELECT(56,36), "S6733C3.s6733c3f3");
    check_field_offset(lv, s6733c3f4, ABISELECT(72,52), "S6733C3.s6733c3f4");
    check_field_offset(lv, s6733c3f5, ABISELECT(80,56), "S6733C3.s6733c3f5");
    check_field_offset(lv, s6733c3f6, ABISELECT(96,68), "S6733C3.s6733c3f6");
    check_field_offset(lv, s6733c3f7, ABISELECT(112,76), "S6733C3.s6733c3f7");
  }
}
static Arrange_To_Call_Me vS6733C3(Test_S6733C3, "S6733C3", ABISELECT(120,84));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6733C1  : S6733C2 {
  ::S6733C3 s6733c1f0;
  virtual void  v1(); // _ZN7S6733C12v1Ev
  virtual void  v2(); // _ZN7S6733C12v2Ev
  ~S6733C1(); // tgen
  S6733C1(); // tgen
};
//SIG(1 S6733C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC7{ m FC8{ m FL[2]}} Fi FC9{ m Fp Fi FC10{ m}} Fp[2] Fi[2]}}


void  S6733C1 ::v1(){vfunc_called(this, "_ZN7S6733C12v1Ev");}
void  S6733C1 ::v2(){vfunc_called(this, "_ZN7S6733C12v2Ev");}
S6733C1 ::~S6733C1(){ note_dtor("S6733C1", this);} // tgen
S6733C1 ::S6733C1(){ note_ctor("S6733C1", this);} // tgen

static void Test_S6733C1()
{
  extern Class_Descriptor cd_S6733C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S6733C1, buf);
    S6733C1 *dp, &lv = *(dp=new (buf) S6733C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S6733C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6733C1)");
    check_base_class_offset(lv, (S6733C2*), 0, "S6733C1");
    check_field_offset(lv, s6733c1f0, ABISELECT(8,4), "S6733C1.s6733c1f0");
    test_class_info(&lv, &cd_S6733C1);
    dp->~S6733C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6733C1(Test_S6733C1, "S6733C1", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN7S6733C1C1Ev();
extern void _ZN7S6733C1D1Ev();
Name_Map name_map_S6733C1[] = {
  NSPAIR(_ZN7S6733C1C1Ev),
  NSPAIR(_ZN7S6733C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6733C2;
extern VTBL_ENTRY _ZTI7S6733C2[];
extern  VTBL_ENTRY _ZTV7S6733C2[];
static Base_Class bases_S6733C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6733C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6733C1[];
extern void _ZN7S6733C1D1Ev();
extern void _ZN7S6733C1D0Ev();
extern void _ZN7S6733C22v3Ev();
extern void _ZN7S6733C22v4Ev();
extern void _ZN7S6733C12v1Ev();
extern void _ZN7S6733C12v2Ev();
static  VTBL_ENTRY vtc_S6733C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6733C1[0]),
  (VTBL_ENTRY)&_ZN7S6733C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6733C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6733C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6733C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6733C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6733C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6733C1[];
extern  VTBL_ENTRY _ZTV7S6733C1[];
Class_Descriptor cd_S6733C1 = {  "S6733C1", // class name
  bases_S6733C1, 1,
  &(vtc_S6733C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI7S6733C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6733C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9759C2  {
  void *s9759c2f0;
  ::S6741C9_nt s9759c2f1;
  void *s9759c2f2;
  ::S21925C41 s9759c2f3;
  ::S119C12_nt s9759c2f4;
  ::S119C12_nt s9759c2f5;
  virtual  ~S9759C2(); // _ZN7S9759C2D1Ev
  virtual void  v4(); // _ZN7S9759C22v4Ev
  virtual void  v5(); // _ZN7S9759C22v5Ev
  virtual void  v6(); // _ZN7S9759C22v6Ev
  virtual void  v7(); // _ZN7S9759C22v7Ev
  S9759C2(); // tgen
};
//SIG(-1 S9759C2) C1{ vd v1 v2 v3 v4 Fp FC2{ m Fp Fi FC3{ m}} Fp FC4{ m Fp Fi FC3 FC3} FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} FC5}


 S9759C2 ::~S9759C2(){ note_dtor("S9759C2", this);}
void  S9759C2 ::v4(){vfunc_called(this, "_ZN7S9759C22v4Ev");}
void  S9759C2 ::v5(){vfunc_called(this, "_ZN7S9759C22v5Ev");}
void  S9759C2 ::v6(){vfunc_called(this, "_ZN7S9759C22v6Ev");}
void  S9759C2 ::v7(){vfunc_called(this, "_ZN7S9759C22v7Ev");}
S9759C2 ::S9759C2(){ note_ctor("S9759C2", this);} // tgen

static void Test_S9759C2()
{
  extern Class_Descriptor cd_S9759C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S9759C2, buf);
    S9759C2 *dp, &lv = *(dp=new (buf) S9759C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S9759C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9759C2)");
    check_field_offset(lv, s9759c2f0, ABISELECT(8,4), "S9759C2.s9759c2f0");
    check_field_offset(lv, s9759c2f1, ABISELECT(16,8), "S9759C2.s9759c2f1");
    check_field_offset(lv, s9759c2f2, ABISELECT(32,20), "S9759C2.s9759c2f2");
    check_field_offset(lv, s9759c2f3, ABISELECT(40,24), "S9759C2.s9759c2f3");
    check_field_offset(lv, s9759c2f4, ABISELECT(56,36), "S9759C2.s9759c2f4");
    check_field_offset(lv, s9759c2f5, ABISELECT(80,52), "S9759C2.s9759c2f5");
    test_class_info(&lv, &cd_S9759C2);
    dp->~S9759C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9759C2(Test_S9759C2, "S9759C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S9759C2C1Ev();
extern void _ZN7S9759C2D1Ev();
Name_Map name_map_S9759C2[] = {
  NSPAIR(_ZN7S9759C2C1Ev),
  NSPAIR(_ZN7S9759C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9759C2[];
extern void _ZN7S9759C2D1Ev();
extern void _ZN7S9759C2D0Ev();
extern void _ZN7S9759C22v4Ev();
extern void _ZN7S9759C22v5Ev();
extern void _ZN7S9759C22v6Ev();
extern void _ZN7S9759C22v7Ev();
static  VTBL_ENTRY vtc_S9759C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9759C2[0]),
  (VTBL_ENTRY)&_ZN7S9759C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9759C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9759C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9759C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9759C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9759C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9759C2[];
extern  VTBL_ENTRY _ZTV7S9759C2[];
Class_Descriptor cd_S9759C2 = {  "S9759C2", // class name
  0,0,//no base classes
  &(vtc_S9759C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S9759C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9759C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9759C1  : S9759C2 {
  int s9759c1f0;
  virtual void  v1(); // _ZN7S9759C12v1Ev
  virtual void  v2(); // _ZN7S9759C12v2Ev
  virtual void  v3(); // _ZN7S9759C12v3Ev
  ~S9759C1(); // tgen
  S9759C1(); // tgen
};
//SIG(1 S9759C1) C1{ BC2{ vd v4 v5 v6 v7 Fp FC3{ m Fp Fi FC4{ m}} Fp FC5{ m Fp Fi FC4 FC4} FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} FC6} v1 v2 v3 Fi}


void  S9759C1 ::v1(){vfunc_called(this, "_ZN7S9759C12v1Ev");}
void  S9759C1 ::v2(){vfunc_called(this, "_ZN7S9759C12v2Ev");}
void  S9759C1 ::v3(){vfunc_called(this, "_ZN7S9759C12v3Ev");}
S9759C1 ::~S9759C1(){ note_dtor("S9759C1", this);} // tgen
S9759C1 ::S9759C1(){ note_ctor("S9759C1", this);} // tgen

static void Test_S9759C1()
{
  extern Class_Descriptor cd_S9759C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S9759C1, buf);
    S9759C1 *dp, &lv = *(dp=new (buf) S9759C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S9759C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9759C1)");
    check_base_class_offset(lv, (S9759C2*), 0, "S9759C1");
    check_field_offset(lv, s9759c1f0, ABISELECT(104,68), "S9759C1.s9759c1f0");
    test_class_info(&lv, &cd_S9759C1);
    dp->~S9759C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9759C1(Test_S9759C1, "S9759C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S9759C1C1Ev();
extern void _ZN7S9759C1D1Ev();
Name_Map name_map_S9759C1[] = {
  NSPAIR(_ZN7S9759C1C1Ev),
  NSPAIR(_ZN7S9759C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9759C2;
extern VTBL_ENTRY _ZTI7S9759C2[];
extern  VTBL_ENTRY _ZTV7S9759C2[];
static Base_Class bases_S9759C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9759C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9759C1[];
extern void _ZN7S9759C1D1Ev();
extern void _ZN7S9759C1D0Ev();
extern void _ZN7S9759C22v4Ev();
extern void _ZN7S9759C22v5Ev();
extern void _ZN7S9759C22v6Ev();
extern void _ZN7S9759C22v7Ev();
extern void _ZN7S9759C12v1Ev();
extern void _ZN7S9759C12v2Ev();
extern void _ZN7S9759C12v3Ev();
static  VTBL_ENTRY vtc_S9759C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9759C1[0]),
  (VTBL_ENTRY)&_ZN7S9759C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9759C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9759C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9759C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9759C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9759C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9759C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9759C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9759C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9759C1[];
extern  VTBL_ENTRY _ZTV7S9759C1[];
Class_Descriptor cd_S9759C1 = {  "S9759C1", // class name
  bases_S9759C1, 1,
  &(vtc_S9759C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S9759C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9759C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6835C2  {
  virtual  ~S6835C2(); // _ZN7S6835C2D1Ev
  virtual void  v4(); // _ZN7S6835C22v4Ev
  virtual void  v5(); // _ZN7S6835C22v5Ev
  virtual void  v6(); // _ZN7S6835C22v6Ev
  S6835C2(); // tgen
};
//SIG(-1 S6835C2) C1{ vd v1 v2 v3}


 S6835C2 ::~S6835C2(){ note_dtor("S6835C2", this);}
void  S6835C2 ::v4(){vfunc_called(this, "_ZN7S6835C22v4Ev");}
void  S6835C2 ::v5(){vfunc_called(this, "_ZN7S6835C22v5Ev");}
void  S6835C2 ::v6(){vfunc_called(this, "_ZN7S6835C22v6Ev");}
S6835C2 ::S6835C2(){ note_ctor("S6835C2", this);} // tgen

static void Test_S6835C2()
{
  extern Class_Descriptor cd_S6835C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6835C2, buf);
    S6835C2 *dp, &lv = *(dp=new (buf) S6835C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6835C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6835C2)");
    test_class_info(&lv, &cd_S6835C2);
    dp->~S6835C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6835C2(Test_S6835C2, "S6835C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6835C2C1Ev();
extern void _ZN7S6835C2D1Ev();
Name_Map name_map_S6835C2[] = {
  NSPAIR(_ZN7S6835C2C1Ev),
  NSPAIR(_ZN7S6835C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6835C2[];
extern void _ZN7S6835C2D1Ev();
extern void _ZN7S6835C2D0Ev();
extern void _ZN7S6835C22v4Ev();
extern void _ZN7S6835C22v5Ev();
extern void _ZN7S6835C22v6Ev();
static  VTBL_ENTRY vtc_S6835C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6835C2[0]),
  (VTBL_ENTRY)&_ZN7S6835C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6835C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6835C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6835C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6835C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S6835C2[];
extern  VTBL_ENTRY _ZTV7S6835C2[];
Class_Descriptor cd_S6835C2 = {  "S6835C2", // class name
  0,0,//no base classes
  &(vtc_S6835C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6835C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6835C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6835C3  {
  void *s6835c3f0;
  ::S119C12_nt s6835c3f1;
  ::S119C12_nt s6835c3f2;
  ::S6741C7_nt s6835c3f3;
  void *s6835c3f4[8];
  void  mf6835c3(); // _ZN7S6835C38mf6835c3Ev
};
//SIG(-1 S6835C3) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC5{ m FC6{ m FL[2]}} Fp[8]}


void  S6835C3 ::mf6835c3(){}

static void Test_S6835C3()
{
  {
    init_simple_test("S6835C3");
    S6835C3 lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S6835C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6835C3)");
    check_field_offset(lv, s6835c3f0, 0, "S6835C3.s6835c3f0");
    check_field_offset(lv, s6835c3f1, ABISELECT(8,4), "S6835C3.s6835c3f1");
    check_field_offset(lv, s6835c3f2, ABISELECT(32,20), "S6835C3.s6835c3f2");
    check_field_offset(lv, s6835c3f3, ABISELECT(56,36), "S6835C3.s6835c3f3");
    check_field_offset(lv, s6835c3f4, ABISELECT(72,52), "S6835C3.s6835c3f4");
  }
}
static Arrange_To_Call_Me vS6835C3(Test_S6835C3, "S6835C3", ABISELECT(136,84));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6835C1  : S6835C2 {
  ::S6835C3 s6835c1f0;
  void *s6835c1f1;
  virtual  ~S6835C1(); // _ZN7S6835C1D1Ev
  virtual void  v1(); // _ZN7S6835C12v1Ev
  virtual void  v2(); // _ZN7S6835C12v2Ev
  virtual void  v3(); // _ZN7S6835C12v3Ev
  S6835C1(); // tgen
};
//SIG(1 S6835C1) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC7{ m FC8{ m FL[2]}} Fp[8]} Fp}


 S6835C1 ::~S6835C1(){ note_dtor("S6835C1", this);}
void  S6835C1 ::v1(){vfunc_called(this, "_ZN7S6835C12v1Ev");}
void  S6835C1 ::v2(){vfunc_called(this, "_ZN7S6835C12v2Ev");}
void  S6835C1 ::v3(){vfunc_called(this, "_ZN7S6835C12v3Ev");}
S6835C1 ::S6835C1(){ note_ctor("S6835C1", this);} // tgen

static void Test_S6835C1()
{
  extern Class_Descriptor cd_S6835C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,24)];
    init_test(&cd_S6835C1, buf);
    S6835C1 *dp, &lv = *(dp=new (buf) S6835C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,92), "sizeof(S6835C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6835C1)");
    check_base_class_offset(lv, (S6835C2*), 0, "S6835C1");
    check_field_offset(lv, s6835c1f0, ABISELECT(8,4), "S6835C1.s6835c1f0");
    check_field_offset(lv, s6835c1f1, ABISELECT(144,88), "S6835C1.s6835c1f1");
    test_class_info(&lv, &cd_S6835C1);
    dp->~S6835C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6835C1(Test_S6835C1, "S6835C1", ABISELECT(152,92));

#else // __cplusplus

extern void _ZN7S6835C1C1Ev();
extern void _ZN7S6835C1D1Ev();
Name_Map name_map_S6835C1[] = {
  NSPAIR(_ZN7S6835C1C1Ev),
  NSPAIR(_ZN7S6835C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6835C2;
extern VTBL_ENTRY _ZTI7S6835C2[];
extern  VTBL_ENTRY _ZTV7S6835C2[];
static Base_Class bases_S6835C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6835C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6835C1[];
extern void _ZN7S6835C1D1Ev();
extern void _ZN7S6835C1D0Ev();
extern void _ZN7S6835C22v4Ev();
extern void _ZN7S6835C22v5Ev();
extern void _ZN7S6835C22v6Ev();
extern void _ZN7S6835C12v1Ev();
extern void _ZN7S6835C12v2Ev();
extern void _ZN7S6835C12v3Ev();
static  VTBL_ENTRY vtc_S6835C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6835C1[0]),
  (VTBL_ENTRY)&_ZN7S6835C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6835C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6835C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6835C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6835C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6835C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6835C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6835C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6835C1[];
extern  VTBL_ENTRY _ZTV7S6835C1[];
Class_Descriptor cd_S6835C1 = {  "S6835C1", // class name
  bases_S6835C1, 1,
  &(vtc_S6835C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,92), // object size
  NSPAIRA(_ZTI7S6835C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6835C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6743C2  {
  virtual  ~S6743C2(); // _ZN7S6743C2D1Ev
  virtual void  v3(); // _ZN7S6743C22v3Ev
  virtual void  v4(); // _ZN7S6743C22v4Ev
  S6743C2(); // tgen
};
//SIG(-1 S6743C2) C1{ vd v1 v2}


 S6743C2 ::~S6743C2(){ note_dtor("S6743C2", this);}
void  S6743C2 ::v3(){vfunc_called(this, "_ZN7S6743C22v3Ev");}
void  S6743C2 ::v4(){vfunc_called(this, "_ZN7S6743C22v4Ev");}
S6743C2 ::S6743C2(){ note_ctor("S6743C2", this);} // tgen

static void Test_S6743C2()
{
  extern Class_Descriptor cd_S6743C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6743C2, buf);
    S6743C2 *dp, &lv = *(dp=new (buf) S6743C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6743C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6743C2)");
    test_class_info(&lv, &cd_S6743C2);
    dp->~S6743C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6743C2(Test_S6743C2, "S6743C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6743C2C1Ev();
extern void _ZN7S6743C2D1Ev();
Name_Map name_map_S6743C2[] = {
  NSPAIR(_ZN7S6743C2C1Ev),
  NSPAIR(_ZN7S6743C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6743C2[];
extern void _ZN7S6743C2D1Ev();
extern void _ZN7S6743C2D0Ev();
extern void _ZN7S6743C22v3Ev();
extern void _ZN7S6743C22v4Ev();
static  VTBL_ENTRY vtc_S6743C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6743C2[0]),
  (VTBL_ENTRY)&_ZN7S6743C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6743C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6743C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6743C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6743C2[];
extern  VTBL_ENTRY _ZTV7S6743C2[];
Class_Descriptor cd_S6743C2 = {  "S6743C2", // class name
  0,0,//no base classes
  &(vtc_S6743C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6743C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6743C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6743C3  {
  void *s6743c3f0;
  ::S119C12_nt s6743c3f1;
  ::S119C12_nt s6743c3f2;
  ::S6741C7_nt s6743c3f3;
  int s6743c3f4[2];
  ::S6741C9_nt s6743c3f5;
  void *s6743c3f6[4];
  void  mf6743c3(); // _ZN7S6743C38mf6743c3Ev
};
//SIG(-1 S6743C3) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC5{ m FC6{ m FL[2]}} Fi[2] FC7{ m Fp Fi FC8{ m}} Fp[4]}


void  S6743C3 ::mf6743c3(){}

static void Test_S6743C3()
{
  {
    init_simple_test("S6743C3");
    S6743C3 lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S6743C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6743C3)");
    check_field_offset(lv, s6743c3f0, 0, "S6743C3.s6743c3f0");
    check_field_offset(lv, s6743c3f1, ABISELECT(8,4), "S6743C3.s6743c3f1");
    check_field_offset(lv, s6743c3f2, ABISELECT(32,20), "S6743C3.s6743c3f2");
    check_field_offset(lv, s6743c3f3, ABISELECT(56,36), "S6743C3.s6743c3f3");
    check_field_offset(lv, s6743c3f4, ABISELECT(72,52), "S6743C3.s6743c3f4");
    check_field_offset(lv, s6743c3f5, ABISELECT(80,60), "S6743C3.s6743c3f5");
    check_field_offset(lv, s6743c3f6, ABISELECT(96,72), "S6743C3.s6743c3f6");
  }
}
static Arrange_To_Call_Me vS6743C3(Test_S6743C3, "S6743C3", ABISELECT(128,88));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6743C1  : S6743C2 {
  ::S6743C3 s6743c1f0;
  virtual void  v1(); // _ZN7S6743C12v1Ev
  virtual void  v2(); // _ZN7S6743C12v2Ev
  ~S6743C1(); // tgen
  S6743C1(); // tgen
};
//SIG(1 S6743C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC7{ m FC8{ m FL[2]}} Fi[2] FC9{ m Fp Fi FC10{ m}} Fp[4]}}


void  S6743C1 ::v1(){vfunc_called(this, "_ZN7S6743C12v1Ev");}
void  S6743C1 ::v2(){vfunc_called(this, "_ZN7S6743C12v2Ev");}
S6743C1 ::~S6743C1(){ note_dtor("S6743C1", this);} // tgen
S6743C1 ::S6743C1(){ note_ctor("S6743C1", this);} // tgen

static void Test_S6743C1()
{
  extern Class_Descriptor cd_S6743C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,24)];
    init_test(&cd_S6743C1, buf);
    S6743C1 *dp, &lv = *(dp=new (buf) S6743C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S6743C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6743C1)");
    check_base_class_offset(lv, (S6743C2*), 0, "S6743C1");
    check_field_offset(lv, s6743c1f0, ABISELECT(8,4), "S6743C1.s6743c1f0");
    test_class_info(&lv, &cd_S6743C1);
    dp->~S6743C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6743C1(Test_S6743C1, "S6743C1", ABISELECT(136,92));

#else // __cplusplus

extern void _ZN7S6743C1C1Ev();
extern void _ZN7S6743C1D1Ev();
Name_Map name_map_S6743C1[] = {
  NSPAIR(_ZN7S6743C1C1Ev),
  NSPAIR(_ZN7S6743C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6743C2;
extern VTBL_ENTRY _ZTI7S6743C2[];
extern  VTBL_ENTRY _ZTV7S6743C2[];
static Base_Class bases_S6743C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6743C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6743C1[];
extern void _ZN7S6743C1D1Ev();
extern void _ZN7S6743C1D0Ev();
extern void _ZN7S6743C22v3Ev();
extern void _ZN7S6743C22v4Ev();
extern void _ZN7S6743C12v1Ev();
extern void _ZN7S6743C12v2Ev();
static  VTBL_ENTRY vtc_S6743C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6743C1[0]),
  (VTBL_ENTRY)&_ZN7S6743C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6743C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6743C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6743C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6743C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6743C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6743C1[];
extern  VTBL_ENTRY _ZTV7S6743C1[];
Class_Descriptor cd_S6743C1 = {  "S6743C1", // class name
  bases_S6743C1, 1,
  &(vtc_S6743C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,92), // object size
  NSPAIRA(_ZTI7S6743C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6743C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9439C2  {
  void *s9439c2f0;
  ::S6741C9_nt s9439c2f1;
  void *s9439c2f2;
  ::S21925C41 s9439c2f3;
  ::S119C12_nt s9439c2f4;
  ::S119C12_nt s9439c2f5;
  virtual  ~S9439C2(); // _ZN7S9439C2D1Ev
  virtual void  v3(); // _ZN7S9439C22v3Ev
  virtual void  v4(); // _ZN7S9439C22v4Ev
  virtual void  v5(); // _ZN7S9439C22v5Ev
  virtual void  v6(); // _ZN7S9439C22v6Ev
  S9439C2(); // tgen
};
//SIG(-1 S9439C2) C1{ vd v1 v2 v3 v4 Fp FC2{ m Fp Fi FC3{ m}} Fp FC4{ m Fp Fi FC3 FC3} FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} FC5}


 S9439C2 ::~S9439C2(){ note_dtor("S9439C2", this);}
void  S9439C2 ::v3(){vfunc_called(this, "_ZN7S9439C22v3Ev");}
void  S9439C2 ::v4(){vfunc_called(this, "_ZN7S9439C22v4Ev");}
void  S9439C2 ::v5(){vfunc_called(this, "_ZN7S9439C22v5Ev");}
void  S9439C2 ::v6(){vfunc_called(this, "_ZN7S9439C22v6Ev");}
S9439C2 ::S9439C2(){ note_ctor("S9439C2", this);} // tgen

static void Test_S9439C2()
{
  extern Class_Descriptor cd_S9439C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S9439C2, buf);
    S9439C2 *dp, &lv = *(dp=new (buf) S9439C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S9439C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9439C2)");
    check_field_offset(lv, s9439c2f0, ABISELECT(8,4), "S9439C2.s9439c2f0");
    check_field_offset(lv, s9439c2f1, ABISELECT(16,8), "S9439C2.s9439c2f1");
    check_field_offset(lv, s9439c2f2, ABISELECT(32,20), "S9439C2.s9439c2f2");
    check_field_offset(lv, s9439c2f3, ABISELECT(40,24), "S9439C2.s9439c2f3");
    check_field_offset(lv, s9439c2f4, ABISELECT(56,36), "S9439C2.s9439c2f4");
    check_field_offset(lv, s9439c2f5, ABISELECT(80,52), "S9439C2.s9439c2f5");
    test_class_info(&lv, &cd_S9439C2);
    dp->~S9439C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9439C2(Test_S9439C2, "S9439C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S9439C2C1Ev();
extern void _ZN7S9439C2D1Ev();
Name_Map name_map_S9439C2[] = {
  NSPAIR(_ZN7S9439C2C1Ev),
  NSPAIR(_ZN7S9439C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9439C2[];
extern void _ZN7S9439C2D1Ev();
extern void _ZN7S9439C2D0Ev();
extern void _ZN7S9439C22v3Ev();
extern void _ZN7S9439C22v4Ev();
extern void _ZN7S9439C22v5Ev();
extern void _ZN7S9439C22v6Ev();
static  VTBL_ENTRY vtc_S9439C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9439C2[0]),
  (VTBL_ENTRY)&_ZN7S9439C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9439C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9439C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9439C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9439C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9439C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9439C2[];
extern  VTBL_ENTRY _ZTV7S9439C2[];
Class_Descriptor cd_S9439C2 = {  "S9439C2", // class name
  0,0,//no base classes
  &(vtc_S9439C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S9439C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9439C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9439C1  : S9439C2 {
  char s9439c1f0;
  virtual void  v1(); // _ZN7S9439C12v1Ev
  virtual void  v2(); // _ZN7S9439C12v2Ev
  ~S9439C1(); // tgen
  S9439C1(); // tgen
};
//SIG(1 S9439C1) C1{ BC2{ vd v3 v4 v5 v6 Fp FC3{ m Fp Fi FC4{ m}} Fp FC5{ m Fp Fi FC4 FC4} FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} FC6} v1 v2 Fc}


void  S9439C1 ::v1(){vfunc_called(this, "_ZN7S9439C12v1Ev");}
void  S9439C1 ::v2(){vfunc_called(this, "_ZN7S9439C12v2Ev");}
S9439C1 ::~S9439C1(){ note_dtor("S9439C1", this);} // tgen
S9439C1 ::S9439C1(){ note_ctor("S9439C1", this);} // tgen

static void Test_S9439C1()
{
  extern Class_Descriptor cd_S9439C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S9439C1, buf);
    S9439C1 *dp, &lv = *(dp=new (buf) S9439C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S9439C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9439C1)");
    check_base_class_offset(lv, (S9439C2*), 0, "S9439C1");
    check_field_offset(lv, s9439c1f0, ABISELECT(104,68), "S9439C1.s9439c1f0");
    test_class_info(&lv, &cd_S9439C1);
    dp->~S9439C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9439C1(Test_S9439C1, "S9439C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S9439C1C1Ev();
extern void _ZN7S9439C1D1Ev();
Name_Map name_map_S9439C1[] = {
  NSPAIR(_ZN7S9439C1C1Ev),
  NSPAIR(_ZN7S9439C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9439C2;
extern VTBL_ENTRY _ZTI7S9439C2[];
extern  VTBL_ENTRY _ZTV7S9439C2[];
static Base_Class bases_S9439C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9439C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9439C1[];
extern void _ZN7S9439C1D1Ev();
extern void _ZN7S9439C1D0Ev();
extern void _ZN7S9439C22v3Ev();
extern void _ZN7S9439C22v4Ev();
extern void _ZN7S9439C22v5Ev();
extern void _ZN7S9439C22v6Ev();
extern void _ZN7S9439C12v1Ev();
extern void _ZN7S9439C12v2Ev();
static  VTBL_ENTRY vtc_S9439C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9439C1[0]),
  (VTBL_ENTRY)&_ZN7S9439C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9439C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9439C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9439C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9439C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9439C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9439C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9439C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9439C1[];
extern  VTBL_ENTRY _ZTV7S9439C1[];
Class_Descriptor cd_S9439C1 = {  "S9439C1", // class name
  bases_S9439C1, 1,
  &(vtc_S9439C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S9439C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9439C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8112C1  : S119C7_nt {
  ::S119C15_nt s8112c1f0;
  char s8112c1f1;
  virtual  ~S8112C1(); // _ZN7S8112C1D1Ev
  S8112C1(); // tgen
};
//SIG(1 S8112C1) C1{ BC2{ vd m Fi} vd FC3{ m Fi FL[2] Fc Fi FC4{ m Fp Fi FC5{ m}} FC4 FC6{ BC7{ m Fp Fi[2] FC8{ m Fp}}}} Fc}


 S8112C1 ::~S8112C1(){ note_dtor("S8112C1", this);}
S8112C1 ::S8112C1(){ note_ctor("S8112C1", this);} // tgen

static void Test_S8112C1()
{
  extern Class_Descriptor cd_S8112C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,21)];
    init_test(&cd_S8112C1, buf);
    S8112C1 *dp, &lv = *(dp=new (buf) S8112C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,80), "sizeof(S8112C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8112C1)");
    check_base_class_offset(lv, (S119C7_nt*), 0, "S8112C1");
    check_field_offset(lv, s8112c1f0, ABISELECT(16,8), "S8112C1.s8112c1f0");
    check_field_offset(lv, s8112c1f1, ABISELECT(104,76), "S8112C1.s8112c1f1");
    test_class_info(&lv, &cd_S8112C1);
    dp->~S8112C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8112C1(Test_S8112C1, "S8112C1", ABISELECT(112,80));

#else // __cplusplus

extern void _ZN7S8112C1C1Ev();
extern void _ZN7S8112C1D1Ev();
Name_Map name_map_S8112C1[] = {
  NSPAIR(_ZN7S8112C1C1Ev),
  NSPAIR(_ZN7S8112C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S119C7_nt;
extern VTBL_ENTRY _ZTI9S119C7_nt[];
extern  VTBL_ENTRY _ZTV9S119C7_nt[];
static Base_Class bases_S8112C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8112C1[];
extern void _ZN7S8112C1D1Ev();
extern void _ZN7S8112C1D0Ev();
static  VTBL_ENTRY vtc_S8112C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8112C1[0]),
  (VTBL_ENTRY)&_ZN7S8112C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8112C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8112C1[];
extern  VTBL_ENTRY _ZTV7S8112C1[];
Class_Descriptor cd_S8112C1 = {  "S8112C1", // class name
  bases_S8112C1, 1,
  &(vtc_S8112C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,80), // object size
  NSPAIRA(_ZTI7S8112C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8112C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6703C2  {
  virtual  ~S6703C2(); // _ZN7S6703C2D1Ev
  virtual void  v3(); // _ZN7S6703C22v3Ev
  virtual void  v4(); // _ZN7S6703C22v4Ev
  virtual void  v5(); // _ZN7S6703C22v5Ev
  S6703C2(); // tgen
};
//SIG(-1 S6703C2) C1{ vd v1 v2 v3}


 S6703C2 ::~S6703C2(){ note_dtor("S6703C2", this);}
void  S6703C2 ::v3(){vfunc_called(this, "_ZN7S6703C22v3Ev");}
void  S6703C2 ::v4(){vfunc_called(this, "_ZN7S6703C22v4Ev");}
void  S6703C2 ::v5(){vfunc_called(this, "_ZN7S6703C22v5Ev");}
S6703C2 ::S6703C2(){ note_ctor("S6703C2", this);} // tgen

static void Test_S6703C2()
{
  extern Class_Descriptor cd_S6703C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6703C2, buf);
    S6703C2 *dp, &lv = *(dp=new (buf) S6703C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6703C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6703C2)");
    test_class_info(&lv, &cd_S6703C2);
    dp->~S6703C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6703C2(Test_S6703C2, "S6703C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6703C2C1Ev();
extern void _ZN7S6703C2D1Ev();
Name_Map name_map_S6703C2[] = {
  NSPAIR(_ZN7S6703C2C1Ev),
  NSPAIR(_ZN7S6703C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6703C2[];
extern void _ZN7S6703C2D1Ev();
extern void _ZN7S6703C2D0Ev();
extern void _ZN7S6703C22v3Ev();
extern void _ZN7S6703C22v4Ev();
extern void _ZN7S6703C22v5Ev();
static  VTBL_ENTRY vtc_S6703C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6703C2[0]),
  (VTBL_ENTRY)&_ZN7S6703C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6703C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6703C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6703C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6703C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S6703C2[];
extern  VTBL_ENTRY _ZTV7S6703C2[];
Class_Descriptor cd_S6703C2 = {  "S6703C2", // class name
  0,0,//no base classes
  &(vtc_S6703C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6703C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6703C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6703C1  : S6703C2 {
  ::S3156C4 s6703c1f0;
  virtual void  v1(); // _ZN7S6703C12v1Ev
  virtual void  v2(); // _ZN7S6703C12v2Ev
  ~S6703C1(); // tgen
  S6703C1(); // tgen
};
//SIG(1 S6703C1) C1{ BC2{ vd v3 v4 v5} v1 v2 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC4 FC7{ m FC8{ m FL[2]}} Fp[2]}}


void  S6703C1 ::v1(){vfunc_called(this, "_ZN7S6703C12v1Ev");}
void  S6703C1 ::v2(){vfunc_called(this, "_ZN7S6703C12v2Ev");}
S6703C1 ::~S6703C1(){ note_dtor("S6703C1", this);} // tgen
S6703C1 ::S6703C1(){ note_ctor("S6703C1", this);} // tgen

static void Test_S6703C1()
{
  extern Class_Descriptor cd_S6703C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S6703C1, buf);
    S6703C1 *dp, &lv = *(dp=new (buf) S6703C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S6703C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6703C1)");
    check_base_class_offset(lv, (S6703C2*), 0, "S6703C1");
    check_field_offset(lv, s6703c1f0, ABISELECT(8,4), "S6703C1.s6703c1f0");
    test_class_info(&lv, &cd_S6703C1);
    dp->~S6703C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6703C1(Test_S6703C1, "S6703C1", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN7S6703C1C1Ev();
extern void _ZN7S6703C1D1Ev();
Name_Map name_map_S6703C1[] = {
  NSPAIR(_ZN7S6703C1C1Ev),
  NSPAIR(_ZN7S6703C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6703C2;
extern VTBL_ENTRY _ZTI7S6703C2[];
extern  VTBL_ENTRY _ZTV7S6703C2[];
static Base_Class bases_S6703C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6703C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6703C1[];
extern void _ZN7S6703C1D1Ev();
extern void _ZN7S6703C1D0Ev();
extern void _ZN7S6703C22v3Ev();
extern void _ZN7S6703C22v4Ev();
extern void _ZN7S6703C22v5Ev();
extern void _ZN7S6703C12v1Ev();
extern void _ZN7S6703C12v2Ev();
static  VTBL_ENTRY vtc_S6703C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6703C1[0]),
  (VTBL_ENTRY)&_ZN7S6703C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6703C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6703C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6703C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6703C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6703C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6703C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6703C1[];
extern  VTBL_ENTRY _ZTV7S6703C1[];
Class_Descriptor cd_S6703C1 = {  "S6703C1", // class name
  bases_S6703C1, 1,
  &(vtc_S6703C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI7S6703C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6703C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9440C2  {
  void *s9440c2f0;
  ::S6741C9_nt s9440c2f1;
  void *s9440c2f2;
  ::S21925C41 s9440c2f3;
  ::S119C12_nt s9440c2f4;
  ::S119C12_nt s9440c2f5;
  virtual  ~S9440C2(); // _ZN7S9440C2D1Ev
  virtual void  v3(); // _ZN7S9440C22v3Ev
  virtual void  v4(); // _ZN7S9440C22v4Ev
  virtual void  v5(); // _ZN7S9440C22v5Ev
  virtual void  v6(); // _ZN7S9440C22v6Ev
  S9440C2(); // tgen
};
//SIG(-1 S9440C2) C1{ vd v1 v2 v3 v4 Fp FC2{ m Fp Fi FC3{ m}} Fp FC4{ m Fp Fi FC3 FC3} FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} FC5}


 S9440C2 ::~S9440C2(){ note_dtor("S9440C2", this);}
void  S9440C2 ::v3(){vfunc_called(this, "_ZN7S9440C22v3Ev");}
void  S9440C2 ::v4(){vfunc_called(this, "_ZN7S9440C22v4Ev");}
void  S9440C2 ::v5(){vfunc_called(this, "_ZN7S9440C22v5Ev");}
void  S9440C2 ::v6(){vfunc_called(this, "_ZN7S9440C22v6Ev");}
S9440C2 ::S9440C2(){ note_ctor("S9440C2", this);} // tgen

static void Test_S9440C2()
{
  extern Class_Descriptor cd_S9440C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S9440C2, buf);
    S9440C2 *dp, &lv = *(dp=new (buf) S9440C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S9440C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9440C2)");
    check_field_offset(lv, s9440c2f0, ABISELECT(8,4), "S9440C2.s9440c2f0");
    check_field_offset(lv, s9440c2f1, ABISELECT(16,8), "S9440C2.s9440c2f1");
    check_field_offset(lv, s9440c2f2, ABISELECT(32,20), "S9440C2.s9440c2f2");
    check_field_offset(lv, s9440c2f3, ABISELECT(40,24), "S9440C2.s9440c2f3");
    check_field_offset(lv, s9440c2f4, ABISELECT(56,36), "S9440C2.s9440c2f4");
    check_field_offset(lv, s9440c2f5, ABISELECT(80,52), "S9440C2.s9440c2f5");
    test_class_info(&lv, &cd_S9440C2);
    dp->~S9440C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9440C2(Test_S9440C2, "S9440C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S9440C2C1Ev();
extern void _ZN7S9440C2D1Ev();
Name_Map name_map_S9440C2[] = {
  NSPAIR(_ZN7S9440C2C1Ev),
  NSPAIR(_ZN7S9440C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9440C2[];
extern void _ZN7S9440C2D1Ev();
extern void _ZN7S9440C2D0Ev();
extern void _ZN7S9440C22v3Ev();
extern void _ZN7S9440C22v4Ev();
extern void _ZN7S9440C22v5Ev();
extern void _ZN7S9440C22v6Ev();
static  VTBL_ENTRY vtc_S9440C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9440C2[0]),
  (VTBL_ENTRY)&_ZN7S9440C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9440C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9440C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9440C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9440C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9440C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9440C2[];
extern  VTBL_ENTRY _ZTV7S9440C2[];
Class_Descriptor cd_S9440C2 = {  "S9440C2", // class name
  0,0,//no base classes
  &(vtc_S9440C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S9440C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9440C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9440C1  : S9440C2 {
  virtual void  v1(); // _ZN7S9440C12v1Ev
  virtual void  v2(); // _ZN7S9440C12v2Ev
  ~S9440C1(); // tgen
  S9440C1(); // tgen
};
//SIG(1 S9440C1) C1{ BC2{ vd v3 v4 v5 v6 Fp FC3{ m Fp Fi FC4{ m}} Fp FC5{ m Fp Fi FC4 FC4} FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} FC6} v1 v2}


void  S9440C1 ::v1(){vfunc_called(this, "_ZN7S9440C12v1Ev");}
void  S9440C1 ::v2(){vfunc_called(this, "_ZN7S9440C12v2Ev");}
S9440C1 ::~S9440C1(){ note_dtor("S9440C1", this);} // tgen
S9440C1 ::S9440C1(){ note_ctor("S9440C1", this);} // tgen

static void Test_S9440C1()
{
  extern Class_Descriptor cd_S9440C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S9440C1, buf);
    S9440C1 *dp, &lv = *(dp=new (buf) S9440C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S9440C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9440C1)");
    check_base_class_offset(lv, (S9440C2*), 0, "S9440C1");
    test_class_info(&lv, &cd_S9440C1);
    dp->~S9440C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9440C1(Test_S9440C1, "S9440C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S9440C1C1Ev();
extern void _ZN7S9440C1D1Ev();
Name_Map name_map_S9440C1[] = {
  NSPAIR(_ZN7S9440C1C1Ev),
  NSPAIR(_ZN7S9440C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9440C2;
extern VTBL_ENTRY _ZTI7S9440C2[];
extern  VTBL_ENTRY _ZTV7S9440C2[];
static Base_Class bases_S9440C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9440C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9440C1[];
extern void _ZN7S9440C1D1Ev();
extern void _ZN7S9440C1D0Ev();
extern void _ZN7S9440C22v3Ev();
extern void _ZN7S9440C22v4Ev();
extern void _ZN7S9440C22v5Ev();
extern void _ZN7S9440C22v6Ev();
extern void _ZN7S9440C12v1Ev();
extern void _ZN7S9440C12v2Ev();
static  VTBL_ENTRY vtc_S9440C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9440C1[0]),
  (VTBL_ENTRY)&_ZN7S9440C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9440C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9440C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9440C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9440C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9440C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9440C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9440C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9440C1[];
extern  VTBL_ENTRY _ZTV7S9440C1[];
Class_Descriptor cd_S9440C1 = {  "S9440C1", // class name
  bases_S9440C1, 1,
  &(vtc_S9440C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S9440C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9440C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10189C2  {
  ::S119C12_nt s10189c2f0;
  void *s10189c2f1;
  int s10189c2f2;
  virtual  ~S10189C2(); // _ZN8S10189C2D1Ev
  virtual void  v8(); // _ZN8S10189C22v8Ev
  virtual void  v9(); // _ZN8S10189C22v9Ev
  virtual void  v10(); // _ZN8S10189C23v10Ev
  virtual void  v11(); // _ZN8S10189C23v11Ev
  virtual void  v12(); // _ZN8S10189C23v12Ev
  virtual void  v13(); // _ZN8S10189C23v13Ev
  virtual void  v14(); // _ZN8S10189C23v14Ev
  S10189C2(); // tgen
};
//SIG(-1 S10189C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S10189C2 ::~S10189C2(){ note_dtor("S10189C2", this);}
void  S10189C2 ::v8(){vfunc_called(this, "_ZN8S10189C22v8Ev");}
void  S10189C2 ::v9(){vfunc_called(this, "_ZN8S10189C22v9Ev");}
void  S10189C2 ::v10(){vfunc_called(this, "_ZN8S10189C23v10Ev");}
void  S10189C2 ::v11(){vfunc_called(this, "_ZN8S10189C23v11Ev");}
void  S10189C2 ::v12(){vfunc_called(this, "_ZN8S10189C23v12Ev");}
void  S10189C2 ::v13(){vfunc_called(this, "_ZN8S10189C23v13Ev");}
void  S10189C2 ::v14(){vfunc_called(this, "_ZN8S10189C23v14Ev");}
S10189C2 ::S10189C2(){ note_ctor("S10189C2", this);} // tgen

static void Test_S10189C2()
{
  extern Class_Descriptor cd_S10189C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S10189C2, buf);
    S10189C2 *dp, &lv = *(dp=new (buf) S10189C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S10189C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10189C2)");
    check_field_offset(lv, s10189c2f0, ABISELECT(8,4), "S10189C2.s10189c2f0");
    check_field_offset(lv, s10189c2f1, ABISELECT(32,20), "S10189C2.s10189c2f1");
    check_field_offset(lv, s10189c2f2, ABISELECT(40,24), "S10189C2.s10189c2f2");
    test_class_info(&lv, &cd_S10189C2);
    dp->~S10189C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10189C2(Test_S10189C2, "S10189C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S10189C2C1Ev();
extern void _ZN8S10189C2D1Ev();
Name_Map name_map_S10189C2[] = {
  NSPAIR(_ZN8S10189C2C1Ev),
  NSPAIR(_ZN8S10189C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10189C2[];
extern void _ZN8S10189C2D1Ev();
extern void _ZN8S10189C2D0Ev();
extern void _ZN8S10189C22v8Ev();
extern void _ZN8S10189C22v9Ev();
extern void _ZN8S10189C23v10Ev();
extern void _ZN8S10189C23v11Ev();
extern void _ZN8S10189C23v12Ev();
extern void _ZN8S10189C23v13Ev();
extern void _ZN8S10189C23v14Ev();
static  VTBL_ENTRY vtc_S10189C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10189C2[0]),
  (VTBL_ENTRY)&_ZN8S10189C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10189C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10189C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10189C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10189C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10189C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10189C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10189C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10189C23v14Ev,
};
extern VTBL_ENTRY _ZTI8S10189C2[];
extern  VTBL_ENTRY _ZTV8S10189C2[];
Class_Descriptor cd_S10189C2 = {  "S10189C2", // class name
  0,0,//no base classes
  &(vtc_S10189C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S10189C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10189C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10189C1  : S10189C2 {
  void *s10189c1f0;
  virtual void  v1(); // _ZN8S10189C12v1Ev
  virtual void  v2(); // _ZN8S10189C12v2Ev
  virtual void  v3(); // _ZN8S10189C12v3Ev
  virtual void  v4(); // _ZN8S10189C12v4Ev
  virtual void  v5(); // _ZN8S10189C12v5Ev
  virtual void  v6(); // _ZN8S10189C12v6Ev
  virtual void  v7(); // _ZN8S10189C12v7Ev
  ~S10189C1(); // tgen
  S10189C1(); // tgen
};
//SIG(1 S10189C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S10189C1 ::v1(){vfunc_called(this, "_ZN8S10189C12v1Ev");}
void  S10189C1 ::v2(){vfunc_called(this, "_ZN8S10189C12v2Ev");}
void  S10189C1 ::v3(){vfunc_called(this, "_ZN8S10189C12v3Ev");}
void  S10189C1 ::v4(){vfunc_called(this, "_ZN8S10189C12v4Ev");}
void  S10189C1 ::v5(){vfunc_called(this, "_ZN8S10189C12v5Ev");}
void  S10189C1 ::v6(){vfunc_called(this, "_ZN8S10189C12v6Ev");}
void  S10189C1 ::v7(){vfunc_called(this, "_ZN8S10189C12v7Ev");}
S10189C1 ::~S10189C1(){ note_dtor("S10189C1", this);} // tgen
S10189C1 ::S10189C1(){ note_ctor("S10189C1", this);} // tgen

static void Test_S10189C1()
{
  extern Class_Descriptor cd_S10189C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S10189C1, buf);
    S10189C1 *dp, &lv = *(dp=new (buf) S10189C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S10189C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10189C1)");
    check_base_class_offset(lv, (S10189C2*), 0, "S10189C1");
    check_field_offset(lv, s10189c1f0, ABISELECT(48,28), "S10189C1.s10189c1f0");
    test_class_info(&lv, &cd_S10189C1);
    dp->~S10189C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10189C1(Test_S10189C1, "S10189C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S10189C1C1Ev();
extern void _ZN8S10189C1D1Ev();
Name_Map name_map_S10189C1[] = {
  NSPAIR(_ZN8S10189C1C1Ev),
  NSPAIR(_ZN8S10189C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10189C2;
extern VTBL_ENTRY _ZTI8S10189C2[];
extern  VTBL_ENTRY _ZTV8S10189C2[];
static Base_Class bases_S10189C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10189C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10189C1[];
extern void _ZN8S10189C1D1Ev();
extern void _ZN8S10189C1D0Ev();
extern void _ZN8S10189C22v8Ev();
extern void _ZN8S10189C22v9Ev();
extern void _ZN8S10189C23v10Ev();
extern void _ZN8S10189C23v11Ev();
extern void _ZN8S10189C23v12Ev();
extern void _ZN8S10189C23v13Ev();
extern void _ZN8S10189C23v14Ev();
extern void _ZN8S10189C12v1Ev();
extern void _ZN8S10189C12v2Ev();
extern void _ZN8S10189C12v3Ev();
extern void _ZN8S10189C12v4Ev();
extern void _ZN8S10189C12v5Ev();
extern void _ZN8S10189C12v6Ev();
extern void _ZN8S10189C12v7Ev();
static  VTBL_ENTRY vtc_S10189C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10189C1[0]),
  (VTBL_ENTRY)&_ZN8S10189C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10189C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10189C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10189C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10189C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10189C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10189C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10189C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10189C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10189C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10189C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10189C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10189C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10189C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10189C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10189C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10189C1[];
extern  VTBL_ENTRY _ZTV8S10189C1[];
Class_Descriptor cd_S10189C1 = {  "S10189C1", // class name
  bases_S10189C1, 1,
  &(vtc_S10189C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S10189C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10189C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10123C2  {
  ::S119C12_nt s10123c2f0;
  void *s10123c2f1;
  int s10123c2f2;
  virtual  ~S10123C2(); // _ZN8S10123C2D1Ev
  virtual void  v7(); // _ZN8S10123C22v7Ev
  virtual void  v8(); // _ZN8S10123C22v8Ev
  virtual void  v9(); // _ZN8S10123C22v9Ev
  virtual void  v10(); // _ZN8S10123C23v10Ev
  virtual void  v11(); // _ZN8S10123C23v11Ev
  virtual void  v12(); // _ZN8S10123C23v12Ev
  virtual void  v13(); // _ZN8S10123C23v13Ev
  S10123C2(); // tgen
};
//SIG(-1 S10123C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S10123C2 ::~S10123C2(){ note_dtor("S10123C2", this);}
void  S10123C2 ::v7(){vfunc_called(this, "_ZN8S10123C22v7Ev");}
void  S10123C2 ::v8(){vfunc_called(this, "_ZN8S10123C22v8Ev");}
void  S10123C2 ::v9(){vfunc_called(this, "_ZN8S10123C22v9Ev");}
void  S10123C2 ::v10(){vfunc_called(this, "_ZN8S10123C23v10Ev");}
void  S10123C2 ::v11(){vfunc_called(this, "_ZN8S10123C23v11Ev");}
void  S10123C2 ::v12(){vfunc_called(this, "_ZN8S10123C23v12Ev");}
void  S10123C2 ::v13(){vfunc_called(this, "_ZN8S10123C23v13Ev");}
S10123C2 ::S10123C2(){ note_ctor("S10123C2", this);} // tgen

static void Test_S10123C2()
{
  extern Class_Descriptor cd_S10123C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S10123C2, buf);
    S10123C2 *dp, &lv = *(dp=new (buf) S10123C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S10123C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10123C2)");
    check_field_offset(lv, s10123c2f0, ABISELECT(8,4), "S10123C2.s10123c2f0");
    check_field_offset(lv, s10123c2f1, ABISELECT(32,20), "S10123C2.s10123c2f1");
    check_field_offset(lv, s10123c2f2, ABISELECT(40,24), "S10123C2.s10123c2f2");
    test_class_info(&lv, &cd_S10123C2);
    dp->~S10123C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10123C2(Test_S10123C2, "S10123C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S10123C2C1Ev();
extern void _ZN8S10123C2D1Ev();
Name_Map name_map_S10123C2[] = {
  NSPAIR(_ZN8S10123C2C1Ev),
  NSPAIR(_ZN8S10123C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10123C2[];
extern void _ZN8S10123C2D1Ev();
extern void _ZN8S10123C2D0Ev();
extern void _ZN8S10123C22v7Ev();
extern void _ZN8S10123C22v8Ev();
extern void _ZN8S10123C22v9Ev();
extern void _ZN8S10123C23v10Ev();
extern void _ZN8S10123C23v11Ev();
extern void _ZN8S10123C23v12Ev();
extern void _ZN8S10123C23v13Ev();
static  VTBL_ENTRY vtc_S10123C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10123C2[0]),
  (VTBL_ENTRY)&_ZN8S10123C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10123C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10123C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10123C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10123C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10123C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10123C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10123C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10123C23v13Ev,
};
extern VTBL_ENTRY _ZTI8S10123C2[];
extern  VTBL_ENTRY _ZTV8S10123C2[];
Class_Descriptor cd_S10123C2 = {  "S10123C2", // class name
  0,0,//no base classes
  &(vtc_S10123C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S10123C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10123C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10123C1  : S10123C2 {
  void *s10123c1f0;
  virtual  ~S10123C1(); // _ZN8S10123C1D1Ev
  virtual void  v1(); // _ZN8S10123C12v1Ev
  virtual void  v2(); // _ZN8S10123C12v2Ev
  virtual void  v3(); // _ZN8S10123C12v3Ev
  virtual void  v4(); // _ZN8S10123C12v4Ev
  virtual void  v5(); // _ZN8S10123C12v5Ev
  virtual void  v6(); // _ZN8S10123C12v6Ev
  S10123C1(); // tgen
};
//SIG(1 S10123C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} vd v1 v2 v3 v4 v5 v6 Fp}


 S10123C1 ::~S10123C1(){ note_dtor("S10123C1", this);}
void  S10123C1 ::v1(){vfunc_called(this, "_ZN8S10123C12v1Ev");}
void  S10123C1 ::v2(){vfunc_called(this, "_ZN8S10123C12v2Ev");}
void  S10123C1 ::v3(){vfunc_called(this, "_ZN8S10123C12v3Ev");}
void  S10123C1 ::v4(){vfunc_called(this, "_ZN8S10123C12v4Ev");}
void  S10123C1 ::v5(){vfunc_called(this, "_ZN8S10123C12v5Ev");}
void  S10123C1 ::v6(){vfunc_called(this, "_ZN8S10123C12v6Ev");}
S10123C1 ::S10123C1(){ note_ctor("S10123C1", this);} // tgen

static void Test_S10123C1()
{
  extern Class_Descriptor cd_S10123C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S10123C1, buf);
    S10123C1 *dp, &lv = *(dp=new (buf) S10123C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S10123C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10123C1)");
    check_base_class_offset(lv, (S10123C2*), 0, "S10123C1");
    check_field_offset(lv, s10123c1f0, ABISELECT(48,28), "S10123C1.s10123c1f0");
    test_class_info(&lv, &cd_S10123C1);
    dp->~S10123C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10123C1(Test_S10123C1, "S10123C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S10123C1C1Ev();
extern void _ZN8S10123C1D1Ev();
Name_Map name_map_S10123C1[] = {
  NSPAIR(_ZN8S10123C1C1Ev),
  NSPAIR(_ZN8S10123C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10123C2;
extern VTBL_ENTRY _ZTI8S10123C2[];
extern  VTBL_ENTRY _ZTV8S10123C2[];
static Base_Class bases_S10123C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10123C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10123C1[];
extern void _ZN8S10123C1D1Ev();
extern void _ZN8S10123C1D0Ev();
extern void _ZN8S10123C22v7Ev();
extern void _ZN8S10123C22v8Ev();
extern void _ZN8S10123C22v9Ev();
extern void _ZN8S10123C23v10Ev();
extern void _ZN8S10123C23v11Ev();
extern void _ZN8S10123C23v12Ev();
extern void _ZN8S10123C23v13Ev();
extern void _ZN8S10123C12v1Ev();
extern void _ZN8S10123C12v2Ev();
extern void _ZN8S10123C12v3Ev();
extern void _ZN8S10123C12v4Ev();
extern void _ZN8S10123C12v5Ev();
extern void _ZN8S10123C12v6Ev();
static  VTBL_ENTRY vtc_S10123C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10123C1[0]),
  (VTBL_ENTRY)&_ZN8S10123C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10123C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10123C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10123C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10123C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10123C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10123C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10123C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10123C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10123C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10123C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10123C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10123C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10123C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10123C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10123C1[];
extern  VTBL_ENTRY _ZTV8S10123C1[];
Class_Descriptor cd_S10123C1 = {  "S10123C1", // class name
  bases_S10123C1, 1,
  &(vtc_S10123C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S10123C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10123C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10122C2  {
  ::S119C12_nt s10122c2f0;
  void *s10122c2f1;
  int s10122c2f2;
  virtual  ~S10122C2(); // _ZN8S10122C2D1Ev
  virtual void  v7(); // _ZN8S10122C22v7Ev
  virtual void  v8(); // _ZN8S10122C22v8Ev
  virtual void  v9(); // _ZN8S10122C22v9Ev
  virtual void  v10(); // _ZN8S10122C23v10Ev
  virtual void  v11(); // _ZN8S10122C23v11Ev
  virtual void  v12(); // _ZN8S10122C23v12Ev
  virtual void  v13(); // _ZN8S10122C23v13Ev
  S10122C2(); // tgen
};
//SIG(-1 S10122C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S10122C2 ::~S10122C2(){ note_dtor("S10122C2", this);}
void  S10122C2 ::v7(){vfunc_called(this, "_ZN8S10122C22v7Ev");}
void  S10122C2 ::v8(){vfunc_called(this, "_ZN8S10122C22v8Ev");}
void  S10122C2 ::v9(){vfunc_called(this, "_ZN8S10122C22v9Ev");}
void  S10122C2 ::v10(){vfunc_called(this, "_ZN8S10122C23v10Ev");}
void  S10122C2 ::v11(){vfunc_called(this, "_ZN8S10122C23v11Ev");}
void  S10122C2 ::v12(){vfunc_called(this, "_ZN8S10122C23v12Ev");}
void  S10122C2 ::v13(){vfunc_called(this, "_ZN8S10122C23v13Ev");}
S10122C2 ::S10122C2(){ note_ctor("S10122C2", this);} // tgen

static void Test_S10122C2()
{
  extern Class_Descriptor cd_S10122C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S10122C2, buf);
    S10122C2 *dp, &lv = *(dp=new (buf) S10122C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S10122C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10122C2)");
    check_field_offset(lv, s10122c2f0, ABISELECT(8,4), "S10122C2.s10122c2f0");
    check_field_offset(lv, s10122c2f1, ABISELECT(32,20), "S10122C2.s10122c2f1");
    check_field_offset(lv, s10122c2f2, ABISELECT(40,24), "S10122C2.s10122c2f2");
    test_class_info(&lv, &cd_S10122C2);
    dp->~S10122C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10122C2(Test_S10122C2, "S10122C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S10122C2C1Ev();
extern void _ZN8S10122C2D1Ev();
Name_Map name_map_S10122C2[] = {
  NSPAIR(_ZN8S10122C2C1Ev),
  NSPAIR(_ZN8S10122C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10122C2[];
extern void _ZN8S10122C2D1Ev();
extern void _ZN8S10122C2D0Ev();
extern void _ZN8S10122C22v7Ev();
extern void _ZN8S10122C22v8Ev();
extern void _ZN8S10122C22v9Ev();
extern void _ZN8S10122C23v10Ev();
extern void _ZN8S10122C23v11Ev();
extern void _ZN8S10122C23v12Ev();
extern void _ZN8S10122C23v13Ev();
static  VTBL_ENTRY vtc_S10122C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10122C2[0]),
  (VTBL_ENTRY)&_ZN8S10122C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10122C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10122C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10122C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10122C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10122C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10122C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10122C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10122C23v13Ev,
};
extern VTBL_ENTRY _ZTI8S10122C2[];
extern  VTBL_ENTRY _ZTV8S10122C2[];
Class_Descriptor cd_S10122C2 = {  "S10122C2", // class name
  0,0,//no base classes
  &(vtc_S10122C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S10122C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10122C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10122C1  : S10122C2 {
  void *s10122c1f0;
  virtual void  v1(); // _ZN8S10122C12v1Ev
  virtual void  v2(); // _ZN8S10122C12v2Ev
  virtual void  v3(); // _ZN8S10122C12v3Ev
  virtual void  v4(); // _ZN8S10122C12v4Ev
  virtual void  v5(); // _ZN8S10122C12v5Ev
  virtual void  v6(); // _ZN8S10122C12v6Ev
  ~S10122C1(); // tgen
  S10122C1(); // tgen
};
//SIG(1 S10122C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} v1 v2 v3 v4 v5 v6 Fp}


void  S10122C1 ::v1(){vfunc_called(this, "_ZN8S10122C12v1Ev");}
void  S10122C1 ::v2(){vfunc_called(this, "_ZN8S10122C12v2Ev");}
void  S10122C1 ::v3(){vfunc_called(this, "_ZN8S10122C12v3Ev");}
void  S10122C1 ::v4(){vfunc_called(this, "_ZN8S10122C12v4Ev");}
void  S10122C1 ::v5(){vfunc_called(this, "_ZN8S10122C12v5Ev");}
void  S10122C1 ::v6(){vfunc_called(this, "_ZN8S10122C12v6Ev");}
S10122C1 ::~S10122C1(){ note_dtor("S10122C1", this);} // tgen
S10122C1 ::S10122C1(){ note_ctor("S10122C1", this);} // tgen

static void Test_S10122C1()
{
  extern Class_Descriptor cd_S10122C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S10122C1, buf);
    S10122C1 *dp, &lv = *(dp=new (buf) S10122C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S10122C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10122C1)");
    check_base_class_offset(lv, (S10122C2*), 0, "S10122C1");
    check_field_offset(lv, s10122c1f0, ABISELECT(48,28), "S10122C1.s10122c1f0");
    test_class_info(&lv, &cd_S10122C1);
    dp->~S10122C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10122C1(Test_S10122C1, "S10122C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S10122C1C1Ev();
extern void _ZN8S10122C1D1Ev();
Name_Map name_map_S10122C1[] = {
  NSPAIR(_ZN8S10122C1C1Ev),
  NSPAIR(_ZN8S10122C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10122C2;
extern VTBL_ENTRY _ZTI8S10122C2[];
extern  VTBL_ENTRY _ZTV8S10122C2[];
static Base_Class bases_S10122C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10122C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10122C1[];
extern void _ZN8S10122C1D1Ev();
extern void _ZN8S10122C1D0Ev();
extern void _ZN8S10122C22v7Ev();
extern void _ZN8S10122C22v8Ev();
extern void _ZN8S10122C22v9Ev();
extern void _ZN8S10122C23v10Ev();
extern void _ZN8S10122C23v11Ev();
extern void _ZN8S10122C23v12Ev();
extern void _ZN8S10122C23v13Ev();
extern void _ZN8S10122C12v1Ev();
extern void _ZN8S10122C12v2Ev();
extern void _ZN8S10122C12v3Ev();
extern void _ZN8S10122C12v4Ev();
extern void _ZN8S10122C12v5Ev();
extern void _ZN8S10122C12v6Ev();
static  VTBL_ENTRY vtc_S10122C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10122C1[0]),
  (VTBL_ENTRY)&_ZN8S10122C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10122C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10122C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10122C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10122C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10122C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10122C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10122C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10122C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10122C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10122C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10122C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10122C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10122C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10122C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10122C1[];
extern  VTBL_ENTRY _ZTV8S10122C1[];
Class_Descriptor cd_S10122C1 = {  "S10122C1", // class name
  bases_S10122C1, 1,
  &(vtc_S10122C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S10122C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10122C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10120C2  {
  ::S119C12_nt s10120c2f0;
  void *s10120c2f1;
  int s10120c2f2;
  virtual  ~S10120C2(); // _ZN8S10120C2D1Ev
  virtual void  v7(); // _ZN8S10120C22v7Ev
  virtual void  v8(); // _ZN8S10120C22v8Ev
  virtual void  v9(); // _ZN8S10120C22v9Ev
  virtual void  v10(); // _ZN8S10120C23v10Ev
  virtual void  v11(); // _ZN8S10120C23v11Ev
  virtual void  v12(); // _ZN8S10120C23v12Ev
  virtual void  v13(); // _ZN8S10120C23v13Ev
  S10120C2(); // tgen
};
//SIG(-1 S10120C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S10120C2 ::~S10120C2(){ note_dtor("S10120C2", this);}
void  S10120C2 ::v7(){vfunc_called(this, "_ZN8S10120C22v7Ev");}
void  S10120C2 ::v8(){vfunc_called(this, "_ZN8S10120C22v8Ev");}
void  S10120C2 ::v9(){vfunc_called(this, "_ZN8S10120C22v9Ev");}
void  S10120C2 ::v10(){vfunc_called(this, "_ZN8S10120C23v10Ev");}
void  S10120C2 ::v11(){vfunc_called(this, "_ZN8S10120C23v11Ev");}
void  S10120C2 ::v12(){vfunc_called(this, "_ZN8S10120C23v12Ev");}
void  S10120C2 ::v13(){vfunc_called(this, "_ZN8S10120C23v13Ev");}
S10120C2 ::S10120C2(){ note_ctor("S10120C2", this);} // tgen

static void Test_S10120C2()
{
  extern Class_Descriptor cd_S10120C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S10120C2, buf);
    S10120C2 *dp, &lv = *(dp=new (buf) S10120C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S10120C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10120C2)");
    check_field_offset(lv, s10120c2f0, ABISELECT(8,4), "S10120C2.s10120c2f0");
    check_field_offset(lv, s10120c2f1, ABISELECT(32,20), "S10120C2.s10120c2f1");
    check_field_offset(lv, s10120c2f2, ABISELECT(40,24), "S10120C2.s10120c2f2");
    test_class_info(&lv, &cd_S10120C2);
    dp->~S10120C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10120C2(Test_S10120C2, "S10120C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S10120C2C1Ev();
extern void _ZN8S10120C2D1Ev();
Name_Map name_map_S10120C2[] = {
  NSPAIR(_ZN8S10120C2C1Ev),
  NSPAIR(_ZN8S10120C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10120C2[];
extern void _ZN8S10120C2D1Ev();
extern void _ZN8S10120C2D0Ev();
extern void _ZN8S10120C22v7Ev();
extern void _ZN8S10120C22v8Ev();
extern void _ZN8S10120C22v9Ev();
extern void _ZN8S10120C23v10Ev();
extern void _ZN8S10120C23v11Ev();
extern void _ZN8S10120C23v12Ev();
extern void _ZN8S10120C23v13Ev();
static  VTBL_ENTRY vtc_S10120C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10120C2[0]),
  (VTBL_ENTRY)&_ZN8S10120C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10120C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10120C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10120C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10120C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10120C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10120C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10120C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10120C23v13Ev,
};
extern VTBL_ENTRY _ZTI8S10120C2[];
extern  VTBL_ENTRY _ZTV8S10120C2[];
Class_Descriptor cd_S10120C2 = {  "S10120C2", // class name
  0,0,//no base classes
  &(vtc_S10120C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S10120C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10120C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10120C1  : S10120C2 {
  int s10120c1f0;
  virtual void  v1(); // _ZN8S10120C12v1Ev
  virtual void  v2(); // _ZN8S10120C12v2Ev
  virtual void  v3(); // _ZN8S10120C12v3Ev
  virtual void  v4(); // _ZN8S10120C12v4Ev
  virtual void  v5(); // _ZN8S10120C12v5Ev
  virtual void  v6(); // _ZN8S10120C12v6Ev
  ~S10120C1(); // tgen
  S10120C1(); // tgen
};
//SIG(1 S10120C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} v1 v2 v3 v4 v5 v6 Fi}


void  S10120C1 ::v1(){vfunc_called(this, "_ZN8S10120C12v1Ev");}
void  S10120C1 ::v2(){vfunc_called(this, "_ZN8S10120C12v2Ev");}
void  S10120C1 ::v3(){vfunc_called(this, "_ZN8S10120C12v3Ev");}
void  S10120C1 ::v4(){vfunc_called(this, "_ZN8S10120C12v4Ev");}
void  S10120C1 ::v5(){vfunc_called(this, "_ZN8S10120C12v5Ev");}
void  S10120C1 ::v6(){vfunc_called(this, "_ZN8S10120C12v6Ev");}
S10120C1 ::~S10120C1(){ note_dtor("S10120C1", this);} // tgen
S10120C1 ::S10120C1(){ note_ctor("S10120C1", this);} // tgen

static void Test_S10120C1()
{
  extern Class_Descriptor cd_S10120C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S10120C1, buf);
    S10120C1 *dp, &lv = *(dp=new (buf) S10120C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S10120C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10120C1)");
    check_base_class_offset(lv, (S10120C2*), 0, "S10120C1");
    check_field_offset(lv, s10120c1f0, ABISELECT(44,28), "S10120C1.s10120c1f0");
    test_class_info(&lv, &cd_S10120C1);
    dp->~S10120C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10120C1(Test_S10120C1, "S10120C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S10120C1C1Ev();
extern void _ZN8S10120C1D1Ev();
Name_Map name_map_S10120C1[] = {
  NSPAIR(_ZN8S10120C1C1Ev),
  NSPAIR(_ZN8S10120C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10120C2;
extern VTBL_ENTRY _ZTI8S10120C2[];
extern  VTBL_ENTRY _ZTV8S10120C2[];
static Base_Class bases_S10120C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10120C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10120C1[];
extern void _ZN8S10120C1D1Ev();
extern void _ZN8S10120C1D0Ev();
extern void _ZN8S10120C22v7Ev();
extern void _ZN8S10120C22v8Ev();
extern void _ZN8S10120C22v9Ev();
extern void _ZN8S10120C23v10Ev();
extern void _ZN8S10120C23v11Ev();
extern void _ZN8S10120C23v12Ev();
extern void _ZN8S10120C23v13Ev();
extern void _ZN8S10120C12v1Ev();
extern void _ZN8S10120C12v2Ev();
extern void _ZN8S10120C12v3Ev();
extern void _ZN8S10120C12v4Ev();
extern void _ZN8S10120C12v5Ev();
extern void _ZN8S10120C12v6Ev();
static  VTBL_ENTRY vtc_S10120C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10120C1[0]),
  (VTBL_ENTRY)&_ZN8S10120C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10120C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10120C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10120C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10120C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10120C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10120C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10120C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10120C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10120C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10120C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10120C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10120C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10120C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10120C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10120C1[];
extern  VTBL_ENTRY _ZTV8S10120C1[];
Class_Descriptor cd_S10120C1 = {  "S10120C1", // class name
  bases_S10120C1, 1,
  &(vtc_S10120C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S10120C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10120C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6747C2  {
  virtual  ~S6747C2(); // _ZN7S6747C2D1Ev
  virtual void  v3(); // _ZN7S6747C22v3Ev
  virtual void  v4(); // _ZN7S6747C22v4Ev
  S6747C2(); // tgen
};
//SIG(-1 S6747C2) C1{ vd v1 v2}


 S6747C2 ::~S6747C2(){ note_dtor("S6747C2", this);}
void  S6747C2 ::v3(){vfunc_called(this, "_ZN7S6747C22v3Ev");}
void  S6747C2 ::v4(){vfunc_called(this, "_ZN7S6747C22v4Ev");}
S6747C2 ::S6747C2(){ note_ctor("S6747C2", this);} // tgen

static void Test_S6747C2()
{
  extern Class_Descriptor cd_S6747C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6747C2, buf);
    S6747C2 *dp, &lv = *(dp=new (buf) S6747C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6747C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6747C2)");
    test_class_info(&lv, &cd_S6747C2);
    dp->~S6747C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6747C2(Test_S6747C2, "S6747C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6747C2C1Ev();
extern void _ZN7S6747C2D1Ev();
Name_Map name_map_S6747C2[] = {
  NSPAIR(_ZN7S6747C2C1Ev),
  NSPAIR(_ZN7S6747C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6747C2[];
extern void _ZN7S6747C2D1Ev();
extern void _ZN7S6747C2D0Ev();
extern void _ZN7S6747C22v3Ev();
extern void _ZN7S6747C22v4Ev();
static  VTBL_ENTRY vtc_S6747C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6747C2[0]),
  (VTBL_ENTRY)&_ZN7S6747C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6747C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6747C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6747C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6747C2[];
extern  VTBL_ENTRY _ZTV7S6747C2[];
Class_Descriptor cd_S6747C2 = {  "S6747C2", // class name
  0,0,//no base classes
  &(vtc_S6747C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6747C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6747C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6747C1  : S6747C2 {
  ::S6835C3 s6747c1f0;
  virtual void  v1(); // _ZN7S6747C12v1Ev
  virtual void  v2(); // _ZN7S6747C12v2Ev
  ~S6747C1(); // tgen
  S6747C1(); // tgen
};
//SIG(1 S6747C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC7{ m FC8{ m FL[2]}} Fp[8]}}


void  S6747C1 ::v1(){vfunc_called(this, "_ZN7S6747C12v1Ev");}
void  S6747C1 ::v2(){vfunc_called(this, "_ZN7S6747C12v2Ev");}
S6747C1 ::~S6747C1(){ note_dtor("S6747C1", this);} // tgen
S6747C1 ::S6747C1(){ note_ctor("S6747C1", this);} // tgen

static void Test_S6747C1()
{
  extern Class_Descriptor cd_S6747C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S6747C1, buf);
    S6747C1 *dp, &lv = *(dp=new (buf) S6747C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S6747C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6747C1)");
    check_base_class_offset(lv, (S6747C2*), 0, "S6747C1");
    check_field_offset(lv, s6747c1f0, ABISELECT(8,4), "S6747C1.s6747c1f0");
    test_class_info(&lv, &cd_S6747C1);
    dp->~S6747C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6747C1(Test_S6747C1, "S6747C1", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S6747C1C1Ev();
extern void _ZN7S6747C1D1Ev();
Name_Map name_map_S6747C1[] = {
  NSPAIR(_ZN7S6747C1C1Ev),
  NSPAIR(_ZN7S6747C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6747C2;
extern VTBL_ENTRY _ZTI7S6747C2[];
extern  VTBL_ENTRY _ZTV7S6747C2[];
static Base_Class bases_S6747C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6747C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6747C1[];
extern void _ZN7S6747C1D1Ev();
extern void _ZN7S6747C1D0Ev();
extern void _ZN7S6747C22v3Ev();
extern void _ZN7S6747C22v4Ev();
extern void _ZN7S6747C12v1Ev();
extern void _ZN7S6747C12v2Ev();
static  VTBL_ENTRY vtc_S6747C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6747C1[0]),
  (VTBL_ENTRY)&_ZN7S6747C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6747C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6747C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6747C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6747C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6747C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6747C1[];
extern  VTBL_ENTRY _ZTV7S6747C1[];
Class_Descriptor cd_S6747C1 = {  "S6747C1", // class name
  bases_S6747C1, 1,
  &(vtc_S6747C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S6747C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6747C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10009C2  {
  ::S119C12_nt s10009c2f0;
  void *s10009c2f1;
  int s10009c2f2;
  virtual  ~S10009C2(); // _ZN8S10009C2D1Ev
  virtual void  v6(); // _ZN8S10009C22v6Ev
  virtual void  v7(); // _ZN8S10009C22v7Ev
  virtual void  v8(); // _ZN8S10009C22v8Ev
  virtual void  v9(); // _ZN8S10009C22v9Ev
  virtual void  v10(); // _ZN8S10009C23v10Ev
  virtual void  v11(); // _ZN8S10009C23v11Ev
  virtual void  v12(); // _ZN8S10009C23v12Ev
  S10009C2(); // tgen
};
//SIG(-1 S10009C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S10009C2 ::~S10009C2(){ note_dtor("S10009C2", this);}
void  S10009C2 ::v6(){vfunc_called(this, "_ZN8S10009C22v6Ev");}
void  S10009C2 ::v7(){vfunc_called(this, "_ZN8S10009C22v7Ev");}
void  S10009C2 ::v8(){vfunc_called(this, "_ZN8S10009C22v8Ev");}
void  S10009C2 ::v9(){vfunc_called(this, "_ZN8S10009C22v9Ev");}
void  S10009C2 ::v10(){vfunc_called(this, "_ZN8S10009C23v10Ev");}
void  S10009C2 ::v11(){vfunc_called(this, "_ZN8S10009C23v11Ev");}
void  S10009C2 ::v12(){vfunc_called(this, "_ZN8S10009C23v12Ev");}
S10009C2 ::S10009C2(){ note_ctor("S10009C2", this);} // tgen

static void Test_S10009C2()
{
  extern Class_Descriptor cd_S10009C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S10009C2, buf);
    S10009C2 *dp, &lv = *(dp=new (buf) S10009C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S10009C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10009C2)");
    check_field_offset(lv, s10009c2f0, ABISELECT(8,4), "S10009C2.s10009c2f0");
    check_field_offset(lv, s10009c2f1, ABISELECT(32,20), "S10009C2.s10009c2f1");
    check_field_offset(lv, s10009c2f2, ABISELECT(40,24), "S10009C2.s10009c2f2");
    test_class_info(&lv, &cd_S10009C2);
    dp->~S10009C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10009C2(Test_S10009C2, "S10009C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S10009C2C1Ev();
extern void _ZN8S10009C2D1Ev();
Name_Map name_map_S10009C2[] = {
  NSPAIR(_ZN8S10009C2C1Ev),
  NSPAIR(_ZN8S10009C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10009C2[];
extern void _ZN8S10009C2D1Ev();
extern void _ZN8S10009C2D0Ev();
extern void _ZN8S10009C22v6Ev();
extern void _ZN8S10009C22v7Ev();
extern void _ZN8S10009C22v8Ev();
extern void _ZN8S10009C22v9Ev();
extern void _ZN8S10009C23v10Ev();
extern void _ZN8S10009C23v11Ev();
extern void _ZN8S10009C23v12Ev();
static  VTBL_ENTRY vtc_S10009C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10009C2[0]),
  (VTBL_ENTRY)&_ZN8S10009C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10009C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10009C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10009C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10009C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10009C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10009C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10009C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10009C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10009C2[];
extern  VTBL_ENTRY _ZTV8S10009C2[];
Class_Descriptor cd_S10009C2 = {  "S10009C2", // class name
  0,0,//no base classes
  &(vtc_S10009C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S10009C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10009C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10009C1  : S10009C2 {
  virtual  ~S10009C1(); // _ZN8S10009C1D1Ev
  virtual void  v1(); // _ZN8S10009C12v1Ev
  virtual void  v2(); // _ZN8S10009C12v2Ev
  virtual void  v3(); // _ZN8S10009C12v3Ev
  virtual void  v4(); // _ZN8S10009C12v4Ev
  virtual void  v5(); // _ZN8S10009C12v5Ev
  S10009C1(); // tgen
};
//SIG(1 S10009C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} vd v1 v2 v3 v4 v5}


 S10009C1 ::~S10009C1(){ note_dtor("S10009C1", this);}
void  S10009C1 ::v1(){vfunc_called(this, "_ZN8S10009C12v1Ev");}
void  S10009C1 ::v2(){vfunc_called(this, "_ZN8S10009C12v2Ev");}
void  S10009C1 ::v3(){vfunc_called(this, "_ZN8S10009C12v3Ev");}
void  S10009C1 ::v4(){vfunc_called(this, "_ZN8S10009C12v4Ev");}
void  S10009C1 ::v5(){vfunc_called(this, "_ZN8S10009C12v5Ev");}
S10009C1 ::S10009C1(){ note_ctor("S10009C1", this);} // tgen

static void Test_S10009C1()
{
  extern Class_Descriptor cd_S10009C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S10009C1, buf);
    S10009C1 *dp, &lv = *(dp=new (buf) S10009C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S10009C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10009C1)");
    check_base_class_offset(lv, (S10009C2*), 0, "S10009C1");
    test_class_info(&lv, &cd_S10009C1);
    dp->~S10009C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10009C1(Test_S10009C1, "S10009C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S10009C1C1Ev();
extern void _ZN8S10009C1D1Ev();
Name_Map name_map_S10009C1[] = {
  NSPAIR(_ZN8S10009C1C1Ev),
  NSPAIR(_ZN8S10009C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10009C2;
extern VTBL_ENTRY _ZTI8S10009C2[];
extern  VTBL_ENTRY _ZTV8S10009C2[];
static Base_Class bases_S10009C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10009C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10009C1[];
extern void _ZN8S10009C1D1Ev();
extern void _ZN8S10009C1D0Ev();
extern void _ZN8S10009C22v6Ev();
extern void _ZN8S10009C22v7Ev();
extern void _ZN8S10009C22v8Ev();
extern void _ZN8S10009C22v9Ev();
extern void _ZN8S10009C23v10Ev();
extern void _ZN8S10009C23v11Ev();
extern void _ZN8S10009C23v12Ev();
extern void _ZN8S10009C12v1Ev();
extern void _ZN8S10009C12v2Ev();
extern void _ZN8S10009C12v3Ev();
extern void _ZN8S10009C12v4Ev();
extern void _ZN8S10009C12v5Ev();
static  VTBL_ENTRY vtc_S10009C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10009C1[0]),
  (VTBL_ENTRY)&_ZN8S10009C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10009C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10009C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10009C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10009C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10009C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10009C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10009C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10009C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10009C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10009C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10009C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10009C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10009C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10009C1[];
extern  VTBL_ENTRY _ZTV8S10009C1[];
Class_Descriptor cd_S10009C1 = {  "S10009C1", // class name
  bases_S10009C1, 1,
  &(vtc_S10009C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S10009C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10009C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10008C2  {
  ::S119C12_nt s10008c2f0;
  void *s10008c2f1;
  int s10008c2f2;
  virtual  ~S10008C2(); // _ZN8S10008C2D1Ev
  virtual void  v6(); // _ZN8S10008C22v6Ev
  virtual void  v7(); // _ZN8S10008C22v7Ev
  virtual void  v8(); // _ZN8S10008C22v8Ev
  virtual void  v9(); // _ZN8S10008C22v9Ev
  virtual void  v10(); // _ZN8S10008C23v10Ev
  virtual void  v11(); // _ZN8S10008C23v11Ev
  virtual void  v12(); // _ZN8S10008C23v12Ev
  S10008C2(); // tgen
};
//SIG(-1 S10008C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S10008C2 ::~S10008C2(){ note_dtor("S10008C2", this);}
void  S10008C2 ::v6(){vfunc_called(this, "_ZN8S10008C22v6Ev");}
void  S10008C2 ::v7(){vfunc_called(this, "_ZN8S10008C22v7Ev");}
void  S10008C2 ::v8(){vfunc_called(this, "_ZN8S10008C22v8Ev");}
void  S10008C2 ::v9(){vfunc_called(this, "_ZN8S10008C22v9Ev");}
void  S10008C2 ::v10(){vfunc_called(this, "_ZN8S10008C23v10Ev");}
void  S10008C2 ::v11(){vfunc_called(this, "_ZN8S10008C23v11Ev");}
void  S10008C2 ::v12(){vfunc_called(this, "_ZN8S10008C23v12Ev");}
S10008C2 ::S10008C2(){ note_ctor("S10008C2", this);} // tgen

static void Test_S10008C2()
{
  extern Class_Descriptor cd_S10008C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S10008C2, buf);
    S10008C2 *dp, &lv = *(dp=new (buf) S10008C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S10008C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10008C2)");
    check_field_offset(lv, s10008c2f0, ABISELECT(8,4), "S10008C2.s10008c2f0");
    check_field_offset(lv, s10008c2f1, ABISELECT(32,20), "S10008C2.s10008c2f1");
    check_field_offset(lv, s10008c2f2, ABISELECT(40,24), "S10008C2.s10008c2f2");
    test_class_info(&lv, &cd_S10008C2);
    dp->~S10008C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10008C2(Test_S10008C2, "S10008C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S10008C2C1Ev();
extern void _ZN8S10008C2D1Ev();
Name_Map name_map_S10008C2[] = {
  NSPAIR(_ZN8S10008C2C1Ev),
  NSPAIR(_ZN8S10008C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10008C2[];
extern void _ZN8S10008C2D1Ev();
extern void _ZN8S10008C2D0Ev();
extern void _ZN8S10008C22v6Ev();
extern void _ZN8S10008C22v7Ev();
extern void _ZN8S10008C22v8Ev();
extern void _ZN8S10008C22v9Ev();
extern void _ZN8S10008C23v10Ev();
extern void _ZN8S10008C23v11Ev();
extern void _ZN8S10008C23v12Ev();
static  VTBL_ENTRY vtc_S10008C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10008C2[0]),
  (VTBL_ENTRY)&_ZN8S10008C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10008C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10008C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10008C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10008C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10008C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10008C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10008C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10008C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10008C2[];
extern  VTBL_ENTRY _ZTV8S10008C2[];
Class_Descriptor cd_S10008C2 = {  "S10008C2", // class name
  0,0,//no base classes
  &(vtc_S10008C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S10008C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10008C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10008C1  : S10008C2 {
  void *s10008c1f0;
  virtual void  v1(); // _ZN8S10008C12v1Ev
  virtual void  v2(); // _ZN8S10008C12v2Ev
  virtual void  v3(); // _ZN8S10008C12v3Ev
  virtual void  v4(); // _ZN8S10008C12v4Ev
  virtual void  v5(); // _ZN8S10008C12v5Ev
  ~S10008C1(); // tgen
  S10008C1(); // tgen
};
//SIG(1 S10008C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} v1 v2 v3 v4 v5 Fp}


void  S10008C1 ::v1(){vfunc_called(this, "_ZN8S10008C12v1Ev");}
void  S10008C1 ::v2(){vfunc_called(this, "_ZN8S10008C12v2Ev");}
void  S10008C1 ::v3(){vfunc_called(this, "_ZN8S10008C12v3Ev");}
void  S10008C1 ::v4(){vfunc_called(this, "_ZN8S10008C12v4Ev");}
void  S10008C1 ::v5(){vfunc_called(this, "_ZN8S10008C12v5Ev");}
S10008C1 ::~S10008C1(){ note_dtor("S10008C1", this);} // tgen
S10008C1 ::S10008C1(){ note_ctor("S10008C1", this);} // tgen

static void Test_S10008C1()
{
  extern Class_Descriptor cd_S10008C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S10008C1, buf);
    S10008C1 *dp, &lv = *(dp=new (buf) S10008C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S10008C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10008C1)");
    check_base_class_offset(lv, (S10008C2*), 0, "S10008C1");
    check_field_offset(lv, s10008c1f0, ABISELECT(48,28), "S10008C1.s10008c1f0");
    test_class_info(&lv, &cd_S10008C1);
    dp->~S10008C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10008C1(Test_S10008C1, "S10008C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S10008C1C1Ev();
extern void _ZN8S10008C1D1Ev();
Name_Map name_map_S10008C1[] = {
  NSPAIR(_ZN8S10008C1C1Ev),
  NSPAIR(_ZN8S10008C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10008C2;
extern VTBL_ENTRY _ZTI8S10008C2[];
extern  VTBL_ENTRY _ZTV8S10008C2[];
static Base_Class bases_S10008C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10008C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10008C1[];
extern void _ZN8S10008C1D1Ev();
extern void _ZN8S10008C1D0Ev();
extern void _ZN8S10008C22v6Ev();
extern void _ZN8S10008C22v7Ev();
extern void _ZN8S10008C22v8Ev();
extern void _ZN8S10008C22v9Ev();
extern void _ZN8S10008C23v10Ev();
extern void _ZN8S10008C23v11Ev();
extern void _ZN8S10008C23v12Ev();
extern void _ZN8S10008C12v1Ev();
extern void _ZN8S10008C12v2Ev();
extern void _ZN8S10008C12v3Ev();
extern void _ZN8S10008C12v4Ev();
extern void _ZN8S10008C12v5Ev();
static  VTBL_ENTRY vtc_S10008C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10008C1[0]),
  (VTBL_ENTRY)&_ZN8S10008C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10008C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10008C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10008C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10008C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10008C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10008C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10008C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10008C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10008C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10008C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10008C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10008C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10008C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10008C1[];
extern  VTBL_ENTRY _ZTV8S10008C1[];
Class_Descriptor cd_S10008C1 = {  "S10008C1", // class name
  bases_S10008C1, 1,
  &(vtc_S10008C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S10008C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10008C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9465C2  {
  ::S119C12_nt s9465c2f0;
  void *s9465c2f1;
  int s9465c2f2;
  virtual  ~S9465C2(); // _ZN7S9465C2D1Ev
  virtual void  v3(); // _ZN7S9465C22v3Ev
  virtual void  v4(); // _ZN7S9465C22v4Ev
  virtual void  v5(); // _ZN7S9465C22v5Ev
  virtual void  v6(); // _ZN7S9465C22v6Ev
  virtual void  v7(); // _ZN7S9465C22v7Ev
  virtual void  v8(); // _ZN7S9465C22v8Ev
  virtual void  v9(); // _ZN7S9465C22v9Ev
  S9465C2(); // tgen
};
//SIG(-1 S9465C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S9465C2 ::~S9465C2(){ note_dtor("S9465C2", this);}
void  S9465C2 ::v3(){vfunc_called(this, "_ZN7S9465C22v3Ev");}
void  S9465C2 ::v4(){vfunc_called(this, "_ZN7S9465C22v4Ev");}
void  S9465C2 ::v5(){vfunc_called(this, "_ZN7S9465C22v5Ev");}
void  S9465C2 ::v6(){vfunc_called(this, "_ZN7S9465C22v6Ev");}
void  S9465C2 ::v7(){vfunc_called(this, "_ZN7S9465C22v7Ev");}
void  S9465C2 ::v8(){vfunc_called(this, "_ZN7S9465C22v8Ev");}
void  S9465C2 ::v9(){vfunc_called(this, "_ZN7S9465C22v9Ev");}
S9465C2 ::S9465C2(){ note_ctor("S9465C2", this);} // tgen

static void Test_S9465C2()
{
  extern Class_Descriptor cd_S9465C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S9465C2, buf);
    S9465C2 *dp, &lv = *(dp=new (buf) S9465C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S9465C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9465C2)");
    check_field_offset(lv, s9465c2f0, ABISELECT(8,4), "S9465C2.s9465c2f0");
    check_field_offset(lv, s9465c2f1, ABISELECT(32,20), "S9465C2.s9465c2f1");
    check_field_offset(lv, s9465c2f2, ABISELECT(40,24), "S9465C2.s9465c2f2");
    test_class_info(&lv, &cd_S9465C2);
    dp->~S9465C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9465C2(Test_S9465C2, "S9465C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S9465C2C1Ev();
extern void _ZN7S9465C2D1Ev();
Name_Map name_map_S9465C2[] = {
  NSPAIR(_ZN7S9465C2C1Ev),
  NSPAIR(_ZN7S9465C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9465C2[];
extern void _ZN7S9465C2D1Ev();
extern void _ZN7S9465C2D0Ev();
extern void _ZN7S9465C22v3Ev();
extern void _ZN7S9465C22v4Ev();
extern void _ZN7S9465C22v5Ev();
extern void _ZN7S9465C22v6Ev();
extern void _ZN7S9465C22v7Ev();
extern void _ZN7S9465C22v8Ev();
extern void _ZN7S9465C22v9Ev();
static  VTBL_ENTRY vtc_S9465C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9465C2[0]),
  (VTBL_ENTRY)&_ZN7S9465C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9465C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9465C2[];
extern  VTBL_ENTRY _ZTV7S9465C2[];
Class_Descriptor cd_S9465C2 = {  "S9465C2", // class name
  0,0,//no base classes
  &(vtc_S9465C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S9465C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9465C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9465C1  : S9465C2 {
  void *s9465c1f0;
  int s9465c1f1;
  char s9465c1f2;
  virtual  ~S9465C1(); // _ZN7S9465C1D1Ev
  virtual void  v1(); // _ZN7S9465C12v1Ev
  virtual void  v2(); // _ZN7S9465C12v2Ev
  S9465C1(); // tgen
};
//SIG(1 S9465C1) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} vd v1 v2 Fp Fi Fc}


 S9465C1 ::~S9465C1(){ note_dtor("S9465C1", this);}
void  S9465C1 ::v1(){vfunc_called(this, "_ZN7S9465C12v1Ev");}
void  S9465C1 ::v2(){vfunc_called(this, "_ZN7S9465C12v2Ev");}
S9465C1 ::S9465C1(){ note_ctor("S9465C1", this);} // tgen

static void Test_S9465C1()
{
  extern Class_Descriptor cd_S9465C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S9465C1, buf);
    S9465C1 *dp, &lv = *(dp=new (buf) S9465C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S9465C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9465C1)");
    check_base_class_offset(lv, (S9465C2*), 0, "S9465C1");
    check_field_offset(lv, s9465c1f0, ABISELECT(48,28), "S9465C1.s9465c1f0");
    check_field_offset(lv, s9465c1f1, ABISELECT(56,32), "S9465C1.s9465c1f1");
    check_field_offset(lv, s9465c1f2, ABISELECT(60,36), "S9465C1.s9465c1f2");
    test_class_info(&lv, &cd_S9465C1);
    dp->~S9465C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9465C1(Test_S9465C1, "S9465C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S9465C1C1Ev();
extern void _ZN7S9465C1D1Ev();
Name_Map name_map_S9465C1[] = {
  NSPAIR(_ZN7S9465C1C1Ev),
  NSPAIR(_ZN7S9465C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9465C2;
extern VTBL_ENTRY _ZTI7S9465C2[];
extern  VTBL_ENTRY _ZTV7S9465C2[];
static Base_Class bases_S9465C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9465C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9465C1[];
extern void _ZN7S9465C1D1Ev();
extern void _ZN7S9465C1D0Ev();
extern void _ZN7S9465C22v3Ev();
extern void _ZN7S9465C22v4Ev();
extern void _ZN7S9465C22v5Ev();
extern void _ZN7S9465C22v6Ev();
extern void _ZN7S9465C22v7Ev();
extern void _ZN7S9465C22v8Ev();
extern void _ZN7S9465C22v9Ev();
extern void _ZN7S9465C12v1Ev();
extern void _ZN7S9465C12v2Ev();
static  VTBL_ENTRY vtc_S9465C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9465C1[0]),
  (VTBL_ENTRY)&_ZN7S9465C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9465C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9465C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9465C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9465C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9465C1[];
extern  VTBL_ENTRY _ZTV7S9465C1[];
Class_Descriptor cd_S9465C1 = {  "S9465C1", // class name
  bases_S9465C1, 1,
  &(vtc_S9465C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S9465C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9465C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9786C2  {
  ::S119C12_nt s9786c2f0;
  void *s9786c2f1;
  int s9786c2f2;
  virtual  ~S9786C2(); // _ZN7S9786C2D1Ev
  virtual void  v4(); // _ZN7S9786C22v4Ev
  virtual void  v5(); // _ZN7S9786C22v5Ev
  virtual void  v6(); // _ZN7S9786C22v6Ev
  virtual void  v7(); // _ZN7S9786C22v7Ev
  virtual void  v8(); // _ZN7S9786C22v8Ev
  virtual void  v9(); // _ZN7S9786C22v9Ev
  virtual void  v10(); // _ZN7S9786C23v10Ev
  S9786C2(); // tgen
};
//SIG(-1 S9786C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S9786C2 ::~S9786C2(){ note_dtor("S9786C2", this);}
void  S9786C2 ::v4(){vfunc_called(this, "_ZN7S9786C22v4Ev");}
void  S9786C2 ::v5(){vfunc_called(this, "_ZN7S9786C22v5Ev");}
void  S9786C2 ::v6(){vfunc_called(this, "_ZN7S9786C22v6Ev");}
void  S9786C2 ::v7(){vfunc_called(this, "_ZN7S9786C22v7Ev");}
void  S9786C2 ::v8(){vfunc_called(this, "_ZN7S9786C22v8Ev");}
void  S9786C2 ::v9(){vfunc_called(this, "_ZN7S9786C22v9Ev");}
void  S9786C2 ::v10(){vfunc_called(this, "_ZN7S9786C23v10Ev");}
S9786C2 ::S9786C2(){ note_ctor("S9786C2", this);} // tgen

static void Test_S9786C2()
{
  extern Class_Descriptor cd_S9786C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S9786C2, buf);
    S9786C2 *dp, &lv = *(dp=new (buf) S9786C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S9786C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9786C2)");
    check_field_offset(lv, s9786c2f0, ABISELECT(8,4), "S9786C2.s9786c2f0");
    check_field_offset(lv, s9786c2f1, ABISELECT(32,20), "S9786C2.s9786c2f1");
    check_field_offset(lv, s9786c2f2, ABISELECT(40,24), "S9786C2.s9786c2f2");
    test_class_info(&lv, &cd_S9786C2);
    dp->~S9786C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9786C2(Test_S9786C2, "S9786C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S9786C2C1Ev();
extern void _ZN7S9786C2D1Ev();
Name_Map name_map_S9786C2[] = {
  NSPAIR(_ZN7S9786C2C1Ev),
  NSPAIR(_ZN7S9786C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9786C2[];
extern void _ZN7S9786C2D1Ev();
extern void _ZN7S9786C2D0Ev();
extern void _ZN7S9786C22v4Ev();
extern void _ZN7S9786C22v5Ev();
extern void _ZN7S9786C22v6Ev();
extern void _ZN7S9786C22v7Ev();
extern void _ZN7S9786C22v8Ev();
extern void _ZN7S9786C22v9Ev();
extern void _ZN7S9786C23v10Ev();
static  VTBL_ENTRY vtc_S9786C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9786C2[0]),
  (VTBL_ENTRY)&_ZN7S9786C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9786C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9786C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S9786C2[];
extern  VTBL_ENTRY _ZTV7S9786C2[];
Class_Descriptor cd_S9786C2 = {  "S9786C2", // class name
  0,0,//no base classes
  &(vtc_S9786C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S9786C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9786C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9786C1  : S9786C2 {
  void *s9786c1f0;
  int s9786c1f1;
  virtual void  v1(); // _ZN7S9786C12v1Ev
  virtual void  v2(); // _ZN7S9786C12v2Ev
  virtual void  v3(); // _ZN7S9786C12v3Ev
  ~S9786C1(); // tgen
  S9786C1(); // tgen
};
//SIG(1 S9786C1) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} v1 v2 v3 Fp Fi}


void  S9786C1 ::v1(){vfunc_called(this, "_ZN7S9786C12v1Ev");}
void  S9786C1 ::v2(){vfunc_called(this, "_ZN7S9786C12v2Ev");}
void  S9786C1 ::v3(){vfunc_called(this, "_ZN7S9786C12v3Ev");}
S9786C1 ::~S9786C1(){ note_dtor("S9786C1", this);} // tgen
S9786C1 ::S9786C1(){ note_ctor("S9786C1", this);} // tgen

static void Test_S9786C1()
{
  extern Class_Descriptor cd_S9786C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S9786C1, buf);
    S9786C1 *dp, &lv = *(dp=new (buf) S9786C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S9786C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9786C1)");
    check_base_class_offset(lv, (S9786C2*), 0, "S9786C1");
    check_field_offset(lv, s9786c1f0, ABISELECT(48,28), "S9786C1.s9786c1f0");
    check_field_offset(lv, s9786c1f1, ABISELECT(56,32), "S9786C1.s9786c1f1");
    test_class_info(&lv, &cd_S9786C1);
    dp->~S9786C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9786C1(Test_S9786C1, "S9786C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S9786C1C1Ev();
extern void _ZN7S9786C1D1Ev();
Name_Map name_map_S9786C1[] = {
  NSPAIR(_ZN7S9786C1C1Ev),
  NSPAIR(_ZN7S9786C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9786C2;
extern VTBL_ENTRY _ZTI7S9786C2[];
extern  VTBL_ENTRY _ZTV7S9786C2[];
static Base_Class bases_S9786C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9786C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9786C1[];
extern void _ZN7S9786C1D1Ev();
extern void _ZN7S9786C1D0Ev();
extern void _ZN7S9786C22v4Ev();
extern void _ZN7S9786C22v5Ev();
extern void _ZN7S9786C22v6Ev();
extern void _ZN7S9786C22v7Ev();
extern void _ZN7S9786C22v8Ev();
extern void _ZN7S9786C22v9Ev();
extern void _ZN7S9786C23v10Ev();
extern void _ZN7S9786C12v1Ev();
extern void _ZN7S9786C12v2Ev();
extern void _ZN7S9786C12v3Ev();
static  VTBL_ENTRY vtc_S9786C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9786C1[0]),
  (VTBL_ENTRY)&_ZN7S9786C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9786C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9786C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9786C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9786C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9786C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9786C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9786C1[];
extern  VTBL_ENTRY _ZTV7S9786C1[];
Class_Descriptor cd_S9786C1 = {  "S9786C1", // class name
  bases_S9786C1, 1,
  &(vtc_S9786C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S9786C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9786C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9787C2  {
  ::S119C12_nt s9787c2f0;
  void *s9787c2f1;
  int s9787c2f2;
  virtual  ~S9787C2(); // _ZN7S9787C2D1Ev
  virtual void  v4(); // _ZN7S9787C22v4Ev
  virtual void  v5(); // _ZN7S9787C22v5Ev
  virtual void  v6(); // _ZN7S9787C22v6Ev
  virtual void  v7(); // _ZN7S9787C22v7Ev
  virtual void  v8(); // _ZN7S9787C22v8Ev
  virtual void  v9(); // _ZN7S9787C22v9Ev
  virtual void  v10(); // _ZN7S9787C23v10Ev
  S9787C2(); // tgen
};
//SIG(-1 S9787C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S9787C2 ::~S9787C2(){ note_dtor("S9787C2", this);}
void  S9787C2 ::v4(){vfunc_called(this, "_ZN7S9787C22v4Ev");}
void  S9787C2 ::v5(){vfunc_called(this, "_ZN7S9787C22v5Ev");}
void  S9787C2 ::v6(){vfunc_called(this, "_ZN7S9787C22v6Ev");}
void  S9787C2 ::v7(){vfunc_called(this, "_ZN7S9787C22v7Ev");}
void  S9787C2 ::v8(){vfunc_called(this, "_ZN7S9787C22v8Ev");}
void  S9787C2 ::v9(){vfunc_called(this, "_ZN7S9787C22v9Ev");}
void  S9787C2 ::v10(){vfunc_called(this, "_ZN7S9787C23v10Ev");}
S9787C2 ::S9787C2(){ note_ctor("S9787C2", this);} // tgen

static void Test_S9787C2()
{
  extern Class_Descriptor cd_S9787C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S9787C2, buf);
    S9787C2 *dp, &lv = *(dp=new (buf) S9787C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S9787C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9787C2)");
    check_field_offset(lv, s9787c2f0, ABISELECT(8,4), "S9787C2.s9787c2f0");
    check_field_offset(lv, s9787c2f1, ABISELECT(32,20), "S9787C2.s9787c2f1");
    check_field_offset(lv, s9787c2f2, ABISELECT(40,24), "S9787C2.s9787c2f2");
    test_class_info(&lv, &cd_S9787C2);
    dp->~S9787C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9787C2(Test_S9787C2, "S9787C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S9787C2C1Ev();
extern void _ZN7S9787C2D1Ev();
Name_Map name_map_S9787C2[] = {
  NSPAIR(_ZN7S9787C2C1Ev),
  NSPAIR(_ZN7S9787C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9787C2[];
extern void _ZN7S9787C2D1Ev();
extern void _ZN7S9787C2D0Ev();
extern void _ZN7S9787C22v4Ev();
extern void _ZN7S9787C22v5Ev();
extern void _ZN7S9787C22v6Ev();
extern void _ZN7S9787C22v7Ev();
extern void _ZN7S9787C22v8Ev();
extern void _ZN7S9787C22v9Ev();
extern void _ZN7S9787C23v10Ev();
static  VTBL_ENTRY vtc_S9787C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9787C2[0]),
  (VTBL_ENTRY)&_ZN7S9787C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9787C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9787C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S9787C2[];
extern  VTBL_ENTRY _ZTV7S9787C2[];
Class_Descriptor cd_S9787C2 = {  "S9787C2", // class name
  0,0,//no base classes
  &(vtc_S9787C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S9787C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9787C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9787C1  : S9787C2 {
  void *s9787c1f0;
  virtual void  v1(); // _ZN7S9787C12v1Ev
  virtual void  v2(); // _ZN7S9787C12v2Ev
  virtual void  v3(); // _ZN7S9787C12v3Ev
  ~S9787C1(); // tgen
  S9787C1(); // tgen
};
//SIG(1 S9787C1) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} v1 v2 v3 Fp}


void  S9787C1 ::v1(){vfunc_called(this, "_ZN7S9787C12v1Ev");}
void  S9787C1 ::v2(){vfunc_called(this, "_ZN7S9787C12v2Ev");}
void  S9787C1 ::v3(){vfunc_called(this, "_ZN7S9787C12v3Ev");}
S9787C1 ::~S9787C1(){ note_dtor("S9787C1", this);} // tgen
S9787C1 ::S9787C1(){ note_ctor("S9787C1", this);} // tgen

static void Test_S9787C1()
{
  extern Class_Descriptor cd_S9787C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S9787C1, buf);
    S9787C1 *dp, &lv = *(dp=new (buf) S9787C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S9787C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9787C1)");
    check_base_class_offset(lv, (S9787C2*), 0, "S9787C1");
    check_field_offset(lv, s9787c1f0, ABISELECT(48,28), "S9787C1.s9787c1f0");
    test_class_info(&lv, &cd_S9787C1);
    dp->~S9787C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9787C1(Test_S9787C1, "S9787C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S9787C1C1Ev();
extern void _ZN7S9787C1D1Ev();
Name_Map name_map_S9787C1[] = {
  NSPAIR(_ZN7S9787C1C1Ev),
  NSPAIR(_ZN7S9787C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9787C2;
extern VTBL_ENTRY _ZTI7S9787C2[];
extern  VTBL_ENTRY _ZTV7S9787C2[];
static Base_Class bases_S9787C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9787C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9787C1[];
extern void _ZN7S9787C1D1Ev();
extern void _ZN7S9787C1D0Ev();
extern void _ZN7S9787C22v4Ev();
extern void _ZN7S9787C22v5Ev();
extern void _ZN7S9787C22v6Ev();
extern void _ZN7S9787C22v7Ev();
extern void _ZN7S9787C22v8Ev();
extern void _ZN7S9787C22v9Ev();
extern void _ZN7S9787C23v10Ev();
extern void _ZN7S9787C12v1Ev();
extern void _ZN7S9787C12v2Ev();
extern void _ZN7S9787C12v3Ev();
static  VTBL_ENTRY vtc_S9787C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9787C1[0]),
  (VTBL_ENTRY)&_ZN7S9787C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9787C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9787C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9787C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9787C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9787C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9787C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9787C1[];
extern  VTBL_ENTRY _ZTV7S9787C1[];
Class_Descriptor cd_S9787C1 = {  "S9787C1", // class name
  bases_S9787C1, 1,
  &(vtc_S9787C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S9787C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9787C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9957C2_nt  {
  virtual  ~S9957C2_nt(); // _ZN10S9957C2_ntD1Ev
  virtual void  v5(); // _ZN10S9957C2_nt2v5Ev
  virtual void  v6(); // _ZN10S9957C2_nt2v6Ev
  virtual void  v7(); // _ZN10S9957C2_nt2v7Ev
  virtual void  v8(); // _ZN10S9957C2_nt2v8Ev
  S9957C2_nt(); // tgen
};
//SIG(-1 S9957C2_nt) C1{ vd v1 v2 v3 v4}


 S9957C2_nt ::~S9957C2_nt(){ note_dtor("S9957C2_nt", this);}
void  S9957C2_nt ::v5(){vfunc_called(this, "_ZN10S9957C2_nt2v5Ev");}
void  S9957C2_nt ::v6(){vfunc_called(this, "_ZN10S9957C2_nt2v6Ev");}
void  S9957C2_nt ::v7(){vfunc_called(this, "_ZN10S9957C2_nt2v7Ev");}
void  S9957C2_nt ::v8(){vfunc_called(this, "_ZN10S9957C2_nt2v8Ev");}
S9957C2_nt ::S9957C2_nt(){ note_ctor("S9957C2_nt", this);} // tgen

//skip512 S9957C2_nt

#else // __cplusplus

extern void _ZN10S9957C2_ntC1Ev();
extern void _ZN10S9957C2_ntD1Ev();
Name_Map name_map_S9957C2_nt[] = {
  NSPAIR(_ZN10S9957C2_ntC1Ev),
  NSPAIR(_ZN10S9957C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9957C2_nt[];
extern void _ZN10S9957C2_ntD1Ev();
extern void _ZN10S9957C2_ntD0Ev();
extern void _ZN10S9957C2_nt2v5Ev();
extern void _ZN10S9957C2_nt2v6Ev();
extern void _ZN10S9957C2_nt2v7Ev();
extern void _ZN10S9957C2_nt2v8Ev();
static  VTBL_ENTRY vtc_S9957C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9957C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9957C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9957C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9957C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9957C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9957C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S9957C2_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S9957C2_nt[];
VTBL_ENTRY *P__ZTI10S9957C2_nt = _ZTI10S9957C2_nt; 
extern  VTBL_ENTRY _ZTV10S9957C2_nt[];
Class_Descriptor cd_S9957C2_nt = {  "S9957C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9957C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9957C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9957C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9957C1  : S9957C2_nt {
  void *s9957c1f0;
  ::S119C12_nt s9957c1f1;
  ::S119C12_nt s9957c1f2;
  void *s9957c1f3[2];
  virtual void  v1(); // _ZN7S9957C12v1Ev
  virtual void  v2(); // _ZN7S9957C12v2Ev
  virtual void  v3(); // _ZN7S9957C12v3Ev
  virtual void  v4(); // _ZN7S9957C12v4Ev
  ~S9957C1(); // tgen
  S9957C1(); // tgen
};
//SIG(1 S9957C1) C1{ BC2{ vd v5 v6 v7 v8} v1 v2 v3 v4 Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC3 Fp[2]}


void  S9957C1 ::v1(){vfunc_called(this, "_ZN7S9957C12v1Ev");}
void  S9957C1 ::v2(){vfunc_called(this, "_ZN7S9957C12v2Ev");}
void  S9957C1 ::v3(){vfunc_called(this, "_ZN7S9957C12v3Ev");}
void  S9957C1 ::v4(){vfunc_called(this, "_ZN7S9957C12v4Ev");}
S9957C1 ::~S9957C1(){ note_dtor("S9957C1", this);} // tgen
S9957C1 ::S9957C1(){ note_ctor("S9957C1", this);} // tgen

static void Test_S9957C1()
{
  extern Class_Descriptor cd_S9957C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S9957C1, buf);
    S9957C1 *dp, &lv = *(dp=new (buf) S9957C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S9957C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9957C1)");
    check_base_class_offset(lv, (S9957C2_nt*), 0, "S9957C1");
    check_field_offset(lv, s9957c1f0, ABISELECT(8,4), "S9957C1.s9957c1f0");
    check_field_offset(lv, s9957c1f1, ABISELECT(16,8), "S9957C1.s9957c1f1");
    check_field_offset(lv, s9957c1f2, ABISELECT(40,24), "S9957C1.s9957c1f2");
    check_field_offset(lv, s9957c1f3, ABISELECT(64,40), "S9957C1.s9957c1f3");
    test_class_info(&lv, &cd_S9957C1);
    dp->~S9957C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9957C1(Test_S9957C1, "S9957C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S9957C1C1Ev();
extern void _ZN7S9957C1D1Ev();
Name_Map name_map_S9957C1[] = {
  NSPAIR(_ZN7S9957C1C1Ev),
  NSPAIR(_ZN7S9957C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9957C2_nt;
extern VTBL_ENTRY _ZTI10S9957C2_nt[];
extern  VTBL_ENTRY _ZTV10S9957C2_nt[];
static Base_Class bases_S9957C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9957C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9957C1[];
extern void _ZN7S9957C1D1Ev();
extern void _ZN7S9957C1D0Ev();
extern void _ZN10S9957C2_nt2v5Ev();
extern void _ZN10S9957C2_nt2v6Ev();
extern void _ZN10S9957C2_nt2v7Ev();
extern void _ZN10S9957C2_nt2v8Ev();
extern void _ZN7S9957C12v1Ev();
extern void _ZN7S9957C12v2Ev();
extern void _ZN7S9957C12v3Ev();
extern void _ZN7S9957C12v4Ev();
static  VTBL_ENTRY vtc_S9957C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9957C1[0]),
  (VTBL_ENTRY)&_ZN7S9957C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9957C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9957C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9957C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9957C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S9957C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S9957C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9957C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9957C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9957C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9957C1[];
extern  VTBL_ENTRY _ZTV7S9957C1[];
Class_Descriptor cd_S9957C1 = {  "S9957C1", // class name
  bases_S9957C1, 1,
  &(vtc_S9957C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S9957C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9957C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12562C1  {
  int s12562c1f0;
  ::S119C12_nt s12562c1f1;
  ::S6741C9_nt s12562c1f2;
  int s12562c1f3[3];
  void *s12562c1f4[2];
  int s12562c1f5;
  char s12562c1f6[2];
};
//SIG(1 S12562C1) C1{ Fi FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fp Fi FC6{ m}} Fi[3] Fp[2] Fi Fc[2]}



static void Test_S12562C1()
{
  {
    init_simple_test("S12562C1");
    S12562C1 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S12562C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12562C1)");
    check_field_offset(lv, s12562c1f0, 0, "S12562C1.s12562c1f0");
    check_field_offset(lv, s12562c1f1, ABISELECT(8,4), "S12562C1.s12562c1f1");
    check_field_offset(lv, s12562c1f2, ABISELECT(32,20), "S12562C1.s12562c1f2");
    check_field_offset(lv, s12562c1f3, ABISELECT(48,32), "S12562C1.s12562c1f3");
    check_field_offset(lv, s12562c1f4, ABISELECT(64,44), "S12562C1.s12562c1f4");
    check_field_offset(lv, s12562c1f5, ABISELECT(80,52), "S12562C1.s12562c1f5");
    check_field_offset(lv, s12562c1f6, ABISELECT(84,56), "S12562C1.s12562c1f6");
  }
}
static Arrange_To_Call_Me vS12562C1(Test_S12562C1, "S12562C1", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18021C2  {
  void *s18021c2f0;
  int s18021c2f1;
  ::S119C12_nt s18021c2f2;
  int s18021c2f3[2];
  void *s18021c2f4;
  int s18021c2f5;
  void *s18021c2f6;
  int s18021c2f7[3];
  void  mf18021c2(); // _ZN8S18021C29mf18021c2Ev
};
//SIG(-1 S18021C2) C1{ m Fp Fi FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi[2] Fp Fi Fp Fi[3]}


void  S18021C2 ::mf18021c2(){}

static void Test_S18021C2()
{
  {
    init_simple_test("S18021C2");
    S18021C2 lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S18021C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18021C2)");
    check_field_offset(lv, s18021c2f0, 0, "S18021C2.s18021c2f0");
    check_field_offset(lv, s18021c2f1, ABISELECT(8,4), "S18021C2.s18021c2f1");
    check_field_offset(lv, s18021c2f2, ABISELECT(16,8), "S18021C2.s18021c2f2");
    check_field_offset(lv, s18021c2f3, ABISELECT(40,24), "S18021C2.s18021c2f3");
    check_field_offset(lv, s18021c2f4, ABISELECT(48,32), "S18021C2.s18021c2f4");
    check_field_offset(lv, s18021c2f5, ABISELECT(56,36), "S18021C2.s18021c2f5");
    check_field_offset(lv, s18021c2f6, ABISELECT(64,40), "S18021C2.s18021c2f6");
    check_field_offset(lv, s18021c2f7, ABISELECT(72,44), "S18021C2.s18021c2f7");
  }
}
static Arrange_To_Call_Me vS18021C2(Test_S18021C2, "S18021C2", ABISELECT(88,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18021C1  {
  void *s18021c1f0[2];
  ::S18021C2 s18021c1f1;
  void  mf18021c1(); // _ZN8S18021C19mf18021c1Ev
};
//SIG(1 S18021C1) C1{ m Fp[2] FC2{ m Fp Fi FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fi[2] Fp Fi Fp Fi[3]}}


void  S18021C1 ::mf18021c1(){}

static void Test_S18021C1()
{
  {
    init_simple_test("S18021C1");
    S18021C1 lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S18021C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18021C1)");
    check_field_offset(lv, s18021c1f0, 0, "S18021C1.s18021c1f0");
    check_field_offset(lv, s18021c1f1, ABISELECT(16,8), "S18021C1.s18021c1f1");
  }
}
static Arrange_To_Call_Me vS18021C1(Test_S18021C1, "S18021C1", ABISELECT(104,64));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9972C2  {
  virtual  ~S9972C2(); // _ZN7S9972C2D1Ev
  virtual void  v5(); // _ZN7S9972C22v5Ev
  virtual void  v6(); // _ZN7S9972C22v6Ev
  virtual void  v7(); // _ZN7S9972C22v7Ev
  virtual void  v8(); // _ZN7S9972C22v8Ev
  S9972C2(); // tgen
};
//SIG(-1 S9972C2) C1{ vd v1 v2 v3 v4}


 S9972C2 ::~S9972C2(){ note_dtor("S9972C2", this);}
void  S9972C2 ::v5(){vfunc_called(this, "_ZN7S9972C22v5Ev");}
void  S9972C2 ::v6(){vfunc_called(this, "_ZN7S9972C22v6Ev");}
void  S9972C2 ::v7(){vfunc_called(this, "_ZN7S9972C22v7Ev");}
void  S9972C2 ::v8(){vfunc_called(this, "_ZN7S9972C22v8Ev");}
S9972C2 ::S9972C2(){ note_ctor("S9972C2", this);} // tgen

static void Test_S9972C2()
{
  extern Class_Descriptor cd_S9972C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9972C2, buf);
    S9972C2 *dp, &lv = *(dp=new (buf) S9972C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9972C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9972C2)");
    test_class_info(&lv, &cd_S9972C2);
    dp->~S9972C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9972C2(Test_S9972C2, "S9972C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9972C2C1Ev();
extern void _ZN7S9972C2D1Ev();
Name_Map name_map_S9972C2[] = {
  NSPAIR(_ZN7S9972C2C1Ev),
  NSPAIR(_ZN7S9972C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9972C2[];
extern void _ZN7S9972C2D1Ev();
extern void _ZN7S9972C2D0Ev();
extern void _ZN7S9972C22v5Ev();
extern void _ZN7S9972C22v6Ev();
extern void _ZN7S9972C22v7Ev();
extern void _ZN7S9972C22v8Ev();
static  VTBL_ENTRY vtc_S9972C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9972C2[0]),
  (VTBL_ENTRY)&_ZN7S9972C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9972C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9972C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9972C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9972C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9972C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9972C2[];
extern  VTBL_ENTRY _ZTV7S9972C2[];
Class_Descriptor cd_S9972C2 = {  "S9972C2", // class name
  0,0,//no base classes
  &(vtc_S9972C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9972C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9972C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9972C1  : S9972C2 {
  void *s9972c1f0[4];
  ::S119C12_nt s9972c1f1;
  virtual  ~S9972C1(); // _ZN7S9972C1D1Ev
  virtual void  v1(); // _ZN7S9972C12v1Ev
  virtual void  v2(); // _ZN7S9972C12v2Ev
  virtual void  v3(); // _ZN7S9972C12v3Ev
  virtual void  v4(); // _ZN7S9972C12v4Ev
  S9972C1(); // tgen
};
//SIG(1 S9972C1) C1{ BC2{ vd v5 v6 v7 v8} vd v1 v2 v3 v4 Fp[4] FC3{ m FC4{ m Fp Fi FC5{ m}} Fi}}


 S9972C1 ::~S9972C1(){ note_dtor("S9972C1", this);}
void  S9972C1 ::v1(){vfunc_called(this, "_ZN7S9972C12v1Ev");}
void  S9972C1 ::v2(){vfunc_called(this, "_ZN7S9972C12v2Ev");}
void  S9972C1 ::v3(){vfunc_called(this, "_ZN7S9972C12v3Ev");}
void  S9972C1 ::v4(){vfunc_called(this, "_ZN7S9972C12v4Ev");}
S9972C1 ::S9972C1(){ note_ctor("S9972C1", this);} // tgen

static void Test_S9972C1()
{
  extern Class_Descriptor cd_S9972C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S9972C1, buf);
    S9972C1 *dp, &lv = *(dp=new (buf) S9972C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S9972C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9972C1)");
    check_base_class_offset(lv, (S9972C2*), 0, "S9972C1");
    check_field_offset(lv, s9972c1f0, ABISELECT(8,4), "S9972C1.s9972c1f0");
    check_field_offset(lv, s9972c1f1, ABISELECT(40,20), "S9972C1.s9972c1f1");
    test_class_info(&lv, &cd_S9972C1);
    dp->~S9972C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9972C1(Test_S9972C1, "S9972C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S9972C1C1Ev();
extern void _ZN7S9972C1D1Ev();
Name_Map name_map_S9972C1[] = {
  NSPAIR(_ZN7S9972C1C1Ev),
  NSPAIR(_ZN7S9972C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9972C2;
extern VTBL_ENTRY _ZTI7S9972C2[];
extern  VTBL_ENTRY _ZTV7S9972C2[];
static Base_Class bases_S9972C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9972C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9972C1[];
extern void _ZN7S9972C1D1Ev();
extern void _ZN7S9972C1D0Ev();
extern void _ZN7S9972C22v5Ev();
extern void _ZN7S9972C22v6Ev();
extern void _ZN7S9972C22v7Ev();
extern void _ZN7S9972C22v8Ev();
extern void _ZN7S9972C12v1Ev();
extern void _ZN7S9972C12v2Ev();
extern void _ZN7S9972C12v3Ev();
extern void _ZN7S9972C12v4Ev();
static  VTBL_ENTRY vtc_S9972C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9972C1[0]),
  (VTBL_ENTRY)&_ZN7S9972C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9972C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9972C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9972C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9972C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9972C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9972C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9972C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9972C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9972C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9972C1[];
extern  VTBL_ENTRY _ZTV7S9972C1[];
Class_Descriptor cd_S9972C1 = {  "S9972C1", // class name
  bases_S9972C1, 1,
  &(vtc_S9972C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S9972C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9972C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8963C2  {
  ::S119C12_nt s8963c2f0;
  void *s8963c2f1;
  int s8963c2f2;
  virtual  ~S8963C2(); // _ZN7S8963C2D1Ev
  virtual void  v2(); // _ZN7S8963C22v2Ev
  virtual void  v3(); // _ZN7S8963C22v3Ev
  virtual void  v4(); // _ZN7S8963C22v4Ev
  virtual void  v5(); // _ZN7S8963C22v5Ev
  virtual void  v6(); // _ZN7S8963C22v6Ev
  virtual void  v7(); // _ZN7S8963C22v7Ev
  virtual void  v8(); // _ZN7S8963C22v8Ev
  S8963C2(); // tgen
};
//SIG(-1 S8963C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi}


 S8963C2 ::~S8963C2(){ note_dtor("S8963C2", this);}
void  S8963C2 ::v2(){vfunc_called(this, "_ZN7S8963C22v2Ev");}
void  S8963C2 ::v3(){vfunc_called(this, "_ZN7S8963C22v3Ev");}
void  S8963C2 ::v4(){vfunc_called(this, "_ZN7S8963C22v4Ev");}
void  S8963C2 ::v5(){vfunc_called(this, "_ZN7S8963C22v5Ev");}
void  S8963C2 ::v6(){vfunc_called(this, "_ZN7S8963C22v6Ev");}
void  S8963C2 ::v7(){vfunc_called(this, "_ZN7S8963C22v7Ev");}
void  S8963C2 ::v8(){vfunc_called(this, "_ZN7S8963C22v8Ev");}
S8963C2 ::S8963C2(){ note_ctor("S8963C2", this);} // tgen

static void Test_S8963C2()
{
  extern Class_Descriptor cd_S8963C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S8963C2, buf);
    S8963C2 *dp, &lv = *(dp=new (buf) S8963C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S8963C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8963C2)");
    check_field_offset(lv, s8963c2f0, ABISELECT(8,4), "S8963C2.s8963c2f0");
    check_field_offset(lv, s8963c2f1, ABISELECT(32,20), "S8963C2.s8963c2f1");
    check_field_offset(lv, s8963c2f2, ABISELECT(40,24), "S8963C2.s8963c2f2");
    test_class_info(&lv, &cd_S8963C2);
    dp->~S8963C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8963C2(Test_S8963C2, "S8963C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S8963C2C1Ev();
extern void _ZN7S8963C2D1Ev();
Name_Map name_map_S8963C2[] = {
  NSPAIR(_ZN7S8963C2C1Ev),
  NSPAIR(_ZN7S8963C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8963C2[];
extern void _ZN7S8963C2D1Ev();
extern void _ZN7S8963C2D0Ev();
extern void _ZN7S8963C22v2Ev();
extern void _ZN7S8963C22v3Ev();
extern void _ZN7S8963C22v4Ev();
extern void _ZN7S8963C22v5Ev();
extern void _ZN7S8963C22v6Ev();
extern void _ZN7S8963C22v7Ev();
extern void _ZN7S8963C22v8Ev();
static  VTBL_ENTRY vtc_S8963C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8963C2[0]),
  (VTBL_ENTRY)&_ZN7S8963C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8963C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S8963C2[];
extern  VTBL_ENTRY _ZTV7S8963C2[];
Class_Descriptor cd_S8963C2 = {  "S8963C2", // class name
  0,0,//no base classes
  &(vtc_S8963C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S8963C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8963C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8963C1  : S8963C2 {
  void *s8963c1f0;
  virtual void  v1(); // _ZN7S8963C12v1Ev
  ~S8963C1(); // tgen
  S8963C1(); // tgen
};
//SIG(1 S8963C1) C1{ BC2{ vd v2 v3 v4 v5 v6 v7 v8 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp Fi} v1 Fp}


void  S8963C1 ::v1(){vfunc_called(this, "_ZN7S8963C12v1Ev");}
S8963C1 ::~S8963C1(){ note_dtor("S8963C1", this);} // tgen
S8963C1 ::S8963C1(){ note_ctor("S8963C1", this);} // tgen

static void Test_S8963C1()
{
  extern Class_Descriptor cd_S8963C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S8963C1, buf);
    S8963C1 *dp, &lv = *(dp=new (buf) S8963C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S8963C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8963C1)");
    check_base_class_offset(lv, (S8963C2*), 0, "S8963C1");
    check_field_offset(lv, s8963c1f0, ABISELECT(48,28), "S8963C1.s8963c1f0");
    test_class_info(&lv, &cd_S8963C1);
    dp->~S8963C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8963C1(Test_S8963C1, "S8963C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S8963C1C1Ev();
extern void _ZN7S8963C1D1Ev();
Name_Map name_map_S8963C1[] = {
  NSPAIR(_ZN7S8963C1C1Ev),
  NSPAIR(_ZN7S8963C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8963C2;
extern VTBL_ENTRY _ZTI7S8963C2[];
extern  VTBL_ENTRY _ZTV7S8963C2[];
static Base_Class bases_S8963C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8963C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8963C1[];
extern void _ZN7S8963C1D1Ev();
extern void _ZN7S8963C1D0Ev();
extern void _ZN7S8963C22v2Ev();
extern void _ZN7S8963C22v3Ev();
extern void _ZN7S8963C22v4Ev();
extern void _ZN7S8963C22v5Ev();
extern void _ZN7S8963C22v6Ev();
extern void _ZN7S8963C22v7Ev();
extern void _ZN7S8963C22v8Ev();
extern void _ZN7S8963C12v1Ev();
static  VTBL_ENTRY vtc_S8963C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8963C1[0]),
  (VTBL_ENTRY)&_ZN7S8963C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8963C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8963C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8963C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8963C1[];
extern  VTBL_ENTRY _ZTV7S8963C1[];
Class_Descriptor cd_S8963C1 = {  "S8963C1", // class name
  bases_S8963C1, 1,
  &(vtc_S8963C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S8963C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8963C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S18171C6  {
  __tsi64 s18171c6f0;
  int s18171c6f1;
  int s18171c6f2;
  void *s18171c6f3;
  void  mf18171c6(); // _ZN8S18171C69mf18171c6Ev
};
//SIG(1 S18171C6) U1{ m FL Fi Fi Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S18171C2  {
  ::S119C12_nt s18171c2f0;
  ::S18171C6 s18171c2f1;
  void  mf18171c2(); // _ZN8S18171C29mf18171c2Ev
};
//SIG(-1 S18171C2) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FU5{ m FL Fi Fi Fp}}


void  S18171C2 ::mf18171c2(){}

static void Test_S18171C2()
{
  {
    init_simple_test("S18171C2");
    S18171C2 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S18171C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18171C2)");
    check_field_offset(lv, s18171c2f0, 0, "S18171C2.s18171c2f0");
    check_field_offset(lv, s18171c2f1, ABISELECT(24,16), "S18171C2.s18171c2f1");
  }
}
static Arrange_To_Call_Me vS18171C2(Test_S18171C2, "S18171C2", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18171C1  {
  void *s18171c1f0[3];
  ::S18171C2 s18171c1f1;
  char s18171c1f2;
  char s18171c1f3;
  void  mf18171c1(); // _ZN8S18171C19mf18171c1Ev
};
//SIG(1 S18171C1) C1{ m Fp[3] FC2{ m FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FU6{ m FL Fi Fi Fp}} Fc Fc}


void  S18171C1 ::mf18171c1(){}

static void Test_S18171C1()
{
  {
    init_simple_test("S18171C1");
    S18171C1 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S18171C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18171C1)");
    check_field_offset(lv, s18171c1f0, 0, "S18171C1.s18171c1f0");
    check_field_offset(lv, s18171c1f1, ABISELECT(24,12), "S18171C1.s18171c1f1");
    check_field_offset(lv, s18171c1f2, ABISELECT(56,36), "S18171C1.s18171c1f2");
    check_field_offset(lv, s18171c1f3, ABISELECT(57,37), "S18171C1.s18171c1f3");
  }
}
static Arrange_To_Call_Me vS18171C1(Test_S18171C1, "S18171C1", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9524C2  {
  virtual  ~S9524C2(); // _ZN7S9524C2D1Ev
  virtual void  v3(); // _ZN7S9524C22v3Ev
  virtual void  v4(); // _ZN7S9524C22v4Ev
  virtual void  v5(); // _ZN7S9524C22v5Ev
  virtual void  v6(); // _ZN7S9524C22v6Ev
  S9524C2(); // tgen
};
//SIG(-1 S9524C2) C1{ vd v1 v2 v3 v4}


 S9524C2 ::~S9524C2(){ note_dtor("S9524C2", this);}
void  S9524C2 ::v3(){vfunc_called(this, "_ZN7S9524C22v3Ev");}
void  S9524C2 ::v4(){vfunc_called(this, "_ZN7S9524C22v4Ev");}
void  S9524C2 ::v5(){vfunc_called(this, "_ZN7S9524C22v5Ev");}
void  S9524C2 ::v6(){vfunc_called(this, "_ZN7S9524C22v6Ev");}
S9524C2 ::S9524C2(){ note_ctor("S9524C2", this);} // tgen

static void Test_S9524C2()
{
  extern Class_Descriptor cd_S9524C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9524C2, buf);
    S9524C2 *dp, &lv = *(dp=new (buf) S9524C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9524C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9524C2)");
    test_class_info(&lv, &cd_S9524C2);
    dp->~S9524C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9524C2(Test_S9524C2, "S9524C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9524C2C1Ev();
extern void _ZN7S9524C2D1Ev();
Name_Map name_map_S9524C2[] = {
  NSPAIR(_ZN7S9524C2C1Ev),
  NSPAIR(_ZN7S9524C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9524C2[];
extern void _ZN7S9524C2D1Ev();
extern void _ZN7S9524C2D0Ev();
extern void _ZN7S9524C22v3Ev();
extern void _ZN7S9524C22v4Ev();
extern void _ZN7S9524C22v5Ev();
extern void _ZN7S9524C22v6Ev();
static  VTBL_ENTRY vtc_S9524C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9524C2[0]),
  (VTBL_ENTRY)&_ZN7S9524C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9524C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9524C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9524C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9524C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9524C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9524C2[];
extern  VTBL_ENTRY _ZTV7S9524C2[];
Class_Descriptor cd_S9524C2 = {  "S9524C2", // class name
  0,0,//no base classes
  &(vtc_S9524C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9524C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9524C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9524C1  : S9524C2 {
  ::S119C12_nt s9524c1f0;
  ::S119C12_nt s9524c1f1;
  void *s9524c1f2[3];
  virtual  ~S9524C1(); // _ZN7S9524C1D1Ev
  virtual void  v1(); // _ZN7S9524C12v1Ev
  virtual void  v2(); // _ZN7S9524C12v2Ev
  S9524C1(); // tgen
};
//SIG(1 S9524C1) C1{ BC2{ vd v3 v4 v5 v6} vd v1 v2 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC3 Fp[3]}


 S9524C1 ::~S9524C1(){ note_dtor("S9524C1", this);}
void  S9524C1 ::v1(){vfunc_called(this, "_ZN7S9524C12v1Ev");}
void  S9524C1 ::v2(){vfunc_called(this, "_ZN7S9524C12v2Ev");}
S9524C1 ::S9524C1(){ note_ctor("S9524C1", this);} // tgen

static void Test_S9524C1()
{
  extern Class_Descriptor cd_S9524C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S9524C1, buf);
    S9524C1 *dp, &lv = *(dp=new (buf) S9524C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S9524C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9524C1)");
    check_base_class_offset(lv, (S9524C2*), 0, "S9524C1");
    check_field_offset(lv, s9524c1f0, ABISELECT(8,4), "S9524C1.s9524c1f0");
    check_field_offset(lv, s9524c1f1, ABISELECT(32,20), "S9524C1.s9524c1f1");
    check_field_offset(lv, s9524c1f2, ABISELECT(56,36), "S9524C1.s9524c1f2");
    test_class_info(&lv, &cd_S9524C1);
    dp->~S9524C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9524C1(Test_S9524C1, "S9524C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S9524C1C1Ev();
extern void _ZN7S9524C1D1Ev();
Name_Map name_map_S9524C1[] = {
  NSPAIR(_ZN7S9524C1C1Ev),
  NSPAIR(_ZN7S9524C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9524C2;
extern VTBL_ENTRY _ZTI7S9524C2[];
extern  VTBL_ENTRY _ZTV7S9524C2[];
static Base_Class bases_S9524C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9524C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9524C1[];
extern void _ZN7S9524C1D1Ev();
extern void _ZN7S9524C1D0Ev();
extern void _ZN7S9524C22v3Ev();
extern void _ZN7S9524C22v4Ev();
extern void _ZN7S9524C22v5Ev();
extern void _ZN7S9524C22v6Ev();
extern void _ZN7S9524C12v1Ev();
extern void _ZN7S9524C12v2Ev();
static  VTBL_ENTRY vtc_S9524C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9524C1[0]),
  (VTBL_ENTRY)&_ZN7S9524C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9524C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9524C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9524C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9524C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9524C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9524C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9524C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9524C1[];
extern  VTBL_ENTRY _ZTV7S9524C1[];
Class_Descriptor cd_S9524C1 = {  "S9524C1", // class name
  bases_S9524C1, 1,
  &(vtc_S9524C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S9524C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9524C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18920C2  {
  void *s18920c2f0;
  ::S119C12_nt s18920c2f1;
  ::S119C12_nt s18920c2f2;
  ::S119C12_nt s18920c2f3;
  ::S119C12_nt s18920c2f4;
  void *s18920c2f5[2];
  void  mf18920c2(); // _ZN8S18920C29mf18920c2Ev
};
//SIG(-1 S18920C2) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC2 FC2 Fp[2]}


void  S18920C2 ::mf18920c2(){}

static void Test_S18920C2()
{
  {
    init_simple_test("S18920C2");
    S18920C2 lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S18920C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18920C2)");
    check_field_offset(lv, s18920c2f0, 0, "S18920C2.s18920c2f0");
    check_field_offset(lv, s18920c2f1, ABISELECT(8,4), "S18920C2.s18920c2f1");
    check_field_offset(lv, s18920c2f2, ABISELECT(32,20), "S18920C2.s18920c2f2");
    check_field_offset(lv, s18920c2f3, ABISELECT(56,36), "S18920C2.s18920c2f3");
    check_field_offset(lv, s18920c2f4, ABISELECT(80,52), "S18920C2.s18920c2f4");
    check_field_offset(lv, s18920c2f5, ABISELECT(104,68), "S18920C2.s18920c2f5");
  }
}
static Arrange_To_Call_Me vS18920C2(Test_S18920C2, "S18920C2", ABISELECT(120,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18920C1  {
  ::S18920C2 s18920c1f0;
  virtual  ~S18920C1(); // _ZN8S18920C1D1Ev
  virtual void  v1(); // _ZN8S18920C12v1Ev
  virtual void  v2(); // _ZN8S18920C12v2Ev
  S18920C1(); // tgen
};
//SIG(1 S18920C1) C1{ vd v1 v2 FC2{ m Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC3 FC3 FC3 Fp[2]}}


 S18920C1 ::~S18920C1(){ note_dtor("S18920C1", this);}
void  S18920C1 ::v1(){vfunc_called(this, "_ZN8S18920C12v1Ev");}
void  S18920C1 ::v2(){vfunc_called(this, "_ZN8S18920C12v2Ev");}
S18920C1 ::S18920C1(){ note_ctor("S18920C1", this);} // tgen

static void Test_S18920C1()
{
  extern Class_Descriptor cd_S18920C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S18920C1, buf);
    S18920C1 *dp, &lv = *(dp=new (buf) S18920C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S18920C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18920C1)");
    check_field_offset(lv, s18920c1f0, ABISELECT(8,4), "S18920C1.s18920c1f0");
    test_class_info(&lv, &cd_S18920C1);
    dp->~S18920C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18920C1(Test_S18920C1, "S18920C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN8S18920C1C1Ev();
extern void _ZN8S18920C1D1Ev();
Name_Map name_map_S18920C1[] = {
  NSPAIR(_ZN8S18920C1C1Ev),
  NSPAIR(_ZN8S18920C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18920C1[];
extern void _ZN8S18920C1D1Ev();
extern void _ZN8S18920C1D0Ev();
extern void _ZN8S18920C12v1Ev();
extern void _ZN8S18920C12v2Ev();
static  VTBL_ENTRY vtc_S18920C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18920C1[0]),
  (VTBL_ENTRY)&_ZN8S18920C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18920C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18920C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18920C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18920C1[];
extern  VTBL_ENTRY _ZTV8S18920C1[];
Class_Descriptor cd_S18920C1 = {  "S18920C1", // class name
  0,0,//no base classes
  &(vtc_S18920C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI8S18920C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18920C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18215C3  {
  ::S119C12_nt s18215c3f0;
  ::S6741C9_nt s18215c3f1;
  int s18215c3f2;
};
//SIG(-1 S18215C3) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fp Fi FC6{ m}} Fi}



static void Test_S18215C3()
{
  {
    init_simple_test("S18215C3");
    S18215C3 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S18215C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18215C3)");
    check_field_offset(lv, s18215c3f0, 0, "S18215C3.s18215c3f0");
    check_field_offset(lv, s18215c3f1, ABISELECT(24,16), "S18215C3.s18215c3f1");
    check_field_offset(lv, s18215c3f2, ABISELECT(40,28), "S18215C3.s18215c3f2");
  }
}
static Arrange_To_Call_Me vS18215C3(Test_S18215C3, "S18215C3", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18215C2  {
  int s18215c2f0;
  ::S18215C3 s18215c2f1;
  void  mf18215c2(); // _ZN8S18215C29mf18215c2Ev
};
//SIG(-1 S18215C2) C1{ m Fi FC2{ FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC6{ m Fp Fi FC7{ m}} Fi}}


void  S18215C2 ::mf18215c2(){}

static void Test_S18215C2()
{
  {
    init_simple_test("S18215C2");
    S18215C2 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S18215C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18215C2)");
    check_field_offset(lv, s18215c2f0, 0, "S18215C2.s18215c2f0");
    check_field_offset(lv, s18215c2f1, ABISELECT(8,4), "S18215C2.s18215c2f1");
  }
}
static Arrange_To_Call_Me vS18215C2(Test_S18215C2, "S18215C2", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18215C1  {
  void *s18215c1f0[3];
  ::S18215C2 s18215c1f1;
  char s18215c1f2[2];
  void  mf18215c1(); // _ZN8S18215C19mf18215c1Ev
};
//SIG(1 S18215C1) C1{ m Fp[3] FC2{ m Fi FC3{ FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC7{ m Fp Fi FC8{ m}} Fi}} Fc[2]}


void  S18215C1 ::mf18215c1(){}

static void Test_S18215C1()
{
  {
    init_simple_test("S18215C1");
    S18215C1 lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S18215C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18215C1)");
    check_field_offset(lv, s18215c1f0, 0, "S18215C1.s18215c1f0");
    check_field_offset(lv, s18215c1f1, ABISELECT(24,12), "S18215C1.s18215c1f1");
    check_field_offset(lv, s18215c1f2, ABISELECT(80,48), "S18215C1.s18215c1f2");
  }
}
static Arrange_To_Call_Me vS18215C1(Test_S18215C1, "S18215C1", ABISELECT(88,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18921C2  {
  void *s18921c2f0;
  ::S119C12_nt s18921c2f1;
  ::S119C12_nt s18921c2f2;
  ::S119C12_nt s18921c2f3;
  void *s18921c2f4[2];
  void  mf18921c2(); // _ZN8S18921C29mf18921c2Ev
};
//SIG(-1 S18921C2) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC2 Fp[2]}


void  S18921C2 ::mf18921c2(){}

static void Test_S18921C2()
{
  {
    init_simple_test("S18921C2");
    S18921C2 lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S18921C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18921C2)");
    check_field_offset(lv, s18921c2f0, 0, "S18921C2.s18921c2f0");
    check_field_offset(lv, s18921c2f1, ABISELECT(8,4), "S18921C2.s18921c2f1");
    check_field_offset(lv, s18921c2f2, ABISELECT(32,20), "S18921C2.s18921c2f2");
    check_field_offset(lv, s18921c2f3, ABISELECT(56,36), "S18921C2.s18921c2f3");
    check_field_offset(lv, s18921c2f4, ABISELECT(80,52), "S18921C2.s18921c2f4");
  }
}
static Arrange_To_Call_Me vS18921C2(Test_S18921C2, "S18921C2", ABISELECT(96,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18921C1  {
  ::S18921C2 s18921c1f0;
  virtual  ~S18921C1(); // _ZN8S18921C1D1Ev
  virtual void  v1(); // _ZN8S18921C12v1Ev
  virtual void  v2(); // _ZN8S18921C12v2Ev
  S18921C1(); // tgen
};
//SIG(1 S18921C1) C1{ vd v1 v2 FC2{ m Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC3 FC3 Fp[2]}}


 S18921C1 ::~S18921C1(){ note_dtor("S18921C1", this);}
void  S18921C1 ::v1(){vfunc_called(this, "_ZN8S18921C12v1Ev");}
void  S18921C1 ::v2(){vfunc_called(this, "_ZN8S18921C12v2Ev");}
S18921C1 ::S18921C1(){ note_ctor("S18921C1", this);} // tgen

static void Test_S18921C1()
{
  extern Class_Descriptor cd_S18921C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S18921C1, buf);
    S18921C1 *dp, &lv = *(dp=new (buf) S18921C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S18921C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18921C1)");
    check_field_offset(lv, s18921c1f0, ABISELECT(8,4), "S18921C1.s18921c1f0");
    test_class_info(&lv, &cd_S18921C1);
    dp->~S18921C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18921C1(Test_S18921C1, "S18921C1", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN8S18921C1C1Ev();
extern void _ZN8S18921C1D1Ev();
Name_Map name_map_S18921C1[] = {
  NSPAIR(_ZN8S18921C1C1Ev),
  NSPAIR(_ZN8S18921C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18921C1[];
extern void _ZN8S18921C1D1Ev();
extern void _ZN8S18921C1D0Ev();
extern void _ZN8S18921C12v1Ev();
extern void _ZN8S18921C12v2Ev();
static  VTBL_ENTRY vtc_S18921C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18921C1[0]),
  (VTBL_ENTRY)&_ZN8S18921C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18921C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18921C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18921C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18921C1[];
extern  VTBL_ENTRY _ZTV8S18921C1[];
Class_Descriptor cd_S18921C1 = {  "S18921C1", // class name
  0,0,//no base classes
  &(vtc_S18921C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI8S18921C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18921C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18169C2  {
  ::S119C12_nt s18169c2f0;
  ::S21925C44_nt s18169c2f1;
  void  mf18169c2(); // _ZN8S18169C29mf18169c2Ev
};
//SIG(-1 S18169C2) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fp[2]}}


void  S18169C2 ::mf18169c2(){}

static void Test_S18169C2()
{
  {
    init_simple_test("S18169C2");
    S18169C2 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S18169C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18169C2)");
    check_field_offset(lv, s18169c2f0, 0, "S18169C2.s18169c2f0");
    check_field_offset(lv, s18169c2f1, ABISELECT(24,16), "S18169C2.s18169c2f1");
  }
}
static Arrange_To_Call_Me vS18169C2(Test_S18169C2, "S18169C2", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18169C1  {
  void *s18169c1f0[3];
  ::S18169C2 s18169c1f1;
  char s18169c1f2[2];
  void  mf18169c1(); // _ZN8S18169C19mf18169c1Ev
};
//SIG(1 S18169C1) C1{ m Fp[3] FC2{ m FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC6{ m Fp[2]}} Fc[2]}


void  S18169C1 ::mf18169c1(){}

static void Test_S18169C1()
{
  {
    init_simple_test("S18169C1");
    S18169C1 lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S18169C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18169C1)");
    check_field_offset(lv, s18169c1f0, 0, "S18169C1.s18169c1f0");
    check_field_offset(lv, s18169c1f1, ABISELECT(24,12), "S18169C1.s18169c1f1");
    check_field_offset(lv, s18169c1f2, ABISELECT(64,36), "S18169C1.s18169c1f2");
  }
}
static Arrange_To_Call_Me vS18169C1(Test_S18169C1, "S18169C1", ABISELECT(72,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14136C1  {
  void *s14136c1f0;
  ::S119C12_nt s14136c1f1;
  ::S6741C9_nt s14136c1f2;
  char s14136c1f3[4];
  ::S119C12_nt s14136c1f4;
};
//SIG(1 S14136C1) C1{ Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fp Fi FC6{ m}} Fc[4] FC2}



static void Test_S14136C1()
{
  {
    init_simple_test("S14136C1");
    S14136C1 lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S14136C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14136C1)");
    check_field_offset(lv, s14136c1f0, 0, "S14136C1.s14136c1f0");
    check_field_offset(lv, s14136c1f1, ABISELECT(8,4), "S14136C1.s14136c1f1");
    check_field_offset(lv, s14136c1f2, ABISELECT(32,20), "S14136C1.s14136c1f2");
    check_field_offset(lv, s14136c1f3, ABISELECT(48,32), "S14136C1.s14136c1f3");
    check_field_offset(lv, s14136c1f4, ABISELECT(56,36), "S14136C1.s14136c1f4");
  }
}
static Arrange_To_Call_Me vS14136C1(Test_S14136C1, "S14136C1", ABISELECT(80,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15841C1  {
  ::S119C12_nt s15841c1f0;
  ::S119C12_nt s15841c1f1;
  ::S119C12_nt s15841c1f2;
  ::S119C12_nt s15841c1f3;
  ::S21925C52_nt s15841c1f4;
  char s15841c1f5;
  void  mf15841c1(); // _ZN8S15841C19mf15841c1Ev
};
//SIG(1 S15841C1) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC2 FC2 FC5{ m Fi[4]} Fc}


void  S15841C1 ::mf15841c1(){}

static void Test_S15841C1()
{
  {
    init_simple_test("S15841C1");
    S15841C1 lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S15841C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15841C1)");
    check_field_offset(lv, s15841c1f0, 0, "S15841C1.s15841c1f0");
    check_field_offset(lv, s15841c1f1, ABISELECT(24,16), "S15841C1.s15841c1f1");
    check_field_offset(lv, s15841c1f2, ABISELECT(48,32), "S15841C1.s15841c1f2");
    check_field_offset(lv, s15841c1f3, ABISELECT(72,48), "S15841C1.s15841c1f3");
    check_field_offset(lv, s15841c1f4, ABISELECT(96,64), "S15841C1.s15841c1f4");
    check_field_offset(lv, s15841c1f5, ABISELECT(112,80), "S15841C1.s15841c1f5");
  }
}
static Arrange_To_Call_Me vS15841C1(Test_S15841C1, "S15841C1", ABISELECT(120,84));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17797C1  {
  void *s17797c1f0;
  int s17797c1f1[2];
  void *s17797c1f2;
  ::S119C12_nt s17797c1f3;
  void *s17797c1f4;
  int s17797c1f5;
  void *s17797c1f6[3];
  int s17797c1f7;
  void  mf17797c1(); // _ZN8S17797C19mf17797c1Ev
};
//SIG(1 S17797C1) C1{ m Fp Fi[2] Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp Fi Fp[3] Fi}


void  S17797C1 ::mf17797c1(){}

static void Test_S17797C1()
{
  {
    init_simple_test("S17797C1");
    S17797C1 lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S17797C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17797C1)");
    check_field_offset(lv, s17797c1f0, 0, "S17797C1.s17797c1f0");
    check_field_offset(lv, s17797c1f1, ABISELECT(8,4), "S17797C1.s17797c1f1");
    check_field_offset(lv, s17797c1f2, ABISELECT(16,12), "S17797C1.s17797c1f2");
    check_field_offset(lv, s17797c1f3, ABISELECT(24,16), "S17797C1.s17797c1f3");
    check_field_offset(lv, s17797c1f4, ABISELECT(48,32), "S17797C1.s17797c1f4");
    check_field_offset(lv, s17797c1f5, ABISELECT(56,36), "S17797C1.s17797c1f5");
    check_field_offset(lv, s17797c1f6, ABISELECT(64,40), "S17797C1.s17797c1f6");
    check_field_offset(lv, s17797c1f7, ABISELECT(88,52), "S17797C1.s17797c1f7");
  }
}
static Arrange_To_Call_Me vS17797C1(Test_S17797C1, "S17797C1", ABISELECT(96,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17896C2  {
  ::S119C12_nt s17896c2f0;
  ::S15068C2_nt s17896c2f1;
  void *s17896c2f2;
};
//SIG(-1 S17896C2) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fp Fi} Fp}



static void Test_S17896C2()
{
  {
    init_simple_test("S17896C2");
    S17896C2 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S17896C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17896C2)");
    check_field_offset(lv, s17896c2f0, 0, "S17896C2.s17896c2f0");
    check_field_offset(lv, s17896c2f1, ABISELECT(24,16), "S17896C2.s17896c2f1");
    check_field_offset(lv, s17896c2f2, ABISELECT(40,24), "S17896C2.s17896c2f2");
  }
}
static Arrange_To_Call_Me vS17896C2(Test_S17896C2, "S17896C2", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17896C1  {
  void *s17896c1f0[2];
  ::S17896C2 s17896c1f1;
  void  mf17896c1(); // _ZN8S17896C19mf17896c1Ev
};
//SIG(1 S17896C1) C1{ m Fp[2] FC2{ FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC6{ m Fp Fi} Fp}}


void  S17896C1 ::mf17896c1(){}

static void Test_S17896C1()
{
  {
    init_simple_test("S17896C1");
    S17896C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S17896C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17896C1)");
    check_field_offset(lv, s17896c1f0, 0, "S17896C1.s17896c1f0");
    check_field_offset(lv, s17896c1f1, ABISELECT(16,8), "S17896C1.s17896c1f1");
  }
}
static Arrange_To_Call_Me vS17896C1(Test_S17896C1, "S17896C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15845C1  {
  ::S119C12_nt s15845c1f0;
  int s15845c1f1[2];
  ::S6741C9_nt s15845c1f2;
  void  mf15845c1(); // _ZN8S15845C19mf15845c1Ev
};
//SIG(1 S15845C1) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi[2] FC5{ m Fp Fi FC6{ m}}}


void  S15845C1 ::mf15845c1(){}

static void Test_S15845C1()
{
  {
    init_simple_test("S15845C1");
    S15845C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S15845C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15845C1)");
    check_field_offset(lv, s15845c1f0, 0, "S15845C1.s15845c1f0");
    check_field_offset(lv, s15845c1f1, ABISELECT(24,16), "S15845C1.s15845c1f1");
    check_field_offset(lv, s15845c1f2, ABISELECT(32,24), "S15845C1.s15845c1f2");
  }
}
static Arrange_To_Call_Me vS15845C1(Test_S15845C1, "S15845C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10348C2_nt  {
};
//SIG(-1 S10348C2_nt) C1{}



//skip512 S10348C2_nt

#else // __cplusplus

Class_Descriptor cd_S10348C2_nt = {  "S10348C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10348C6_nt  {
  int s10348c6f0[11];
};
//SIG(-1 S10348C6_nt) C1{ Fi[11]}



//skip512 S10348C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10348C1  : S10348C2_nt {
  ::S6741C9_nt s10348c1f0;
  ::S119C12_nt s10348c1f1;
  ::S119C12_nt s10348c1f2;
  ::S10348C6_nt s10348c1f3;
};
//SIG(1 S10348C1) C1{ BC2{} FC3{ m Fp Fi FC4{ m}} FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} FC5 FC8{ Fi[11]}}



static void Test_S10348C1()
{
  extern Class_Descriptor cd_S10348C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S10348C1, buf);
    S10348C1 &lv = *(new (buf) S10348C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S10348C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10348C1)");
    check_base_class_offset(lv, (S10348C2_nt*), 0, "S10348C1");
    check_field_offset(lv, s10348c1f0, 0, "S10348C1.s10348c1f0");
    check_field_offset(lv, s10348c1f1, ABISELECT(16,12), "S10348C1.s10348c1f1");
    check_field_offset(lv, s10348c1f2, ABISELECT(40,28), "S10348C1.s10348c1f2");
    check_field_offset(lv, s10348c1f3, ABISELECT(64,44), "S10348C1.s10348c1f3");
    test_class_info(&lv, &cd_S10348C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10348C1(Test_S10348C1, "S10348C1", ABISELECT(112,88));

#else // __cplusplus

extern Class_Descriptor cd_S10348C2_nt;
static Base_Class bases_S10348C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10348C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S10348C1 = {  "S10348C1", // class name
  bases_S10348C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(112,88), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18229C2  {
  int s18229c2f0;
  ::S119C12_nt s18229c2f1;
  void  mf18229c2(); // _ZN8S18229C29mf18229c2Ev
};
//SIG(-1 S18229C2) C1{ m Fi FC2{ m FC3{ m Fp Fi FC4{ m}} Fi}}


void  S18229C2 ::mf18229c2(){}

static void Test_S18229C2()
{
  {
    init_simple_test("S18229C2");
    S18229C2 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18229C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18229C2)");
    check_field_offset(lv, s18229c2f0, 0, "S18229C2.s18229c2f0");
    check_field_offset(lv, s18229c2f1, ABISELECT(8,4), "S18229C2.s18229c2f1");
  }
}
static Arrange_To_Call_Me vS18229C2(Test_S18229C2, "S18229C2", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18229C1  {
  void *s18229c1f0[3];
  ::S18229C2 s18229c1f1;
  char s18229c1f2[2];
  void  mf18229c1(); // _ZN8S18229C19mf18229c1Ev
};
//SIG(1 S18229C1) C1{ m Fp[3] FC2{ m Fi FC3{ m FC4{ m Fp Fi FC5{ m}} Fi}} Fc[2]}


void  S18229C1 ::mf18229c1(){}

static void Test_S18229C1()
{
  {
    init_simple_test("S18229C1");
    S18229C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S18229C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18229C1)");
    check_field_offset(lv, s18229c1f0, 0, "S18229C1.s18229c1f0");
    check_field_offset(lv, s18229c1f1, ABISELECT(24,12), "S18229C1.s18229c1f1");
    check_field_offset(lv, s18229c1f2, ABISELECT(56,32), "S18229C1.s18229c1f2");
  }
}
static Arrange_To_Call_Me vS18229C1(Test_S18229C1, "S18229C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15844C1  {
  ::S119C12_nt s15844c1f0;
  ::S6741C9_nt s15844c1f1;
  int s15844c1f2;
  void  mf15844c1(); // _ZN8S15844C19mf15844c1Ev
};
//SIG(1 S15844C1) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fp Fi FC6{ m}} Fi}


void  S15844C1 ::mf15844c1(){}

static void Test_S15844C1()
{
  {
    init_simple_test("S15844C1");
    S15844C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S15844C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15844C1)");
    check_field_offset(lv, s15844c1f0, 0, "S15844C1.s15844c1f0");
    check_field_offset(lv, s15844c1f1, ABISELECT(24,16), "S15844C1.s15844c1f1");
    check_field_offset(lv, s15844c1f2, ABISELECT(40,28), "S15844C1.s15844c1f2");
  }
}
static Arrange_To_Call_Me vS15844C1(Test_S15844C1, "S15844C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15843C1  {
  ::S119C12_nt s15843c1f0;
  ::S6741C9_nt s15843c1f1;
  char s15843c1f2;
  void  mf15843c1(); // _ZN8S15843C19mf15843c1Ev
};
//SIG(1 S15843C1) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fp Fi FC6{ m}} Fc}


void  S15843C1 ::mf15843c1(){}

static void Test_S15843C1()
{
  {
    init_simple_test("S15843C1");
    S15843C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S15843C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15843C1)");
    check_field_offset(lv, s15843c1f0, 0, "S15843C1.s15843c1f0");
    check_field_offset(lv, s15843c1f1, ABISELECT(24,16), "S15843C1.s15843c1f1");
    check_field_offset(lv, s15843c1f2, ABISELECT(40,28), "S15843C1.s15843c1f2");
  }
}
static Arrange_To_Call_Me vS15843C1(Test_S15843C1, "S15843C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17875C3_nt  {
  void *s17875c3f0;
  int s17875c3f1;
};
//SIG(-1 S17875C3_nt) C1{ Fp Fi}



//skip512 S17875C3_nt

#else // __cplusplus

Class_Descriptor cd_S17875C3_nt = {  "S17875C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17875C2  : S17875C3_nt {
  ::S119C12_nt s17875c2f0;
};
//SIG(-1 S17875C2) C1{ BC2{ Fp Fi} FC3{ m FC4{ m Fp Fi FC5{ m}} Fi}}



static void Test_S17875C2()
{
  extern Class_Descriptor cd_S17875C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S17875C2, buf);
    S17875C2 &lv = *(new (buf) S17875C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S17875C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17875C2)");
    check_base_class_offset(lv, (S17875C3_nt*), 0, "S17875C2");
    check_field_offset(lv, s17875c2f0, ABISELECT(16,8), "S17875C2.s17875c2f0");
    test_class_info(&lv, &cd_S17875C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17875C2(Test_S17875C2, "S17875C2", ABISELECT(40,24));

#else // __cplusplus

extern Class_Descriptor cd_S17875C3_nt;
static Base_Class bases_S17875C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17875C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S17875C2 = {  "S17875C2", // class name
  bases_S17875C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,24), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17875C1  {
  void *s17875c1f0[2];
  ::S17875C2 s17875c1f1;
  void  mf17875c1(); // _ZN8S17875C19mf17875c1Ev
};
//SIG(1 S17875C1) C1{ m Fp[2] FC2{ BC3{ Fp Fi} FC4{ m FC5{ m Fp Fi FC6{ m}} Fi}}}


void  S17875C1 ::mf17875c1(){}

static void Test_S17875C1()
{
  {
    init_simple_test("S17875C1");
    S17875C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S17875C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17875C1)");
    check_field_offset(lv, s17875c1f0, 0, "S17875C1.s17875c1f0");
    check_field_offset(lv, s17875c1f1, ABISELECT(16,8), "S17875C1.s17875c1f1");
  }
}
static Arrange_To_Call_Me vS17875C1(Test_S17875C1, "S17875C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18170C2  {
  ::S119C12_nt s18170c2f0;
  void *s18170c2f1;
  void  mf18170c2(); // _ZN8S18170C29mf18170c2Ev
};
//SIG(-1 S18170C2) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp}


void  S18170C2 ::mf18170c2(){}

static void Test_S18170C2()
{
  {
    init_simple_test("S18170C2");
    S18170C2 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18170C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18170C2)");
    check_field_offset(lv, s18170c2f0, 0, "S18170C2.s18170c2f0");
    check_field_offset(lv, s18170c2f1, ABISELECT(24,16), "S18170C2.s18170c2f1");
  }
}
static Arrange_To_Call_Me vS18170C2(Test_S18170C2, "S18170C2", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18170C1  {
  void *s18170c1f0[3];
  ::S18170C2 s18170c1f1;
  char s18170c1f2[2];
  void  mf18170c1(); // _ZN8S18170C19mf18170c1Ev
};
//SIG(1 S18170C1) C1{ m Fp[3] FC2{ m FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp} Fc[2]}


void  S18170C1 ::mf18170c1(){}

static void Test_S18170C1()
{
  {
    init_simple_test("S18170C1");
    S18170C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S18170C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18170C1)");
    check_field_offset(lv, s18170c1f0, 0, "S18170C1.s18170c1f0");
    check_field_offset(lv, s18170c1f1, ABISELECT(24,12), "S18170C1.s18170c1f1");
    check_field_offset(lv, s18170c1f2, ABISELECT(56,32), "S18170C1.s18170c1f2");
  }
}
static Arrange_To_Call_Me vS18170C1(Test_S18170C1, "S18170C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5447C2  : S10348C2_nt {
  ::S119C12_nt s5447c2f0;
};
//SIG(-1 S5447C2) C1{ BC2{} FC3{ m FC4{ m Fp Fi FC5{ m}} Fi}}



static void Test_S5447C2()
{
  extern Class_Descriptor cd_S5447C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5447C2, buf);
    S5447C2 &lv = *(new (buf) S5447C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5447C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5447C2)");
    check_base_class_offset(lv, (S10348C2_nt*), 0, "S5447C2");
    check_field_offset(lv, s5447c2f0, 0, "S5447C2.s5447c2f0");
    test_class_info(&lv, &cd_S5447C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5447C2(Test_S5447C2, "S5447C2", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S10348C2_nt;
static Base_Class bases_S5447C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10348C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5447C2 = {  "S5447C2", // class name
  bases_S5447C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5447C1  : S5447C2 {
  ::S473C6_nt s5447c1f0;
};
//SIG(1 S5447C1) C1{ BC2{ BC3{} FC4{ m FC5{ m Fp Fi FC6{ m}} Fi}} FC7{ m Fi[2]}}



static void Test_S5447C1()
{
  extern Class_Descriptor cd_S5447C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S5447C1, buf);
    S5447C1 &lv = *(new (buf) S5447C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S5447C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5447C1)");
    check_base_class_offset(lv, (S10348C2_nt*)(S5447C2*), 0, "S5447C1");
    check_base_class_offset(lv, (S5447C2*), 0, "S5447C1");
    check_field_offset(lv, s5447c1f0, ABISELECT(24,16), "S5447C1.s5447c1f0");
    test_class_info(&lv, &cd_S5447C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5447C1(Test_S5447C1, "S5447C1", ABISELECT(32,24));

#else // __cplusplus

extern Class_Descriptor cd_S10348C2_nt;
extern Class_Descriptor cd_S5447C2;
static Base_Class bases_S5447C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10348C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5447C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5447C1 = {  "S5447C1", // class name
  bases_S5447C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,24), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4596C3  {
  virtual  ~S4596C3(); // _ZN7S4596C3D1Ev
  virtual void  v2(); // _ZN7S4596C32v2Ev
  S4596C3(); // tgen
};
//SIG(-1 S4596C3) C1{ vd v1}


 S4596C3 ::~S4596C3(){ note_dtor("S4596C3", this);}
void  S4596C3 ::v2(){vfunc_called(this, "_ZN7S4596C32v2Ev");}
S4596C3 ::S4596C3(){ note_ctor("S4596C3", this);} // tgen

static void Test_S4596C3()
{
  extern Class_Descriptor cd_S4596C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4596C3, buf);
    S4596C3 *dp, &lv = *(dp=new (buf) S4596C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4596C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4596C3)");
    test_class_info(&lv, &cd_S4596C3);
    dp->~S4596C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4596C3(Test_S4596C3, "S4596C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4596C3C1Ev();
extern void _ZN7S4596C3D1Ev();
Name_Map name_map_S4596C3[] = {
  NSPAIR(_ZN7S4596C3C1Ev),
  NSPAIR(_ZN7S4596C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4596C3[];
extern void _ZN7S4596C3D1Ev();
extern void _ZN7S4596C3D0Ev();
extern void _ZN7S4596C32v2Ev();
static  VTBL_ENTRY vtc_S4596C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4596C3[0]),
  (VTBL_ENTRY)&_ZN7S4596C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4596C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4596C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4596C3[];
extern  VTBL_ENTRY _ZTV7S4596C3[];
Class_Descriptor cd_S4596C3 = {  "S4596C3", // class name
  0,0,//no base classes
  &(vtc_S4596C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4596C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4596C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4596C2_nt  : S4596C3 {
  virtual  ~S4596C2_nt(); // _ZN10S4596C2_ntD1Ev
  S4596C2_nt(); // tgen
};
//SIG(-1 S4596C2_nt) C1{ BC2{ vd v1} vd}


 S4596C2_nt ::~S4596C2_nt(){ note_dtor("S4596C2_nt", this);}
S4596C2_nt ::S4596C2_nt(){ note_ctor("S4596C2_nt", this);} // tgen

//skip512 S4596C2_nt

#else // __cplusplus

extern void _ZN10S4596C2_ntC1Ev();
extern void _ZN10S4596C2_ntD1Ev();
Name_Map name_map_S4596C2_nt[] = {
  NSPAIR(_ZN10S4596C2_ntC1Ev),
  NSPAIR(_ZN10S4596C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4596C3;
extern VTBL_ENTRY _ZTI7S4596C3[];
extern  VTBL_ENTRY _ZTV7S4596C3[];
static Base_Class bases_S4596C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4596C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4596C2_nt[];
extern void _ZN10S4596C2_ntD1Ev();
extern void _ZN10S4596C2_ntD0Ev();
extern void _ZN7S4596C32v2Ev();
static  VTBL_ENTRY vtc_S4596C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4596C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4596C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4596C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4596C32v2Ev,
};
extern VTBL_ENTRY _ZTI10S4596C2_nt[];
VTBL_ENTRY *P__ZTI10S4596C2_nt = _ZTI10S4596C2_nt; 
extern  VTBL_ENTRY _ZTV10S4596C2_nt[];
Class_Descriptor cd_S4596C2_nt = {  "S4596C2_nt", // class name
  bases_S4596C2_nt, 1,
  &(vtc_S4596C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4596C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4596C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4596C1  : S4596C2_nt {
  ::S119C12_nt s4596c1f0;
  virtual void  v1(); // _ZN7S4596C12v1Ev
  ~S4596C1(); // tgen
  S4596C1(); // tgen
};
//SIG(1 S4596C1) C1{ BC2{ BC3{ vd v2} vd} v1 FC4{ m FC5{ m Fp Fi FC6{ m}} Fi}}


void  S4596C1 ::v1(){vfunc_called(this, "_ZN7S4596C12v1Ev");}
S4596C1 ::~S4596C1(){ note_dtor("S4596C1", this);} // tgen
S4596C1 ::S4596C1(){ note_ctor("S4596C1", this);} // tgen

static void Test_S4596C1()
{
  extern Class_Descriptor cd_S4596C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S4596C1, buf);
    S4596C1 *dp, &lv = *(dp=new (buf) S4596C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4596C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4596C1)");
    check_base_class_offset(lv, (S4596C3*)(S4596C2_nt*), 0, "S4596C1");
    check_base_class_offset(lv, (S4596C2_nt*), 0, "S4596C1");
    check_field_offset(lv, s4596c1f0, ABISELECT(8,4), "S4596C1.s4596c1f0");
    test_class_info(&lv, &cd_S4596C1);
    dp->~S4596C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4596C1(Test_S4596C1, "S4596C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S4596C1C1Ev();
extern void _ZN7S4596C1D1Ev();
Name_Map name_map_S4596C1[] = {
  NSPAIR(_ZN7S4596C1C1Ev),
  NSPAIR(_ZN7S4596C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4596C3;
extern VTBL_ENTRY _ZTI7S4596C3[];
extern  VTBL_ENTRY _ZTV7S4596C3[];
extern Class_Descriptor cd_S4596C2_nt;
extern VTBL_ENTRY _ZTI10S4596C2_nt[];
extern  VTBL_ENTRY _ZTV10S4596C2_nt[];
static Base_Class bases_S4596C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4596C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4596C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4596C1[];
extern void _ZN7S4596C1D1Ev();
extern void _ZN7S4596C1D0Ev();
extern void _ZN7S4596C32v2Ev();
extern void _ZN7S4596C12v1Ev();
static  VTBL_ENTRY vtc_S4596C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4596C1[0]),
  (VTBL_ENTRY)&_ZN7S4596C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4596C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4596C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4596C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4596C1[];
extern  VTBL_ENTRY _ZTV7S4596C1[];
Class_Descriptor cd_S4596C1 = {  "S4596C1", // class name
  bases_S4596C1, 2,
  &(vtc_S4596C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S4596C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4596C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12010C1  {
  ::S119C12_nt s12010c1f0;
  ::S6741C9_nt s12010c1f1;
};
//SIG(1 S12010C1) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fp Fi FC6{ m}}}



static void Test_S12010C1()
{
  {
    init_simple_test("S12010C1");
    S12010C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S12010C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12010C1)");
    check_field_offset(lv, s12010c1f0, 0, "S12010C1.s12010c1f0");
    check_field_offset(lv, s12010c1f1, ABISELECT(24,16), "S12010C1.s12010c1f1");
  }
}
static Arrange_To_Call_Me vS12010C1(Test_S12010C1, "S12010C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17091C1  {
  int s17091c1f0[2];
  ::S119C12_nt s17091c1f1;
  ::S119C12_nt s17091c1f2;
  int s17091c1f3[6];
  void  mf17091c1(); // _ZN8S17091C19mf17091c1Ev
};
//SIG(1 S17091C1) C1{ m Fi[2] FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 Fi[6]}


void  S17091C1 ::mf17091c1(){}

static void Test_S17091C1()
{
  {
    init_simple_test("S17091C1");
    S17091C1 lv;
    check2(sizeof(lv), ABISELECT(80,64), "sizeof(S17091C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17091C1)");
    check_field_offset(lv, s17091c1f0, 0, "S17091C1.s17091c1f0");
    check_field_offset(lv, s17091c1f1, 8, "S17091C1.s17091c1f1");
    check_field_offset(lv, s17091c1f2, ABISELECT(32,24), "S17091C1.s17091c1f2");
    check_field_offset(lv, s17091c1f3, ABISELECT(56,40), "S17091C1.s17091c1f3");
  }
}
static Arrange_To_Call_Me vS17091C1(Test_S17091C1, "S17091C1", ABISELECT(80,64));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18025C1  {
  void *s18025c1f0[2];
  ::S119C17_nt s18025c1f1;
  int s18025c1f2;
  __tsi64 s18025c1f3;
  int s18025c1f4[2];
  void  mf18025c1(); // _ZN8S18025C19mf18025c1Ev
};
//SIG(1 S18025C1) C1{ m Fp[2] FC2{ m Fp Fi[2] FC3{ m Fp}} Fi FL Fi[2]}


void  S18025C1 ::mf18025c1(){}

static void Test_S18025C1()
{
  {
    init_simple_test("S18025C1");
    S18025C1 lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S18025C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18025C1)");
    check_field_offset(lv, s18025c1f0, 0, "S18025C1.s18025c1f0");
    check_field_offset(lv, s18025c1f1, ABISELECT(16,8), "S18025C1.s18025c1f1");
    check_field_offset(lv, s18025c1f2, ABISELECT(40,24), "S18025C1.s18025c1f2");
    check_field_offset(lv, s18025c1f3, ABISELECT(48,28), "S18025C1.s18025c1f3");
    check_field_offset(lv, s18025c1f4, ABISELECT(56,36), "S18025C1.s18025c1f4");
  }
}
static Arrange_To_Call_Me vS18025C1(Test_S18025C1, "S18025C1", ABISELECT(64,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9036C2  {
  virtual  ~S9036C2(); // _ZN7S9036C2D1Ev
  virtual void  v2(); // _ZN7S9036C22v2Ev
  S9036C2(); // tgen
};
//SIG(-1 S9036C2) C1{ vd v1}


 S9036C2 ::~S9036C2(){ note_dtor("S9036C2", this);}
void  S9036C2 ::v2(){vfunc_called(this, "_ZN7S9036C22v2Ev");}
S9036C2 ::S9036C2(){ note_ctor("S9036C2", this);} // tgen

static void Test_S9036C2()
{
  extern Class_Descriptor cd_S9036C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9036C2, buf);
    S9036C2 *dp, &lv = *(dp=new (buf) S9036C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9036C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9036C2)");
    test_class_info(&lv, &cd_S9036C2);
    dp->~S9036C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9036C2(Test_S9036C2, "S9036C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9036C2C1Ev();
extern void _ZN7S9036C2D1Ev();
Name_Map name_map_S9036C2[] = {
  NSPAIR(_ZN7S9036C2C1Ev),
  NSPAIR(_ZN7S9036C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9036C2[];
extern void _ZN7S9036C2D1Ev();
extern void _ZN7S9036C2D0Ev();
extern void _ZN7S9036C22v2Ev();
static  VTBL_ENTRY vtc_S9036C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9036C2[0]),
  (VTBL_ENTRY)&_ZN7S9036C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9036C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9036C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9036C2[];
extern  VTBL_ENTRY _ZTV7S9036C2[];
Class_Descriptor cd_S9036C2 = {  "S9036C2", // class name
  0,0,//no base classes
  &(vtc_S9036C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9036C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9036C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9036C1  : S9036C2 {
  void *s9036c1f0;
  ::S119C12_nt s9036c1f1;
  virtual void  v1(); // _ZN7S9036C12v1Ev
  ~S9036C1(); // tgen
  S9036C1(); // tgen
};
//SIG(1 S9036C1) C1{ BC2{ vd v2} v1 Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi}}


void  S9036C1 ::v1(){vfunc_called(this, "_ZN7S9036C12v1Ev");}
S9036C1 ::~S9036C1(){ note_dtor("S9036C1", this);} // tgen
S9036C1 ::S9036C1(){ note_ctor("S9036C1", this);} // tgen

static void Test_S9036C1()
{
  extern Class_Descriptor cd_S9036C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S9036C1, buf);
    S9036C1 *dp, &lv = *(dp=new (buf) S9036C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S9036C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9036C1)");
    check_base_class_offset(lv, (S9036C2*), 0, "S9036C1");
    check_field_offset(lv, s9036c1f0, ABISELECT(8,4), "S9036C1.s9036c1f0");
    check_field_offset(lv, s9036c1f1, ABISELECT(16,8), "S9036C1.s9036c1f1");
    test_class_info(&lv, &cd_S9036C1);
    dp->~S9036C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9036C1(Test_S9036C1, "S9036C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S9036C1C1Ev();
extern void _ZN7S9036C1D1Ev();
Name_Map name_map_S9036C1[] = {
  NSPAIR(_ZN7S9036C1C1Ev),
  NSPAIR(_ZN7S9036C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9036C2;
extern VTBL_ENTRY _ZTI7S9036C2[];
extern  VTBL_ENTRY _ZTV7S9036C2[];
static Base_Class bases_S9036C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9036C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9036C1[];
extern void _ZN7S9036C1D1Ev();
extern void _ZN7S9036C1D0Ev();
extern void _ZN7S9036C22v2Ev();
extern void _ZN7S9036C12v1Ev();
static  VTBL_ENTRY vtc_S9036C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9036C1[0]),
  (VTBL_ENTRY)&_ZN7S9036C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9036C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9036C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9036C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9036C1[];
extern  VTBL_ENTRY _ZTV7S9036C1[];
Class_Descriptor cd_S9036C1 = {  "S9036C1", // class name
  bases_S9036C1, 1,
  &(vtc_S9036C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S9036C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9036C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12007C1  {
  ::S119C12_nt s12007c1f0;
  ::S119C12_nt s12007c1f1;
  ::S119C12_nt s12007c1f2;
  int s12007c1f3[2];
  char s12007c1f4;
};
//SIG(1 S12007C1) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC2 Fi[2] Fc}



static void Test_S12007C1()
{
  {
    init_simple_test("S12007C1");
    S12007C1 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S12007C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12007C1)");
    check_field_offset(lv, s12007c1f0, 0, "S12007C1.s12007c1f0");
    check_field_offset(lv, s12007c1f1, ABISELECT(24,16), "S12007C1.s12007c1f1");
    check_field_offset(lv, s12007c1f2, ABISELECT(48,32), "S12007C1.s12007c1f2");
    check_field_offset(lv, s12007c1f3, ABISELECT(72,48), "S12007C1.s12007c1f3");
    check_field_offset(lv, s12007c1f4, ABISELECT(80,56), "S12007C1.s12007c1f4");
  }
}
static Arrange_To_Call_Me vS12007C1(Test_S12007C1, "S12007C1", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21411C1  {
  ::S119C12_nt s21411c1f0;
  int s21411c1f1;
  char s21411c1f2;
  int s21411c1f3;
  void  mf21411c1(); // _ZN8S21411C19mf21411c1Ev
  virtual  ~S21411C1(); // _ZN8S21411C1D1Ev
  S21411C1(); // tgen
};
//SIG(1 S21411C1) C1{ vd m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi Fc Fi}


void  S21411C1 ::mf21411c1(){}
 S21411C1 ::~S21411C1(){ note_dtor("S21411C1", this);}
S21411C1 ::S21411C1(){ note_ctor("S21411C1", this);} // tgen

static void Test_S21411C1()
{
  extern Class_Descriptor cd_S21411C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S21411C1, buf);
    S21411C1 *dp, &lv = *(dp=new (buf) S21411C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S21411C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21411C1)");
    check_field_offset(lv, s21411c1f0, ABISELECT(8,4), "S21411C1.s21411c1f0");
    check_field_offset(lv, s21411c1f1, ABISELECT(32,20), "S21411C1.s21411c1f1");
    check_field_offset(lv, s21411c1f2, ABISELECT(36,24), "S21411C1.s21411c1f2");
    check_field_offset(lv, s21411c1f3, ABISELECT(40,28), "S21411C1.s21411c1f3");
    test_class_info(&lv, &cd_S21411C1);
    dp->~S21411C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21411C1(Test_S21411C1, "S21411C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S21411C1C1Ev();
extern void _ZN8S21411C1D1Ev();
Name_Map name_map_S21411C1[] = {
  NSPAIR(_ZN8S21411C1C1Ev),
  NSPAIR(_ZN8S21411C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21411C1[];
extern void _ZN8S21411C1D1Ev();
extern void _ZN8S21411C1D0Ev();
static  VTBL_ENTRY vtc_S21411C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21411C1[0]),
  (VTBL_ENTRY)&_ZN8S21411C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21411C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21411C1[];
extern  VTBL_ENTRY _ZTV8S21411C1[];
Class_Descriptor cd_S21411C1 = {  "S21411C1", // class name
  0,0,//no base classes
  &(vtc_S21411C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S21411C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21411C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18198C1  {
  void *s18198c1f0[3];
  ::S119C12_nt s18198c1f1;
  char s18198c1f2[2];
  void  mf18198c1(); // _ZN8S18198C19mf18198c1Ev
};
//SIG(1 S18198C1) C1{ m Fp[3] FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fc[2]}


void  S18198C1 ::mf18198c1(){}

static void Test_S18198C1()
{
  {
    init_simple_test("S18198C1");
    S18198C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S18198C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18198C1)");
    check_field_offset(lv, s18198c1f0, 0, "S18198C1.s18198c1f0");
    check_field_offset(lv, s18198c1f1, ABISELECT(24,12), "S18198C1.s18198c1f1");
    check_field_offset(lv, s18198c1f2, ABISELECT(48,28), "S18198C1.s18198c1f2");
  }
}
static Arrange_To_Call_Me vS18198C1(Test_S18198C1, "S18198C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12134C1  {
  ::S6741C9_nt s12134c1f0;
  ::S6741C9_nt s12134c1f1;
  ::S119C12_nt s12134c1f2;
  int s12134c1f3[4];
};
//SIG(1 S12134C1) C1{ FC2{ m Fp Fi FC3{ m}} FC2 FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fi[4]}



static void Test_S12134C1()
{
  {
    init_simple_test("S12134C1");
    S12134C1 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S12134C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12134C1)");
    check_field_offset(lv, s12134c1f0, 0, "S12134C1.s12134c1f0");
    check_field_offset(lv, s12134c1f1, ABISELECT(16,12), "S12134C1.s12134c1f1");
    check_field_offset(lv, s12134c1f2, ABISELECT(32,24), "S12134C1.s12134c1f2");
    check_field_offset(lv, s12134c1f3, ABISELECT(56,40), "S12134C1.s12134c1f3");
  }
}
static Arrange_To_Call_Me vS12134C1(Test_S12134C1, "S12134C1", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17359C1  {
  __tsi64 s17359c1f0;
  int s17359c1f1[2];
  ::S119C16_nt s17359c1f2;
  void  mf17359c1(); // _ZN8S17359C19mf17359c1Ev
};
//SIG(1 S17359C1) C1{ m FL Fi[2] FC2{ BC3{ m Fp Fi[2] FC4{ m Fp}}}}


void  S17359C1 ::mf17359c1(){}

static void Test_S17359C1()
{
  {
    init_simple_test("S17359C1");
    S17359C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S17359C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17359C1)");
    check_field_offset(lv, s17359c1f0, 0, "S17359C1.s17359c1f0");
    check_field_offset(lv, s17359c1f1, 8, "S17359C1.s17359c1f1");
    check_field_offset(lv, s17359c1f2, 16, "S17359C1.s17359c1f2");
  }
}
static Arrange_To_Call_Me vS17359C1(Test_S17359C1, "S17359C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5448C2  : S10348C2_nt {
  ::S119C12_nt s5448c2f0;
};
//SIG(-1 S5448C2) C1{ BC2{} FC3{ m FC4{ m Fp Fi FC5{ m}} Fi}}



static void Test_S5448C2()
{
  extern Class_Descriptor cd_S5448C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5448C2, buf);
    S5448C2 &lv = *(new (buf) S5448C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5448C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5448C2)");
    check_base_class_offset(lv, (S10348C2_nt*), 0, "S5448C2");
    check_field_offset(lv, s5448c2f0, 0, "S5448C2.s5448c2f0");
    test_class_info(&lv, &cd_S5448C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5448C2(Test_S5448C2, "S5448C2", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S10348C2_nt;
static Base_Class bases_S5448C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10348C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5448C2 = {  "S5448C2", // class name
  bases_S5448C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5448C1  : S5448C2 {
  int s5448c1f0;
};
//SIG(1 S5448C1) C1{ BC2{ BC3{} FC4{ m FC5{ m Fp Fi FC6{ m}} Fi}} Fi}



static void Test_S5448C1()
{
  extern Class_Descriptor cd_S5448C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S5448C1, buf);
    S5448C1 &lv = *(new (buf) S5448C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S5448C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5448C1)");
    check_base_class_offset(lv, (S10348C2_nt*)(S5448C2*), 0, "S5448C1");
    check_base_class_offset(lv, (S5448C2*), 0, "S5448C1");
    check_field_offset(lv, s5448c1f0, ABISELECT(24,16), "S5448C1.s5448c1f0");
    test_class_info(&lv, &cd_S5448C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5448C1(Test_S5448C1, "S5448C1", ABISELECT(32,20));

#else // __cplusplus

extern Class_Descriptor cd_S10348C2_nt;
extern Class_Descriptor cd_S5448C2;
static Base_Class bases_S5448C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10348C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5448C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5448C1 = {  "S5448C1", // class name
  bases_S5448C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17202C1  {
  int s17202c1f0[3];
  void *s17202c1f1;
  ::S119C12_nt s17202c1f2;
  void  mf17202c1(); // _ZN8S17202C19mf17202c1Ev
};
//SIG(1 S17202C1) C1{ m Fi[3] Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi}}


void  S17202C1 ::mf17202c1(){}

static void Test_S17202C1()
{
  {
    init_simple_test("S17202C1");
    S17202C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S17202C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17202C1)");
    check_field_offset(lv, s17202c1f0, 0, "S17202C1.s17202c1f0");
    check_field_offset(lv, s17202c1f1, ABISELECT(16,12), "S17202C1.s17202c1f1");
    check_field_offset(lv, s17202c1f2, ABISELECT(24,16), "S17202C1.s17202c1f2");
  }
}
static Arrange_To_Call_Me vS17202C1(Test_S17202C1, "S17202C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18026C1  {
  void *s18026c1f0[2];
  ::S119C17_nt s18026c1f1;
  int s18026c1f2[4];
  void  mf18026c1(); // _ZN8S18026C19mf18026c1Ev
};
//SIG(1 S18026C1) C1{ m Fp[2] FC2{ m Fp Fi[2] FC3{ m Fp}} Fi[4]}


void  S18026C1 ::mf18026c1(){}

static void Test_S18026C1()
{
  {
    init_simple_test("S18026C1");
    S18026C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S18026C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18026C1)");
    check_field_offset(lv, s18026c1f0, 0, "S18026C1.s18026c1f0");
    check_field_offset(lv, s18026c1f1, ABISELECT(16,8), "S18026C1.s18026c1f1");
    check_field_offset(lv, s18026c1f2, ABISELECT(40,24), "S18026C1.s18026c1f2");
  }
}
static Arrange_To_Call_Me vS18026C1(Test_S18026C1, "S18026C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17349C1  {
  __tsi64 s17349c1f0;
  int s17349c1f1;
  ::S119C16_nt s17349c1f2;
  void  mf17349c1(); // _ZN8S17349C19mf17349c1Ev
};
//SIG(1 S17349C1) C1{ m FL Fi FC2{ BC3{ m Fp Fi[2] FC4{ m Fp}}}}


void  S17349C1 ::mf17349c1(){}

static void Test_S17349C1()
{
  {
    init_simple_test("S17349C1");
    S17349C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S17349C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17349C1)");
    check_field_offset(lv, s17349c1f0, 0, "S17349C1.s17349c1f0");
    check_field_offset(lv, s17349c1f1, 8, "S17349C1.s17349c1f1");
    check_field_offset(lv, s17349c1f2, ABISELECT(16,12), "S17349C1.s17349c1f2");
  }
}
static Arrange_To_Call_Me vS17349C1(Test_S17349C1, "S17349C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15839C1  {
  ::S119C12_nt s15839c1f0;
  char s15839c1f1[2];
  void *s15839c1f2;
  void  mf15839c1(); // _ZN8S15839C19mf15839c1Ev
};
//SIG(1 S15839C1) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fc[2] Fp}


void  S15839C1 ::mf15839c1(){}

static void Test_S15839C1()
{
  {
    init_simple_test("S15839C1");
    S15839C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S15839C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15839C1)");
    check_field_offset(lv, s15839c1f0, 0, "S15839C1.s15839c1f0");
    check_field_offset(lv, s15839c1f1, ABISELECT(24,16), "S15839C1.s15839c1f1");
    check_field_offset(lv, s15839c1f2, ABISELECT(32,20), "S15839C1.s15839c1f2");
  }
}
static Arrange_To_Call_Me vS15839C1(Test_S15839C1, "S15839C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13128C1  {
  int s13128c1f0[2];
  ::S119C12_nt s13128c1f1;
  ::S6741C9_nt s13128c1f2;
};
//SIG(1 S13128C1) C1{ Fi[2] FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fp Fi FC6{ m}}}



static void Test_S13128C1()
{
  {
    init_simple_test("S13128C1");
    S13128C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S13128C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13128C1)");
    check_field_offset(lv, s13128c1f0, 0, "S13128C1.s13128c1f0");
    check_field_offset(lv, s13128c1f1, 8, "S13128C1.s13128c1f1");
    check_field_offset(lv, s13128c1f2, ABISELECT(32,24), "S13128C1.s13128c1f2");
  }
}
static Arrange_To_Call_Me vS13128C1(Test_S13128C1, "S13128C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12015C1  {
  ::S119C12_nt s12015c1f0;
  int s12015c1f1[2];
  ::S119C12_nt s12015c1f2;
};
//SIG(1 S12015C1) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi[2] FC2}



static void Test_S12015C1()
{
  {
    init_simple_test("S12015C1");
    S12015C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S12015C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12015C1)");
    check_field_offset(lv, s12015c1f0, 0, "S12015C1.s12015c1f0");
    check_field_offset(lv, s12015c1f1, ABISELECT(24,16), "S12015C1.s12015c1f1");
    check_field_offset(lv, s12015c1f2, ABISELECT(32,24), "S12015C1.s12015c1f2");
  }
}
static Arrange_To_Call_Me vS12015C1(Test_S12015C1, "S12015C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15840C1  {
  ::S119C12_nt s15840c1f0;
  char s15840c1f1[513];
  void  mf15840c1(); // _ZN8S15840C19mf15840c1Ev
};
//SIG(1 S15840C1) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fc[513]}


void  S15840C1 ::mf15840c1(){}

static void Test_S15840C1()
{
  {
    init_simple_test("S15840C1");
    S15840C1 lv;
    check2(sizeof(lv), ABISELECT(544,532), "sizeof(S15840C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15840C1)");
    check_field_offset(lv, s15840c1f0, 0, "S15840C1.s15840c1f0");
    check_field_offset(lv, s15840c1f1, ABISELECT(24,16), "S15840C1.s15840c1f1");
  }
}
static Arrange_To_Call_Me vS15840C1(Test_S15840C1, "S15840C1", ABISELECT(544,532));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12012C1  {
  ::S119C12_nt s12012c1f0;
  int s12012c1f1;
  char s12012c1f2[2];
};
//SIG(1 S12012C1) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi Fc[2]}



static void Test_S12012C1()
{
  {
    init_simple_test("S12012C1");
    S12012C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S12012C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12012C1)");
    check_field_offset(lv, s12012c1f0, 0, "S12012C1.s12012c1f0");
    check_field_offset(lv, s12012c1f1, ABISELECT(24,16), "S12012C1.s12012c1f1");
    check_field_offset(lv, s12012c1f2, ABISELECT(28,20), "S12012C1.s12012c1f2");
  }
}
static Arrange_To_Call_Me vS12012C1(Test_S12012C1, "S12012C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5679C1  : S119C12_nt {
  ::S6741C9_nt s5679c1f0;
  ::S6741C9_nt s5679c1f1;
};
//SIG(1 S5679C1) C1{ BC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fp Fi FC6{ m}} FC5}



static void Test_S5679C1()
{
  extern Class_Descriptor cd_S5679C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S5679C1, buf);
    S5679C1 &lv = *(new (buf) S5679C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S5679C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5679C1)");
    check_base_class_offset(lv, (S119C12_nt*), 0, "S5679C1");
    check_field_offset(lv, s5679c1f0, ABISELECT(24,16), "S5679C1.s5679c1f0");
    check_field_offset(lv, s5679c1f1, ABISELECT(40,28), "S5679C1.s5679c1f1");
    test_class_info(&lv, &cd_S5679C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5679C1(Test_S5679C1, "S5679C1", ABISELECT(56,40));

#else // __cplusplus

extern Class_Descriptor cd_S119C12_nt;
static Base_Class bases_S5679C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5679C1 = {  "S5679C1", // class name
  bases_S5679C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,40), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12013C1  {
  ::S119C12_nt s12013c1f0;
  int s12013c1f1;
  ::S6741C9_nt s12013c1f2;
};
//SIG(1 S12013C1) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi FC5{ m Fp Fi FC6{ m}}}



static void Test_S12013C1()
{
  {
    init_simple_test("S12013C1");
    S12013C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S12013C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12013C1)");
    check_field_offset(lv, s12013c1f0, 0, "S12013C1.s12013c1f0");
    check_field_offset(lv, s12013c1f1, ABISELECT(24,16), "S12013C1.s12013c1f1");
    check_field_offset(lv, s12013c1f2, ABISELECT(32,20), "S12013C1.s12013c1f2");
  }
}
static Arrange_To_Call_Me vS12013C1(Test_S12013C1, "S12013C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12008C1  {
  ::S119C12_nt s12008c1f0;
  ::S119C12_nt s12008c1f1;
  void *s12008c1f2;
};
//SIG(1 S12008C1) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 Fp}



static void Test_S12008C1()
{
  {
    init_simple_test("S12008C1");
    S12008C1 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S12008C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12008C1)");
    check_field_offset(lv, s12008c1f0, 0, "S12008C1.s12008c1f0");
    check_field_offset(lv, s12008c1f1, ABISELECT(24,16), "S12008C1.s12008c1f1");
    check_field_offset(lv, s12008c1f2, ABISELECT(48,32), "S12008C1.s12008c1f2");
  }
}
static Arrange_To_Call_Me vS12008C1(Test_S12008C1, "S12008C1", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15842C1  {
  ::S119C12_nt s15842c1f0;
  ::S119C12_nt s15842c1f1;
  void  mf15842c1(); // _ZN8S15842C19mf15842c1Ev
};
//SIG(1 S15842C1) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2}


void  S15842C1 ::mf15842c1(){}

static void Test_S15842C1()
{
  {
    init_simple_test("S15842C1");
    S15842C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S15842C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15842C1)");
    check_field_offset(lv, s15842c1f0, 0, "S15842C1.s15842c1f0");
    check_field_offset(lv, s15842c1f1, ABISELECT(24,16), "S15842C1.s15842c1f1");
  }
}
static Arrange_To_Call_Me vS15842C1(Test_S15842C1, "S15842C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12014C1  {
  ::S119C12_nt s12014c1f0;
  int s12014c1f1;
  void *s12014c1f2;
};
//SIG(1 S12014C1) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi Fp}



static void Test_S12014C1()
{
  {
    init_simple_test("S12014C1");
    S12014C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S12014C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12014C1)");
    check_field_offset(lv, s12014c1f0, 0, "S12014C1.s12014c1f0");
    check_field_offset(lv, s12014c1f1, ABISELECT(24,16), "S12014C1.s12014c1f1");
    check_field_offset(lv, s12014c1f2, ABISELECT(32,20), "S12014C1.s12014c1f2");
  }
}
static Arrange_To_Call_Me vS12014C1(Test_S12014C1, "S12014C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15846C1  {
  ::S119C12_nt s15846c1f0;
  int s15846c1f1;
  void  mf15846c1(); // _ZN8S15846C19mf15846c1Ev
};
//SIG(1 S15846C1) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi}


void  S15846C1 ::mf15846c1(){}

static void Test_S15846C1()
{
  {
    init_simple_test("S15846C1");
    S15846C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S15846C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15846C1)");
    check_field_offset(lv, s15846c1f0, 0, "S15846C1.s15846c1f0");
    check_field_offset(lv, s15846c1f1, ABISELECT(24,16), "S15846C1.s15846c1f1");
  }
}
static Arrange_To_Call_Me vS15846C1(Test_S15846C1, "S15846C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12563C1  {
  int s12563c1f0;
  ::S119C12_nt s12563c1f1;
};
//SIG(1 S12563C1) C1{ Fi FC2{ m FC3{ m Fp Fi FC4{ m}} Fi}}



static void Test_S12563C1()
{
  {
    init_simple_test("S12563C1");
    S12563C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S12563C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12563C1)");
    check_field_offset(lv, s12563c1f0, 0, "S12563C1.s12563c1f0");
    check_field_offset(lv, s12563c1f1, ABISELECT(8,4), "S12563C1.s12563c1f1");
  }
}
static Arrange_To_Call_Me vS12563C1(Test_S12563C1, "S12563C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13732C1  {
  __tsi64 s13732c1f0;
  ::S119C12_nt s13732c1f1;
};
//SIG(1 S13732C1) C1{ FL FC2{ m FC3{ m Fp Fi FC4{ m}} Fi}}



static void Test_S13732C1()
{
  {
    init_simple_test("S13732C1");
    S13732C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13732C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13732C1)");
    check_field_offset(lv, s13732c1f0, 0, "S13732C1.s13732c1f0");
    check_field_offset(lv, s13732c1f1, 8, "S13732C1.s13732c1f1");
  }
}
static Arrange_To_Call_Me vS13732C1(Test_S13732C1, "S13732C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13731C1  {
  long s13731c1f0;
  ::S119C12_nt s13731c1f1;
};
//SIG(1 S13731C1) C1{ Fl FC2{ m FC3{ m Fp Fi FC4{ m}} Fi}}



static void Test_S13731C1()
{
  {
    init_simple_test("S13731C1");
    S13731C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S13731C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13731C1)");
    check_field_offset(lv, s13731c1f0, 0, "S13731C1.s13731c1f0");
    check_field_offset(lv, s13731c1f1, ABISELECT(8,4), "S13731C1.s13731c1f1");
  }
}
static Arrange_To_Call_Me vS13731C1(Test_S13731C1, "S13731C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2785C2  : S119C17_nt {
};
//SIG(-1 S2785C2) C1{ BC2{ m Fp Fi[2] FC3{ m Fp}}}



static void Test_S2785C2()
{
  extern Class_Descriptor cd_S2785C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2785C2, buf);
    S2785C2 &lv = *(new (buf) S2785C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2785C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2785C2)");
    check_base_class_offset(lv, (S119C17_nt*), 0, "S2785C2");
    test_class_info(&lv, &cd_S2785C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2785C2(Test_S2785C2, "S2785C2", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S119C17_nt;
static Base_Class bases_S2785C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2785C2 = {  "S2785C2", // class name
  bases_S2785C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2785C1  : S2785C2 {
};
//SIG(1 S2785C1) C1{ BC2{ BC3{ m Fp Fi[2] FC4{ m Fp}}}}



static void Test_S2785C1()
{
  extern Class_Descriptor cd_S2785C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2785C1, buf);
    S2785C1 &lv = *(new (buf) S2785C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2785C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2785C1)");
    check_base_class_offset(lv, (S119C17_nt*)(S2785C2*), 0, "S2785C1");
    check_base_class_offset(lv, (S2785C2*), 0, "S2785C1");
    test_class_info(&lv, &cd_S2785C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2785C1(Test_S2785C1, "S2785C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S119C17_nt;
extern Class_Descriptor cd_S2785C2;
static Base_Class bases_S2785C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2785C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2785C1 = {  "S2785C1", // class name
  bases_S2785C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5680C1  : S119C12_nt {
  int s5680c1f0;
};
//SIG(1 S5680C1) C1{ BC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi}



static void Test_S5680C1()
{
  extern Class_Descriptor cd_S5680C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S5680C1, buf);
    S5680C1 &lv = *(new (buf) S5680C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S5680C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5680C1)");
    check_base_class_offset(lv, (S119C12_nt*), 0, "S5680C1");
    check_field_offset(lv, s5680c1f0, ABISELECT(24,16), "S5680C1.s5680c1f0");
    test_class_info(&lv, &cd_S5680C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5680C1(Test_S5680C1, "S5680C1", ABISELECT(32,20));

#else // __cplusplus

extern Class_Descriptor cd_S119C12_nt;
static Base_Class bases_S5680C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S119C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5680C1 = {  "S5680C1", // class name
  bases_S5680C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12019C1  {
  ::S119C12_nt s12019c1f0;
};
//SIG(1 S12019C1) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi}}



static void Test_S12019C1()
{
  {
    init_simple_test("S12019C1");
    S12019C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S12019C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12019C1)");
    check_field_offset(lv, s12019c1f0, 0, "S12019C1.s12019c1f0");
  }
}
static Arrange_To_Call_Me vS12019C1(Test_S12019C1, "S12019C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15217C1  {
  char s15217c1f0[2048];
  int s15217c1f1[2];
  __tsi64 s15217c1f2;
  void  mf15217c1(); // _ZN8S15217C19mf15217c1Ev
};
//SIG(1 S15217C1) C1{ m Fc[2048] Fi[2] FL}


void  S15217C1 ::mf15217c1(){}

static void Test_S15217C1()
{
  {
    init_simple_test("S15217C1");
    S15217C1 lv;
    check2(sizeof(lv), 2064, "sizeof(S15217C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15217C1)");
    check_field_offset(lv, s15217c1f0, 0, "S15217C1.s15217c1f0");
    check_field_offset(lv, s15217c1f1, 2048, "S15217C1.s15217c1f1");
    check_field_offset(lv, s15217c1f2, 2056, "S15217C1.s15217c1f2");
  }
}
static Arrange_To_Call_Me vS15217C1(Test_S15217C1, "S15217C1", 2064);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14343C1  {
  void *s14343c1f0;
  int s14343c1f1[4];
  char s14343c1f2[12];
  long s14343c1f3;
};
//SIG(1 S14343C1) C1{ Fp Fi[4] Fc[12] Fl}



static void Test_S14343C1()
{
  {
    init_simple_test("S14343C1");
    S14343C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S14343C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14343C1)");
    check_field_offset(lv, s14343c1f0, 0, "S14343C1.s14343c1f0");
    check_field_offset(lv, s14343c1f1, ABISELECT(8,4), "S14343C1.s14343c1f1");
    check_field_offset(lv, s14343c1f2, ABISELECT(24,20), "S14343C1.s14343c1f2");
    check_field_offset(lv, s14343c1f3, ABISELECT(40,32), "S14343C1.s14343c1f3");
  }
}
static Arrange_To_Call_Me vS14343C1(Test_S14343C1, "S14343C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18613C2_nt  {
  virtual void  v4(); // _ZN11S18613C2_nt2v4Ev
  ~S18613C2_nt(); // tgen
  S18613C2_nt(); // tgen
};
//SIG(-1 S18613C2_nt) C1{ v1}


void  S18613C2_nt ::v4(){vfunc_called(this, "_ZN11S18613C2_nt2v4Ev");}
S18613C2_nt ::~S18613C2_nt(){ note_dtor("S18613C2_nt", this);} // tgen
S18613C2_nt ::S18613C2_nt(){ note_ctor("S18613C2_nt", this);} // tgen

//skip512 S18613C2_nt

#else // __cplusplus

extern void _ZN11S18613C2_ntC1Ev();
extern void _ZN11S18613C2_ntD1Ev();
Name_Map name_map_S18613C2_nt[] = {
  NSPAIR(_ZN11S18613C2_ntC1Ev),
  NSPAIR(_ZN11S18613C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S18613C2_nt[];
extern void _ZN11S18613C2_nt2v4Ev();
static  VTBL_ENTRY vtc_S18613C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S18613C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S18613C2_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI11S18613C2_nt[];
VTBL_ENTRY *P__ZTI11S18613C2_nt = _ZTI11S18613C2_nt; 
extern  VTBL_ENTRY _ZTV11S18613C2_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18613C1  {
  ::S18613C2_nt s18613c1f0;
  long s18613c1f1;
  virtual void  v1(); // _ZN8S18613C12v1Ev
  virtual void  v2(); // _ZN8S18613C12v2Ev
  virtual void  v3(); // _ZN8S18613C12v3Ev
  ~S18613C1(); // tgen
  S18613C1(); // tgen
};
//SIG(1 S18613C1) C1{ v1 v2 v3 FC2{ v4} Fl}


void  S18613C1 ::v1(){vfunc_called(this, "_ZN8S18613C12v1Ev");}
void  S18613C1 ::v2(){vfunc_called(this, "_ZN8S18613C12v2Ev");}
void  S18613C1 ::v3(){vfunc_called(this, "_ZN8S18613C12v3Ev");}
S18613C1 ::~S18613C1(){ note_dtor("S18613C1", this);} // tgen
S18613C1 ::S18613C1(){ note_ctor("S18613C1", this);} // tgen

static void Test_S18613C1()
{
  extern Class_Descriptor cd_S18613C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18613C1, buf);
    S18613C1 *dp, &lv = *(dp=new (buf) S18613C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18613C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18613C1)");
    check_field_offset(lv, s18613c1f0, ABISELECT(8,4), "S18613C1.s18613c1f0");
    check_field_offset(lv, s18613c1f1, ABISELECT(16,8), "S18613C1.s18613c1f1");
    test_class_info(&lv, &cd_S18613C1);
    dp->~S18613C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18613C1(Test_S18613C1, "S18613C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18613C1C1Ev();
extern void _ZN8S18613C1D1Ev();
Name_Map name_map_S18613C1[] = {
  NSPAIR(_ZN8S18613C1C1Ev),
  NSPAIR(_ZN8S18613C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18613C1[];
extern void _ZN8S18613C12v1Ev();
extern void _ZN8S18613C12v2Ev();
extern void _ZN8S18613C12v3Ev();
static  VTBL_ENTRY vtc_S18613C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18613C1[0]),
  (VTBL_ENTRY)&_ZN8S18613C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18613C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18613C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18613C1[];
extern  VTBL_ENTRY _ZTV8S18613C1[];
Class_Descriptor cd_S18613C1 = {  "S18613C1", // class name
  0,0,//no base classes
  &(vtc_S18613C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18613C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18613C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11564C2_nt  {
  int s11564c2f0[2];
};
//SIG(-1 S11564C2_nt) C1{ Fi[2]}



//skip512 S11564C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11564C1  {
  ::S11564C2_nt s11564c1f0;
  ::S11564C2_nt s11564c1f1;
  ::S11564C2_nt s11564c1f2;
};
//SIG(1 S11564C1) C1{ FC2{ Fi[2]} FC2 FC2}



static void Test_S11564C1()
{
  {
    init_simple_test("S11564C1");
    S11564C1 lv;
    check2(sizeof(lv), 24, "sizeof(S11564C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11564C1)");
    check_field_offset(lv, s11564c1f0, 0, "S11564C1.s11564c1f0");
    check_field_offset(lv, s11564c1f1, 8, "S11564C1.s11564c1f1");
    check_field_offset(lv, s11564c1f2, 16, "S11564C1.s11564c1f2");
  }
}
static Arrange_To_Call_Me vS11564C1(Test_S11564C1, "S11564C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13221C1  {
  int s13221c1f0[2];
  void *s13221c1f1[2];
  int s13221c1f2;
  void *s13221c1f3;
};
//SIG(1 S13221C1) C1{ Fi[2] Fp[2] Fi Fp}



static void Test_S13221C1()
{
  {
    init_simple_test("S13221C1");
    S13221C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S13221C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13221C1)");
    check_field_offset(lv, s13221c1f0, 0, "S13221C1.s13221c1f0");
    check_field_offset(lv, s13221c1f1, 8, "S13221C1.s13221c1f1");
    check_field_offset(lv, s13221c1f2, ABISELECT(24,16), "S13221C1.s13221c1f2");
    check_field_offset(lv, s13221c1f3, ABISELECT(32,20), "S13221C1.s13221c1f3");
  }
}
static Arrange_To_Call_Me vS13221C1(Test_S13221C1, "S13221C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14526C1  {
  void *s14526c1f0[2];
  int s14526c1f1[2];
  char s14526c1f2[2];
};
//SIG(1 S14526C1) C1{ Fp[2] Fi[2] Fc[2]}



static void Test_S14526C1()
{
  {
    init_simple_test("S14526C1");
    S14526C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S14526C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14526C1)");
    check_field_offset(lv, s14526c1f0, 0, "S14526C1.s14526c1f0");
    check_field_offset(lv, s14526c1f1, ABISELECT(16,8), "S14526C1.s14526c1f1");
    check_field_offset(lv, s14526c1f2, ABISELECT(24,16), "S14526C1.s14526c1f2");
  }
}
static Arrange_To_Call_Me vS14526C1(Test_S14526C1, "S14526C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17795C1  {
  void *s17795c1f0;
  int s17795c1f1[2];
  void *s17795c1f2;
  char s17795c1f3;
  void  mf17795c1(); // _ZN8S17795C19mf17795c1Ev
};
//SIG(1 S17795C1) C1{ m Fp Fi[2] Fp Fc}


void  S17795C1 ::mf17795c1(){}

static void Test_S17795C1()
{
  {
    init_simple_test("S17795C1");
    S17795C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17795C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17795C1)");
    check_field_offset(lv, s17795c1f0, 0, "S17795C1.s17795c1f0");
    check_field_offset(lv, s17795c1f1, ABISELECT(8,4), "S17795C1.s17795c1f1");
    check_field_offset(lv, s17795c1f2, ABISELECT(16,12), "S17795C1.s17795c1f2");
    check_field_offset(lv, s17795c1f3, ABISELECT(24,16), "S17795C1.s17795c1f3");
  }
}
static Arrange_To_Call_Me vS17795C1(Test_S17795C1, "S17795C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5539C2_nt  {
  int s5539c2f0;
};
//SIG(-1 S5539C2_nt) C1{ Fi}



//skip512 S5539C2_nt

#else // __cplusplus

Class_Descriptor cd_S5539C2_nt = {  "S5539C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5539C3_nt  {
  int s5539c3f0;
  void  mf5539c3(); // _ZN10S5539C3_nt8mf5539c3Ev
};
//SIG(-1 S5539C3_nt) C1{ m Fi}


void  S5539C3_nt ::mf5539c3(){}

//skip512 S5539C3_nt

#else // __cplusplus

Class_Descriptor cd_S5539C3_nt = {  "S5539C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5539C1  : S5539C2_nt , S5539C3_nt {
};
//SIG(1 S5539C1) C1{ BC2{ Fi} BC3{ m Fi}}



static void Test_S5539C1()
{
  extern Class_Descriptor cd_S5539C1;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S5539C1, buf);
    S5539C1 &lv = *(new (buf) S5539C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S5539C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5539C1)");
    check_base_class_offset(lv, (S5539C2_nt*), 0, "S5539C1");
    check_base_class_offset(lv, (S5539C3_nt*), 4, "S5539C1");
    test_class_info(&lv, &cd_S5539C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5539C1(Test_S5539C1, "S5539C1", 8);

#else // __cplusplus

extern Class_Descriptor cd_S5539C2_nt;
extern Class_Descriptor cd_S5539C3_nt;
static Base_Class bases_S5539C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5539C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5539C3_nt,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5539C1 = {  "S5539C1", // class name
  bases_S5539C1, 2,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16978C1  {
  int s16978c1f0;
  void *s16978c1f1[5];
  int s16978c1f2;
  void *s16978c1f3;
  void  mf16978c1(); // _ZN8S16978C19mf16978c1Ev
};
//SIG(1 S16978C1) C1{ m Fi Fp[5] Fi Fp}


void  S16978C1 ::mf16978c1(){}

static void Test_S16978C1()
{
  {
    init_simple_test("S16978C1");
    S16978C1 lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S16978C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16978C1)");
    check_field_offset(lv, s16978c1f0, 0, "S16978C1.s16978c1f0");
    check_field_offset(lv, s16978c1f1, ABISELECT(8,4), "S16978C1.s16978c1f1");
    check_field_offset(lv, s16978c1f2, ABISELECT(48,24), "S16978C1.s16978c1f2");
    check_field_offset(lv, s16978c1f3, ABISELECT(56,28), "S16978C1.s16978c1f3");
  }
}
static Arrange_To_Call_Me vS16978C1(Test_S16978C1, "S16978C1", ABISELECT(64,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15218C1  {
  char s15218c1f0[256];
  int s15218c1f1[2];
  void  mf15218c1(); // _ZN8S15218C19mf15218c1Ev
};
//SIG(1 S15218C1) C1{ m Fc[256] Fi[2]}


void  S15218C1 ::mf15218c1(){}

static void Test_S15218C1()
{
  {
    init_simple_test("S15218C1");
    S15218C1 lv;
    check2(sizeof(lv), 264, "sizeof(S15218C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15218C1)");
    check_field_offset(lv, s15218c1f0, 0, "S15218C1.s15218c1f0");
    check_field_offset(lv, s15218c1f1, 256, "S15218C1.s15218c1f1");
  }
}
static Arrange_To_Call_Me vS15218C1(Test_S15218C1, "S15218C1", 264);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14496C1  {
  void *s14496c1f0[2];
  int s14496c1f1;
  char s14496c1f2[0];
};
//SIG(1 S14496C1) C1{ Fp[2] Fi Fc[0]}



static void Test_S14496C1()
{
  {
    init_simple_test("S14496C1");
    S14496C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S14496C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14496C1)");
    check_field_offset(lv, s14496c1f0, 0, "S14496C1.s14496c1f0");
    check_field_offset(lv, s14496c1f1, ABISELECT(16,8), "S14496C1.s14496c1f1");
    check_field_offset(lv, s14496c1f2, ABISELECT(20,12), "S14496C1.s14496c1f2");
  }
}
static Arrange_To_Call_Me vS14496C1(Test_S14496C1, "S14496C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5882C1  : S5539C3_nt {
  __tsi64 s5882c1f0[3];
};
//SIG(1 S5882C1) C1{ BC2{ m Fi} FL[3]}



static void Test_S5882C1()
{
  extern Class_Descriptor cd_S5882C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S5882C1, buf);
    S5882C1 &lv = *(new (buf) S5882C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S5882C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5882C1)");
    check_base_class_offset(lv, (S5539C3_nt*), 0, "S5882C1");
    check_field_offset(lv, s5882c1f0, ABISELECT(8,4), "S5882C1.s5882c1f0");
    test_class_info(&lv, &cd_S5882C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5882C1(Test_S5882C1, "S5882C1", ABISELECT(32,28));

#else // __cplusplus

extern Class_Descriptor cd_S5539C3_nt;
static Base_Class bases_S5882C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5539C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5882C1 = {  "S5882C1", // class name
  bases_S5882C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14385C1  {
  void *s14385c1f0;
  __tsi64 s14385c1f1;
  int s14385c1f2[3];
  char s14385c1f3;
};
//SIG(1 S14385C1) C1{ Fp FL Fi[3] Fc}



static void Test_S14385C1()
{
  {
    init_simple_test("S14385C1");
    S14385C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S14385C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14385C1)");
    check_field_offset(lv, s14385c1f0, 0, "S14385C1.s14385c1f0");
    check_field_offset(lv, s14385c1f1, ABISELECT(8,4), "S14385C1.s14385c1f1");
    check_field_offset(lv, s14385c1f2, ABISELECT(16,12), "S14385C1.s14385c1f2");
    check_field_offset(lv, s14385c1f3, ABISELECT(28,24), "S14385C1.s14385c1f3");
  }
}
static Arrange_To_Call_Me vS14385C1(Test_S14385C1, "S14385C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13011C1  {
  int s13011c1f0[2];
  char s13011c1f1[256];
};
//SIG(1 S13011C1) C1{ Fi[2] Fc[256]}



static void Test_S13011C1()
{
  {
    init_simple_test("S13011C1");
    S13011C1 lv;
    check2(sizeof(lv), 264, "sizeof(S13011C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13011C1)");
    check_field_offset(lv, s13011c1f0, 0, "S13011C1.s13011c1f0");
    check_field_offset(lv, s13011c1f1, 8, "S13011C1.s13011c1f1");
  }
}
static Arrange_To_Call_Me vS13011C1(Test_S13011C1, "S13011C1", 264);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15235C1  {
  char s15235c1f0[3];
  short s15235c1f1[2];
  void  mf15235c1(); // _ZN8S15235C19mf15235c1Ev
};
//SIG(1 S15235C1) C1{ m Fc[3] Fs[2]}


void  S15235C1 ::mf15235c1(){}

static void Test_S15235C1()
{
  {
    init_simple_test("S15235C1");
    S15235C1 lv;
    check2(sizeof(lv), 8, "sizeof(S15235C1)");
    check2(__alignof__(lv), 2, "__alignof__(S15235C1)");
    check_field_offset(lv, s15235c1f0, 0, "S15235C1.s15235c1f0");
    check_field_offset(lv, s15235c1f1, 4, "S15235C1.s15235c1f1");
  }
}
static Arrange_To_Call_Me vS15235C1(Test_S15235C1, "S15235C1", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13573C1  {
  int s13573c1f0[6];
  char s13573c1f1[64];
};
//SIG(1 S13573C1) C1{ Fi[6] Fc[64]}



static void Test_S13573C1()
{
  {
    init_simple_test("S13573C1");
    S13573C1 lv;
    check2(sizeof(lv), 88, "sizeof(S13573C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13573C1)");
    check_field_offset(lv, s13573c1f0, 0, "S13573C1.s13573c1f0");
    check_field_offset(lv, s13573c1f1, 24, "S13573C1.s13573c1f1");
  }
}
static Arrange_To_Call_Me vS13573C1(Test_S13573C1, "S13573C1", 88);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10863C1  {
  char s10863c1f0[38];
  int s10863c1f1[2];
};
//SIG(1 S10863C1) C1{ Fc[38] Fi[2]}



static void Test_S10863C1()
{
  {
    init_simple_test("S10863C1");
    S10863C1 lv;
    check2(sizeof(lv), 48, "sizeof(S10863C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10863C1)");
    check_field_offset(lv, s10863c1f0, 0, "S10863C1.s10863c1f0");
    check_field_offset(lv, s10863c1f1, 40, "S10863C1.s10863c1f1");
  }
}
static Arrange_To_Call_Me vS10863C1(Test_S10863C1, "S10863C1", 48);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17038C1  {
  int s17038c1f0[13];
  short s17038c1f1;
  void  mf17038c1(); // _ZN8S17038C19mf17038c1Ev
};
//SIG(1 S17038C1) C1{ m Fi[13] Fs}


void  S17038C1 ::mf17038c1(){}

static void Test_S17038C1()
{
  {
    init_simple_test("S17038C1");
    S17038C1 lv;
    check2(sizeof(lv), 56, "sizeof(S17038C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17038C1)");
    check_field_offset(lv, s17038c1f0, 0, "S17038C1.s17038c1f0");
    check_field_offset(lv, s17038c1f1, 52, "S17038C1.s17038c1f1");
  }
}
static Arrange_To_Call_Me vS17038C1(Test_S17038C1, "S17038C1", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13977C1  {
  long s13977c1f0[3];
  int s13977c1f1[2];
};
//SIG(1 S13977C1) C1{ Fl[3] Fi[2]}



static void Test_S13977C1()
{
  {
    init_simple_test("S13977C1");
    S13977C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S13977C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13977C1)");
    check_field_offset(lv, s13977c1f0, 0, "S13977C1.s13977c1f0");
    check_field_offset(lv, s13977c1f1, ABISELECT(24,12), "S13977C1.s13977c1f1");
  }
}
static Arrange_To_Call_Me vS13977C1(Test_S13977C1, "S13977C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12246C1  {
  int s12246c1f0;
  char s12246c1f1[2064];
};
//SIG(1 S12246C1) C1{ Fi Fc[2064]}



static void Test_S12246C1()
{
  {
    init_simple_test("S12246C1");
    S12246C1 lv;
    check2(sizeof(lv), 2068, "sizeof(S12246C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12246C1)");
    check_field_offset(lv, s12246c1f0, 0, "S12246C1.s12246c1f0");
    check_field_offset(lv, s12246c1f1, 4, "S12246C1.s12246c1f1");
  }
}
static Arrange_To_Call_Me vS12246C1(Test_S12246C1, "S12246C1", 2068);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12939C1  {
  int s12939c1f0:8;
  int s12939c1f1:24;
};
//SIG(1 S12939C1) C1{ Fi:8 Fi:24}



static void Test_S12939C1()
{
  {
    init_simple_test("S12939C1");
    static S12939C1 lv;
    check2(sizeof(lv), 4, "sizeof(S12939C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12939C1)");
    set_bf_and_test(lv, s12939c1f0, 0, 0, 8, 1, "S12939C1");
    set_bf_and_test(lv, s12939c1f0, 0, 0, 8, hide_sll(1LL<<7), "S12939C1");
    set_bf_and_test(lv, s12939c1f1, 1, 0, 24, 1, "S12939C1");
    set_bf_and_test(lv, s12939c1f1, 1, 0, 24, hide_sll(1LL<<23), "S12939C1");
  }
}
static Arrange_To_Call_Me vS12939C1(Test_S12939C1, "S12939C1", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12326C1  {
  int s12326c1f0;
  char s12326c1f1[68];
};
//SIG(1 S12326C1) C1{ Fi Fc[68]}



static void Test_S12326C1()
{
  {
    init_simple_test("S12326C1");
    S12326C1 lv;
    check2(sizeof(lv), 72, "sizeof(S12326C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12326C1)");
    check_field_offset(lv, s12326c1f0, 0, "S12326C1.s12326c1f0");
    check_field_offset(lv, s12326c1f1, 4, "S12326C1.s12326c1f1");
  }
}
static Arrange_To_Call_Me vS12326C1(Test_S12326C1, "S12326C1", 72);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14564C1  {
  void *s14564c1f0[2];
  __tsi64 s14564c1f1;
};
//SIG(1 S14564C1) C1{ Fp[2] FL}



static void Test_S14564C1()
{
  {
    init_simple_test("S14564C1");
    S14564C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S14564C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14564C1)");
    check_field_offset(lv, s14564c1f0, 0, "S14564C1.s14564c1f0");
    check_field_offset(lv, s14564c1f1, ABISELECT(16,8), "S14564C1.s14564c1f1");
  }
}
static Arrange_To_Call_Me vS14564C1(Test_S14564C1, "S14564C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10430C1  {
  __tsi64 s10430c1f0;
  __tsi64 s10430c1f1;
};
//SIG(1 S10430C1) C1{ FL[2]}



static void Test_S10430C1()
{
  {
    init_simple_test("S10430C1");
    S10430C1 lv;
    check2(sizeof(lv), 16, "sizeof(S10430C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10430C1)");
    check_field_offset(lv, s10430c1f0, 0, "S10430C1.s10430c1f0");
    check_field_offset(lv, s10430c1f1, 8, "S10430C1.s10430c1f1");
  }
}
static Arrange_To_Call_Me vS10430C1(Test_S10430C1, "S10430C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14740C1  {
  void *s14740c1f0[80];
};
//SIG(1 S14740C1) C1{ Fp[80]}



static void Test_S14740C1()
{
  {
    init_simple_test("S14740C1");
    S14740C1 lv;
    check2(sizeof(lv), ABISELECT(640,320), "sizeof(S14740C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14740C1)");
    check_field_offset(lv, s14740c1f0, 0, "S14740C1.s14740c1f0");
  }
}
static Arrange_To_Call_Me vS14740C1(Test_S14740C1, "S14740C1", ABISELECT(640,320));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

