// This file is distributed under the University of Illinois Open Source License.
// See LICENSE.TXT for details.
// 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  S10180C2  {
  virtual  ~S10180C2(); // _ZN8S10180C2D1Ev
  virtual void  v7(); // _ZN8S10180C22v7Ev
  S10180C2(); // tgen
};
//SIG(-1 S10180C2) C1{ vd v1}


 S10180C2 ::~S10180C2(){ note_dtor("S10180C2", this);}
void  S10180C2 ::v7(){vfunc_called(this, "_ZN8S10180C22v7Ev");}
S10180C2 ::S10180C2(){ note_ctor("S10180C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10180C2C1Ev();
extern void _ZN8S10180C2D1Ev();
Name_Map name_map_S10180C2[] = {
  NSPAIR(_ZN8S10180C2C1Ev),
  NSPAIR(_ZN8S10180C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10180C2[];
extern void _ZN8S10180C2D1Ev();
extern void _ZN8S10180C2D0Ev();
extern void _ZN8S10180C22v7Ev();
static  VTBL_ENTRY vtc_S10180C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10180C2[0]),
  (VTBL_ENTRY)&_ZN8S10180C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10180C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
Class_Descriptor cd_S10180C2 = {  "S10180C2", // class name
  0,0,//no base classes
  &(vtc_S10180C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10180C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10180C2),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  S10180C3  {
  void *s10180c3f0;
  virtual  ~S10180C3(); // _ZN8S10180C3D1Ev
  virtual void  v8(); // _ZN8S10180C32v8Ev
  virtual void  v9(); // _ZN8S10180C32v9Ev
  virtual void  v10(); // _ZN8S10180C33v10Ev
  virtual void  v11(); // _ZN8S10180C33v11Ev
  virtual void  v12(); // _ZN8S10180C33v12Ev
  S10180C3(); // tgen
};
//SIG(-1 S10180C3) C1{ vd v1 v2 v3 v4 v5 Fp}


 S10180C3 ::~S10180C3(){ note_dtor("S10180C3", this);}
void  S10180C3 ::v8(){vfunc_called(this, "_ZN8S10180C32v8Ev");}
void  S10180C3 ::v9(){vfunc_called(this, "_ZN8S10180C32v9Ev");}
void  S10180C3 ::v10(){vfunc_called(this, "_ZN8S10180C33v10Ev");}
void  S10180C3 ::v11(){vfunc_called(this, "_ZN8S10180C33v11Ev");}
void  S10180C3 ::v12(){vfunc_called(this, "_ZN8S10180C33v12Ev");}
S10180C3 ::S10180C3(){ note_ctor("S10180C3", this);} // tgen

static void Test_S10180C3()
{
  extern Class_Descriptor cd_S10180C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10180C3, buf);
    S10180C3 *dp, &lv = *(dp=new (buf) S10180C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10180C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C3)");
    check_field_offset(lv, s10180c3f0, ABISELECT(8,4), "S10180C3.s10180c3f0");
    test_class_info(&lv, &cd_S10180C3);
    dp->~S10180C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C3(Test_S10180C3, "S10180C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10180C3C1Ev();
extern void _ZN8S10180C3D1Ev();
Name_Map name_map_S10180C3[] = {
  NSPAIR(_ZN8S10180C3C1Ev),
  NSPAIR(_ZN8S10180C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10180C3[];
extern void _ZN8S10180C3D1Ev();
extern void _ZN8S10180C3D0Ev();
extern void _ZN8S10180C32v8Ev();
extern void _ZN8S10180C32v9Ev();
extern void _ZN8S10180C33v10Ev();
extern void _ZN8S10180C33v11Ev();
extern void _ZN8S10180C33v12Ev();
static  VTBL_ENTRY vtc_S10180C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10180C3[0]),
  (VTBL_ENTRY)&_ZN8S10180C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10180C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10180C32v8Ev,
  (VTBL_ENTRY)&_ZN8S10180C32v9Ev,
  (VTBL_ENTRY)&_ZN8S10180C33v10Ev,
  (VTBL_ENTRY)&_ZN8S10180C33v11Ev,
  (VTBL_ENTRY)&_ZN8S10180C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S10180C3[];
extern  VTBL_ENTRY _ZTV8S10180C3[];
Class_Descriptor cd_S10180C3 = {  "S10180C3", // class name
  0,0,//no base classes
  &(vtc_S10180C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10180C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10180C3),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  S10180C7  {
  void  mf10180c7(); // _ZN8S10180C79mf10180c7Ev
};
//SIG(-1 S10180C7) C1{ m}


void  S10180C7 ::mf10180c7(){}

static void Test_S10180C7()
{
  {
    init_simple_test("S10180C7");
    S10180C7 lv;
    check2(sizeof(lv), 1, "sizeof(S10180C7)");
    check2(__alignof__(lv), 1, "__alignof__(S10180C7)");
  }
}
static Arrange_To_Call_Me vS10180C7(Test_S10180C7, "S10180C7", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C6  {
  void *s10180c6f0;
  int s10180c6f1;
  ::S10180C7 s10180c6f2;
  ::S10180C7 s10180c6f3;
  void  mf10180c6(); // _ZN8S10180C69mf10180c6Ev
};
//SIG(-1 S10180C6) C1{ m Fp Fi FC2{ m} FC2}


void  S10180C6 ::mf10180c6(){}

static void Test_S10180C6()
{
  {
    init_simple_test("S10180C6");
    S10180C6 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10180C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C6)");
    check_field_offset(lv, s10180c6f0, 0, "S10180C6.s10180c6f0");
    check_field_offset(lv, s10180c6f1, ABISELECT(8,4), "S10180C6.s10180c6f1");
    check_field_offset(lv, s10180c6f2, ABISELECT(12,8), "S10180C6.s10180c6f2");
    check_field_offset(lv, s10180c6f3, ABISELECT(13,9), "S10180C6.s10180c6f3");
  }
}
static Arrange_To_Call_Me vS10180C6(Test_S10180C6, "S10180C6", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S10180C6 = {  "S10180C6", // 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  S10180C5  : S10180C6 {
};
//SIG(-1 S10180C5) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



static void Test_S10180C5()
{
  extern Class_Descriptor cd_S10180C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S10180C5, buf);
    S10180C5 &lv = *(new (buf) S10180C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10180C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C5)");
    check_base_class_offset(lv, (S10180C6*), 0, "S10180C5");
    test_class_info(&lv, &cd_S10180C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C5(Test_S10180C5, "S10180C5", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S10180C6;
static Base_Class bases_S10180C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C5 = {  "S10180C5", // class name
  bases_S10180C5, 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  S10180C4  {
  void *s10180c4f0;
  ::S10180C5 s10180c4f1;
  void  mf10180c4(); // _ZN8S10180C49mf10180c4Ev
};
//SIG(-1 S10180C4) C1{ m Fp FC2{ BC3{ m Fp Fi FC4{ m} FC4}}}


void  S10180C4 ::mf10180c4(){}

static void Test_S10180C4()
{
  {
    init_simple_test("S10180C4");
    S10180C4 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S10180C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C4)");
    check_field_offset(lv, s10180c4f0, 0, "S10180C4.s10180c4f0");
    check_field_offset(lv, s10180c4f1, ABISELECT(8,4), "S10180C4.s10180c4f1");
  }
}
static Arrange_To_Call_Me vS10180C4(Test_S10180C4, "S10180C4", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C9  {
  int s10180c9f0;
  void *s10180c9f1;
  int s10180c9f2[4];
  void *s10180c9f3;
  void  mf10180c9(); // _ZN8S10180C99mf10180c9Ev
};
//SIG(-1 S10180C9) C1{ m Fi Fp Fi[4] Fp}


void  S10180C9 ::mf10180c9(){}

static void Test_S10180C9()
{
  {
    init_simple_test("S10180C9");
    S10180C9 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S10180C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C9)");
    check_field_offset(lv, s10180c9f0, 0, "S10180C9.s10180c9f0");
    check_field_offset(lv, s10180c9f1, ABISELECT(8,4), "S10180C9.s10180c9f1");
    check_field_offset(lv, s10180c9f2, ABISELECT(16,8), "S10180C9.s10180c9f2");
    check_field_offset(lv, s10180c9f3, ABISELECT(32,24), "S10180C9.s10180c9f3");
  }
}
static Arrange_To_Call_Me vS10180C9(Test_S10180C9, "S10180C9", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C14  {
  void  mf10180c14(); // _ZN9S10180C1410mf10180c14Ev
};
//SIG(-1 S10180C14) C1{ m}


void  S10180C14 ::mf10180c14(){}

static void Test_S10180C14()
{
  {
    init_simple_test("S10180C14");
    S10180C14 lv;
    check2(sizeof(lv), 1, "sizeof(S10180C14)");
    check2(__alignof__(lv), 1, "__alignof__(S10180C14)");
  }
}
static Arrange_To_Call_Me vS10180C14(Test_S10180C14, "S10180C14", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S10180C14[];
VTBL_ENTRY *P__ZTI9S10180C14 = _ZTI9S10180C14; 
Class_Descriptor cd_S10180C14 = {  "S10180C14", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S10180C14),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  S10180C13  {
  void *s10180c13f0;
  int s10180c13f1;
  ::S10180C14 s10180c13f2;
  void  mf10180c13(); // _ZN9S10180C1310mf10180c13Ev
};
//SIG(-1 S10180C13) C1{ m Fp Fi FC2{ m}}


void  S10180C13 ::mf10180c13(){}

static void Test_S10180C13()
{
  {
    init_simple_test("S10180C13");
    S10180C13 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10180C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C13)");
    check_field_offset(lv, s10180c13f0, 0, "S10180C13.s10180c13f0");
    check_field_offset(lv, s10180c13f1, ABISELECT(8,4), "S10180C13.s10180c13f1");
    check_field_offset(lv, s10180c13f2, ABISELECT(12,8), "S10180C13.s10180c13f2");
  }
}
static Arrange_To_Call_Me vS10180C13(Test_S10180C13, "S10180C13", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C12  {
  ::S10180C13 s10180c12f0;
  int s10180c12f1;
  void  mf10180c12(); // _ZN9S10180C1210mf10180c12Ev
};
//SIG(-1 S10180C12) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S10180C12 ::mf10180c12(){}

static void Test_S10180C12()
{
  {
    init_simple_test("S10180C12");
    S10180C12 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S10180C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C12)");
    check_field_offset(lv, s10180c12f0, 0, "S10180C12.s10180c12f0");
    check_field_offset(lv, s10180c12f1, ABISELECT(16,12), "S10180C12.s10180c12f1");
  }
}
static Arrange_To_Call_Me vS10180C12(Test_S10180C12, "S10180C12", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C15  {
  int s10180c15f0[4];
  void *s10180c15f1;
  char s10180c15f2;
  int s10180c15f3[2];
  void *s10180c15f4[2];
  void  mf10180c15(); // _ZN9S10180C1510mf10180c15Ev
};
//SIG(-1 S10180C15) C1{ m Fi[4] Fp Fc Fi[2] Fp[2]}


void  S10180C15 ::mf10180c15(){}

static void Test_S10180C15()
{
  {
    init_simple_test("S10180C15");
    S10180C15 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S10180C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C15)");
    check_field_offset(lv, s10180c15f0, 0, "S10180C15.s10180c15f0");
    check_field_offset(lv, s10180c15f1, 16, "S10180C15.s10180c15f1");
    check_field_offset(lv, s10180c15f2, ABISELECT(24,20), "S10180C15.s10180c15f2");
    check_field_offset(lv, s10180c15f3, ABISELECT(28,24), "S10180C15.s10180c15f3");
    check_field_offset(lv, s10180c15f4, ABISELECT(40,32), "S10180C15.s10180c15f4");
  }
}
static Arrange_To_Call_Me vS10180C15(Test_S10180C15, "S10180C15", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C11  {
  void *s10180c11f0;
  ::S10180C12 s10180c11f1;
  ::S10180C15 s10180c11f2;
  virtual  ~S10180C11(); // _ZN9S10180C11D1Ev
  virtual void  v15(); // _ZN9S10180C113v15Ev
  virtual void  v16(); // _ZN9S10180C113v16Ev
  virtual void  v17(); // _ZN9S10180C113v17Ev
  virtual void  v18(); // _ZN9S10180C113v18Ev
  virtual void  v19(); // _ZN9S10180C113v19Ev
  virtual void  v20(); // _ZN9S10180C113v20Ev
  virtual void  v21(); // _ZN9S10180C113v21Ev
  virtual void  v22(); // _ZN9S10180C113v22Ev
  virtual void  v23(); // _ZN9S10180C113v23Ev
  virtual void  v24(); // _ZN9S10180C113v24Ev
  virtual void  v25(); // _ZN9S10180C113v25Ev
  virtual void  v26(); // _ZN9S10180C113v26Ev
  virtual void  v27(); // _ZN9S10180C113v27Ev
  virtual void  v28(); // _ZN9S10180C113v28Ev
  virtual void  v29(); // _ZN9S10180C113v29Ev
  virtual void  v30(); // _ZN9S10180C113v30Ev
  virtual void  v31(); // _ZN9S10180C113v31Ev
  virtual void  v32(); // _ZN9S10180C113v32Ev
  virtual void  v33(); // _ZN9S10180C113v33Ev
  virtual void  v34(); // _ZN9S10180C113v34Ev
  virtual void  v35(); // _ZN9S10180C113v35Ev
  virtual void  v36(); // _ZN9S10180C113v36Ev
  virtual void  v37(); // _ZN9S10180C113v37Ev
  virtual void  v38(); // _ZN9S10180C113v38Ev
  S10180C11(); // tgen
};
//SIG(-1 S10180C11) 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 Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S10180C11 ::~S10180C11(){ note_dtor("S10180C11", this);}
void  S10180C11 ::v15(){vfunc_called(this, "_ZN9S10180C113v15Ev");}
void  S10180C11 ::v16(){vfunc_called(this, "_ZN9S10180C113v16Ev");}
void  S10180C11 ::v17(){vfunc_called(this, "_ZN9S10180C113v17Ev");}
void  S10180C11 ::v18(){vfunc_called(this, "_ZN9S10180C113v18Ev");}
void  S10180C11 ::v19(){vfunc_called(this, "_ZN9S10180C113v19Ev");}
void  S10180C11 ::v20(){vfunc_called(this, "_ZN9S10180C113v20Ev");}
void  S10180C11 ::v21(){vfunc_called(this, "_ZN9S10180C113v21Ev");}
void  S10180C11 ::v22(){vfunc_called(this, "_ZN9S10180C113v22Ev");}
void  S10180C11 ::v23(){vfunc_called(this, "_ZN9S10180C113v23Ev");}
void  S10180C11 ::v24(){vfunc_called(this, "_ZN9S10180C113v24Ev");}
void  S10180C11 ::v25(){vfunc_called(this, "_ZN9S10180C113v25Ev");}
void  S10180C11 ::v26(){vfunc_called(this, "_ZN9S10180C113v26Ev");}
void  S10180C11 ::v27(){vfunc_called(this, "_ZN9S10180C113v27Ev");}
void  S10180C11 ::v28(){vfunc_called(this, "_ZN9S10180C113v28Ev");}
void  S10180C11 ::v29(){vfunc_called(this, "_ZN9S10180C113v29Ev");}
void  S10180C11 ::v30(){vfunc_called(this, "_ZN9S10180C113v30Ev");}
void  S10180C11 ::v31(){vfunc_called(this, "_ZN9S10180C113v31Ev");}
void  S10180C11 ::v32(){vfunc_called(this, "_ZN9S10180C113v32Ev");}
void  S10180C11 ::v33(){vfunc_called(this, "_ZN9S10180C113v33Ev");}
void  S10180C11 ::v34(){vfunc_called(this, "_ZN9S10180C113v34Ev");}
void  S10180C11 ::v35(){vfunc_called(this, "_ZN9S10180C113v35Ev");}
void  S10180C11 ::v36(){vfunc_called(this, "_ZN9S10180C113v36Ev");}
void  S10180C11 ::v37(){vfunc_called(this, "_ZN9S10180C113v37Ev");}
void  S10180C11 ::v38(){vfunc_called(this, "_ZN9S10180C113v38Ev");}
S10180C11 ::S10180C11(){ note_ctor("S10180C11", this);} // tgen

static void Test_S10180C11()
{
  extern Class_Descriptor cd_S10180C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S10180C11, buf);
    S10180C11 *dp, &lv = *(dp=new (buf) S10180C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S10180C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C11)");
    check_field_offset(lv, s10180c11f0, ABISELECT(8,4), "S10180C11.s10180c11f0");
    check_field_offset(lv, s10180c11f1, ABISELECT(16,8), "S10180C11.s10180c11f1");
    check_field_offset(lv, s10180c11f2, ABISELECT(40,24), "S10180C11.s10180c11f2");
    test_class_info(&lv, &cd_S10180C11);
    dp->~S10180C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C11(Test_S10180C11, "S10180C11", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN9S10180C11C1Ev();
extern void _ZN9S10180C11D1Ev();
Name_Map name_map_S10180C11[] = {
  NSPAIR(_ZN9S10180C11C1Ev),
  NSPAIR(_ZN9S10180C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C11[];
extern void _ZN9S10180C11D1Ev();
extern void _ZN9S10180C11D0Ev();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
static  VTBL_ENTRY vtc_S10180C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C11[0]),
  (VTBL_ENTRY)&_ZN9S10180C11D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C11D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
};
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
Class_Descriptor cd_S10180C11 = {  "S10180C11", // class name
  0,0,//no base classes
  &(vtc_S10180C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI9S10180C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C11),28, //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  S10180C10  : S10180C11 {
  ::S10180C12 s10180c10f0;
  void *s10180c10f1;
  virtual  ~S10180C10(); // _ZN9S10180C10D1Ev
  virtual void  v13(); // _ZN9S10180C103v13Ev
  virtual void  v14(); // _ZN9S10180C103v14Ev
  S10180C10(); // tgen
};
//SIG(-1 S10180C10) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 FC3 Fp}


 S10180C10 ::~S10180C10(){ note_dtor("S10180C10", this);}
void  S10180C10 ::v13(){vfunc_called(this, "_ZN9S10180C103v13Ev");}
void  S10180C10 ::v14(){vfunc_called(this, "_ZN9S10180C103v14Ev");}
S10180C10 ::S10180C10(){ note_ctor("S10180C10", this);} // tgen

static void Test_S10180C10()
{
  extern Class_Descriptor cd_S10180C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S10180C10, buf);
    S10180C10 *dp, &lv = *(dp=new (buf) S10180C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S10180C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C10)");
    check_base_class_offset(lv, (S10180C11*), 0, "S10180C10");
    check_field_offset(lv, s10180c10f0, ABISELECT(96,64), "S10180C10.s10180c10f0");
    check_field_offset(lv, s10180c10f1, ABISELECT(120,80), "S10180C10.s10180c10f1");
    test_class_info(&lv, &cd_S10180C10);
    dp->~S10180C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C10(Test_S10180C10, "S10180C10", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN9S10180C10C1Ev();
extern void _ZN9S10180C10D1Ev();
Name_Map name_map_S10180C10[] = {
  NSPAIR(_ZN9S10180C10C1Ev),
  NSPAIR(_ZN9S10180C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
static Base_Class bases_S10180C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C10[];
extern void _ZN9S10180C10D1Ev();
extern void _ZN9S10180C10D0Ev();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void _ZN9S10180C103v13Ev();
extern void _ZN9S10180C103v14Ev();
static  VTBL_ENTRY vtc_S10180C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C10[0]),
  (VTBL_ENTRY)&_ZN9S10180C10D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C10D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  (VTBL_ENTRY)&_ZN9S10180C103v13Ev,
  (VTBL_ENTRY)&_ZN9S10180C103v14Ev,
};
extern VTBL_ENTRY _ZTI9S10180C10[];
extern  VTBL_ENTRY _ZTV9S10180C10[];
Class_Descriptor cd_S10180C10 = {  "S10180C10", // class name
  bases_S10180C10, 1,
  &(vtc_S10180C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI9S10180C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C10),30, //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  S10180C20  {
  void  mf10180c20(); // _ZN9S10180C2010mf10180c20Ev
};
//SIG(-1 S10180C20) C1{ m}


void  S10180C20 ::mf10180c20(){}

static void Test_S10180C20()
{
  {
    init_simple_test("S10180C20");
    S10180C20 lv;
    check2(sizeof(lv), 1, "sizeof(S10180C20)");
    check2(__alignof__(lv), 1, "__alignof__(S10180C20)");
  }
}
static Arrange_To_Call_Me vS10180C20(Test_S10180C20, "S10180C20", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S10180C20[];
VTBL_ENTRY *P__ZTI9S10180C20 = _ZTI9S10180C20; 
Class_Descriptor cd_S10180C20 = {  "S10180C20", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S10180C20),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  S10180C18  {
  void *s10180c18f0;
  int s10180c18f1;
  ::S10180C14 s10180c18f2;
  ::S10180C20 s10180c18f3;
  void  mf10180c18(); // _ZN9S10180C1810mf10180c18Ev
};
//SIG(-1 S10180C18) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S10180C18 ::mf10180c18(){}

static void Test_S10180C18()
{
  {
    init_simple_test("S10180C18");
    S10180C18 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10180C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C18)");
    check_field_offset(lv, s10180c18f0, 0, "S10180C18.s10180c18f0");
    check_field_offset(lv, s10180c18f1, ABISELECT(8,4), "S10180C18.s10180c18f1");
    check_field_offset(lv, s10180c18f2, ABISELECT(12,8), "S10180C18.s10180c18f2");
    check_field_offset(lv, s10180c18f3, ABISELECT(13,9), "S10180C18.s10180c18f3");
  }
}
static Arrange_To_Call_Me vS10180C18(Test_S10180C18, "S10180C18", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S10180C18 = {  "S10180C18", // 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  S10180C17  {
  ::S10180C18 s10180c17f0;
  ::S10180C18 s10180c17f1;
  char s10180c17f2;
  void  mf10180c17(); // _ZN9S10180C1710mf10180c17Ev
  virtual  ~S10180C17(); // _ZN9S10180C17D1Ev
  S10180C17(); // tgen
};
//SIG(-1 S10180C17) C1{ vd m FC2{ m Fp Fi FC3{ m} FC4{ m}} FC2 Fc}


void  S10180C17 ::mf10180c17(){}
 S10180C17 ::~S10180C17(){ note_dtor("S10180C17", this);}
S10180C17 ::S10180C17(){ note_ctor("S10180C17", this);} // tgen

static void Test_S10180C17()
{
  extern Class_Descriptor cd_S10180C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S10180C17, buf);
    S10180C17 *dp, &lv = *(dp=new (buf) S10180C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S10180C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C17)");
    check_field_offset(lv, s10180c17f0, ABISELECT(8,4), "S10180C17.s10180c17f0");
    check_field_offset(lv, s10180c17f1, ABISELECT(24,16), "S10180C17.s10180c17f1");
    check_field_offset(lv, s10180c17f2, ABISELECT(40,28), "S10180C17.s10180c17f2");
    test_class_info(&lv, &cd_S10180C17);
    dp->~S10180C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C17(Test_S10180C17, "S10180C17", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN9S10180C17C1Ev();
extern void _ZN9S10180C17D1Ev();
Name_Map name_map_S10180C17[] = {
  NSPAIR(_ZN9S10180C17C1Ev),
  NSPAIR(_ZN9S10180C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C17[];
extern void _ZN9S10180C17D1Ev();
extern void _ZN9S10180C17D0Ev();
static  VTBL_ENTRY vtc_S10180C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C17[0]),
  (VTBL_ENTRY)&_ZN9S10180C17D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C17D0Ev,
};
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
Class_Descriptor cd_S10180C17 = {  "S10180C17", // class name
  0,0,//no base classes
  &(vtc_S10180C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI9S10180C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C17),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  S10180C24  {
  virtual  ~S10180C24(); // _ZN9S10180C24D1Ev
  virtual void  v41(); // _ZN9S10180C243v41Ev
  S10180C24(); // tgen
};
//SIG(-1 S10180C24) C1{ vd v1}


 S10180C24 ::~S10180C24(){ note_dtor("S10180C24", this);}
void  S10180C24 ::v41(){vfunc_called(this, "_ZN9S10180C243v41Ev");}
S10180C24 ::S10180C24(){ note_ctor("S10180C24", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10180C24C1Ev();
extern void _ZN9S10180C24D1Ev();
Name_Map name_map_S10180C24[] = {
  NSPAIR(_ZN9S10180C24C1Ev),
  NSPAIR(_ZN9S10180C24D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C24[];
extern void _ZN9S10180C24D1Ev();
extern void _ZN9S10180C24D0Ev();
extern void _ZN9S10180C243v41Ev();
static  VTBL_ENTRY vtc_S10180C24[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C24[0]),
  (VTBL_ENTRY)&_ZN9S10180C24D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C24D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C243v41Ev,
};
extern VTBL_ENTRY _ZTI9S10180C24[];
extern  VTBL_ENTRY _ZTV9S10180C24[];
Class_Descriptor cd_S10180C24 = {  "S10180C24", // class name
  0,0,//no base classes
  &(vtc_S10180C24[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10180C24),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C24),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  S10180C26  {
  virtual  ~S10180C26(); // _ZN9S10180C26D1Ev
  virtual void  v64(); // _ZN9S10180C263v64Ev
  S10180C26(); // tgen
};
//SIG(-1 S10180C26) C1{ vd v1}


 S10180C26 ::~S10180C26(){ note_dtor("S10180C26", this);}
void  S10180C26 ::v64(){vfunc_called(this, "_ZN9S10180C263v64Ev");}
S10180C26 ::S10180C26(){ note_ctor("S10180C26", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10180C26C1Ev();
extern void _ZN9S10180C26D1Ev();
Name_Map name_map_S10180C26[] = {
  NSPAIR(_ZN9S10180C26C1Ev),
  NSPAIR(_ZN9S10180C26D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C26[];
extern void _ZN9S10180C26D1Ev();
extern void _ZN9S10180C26D0Ev();
extern void _ZN9S10180C263v64Ev();
static  VTBL_ENTRY vtc_S10180C26[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C26[0]),
  (VTBL_ENTRY)&_ZN9S10180C26D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C26D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C263v64Ev,
};
extern VTBL_ENTRY _ZTI9S10180C26[];
extern  VTBL_ENTRY _ZTV9S10180C26[];
Class_Descriptor cd_S10180C26 = {  "S10180C26", // class name
  0,0,//no base classes
  &(vtc_S10180C26[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10180C26),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C26),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  S10180C27  {
  virtual  ~S10180C27(); // _ZN9S10180C27D1Ev
  virtual void  v65(); // _ZN9S10180C273v65Ev
  virtual void  v66(); // _ZN9S10180C273v66Ev
  S10180C27(); // tgen
};
//SIG(-1 S10180C27) C1{ vd v1 v2}


 S10180C27 ::~S10180C27(){ note_dtor("S10180C27", this);}
void  S10180C27 ::v65(){vfunc_called(this, "_ZN9S10180C273v65Ev");}
void  S10180C27 ::v66(){vfunc_called(this, "_ZN9S10180C273v66Ev");}
S10180C27 ::S10180C27(){ note_ctor("S10180C27", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10180C27C1Ev();
extern void _ZN9S10180C27D1Ev();
Name_Map name_map_S10180C27[] = {
  NSPAIR(_ZN9S10180C27C1Ev),
  NSPAIR(_ZN9S10180C27D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C27[];
extern void _ZN9S10180C27D1Ev();
extern void _ZN9S10180C27D0Ev();
extern void _ZN9S10180C273v65Ev();
extern void _ZN9S10180C273v66Ev();
static  VTBL_ENTRY vtc_S10180C27[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C27[0]),
  (VTBL_ENTRY)&_ZN9S10180C27D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C27D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C273v65Ev,
  (VTBL_ENTRY)&_ZN9S10180C273v66Ev,
};
extern VTBL_ENTRY _ZTI9S10180C27[];
extern  VTBL_ENTRY _ZTV9S10180C27[];
Class_Descriptor cd_S10180C27 = {  "S10180C27", // class name
  0,0,//no base classes
  &(vtc_S10180C27[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10180C27),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C27),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  S10180C28  {
  int s10180c28f0[2];
  void  mf10180c28(); // _ZN9S10180C2810mf10180c28Ev
};
//SIG(-1 S10180C28) C1{ m Fi[2]}


void  S10180C28 ::mf10180c28(){}

static void Test_S10180C28()
{
  {
    init_simple_test("S10180C28");
    S10180C28 lv;
    check2(sizeof(lv), 8, "sizeof(S10180C28)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C28)");
    check_field_offset(lv, s10180c28f0, 0, "S10180C28.s10180c28f0");
  }
}
static Arrange_To_Call_Me vS10180C28(Test_S10180C28, "S10180C28", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C32  {
  void *s10180c32f0;
  int s10180c32f1[2];
  ::S10180C20 s10180c32f2;
  void  mf10180c32(); // _ZN9S10180C3210mf10180c32Ev
};
//SIG(-1 S10180C32) C1{ m Fp Fi[2] FC2{ m}}


void  S10180C32 ::mf10180c32(){}

static void Test_S10180C32()
{
  {
    init_simple_test("S10180C32");
    S10180C32 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S10180C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C32)");
    check_field_offset(lv, s10180c32f0, 0, "S10180C32.s10180c32f0");
    check_field_offset(lv, s10180c32f1, ABISELECT(8,4), "S10180C32.s10180c32f1");
    check_field_offset(lv, s10180c32f2, ABISELECT(16,12), "S10180C32.s10180c32f2");
  }
}
static Arrange_To_Call_Me vS10180C32(Test_S10180C32, "S10180C32", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C31  {
  ::S10180C32 s10180c31f0;
  void *s10180c31f1[2];
  void  mf10180c31(); // _ZN9S10180C3110mf10180c31Ev
};
//SIG(-1 S10180C31) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S10180C31 ::mf10180c31(){}

static void Test_S10180C31()
{
  {
    init_simple_test("S10180C31");
    S10180C31 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S10180C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C31)");
    check_field_offset(lv, s10180c31f0, 0, "S10180C31.s10180c31f0");
    check_field_offset(lv, s10180c31f1, ABISELECT(24,16), "S10180C31.s10180c31f1");
  }
}
static Arrange_To_Call_Me vS10180C31(Test_S10180C31, "S10180C31", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C29  : S10180C17 {
  int s10180c29f0;
  void *s10180c29f1;
  ::S10180C12 s10180c29f2;
  __tsi64 s10180c29f3;
  ::S10180C28 s10180c29f4;
  int s10180c29f5;
  char s10180c29f6;
  int s10180c29f7;
  ::S10180C31 s10180c29f8;
  virtual  ~S10180C29(); // _ZN9S10180C29D1Ev
  S10180C29(); // tgen
};
//SIG(-1 S10180C29) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd Fi Fp FC6{ m FC7{ m Fp Fi FC4} Fi} FL FC8{ m Fi[2]} Fi Fc Fi FC9{ m FC10{ m Fp Fi[2] FC5} Fp[2]}}


 S10180C29 ::~S10180C29(){ note_dtor("S10180C29", this);}
S10180C29 ::S10180C29(){ note_ctor("S10180C29", this);} // tgen

static void Test_S10180C29()
{
  extern Class_Descriptor cd_S10180C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,28)];
    init_test(&cd_S10180C29, buf);
    S10180C29 *dp, &lv = *(dp=new (buf) S10180C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,108), "sizeof(S10180C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C29)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C29");
    check_field_offset(lv, s10180c29f0, ABISELECT(44,32), "S10180C29.s10180c29f0");
    check_field_offset(lv, s10180c29f1, ABISELECT(48,36), "S10180C29.s10180c29f1");
    check_field_offset(lv, s10180c29f2, ABISELECT(56,40), "S10180C29.s10180c29f2");
    check_field_offset(lv, s10180c29f3, ABISELECT(80,56), "S10180C29.s10180c29f3");
    check_field_offset(lv, s10180c29f4, ABISELECT(88,64), "S10180C29.s10180c29f4");
    check_field_offset(lv, s10180c29f5, ABISELECT(96,72), "S10180C29.s10180c29f5");
    check_field_offset(lv, s10180c29f6, ABISELECT(100,76), "S10180C29.s10180c29f6");
    check_field_offset(lv, s10180c29f7, ABISELECT(104,80), "S10180C29.s10180c29f7");
    check_field_offset(lv, s10180c29f8, ABISELECT(112,84), "S10180C29.s10180c29f8");
    test_class_info(&lv, &cd_S10180C29);
    dp->~S10180C29();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C29(Test_S10180C29, "S10180C29", ABISELECT(152,108));

#else // __cplusplus

extern void _ZN9S10180C29C1Ev();
extern void _ZN9S10180C29D1Ev();
Name_Map name_map_S10180C29[] = {
  NSPAIR(_ZN9S10180C29C1Ev),
  NSPAIR(_ZN9S10180C29D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10180C29[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C29[];
extern void _ZN9S10180C29D1Ev();
extern void _ZN9S10180C29D0Ev();
static  VTBL_ENTRY vtc_S10180C29[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C29[0]),
  (VTBL_ENTRY)&_ZN9S10180C29D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C29D0Ev,
};
extern VTBL_ENTRY _ZTI9S10180C29[];
extern  VTBL_ENTRY _ZTV9S10180C29[];
Class_Descriptor cd_S10180C29 = {  "S10180C29", // class name
  bases_S10180C29, 1,
  &(vtc_S10180C29[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,108), // object size
  NSPAIRA(_ZTI9S10180C29),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C29),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  S10180C34  : S10180C11 {
  virtual  ~S10180C34(); // _ZN9S10180C34D1Ev
  virtual void  v67(); // _ZN9S10180C343v67Ev
  virtual void  v68(); // _ZN9S10180C343v68Ev
  virtual void  v69(); // _ZN9S10180C343v69Ev
  S10180C34(); // tgen
};
//SIG(-1 S10180C34) C1{ BC2{ 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 Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3}


 S10180C34 ::~S10180C34(){ note_dtor("S10180C34", this);}
void  S10180C34 ::v67(){vfunc_called(this, "_ZN9S10180C343v67Ev");}
void  S10180C34 ::v68(){vfunc_called(this, "_ZN9S10180C343v68Ev");}
void  S10180C34 ::v69(){vfunc_called(this, "_ZN9S10180C343v69Ev");}
S10180C34 ::S10180C34(){ note_ctor("S10180C34", this);} // tgen

static void Test_S10180C34()
{
  extern Class_Descriptor cd_S10180C34;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S10180C34, buf);
    S10180C34 *dp, &lv = *(dp=new (buf) S10180C34());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S10180C34)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C34)");
    check_base_class_offset(lv, (S10180C11*), 0, "S10180C34");
    test_class_info(&lv, &cd_S10180C34);
    dp->~S10180C34();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C34(Test_S10180C34, "S10180C34", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN9S10180C34C1Ev();
extern void _ZN9S10180C34D1Ev();
Name_Map name_map_S10180C34[] = {
  NSPAIR(_ZN9S10180C34C1Ev),
  NSPAIR(_ZN9S10180C34D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
static Base_Class bases_S10180C34[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C34[];
extern void _ZN9S10180C34D1Ev();
extern void _ZN9S10180C34D0Ev();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void _ZN9S10180C343v67Ev();
extern void _ZN9S10180C343v68Ev();
extern void _ZN9S10180C343v69Ev();
static  VTBL_ENTRY vtc_S10180C34[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C34[0]),
  (VTBL_ENTRY)&_ZN9S10180C34D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C34D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  (VTBL_ENTRY)&_ZN9S10180C343v67Ev,
  (VTBL_ENTRY)&_ZN9S10180C343v68Ev,
  (VTBL_ENTRY)&_ZN9S10180C343v69Ev,
};
extern VTBL_ENTRY _ZTI9S10180C34[];
extern  VTBL_ENTRY _ZTV9S10180C34[];
Class_Descriptor cd_S10180C34 = {  "S10180C34", // class name
  bases_S10180C34, 1,
  &(vtc_S10180C34[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI9S10180C34),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C34),31, //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  S10180C38  {
  __tsi64 s10180c38f0[4];
};
//SIG(-1 S10180C38) C1{ FL[4]}



static void Test_S10180C38()
{
  {
    init_simple_test("S10180C38");
    S10180C38 lv;
    check2(sizeof(lv), 32, "sizeof(S10180C38)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C38)");
    check_field_offset(lv, s10180c38f0, 0, "S10180C38.s10180c38f0");
  }
}
static Arrange_To_Call_Me vS10180C38(Test_S10180C38, "S10180C38", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C37  {
  ::S10180C38 s10180c37f0;
  void  mf10180c37(); // _ZN9S10180C3710mf10180c37Ev
};
//SIG(-1 S10180C37) C1{ m FC2{ FL[4]}}


void  S10180C37 ::mf10180c37(){}

static void Test_S10180C37()
{
  {
    init_simple_test("S10180C37");
    S10180C37 lv;
    check2(sizeof(lv), 32, "sizeof(S10180C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C37)");
    check_field_offset(lv, s10180c37f0, 0, "S10180C37.s10180c37f0");
  }
}
static Arrange_To_Call_Me vS10180C37(Test_S10180C37, "S10180C37", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C36  {
  char s10180c36f0[2];
  void *s10180c36f1[3];
  int s10180c36f2[4];
  ::S10180C37 s10180c36f3;
  void  mf10180c36(); // _ZN9S10180C3610mf10180c36Ev
};
//SIG(-1 S10180C36) C1{ m Fc[2] Fp[3] Fi[4] FC2{ m FC3{ FL[4]}}}


void  S10180C36 ::mf10180c36(){}

static void Test_S10180C36()
{
  {
    init_simple_test("S10180C36");
    S10180C36 lv;
    check2(sizeof(lv), ABISELECT(80,64), "sizeof(S10180C36)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C36)");
    check_field_offset(lv, s10180c36f0, 0, "S10180C36.s10180c36f0");
    check_field_offset(lv, s10180c36f1, ABISELECT(8,4), "S10180C36.s10180c36f1");
    check_field_offset(lv, s10180c36f2, ABISELECT(32,16), "S10180C36.s10180c36f2");
    check_field_offset(lv, s10180c36f3, ABISELECT(48,32), "S10180C36.s10180c36f3");
  }
}
static Arrange_To_Call_Me vS10180C36(Test_S10180C36, "S10180C36", ABISELECT(80,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C35  {
  int s10180c35f0;
  void *s10180c35f1[3];
  ::S10180C36 s10180c35f2;
  void  mf10180c35(); // _ZN9S10180C3510mf10180c35Ev
  virtual  ~S10180C35(); // _ZN9S10180C35D1Ev
  S10180C35(); // tgen
};
//SIG(-1 S10180C35) C1{ vd m Fi Fp[3] FC2{ m Fc[2] Fp[3] Fi[4] FC3{ m FC4{ FL[4]}}}}


void  S10180C35 ::mf10180c35(){}
 S10180C35 ::~S10180C35(){ note_dtor("S10180C35", this);}
S10180C35 ::S10180C35(){ note_ctor("S10180C35", this);} // tgen

static void Test_S10180C35()
{
  extern Class_Descriptor cd_S10180C35;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S10180C35, buf);
    S10180C35 *dp, &lv = *(dp=new (buf) S10180C35());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S10180C35)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C35)");
    check_field_offset(lv, s10180c35f0, ABISELECT(8,4), "S10180C35.s10180c35f0");
    check_field_offset(lv, s10180c35f1, ABISELECT(16,8), "S10180C35.s10180c35f1");
    check_field_offset(lv, s10180c35f2, ABISELECT(40,20), "S10180C35.s10180c35f2");
    test_class_info(&lv, &cd_S10180C35);
    dp->~S10180C35();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C35(Test_S10180C35, "S10180C35", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN9S10180C35C1Ev();
extern void _ZN9S10180C35D1Ev();
Name_Map name_map_S10180C35[] = {
  NSPAIR(_ZN9S10180C35C1Ev),
  NSPAIR(_ZN9S10180C35D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C35[];
extern void _ZN9S10180C35D1Ev();
extern void _ZN9S10180C35D0Ev();
static  VTBL_ENTRY vtc_S10180C35[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C35[0]),
  (VTBL_ENTRY)&_ZN9S10180C35D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C35D0Ev,
};
extern VTBL_ENTRY _ZTI9S10180C35[];
extern  VTBL_ENTRY _ZTV9S10180C35[];
Class_Descriptor cd_S10180C35 = {  "S10180C35", // class name
  0,0,//no base classes
  &(vtc_S10180C35[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI9S10180C35),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C35),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  S10180C41  {
  __tsi64 s10180c41f0[3];
  int s10180c41f1[3];
  __tsi64 s10180c41f2;
  void  mf10180c41(); // _ZN9S10180C4110mf10180c41Ev
};
//SIG(-1 S10180C41) C1{ m FL[3] Fi[3] FL}


void  S10180C41 ::mf10180c41(){}

static void Test_S10180C41()
{
  {
    init_simple_test("S10180C41");
    S10180C41 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S10180C41)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C41)");
    check_field_offset(lv, s10180c41f0, 0, "S10180C41.s10180c41f0");
    check_field_offset(lv, s10180c41f1, 24, "S10180C41.s10180c41f1");
    check_field_offset(lv, s10180c41f2, ABISELECT(40,36), "S10180C41.s10180c41f2");
  }
}
static Arrange_To_Call_Me vS10180C41(Test_S10180C41, "S10180C41", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C43  {
  int s10180c43f0[4];
  void  mf10180c43(); // _ZN9S10180C4310mf10180c43Ev
};
//SIG(-1 S10180C43) C1{ m Fi[4]}


void  S10180C43 ::mf10180c43(){}

static void Test_S10180C43()
{
  {
    init_simple_test("S10180C43");
    S10180C43 lv;
    check2(sizeof(lv), 16, "sizeof(S10180C43)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C43)");
    check_field_offset(lv, s10180c43f0, 0, "S10180C43.s10180c43f0");
  }
}
static Arrange_To_Call_Me vS10180C43(Test_S10180C43, "S10180C43", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C42  {
  int s10180c42f0;
  ::S10180C43 s10180c42f1;
  void  mf10180c42(); // _ZN9S10180C4210mf10180c42Ev
};
//SIG(-1 S10180C42) C1{ m Fi FC2{ m Fi[4]}}


void  S10180C42 ::mf10180c42(){}

static void Test_S10180C42()
{
  {
    init_simple_test("S10180C42");
    S10180C42 lv;
    check2(sizeof(lv), 20, "sizeof(S10180C42)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C42)");
    check_field_offset(lv, s10180c42f0, 0, "S10180C42.s10180c42f0");
    check_field_offset(lv, s10180c42f1, 4, "S10180C42.s10180c42f1");
  }
}
static Arrange_To_Call_Me vS10180C42(Test_S10180C42, "S10180C42", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C39  {
  ::S10180C37 s10180c39f0;
  int s10180c39f1[2];
  ::S10180C41 s10180c39f2;
  __tsi64 s10180c39f3;
  ::S10180C42 s10180c39f4;
  ::S10180C31 s10180c39f5;
  char s10180c39f6[2];
  int s10180c39f7[2];
  void *s10180c39f8[2];
  __tsi64 s10180c39f9;
  int s10180c39f10[3];
  void  mf10180c39(); // _ZN9S10180C3910mf10180c39Ev
  virtual  ~S10180C39(); // _ZN9S10180C39D1Ev
  S10180C39(); // tgen
};
//SIG(-1 S10180C39) C1{ vd m FC2{ m FC3{ FL[4]}} Fi[2] FC4{ m FL[3] Fi[3] FL} FL FC5{ m Fi FC6{ m Fi[4]}} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fc[2] Fi[2] Fp[2] FL Fi[3]}


void  S10180C39 ::mf10180c39(){}
 S10180C39 ::~S10180C39(){ note_dtor("S10180C39", this);}
S10180C39 ::S10180C39(){ note_ctor("S10180C39", this);} // tgen

static void Test_S10180C39()
{
  extern Class_Descriptor cd_S10180C39;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,46)];
    init_test(&cd_S10180C39, buf);
    S10180C39 *dp, &lv = *(dp=new (buf) S10180C39());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,180), "sizeof(S10180C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C39)");
    check_field_offset(lv, s10180c39f0, ABISELECT(8,4), "S10180C39.s10180c39f0");
    check_field_offset(lv, s10180c39f1, ABISELECT(40,36), "S10180C39.s10180c39f1");
    check_field_offset(lv, s10180c39f2, ABISELECT(48,44), "S10180C39.s10180c39f2");
    check_field_offset(lv, s10180c39f3, ABISELECT(96,88), "S10180C39.s10180c39f3");
    check_field_offset(lv, s10180c39f4, ABISELECT(104,96), "S10180C39.s10180c39f4");
    check_field_offset(lv, s10180c39f5, ABISELECT(128,116), "S10180C39.s10180c39f5");
    check_field_offset(lv, s10180c39f6, ABISELECT(168,140), "S10180C39.s10180c39f6");
    check_field_offset(lv, s10180c39f7, ABISELECT(172,144), "S10180C39.s10180c39f7");
    check_field_offset(lv, s10180c39f8, ABISELECT(184,152), "S10180C39.s10180c39f8");
    check_field_offset(lv, s10180c39f9, ABISELECT(200,160), "S10180C39.s10180c39f9");
    check_field_offset(lv, s10180c39f10, ABISELECT(208,168), "S10180C39.s10180c39f10");
    test_class_info(&lv, &cd_S10180C39);
    dp->~S10180C39();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C39(Test_S10180C39, "S10180C39", ABISELECT(224,180));

#else // __cplusplus

extern void _ZN9S10180C39C1Ev();
extern void _ZN9S10180C39D1Ev();
Name_Map name_map_S10180C39[] = {
  NSPAIR(_ZN9S10180C39C1Ev),
  NSPAIR(_ZN9S10180C39D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C39[];
extern void _ZN9S10180C39D1Ev();
extern void _ZN9S10180C39D0Ev();
static  VTBL_ENTRY vtc_S10180C39[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C39[0]),
  (VTBL_ENTRY)&_ZN9S10180C39D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C39D0Ev,
};
extern VTBL_ENTRY _ZTI9S10180C39[];
extern  VTBL_ENTRY _ZTV9S10180C39[];
Class_Descriptor cd_S10180C39 = {  "S10180C39", // class name
  0,0,//no base classes
  &(vtc_S10180C39[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,180), // object size
  NSPAIRA(_ZTI9S10180C39),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C39),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  S10180C45  {
  char s10180c45f0[2];
  void  mf10180c45(); // _ZN9S10180C4510mf10180c45Ev
};
//SIG(-1 S10180C45) C1{ m Fc[2]}


void  S10180C45 ::mf10180c45(){}

static void Test_S10180C45()
{
  {
    init_simple_test("S10180C45");
    S10180C45 lv;
    check2(sizeof(lv), 2, "sizeof(S10180C45)");
    check2(__alignof__(lv), 1, "__alignof__(S10180C45)");
    check_field_offset(lv, s10180c45f0, 0, "S10180C45.s10180c45f0");
  }
}
static Arrange_To_Call_Me vS10180C45(Test_S10180C45, "S10180C45", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C46  {
  void *s10180c46f0[2];
};
//SIG(-1 S10180C46) C1{ Fp[2]}



static void Test_S10180C46()
{
  {
    init_simple_test("S10180C46");
    S10180C46 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10180C46)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C46)");
    check_field_offset(lv, s10180c46f0, 0, "S10180C46.s10180c46f0");
  }
}
static Arrange_To_Call_Me vS10180C46(Test_S10180C46, "S10180C46", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C49  {
  int s10180c49f0[8];
  short s10180c49f1;
  int s10180c49f2[3];
  char s10180c49f3;
};
//SIG(-1 S10180C49) C1{ Fi[8] Fs Fi[3] Fc}



static void Test_S10180C49()
{
  {
    init_simple_test("S10180C49");
    S10180C49 lv;
    check2(sizeof(lv), 52, "sizeof(S10180C49)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C49)");
    check_field_offset(lv, s10180c49f0, 0, "S10180C49.s10180c49f0");
    check_field_offset(lv, s10180c49f1, 32, "S10180C49.s10180c49f1");
    check_field_offset(lv, s10180c49f2, 36, "S10180C49.s10180c49f2");
    check_field_offset(lv, s10180c49f3, 48, "S10180C49.s10180c49f3");
  }
}
static Arrange_To_Call_Me vS10180C49(Test_S10180C49, "S10180C49", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C48  {
  ::S10180C49 s10180c48f0;
  void *s10180c48f1[4];
  int s10180c48f2;
  void *s10180c48f3;
  int s10180c48f4;
  void *s10180c48f5;
  void  mf10180c48(); // _ZN9S10180C4810mf10180c48Ev
  virtual  ~S10180C48(); // _ZN9S10180C48D1Ev
  S10180C48(); // tgen
};
//SIG(-1 S10180C48) C1{ vd m FC2{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp}


void  S10180C48 ::mf10180c48(){}
 S10180C48 ::~S10180C48(){ note_dtor("S10180C48", this);}
S10180C48 ::S10180C48(){ note_ctor("S10180C48", this);} // tgen

static void Test_S10180C48()
{
  extern Class_Descriptor cd_S10180C48;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S10180C48, buf);
    S10180C48 *dp, &lv = *(dp=new (buf) S10180C48());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S10180C48)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C48)");
    check_field_offset(lv, s10180c48f0, ABISELECT(8,4), "S10180C48.s10180c48f0");
    check_field_offset(lv, s10180c48f1, ABISELECT(64,56), "S10180C48.s10180c48f1");
    check_field_offset(lv, s10180c48f2, ABISELECT(96,72), "S10180C48.s10180c48f2");
    check_field_offset(lv, s10180c48f3, ABISELECT(104,76), "S10180C48.s10180c48f3");
    check_field_offset(lv, s10180c48f4, ABISELECT(112,80), "S10180C48.s10180c48f4");
    check_field_offset(lv, s10180c48f5, ABISELECT(120,84), "S10180C48.s10180c48f5");
    test_class_info(&lv, &cd_S10180C48);
    dp->~S10180C48();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C48(Test_S10180C48, "S10180C48", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN9S10180C48C1Ev();
extern void _ZN9S10180C48D1Ev();
Name_Map name_map_S10180C48[] = {
  NSPAIR(_ZN9S10180C48C1Ev),
  NSPAIR(_ZN9S10180C48D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C48[];
extern void _ZN9S10180C48D1Ev();
extern void _ZN9S10180C48D0Ev();
static  VTBL_ENTRY vtc_S10180C48[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C48[0]),
  (VTBL_ENTRY)&_ZN9S10180C48D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C48D0Ev,
};
extern VTBL_ENTRY _ZTI9S10180C48[];
extern  VTBL_ENTRY _ZTV9S10180C48[];
Class_Descriptor cd_S10180C48 = {  "S10180C48", // class name
  0,0,//no base classes
  &(vtc_S10180C48[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI9S10180C48),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C48),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  S10180C51  {
  int s10180c51f0;
  void *s10180c51f1;
  char s10180c51f2;
  virtual  ~S10180C51(); // _ZN9S10180C51D1Ev
  virtual void  v77(); // _ZN9S10180C513v77Ev
  virtual void  v78(); // _ZN9S10180C513v78Ev
  virtual void  v79(); // _ZN9S10180C513v79Ev
  virtual void  v80(); // _ZN9S10180C513v80Ev
  virtual void  v81(); // _ZN9S10180C513v81Ev
  virtual void  v82(); // _ZN9S10180C513v82Ev
  S10180C51(); // tgen
};
//SIG(-1 S10180C51) C1{ vd v1 v2 v3 v4 v5 v6 Fi Fp Fc}


 S10180C51 ::~S10180C51(){ note_dtor("S10180C51", this);}
void  S10180C51 ::v77(){vfunc_called(this, "_ZN9S10180C513v77Ev");}
void  S10180C51 ::v78(){vfunc_called(this, "_ZN9S10180C513v78Ev");}
void  S10180C51 ::v79(){vfunc_called(this, "_ZN9S10180C513v79Ev");}
void  S10180C51 ::v80(){vfunc_called(this, "_ZN9S10180C513v80Ev");}
void  S10180C51 ::v81(){vfunc_called(this, "_ZN9S10180C513v81Ev");}
void  S10180C51 ::v82(){vfunc_called(this, "_ZN9S10180C513v82Ev");}
S10180C51 ::S10180C51(){ note_ctor("S10180C51", this);} // tgen

static void Test_S10180C51()
{
  extern Class_Descriptor cd_S10180C51;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S10180C51, buf);
    S10180C51 *dp, &lv = *(dp=new (buf) S10180C51());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10180C51)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C51)");
    check_field_offset(lv, s10180c51f0, ABISELECT(8,4), "S10180C51.s10180c51f0");
    check_field_offset(lv, s10180c51f1, ABISELECT(16,8), "S10180C51.s10180c51f1");
    check_field_offset(lv, s10180c51f2, ABISELECT(24,12), "S10180C51.s10180c51f2");
    test_class_info(&lv, &cd_S10180C51);
    dp->~S10180C51();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C51(Test_S10180C51, "S10180C51", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S10180C51C1Ev();
extern void _ZN9S10180C51D1Ev();
Name_Map name_map_S10180C51[] = {
  NSPAIR(_ZN9S10180C51C1Ev),
  NSPAIR(_ZN9S10180C51D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C51[];
extern void _ZN9S10180C51D1Ev();
extern void _ZN9S10180C51D0Ev();
extern void _ZN9S10180C513v77Ev();
extern void _ZN9S10180C513v78Ev();
extern void _ZN9S10180C513v79Ev();
extern void _ZN9S10180C513v80Ev();
extern void _ZN9S10180C513v81Ev();
extern void _ZN9S10180C513v82Ev();
static  VTBL_ENTRY vtc_S10180C51[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C51[0]),
  (VTBL_ENTRY)&_ZN9S10180C51D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C51D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v77Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v78Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v79Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v80Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v81Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v82Ev,
};
extern VTBL_ENTRY _ZTI9S10180C51[];
extern  VTBL_ENTRY _ZTV9S10180C51[];
Class_Descriptor cd_S10180C51 = {  "S10180C51", // class name
  0,0,//no base classes
  &(vtc_S10180C51[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S10180C51),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C51),10, //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  S10180C50  : S10180C51 {
  void *s10180c50f0;
  virtual  ~S10180C50(); // _ZN9S10180C50D1Ev
  virtual void  v71(); // _ZN9S10180C503v71Ev
  virtual void  v72(); // _ZN9S10180C503v72Ev
  virtual void  v73(); // _ZN9S10180C503v73Ev
  virtual void  v74(); // _ZN9S10180C503v74Ev
  virtual void  v75(); // _ZN9S10180C503v75Ev
  virtual void  v76(); // _ZN9S10180C503v76Ev
  S10180C50(); // tgen
};
//SIG(-1 S10180C50) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 Fi Fp Fc} vd v1 v2 v3 v4 v5 v6 Fp}


 S10180C50 ::~S10180C50(){ note_dtor("S10180C50", this);}
void  S10180C50 ::v71(){vfunc_called(this, "_ZN9S10180C503v71Ev");}
void  S10180C50 ::v72(){vfunc_called(this, "_ZN9S10180C503v72Ev");}
void  S10180C50 ::v73(){vfunc_called(this, "_ZN9S10180C503v73Ev");}
void  S10180C50 ::v74(){vfunc_called(this, "_ZN9S10180C503v74Ev");}
void  S10180C50 ::v75(){vfunc_called(this, "_ZN9S10180C503v75Ev");}
void  S10180C50 ::v76(){vfunc_called(this, "_ZN9S10180C503v76Ev");}
S10180C50 ::S10180C50(){ note_ctor("S10180C50", this);} // tgen

static void Test_S10180C50()
{
  extern Class_Descriptor cd_S10180C50;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S10180C50, buf);
    S10180C50 *dp, &lv = *(dp=new (buf) S10180C50());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S10180C50)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C50)");
    check_base_class_offset(lv, (S10180C51*), 0, "S10180C50");
    check_field_offset(lv, s10180c50f0, ABISELECT(32,16), "S10180C50.s10180c50f0");
    test_class_info(&lv, &cd_S10180C50);
    dp->~S10180C50();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C50(Test_S10180C50, "S10180C50", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S10180C50C1Ev();
extern void _ZN9S10180C50D1Ev();
Name_Map name_map_S10180C50[] = {
  NSPAIR(_ZN9S10180C50C1Ev),
  NSPAIR(_ZN9S10180C50D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C51;
extern VTBL_ENTRY _ZTI9S10180C51[];
extern  VTBL_ENTRY _ZTV9S10180C51[];
static Base_Class bases_S10180C50[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C50[];
extern void _ZN9S10180C50D1Ev();
extern void _ZN9S10180C50D0Ev();
extern void _ZN9S10180C513v77Ev();
extern void _ZN9S10180C513v78Ev();
extern void _ZN9S10180C513v79Ev();
extern void _ZN9S10180C513v80Ev();
extern void _ZN9S10180C513v81Ev();
extern void _ZN9S10180C513v82Ev();
extern void _ZN9S10180C503v71Ev();
extern void _ZN9S10180C503v72Ev();
extern void _ZN9S10180C503v73Ev();
extern void _ZN9S10180C503v74Ev();
extern void _ZN9S10180C503v75Ev();
extern void _ZN9S10180C503v76Ev();
static  VTBL_ENTRY vtc_S10180C50[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C50[0]),
  (VTBL_ENTRY)&_ZN9S10180C50D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C50D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v77Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v78Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v79Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v80Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v81Ev,
  (VTBL_ENTRY)&_ZN9S10180C513v82Ev,
  (VTBL_ENTRY)&_ZN9S10180C503v71Ev,
  (VTBL_ENTRY)&_ZN9S10180C503v72Ev,
  (VTBL_ENTRY)&_ZN9S10180C503v73Ev,
  (VTBL_ENTRY)&_ZN9S10180C503v74Ev,
  (VTBL_ENTRY)&_ZN9S10180C503v75Ev,
  (VTBL_ENTRY)&_ZN9S10180C503v76Ev,
};
extern VTBL_ENTRY _ZTI9S10180C50[];
extern  VTBL_ENTRY _ZTV9S10180C50[];
Class_Descriptor cd_S10180C50 = {  "S10180C50", // class name
  bases_S10180C50, 1,
  &(vtc_S10180C50[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S10180C50),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C50),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C53  {
  int s10180c53f0;
  char s10180c53f1[3];
  virtual  ~S10180C53(); // _ZN9S10180C53D1Ev
  virtual void  v84(); // _ZN9S10180C533v84Ev
  S10180C53(); // tgen
};
//SIG(-1 S10180C53) C1{ vd v1 Fi Fc[3]}


 S10180C53 ::~S10180C53(){ note_dtor("S10180C53", this);}
void  S10180C53 ::v84(){vfunc_called(this, "_ZN9S10180C533v84Ev");}
S10180C53 ::S10180C53(){ note_ctor("S10180C53", this);} // tgen

static void Test_S10180C53()
{
  extern Class_Descriptor cd_S10180C53;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S10180C53, buf);
    S10180C53 *dp, &lv = *(dp=new (buf) S10180C53());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10180C53)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C53)");
    check_field_offset(lv, s10180c53f0, ABISELECT(8,4), "S10180C53.s10180c53f0");
    check_field_offset(lv, s10180c53f1, ABISELECT(12,8), "S10180C53.s10180c53f1");
    test_class_info(&lv, &cd_S10180C53);
    dp->~S10180C53();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C53(Test_S10180C53, "S10180C53", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S10180C53C1Ev();
extern void _ZN9S10180C53D1Ev();
Name_Map name_map_S10180C53[] = {
  NSPAIR(_ZN9S10180C53C1Ev),
  NSPAIR(_ZN9S10180C53D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C53[];
extern void _ZN9S10180C53D1Ev();
extern void _ZN9S10180C53D0Ev();
extern void _ZN9S10180C533v84Ev();
static  VTBL_ENTRY vtc_S10180C53[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C53[0]),
  (VTBL_ENTRY)&_ZN9S10180C53D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C53D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C533v84Ev,
};
extern VTBL_ENTRY _ZTI9S10180C53[];
extern  VTBL_ENTRY _ZTV9S10180C53[];
Class_Descriptor cd_S10180C53 = {  "S10180C53", // class name
  0,0,//no base classes
  &(vtc_S10180C53[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S10180C53),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C53),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  S10180C55  {
  int s10180c55f0[4];
};
//SIG(-1 S10180C55) C1{ Fi[4]}



static void Test_S10180C55()
{
  {
    init_simple_test("S10180C55");
    S10180C55 lv;
    check2(sizeof(lv), 16, "sizeof(S10180C55)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C55)");
    check_field_offset(lv, s10180c55f0, 0, "S10180C55.s10180c55f0");
  }
}
static Arrange_To_Call_Me vS10180C55(Test_S10180C55, "S10180C55", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C54  {
  void *s10180c54f0;
  ::S10180C55 s10180c54f1;
  void  mf10180c54(); // _ZN9S10180C5410mf10180c54Ev
};
//SIG(-1 S10180C54) C1{ m Fp FC2{ Fi[4]}}


void  S10180C54 ::mf10180c54(){}

static void Test_S10180C54()
{
  {
    init_simple_test("S10180C54");
    S10180C54 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S10180C54)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C54)");
    check_field_offset(lv, s10180c54f0, 0, "S10180C54.s10180c54f0");
    check_field_offset(lv, s10180c54f1, ABISELECT(8,4), "S10180C54.s10180c54f1");
  }
}
static Arrange_To_Call_Me vS10180C54(Test_S10180C54, "S10180C54", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C57  {
  ::S10180C37 s10180c57f0;
  ::S10180C54 s10180c57f1;
  void *s10180c57f2;
  int s10180c57f3[5];
  void  mf10180c57(); // _ZN9S10180C5710mf10180c57Ev
};
//SIG(-1 S10180C57) C1{ m FC2{ m FC3{ FL[4]}} FC4{ m Fp FC5{ Fi[4]}} Fp Fi[5]}


void  S10180C57 ::mf10180c57(){}

static void Test_S10180C57()
{
  {
    init_simple_test("S10180C57");
    S10180C57 lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S10180C57)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C57)");
    check_field_offset(lv, s10180c57f0, 0, "S10180C57.s10180c57f0");
    check_field_offset(lv, s10180c57f1, 32, "S10180C57.s10180c57f1");
    check_field_offset(lv, s10180c57f2, ABISELECT(56,52), "S10180C57.s10180c57f2");
    check_field_offset(lv, s10180c57f3, ABISELECT(64,56), "S10180C57.s10180c57f3");
  }
}
static Arrange_To_Call_Me vS10180C57(Test_S10180C57, "S10180C57", ABISELECT(88,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C56  : S10180C53 {
  ::S10180C37 s10180c56f0;
  int s10180c56f1;
  void *s10180c56f2[2];
  ::S10180C57 s10180c56f3;
  short s10180c56f4[3585];
  char s10180c56f5[4096];
  int s10180c56f6;
  virtual  ~S10180C56(); // _ZN9S10180C56D1Ev
  virtual void  v85(); // _ZN9S10180C563v85Ev
  S10180C56(); // tgen
};
//SIG(-1 S10180C56) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 FC3{ m FC4{ FL[4]}} Fi Fp[2] FC5{ m FC3 FC6{ m Fp FC7{ Fi[4]}} Fp Fi[5]} Fs[3585] Fc[4096] Fi}


 S10180C56 ::~S10180C56(){ note_dtor("S10180C56", this);}
void  S10180C56 ::v85(){vfunc_called(this, "_ZN9S10180C563v85Ev");}
S10180C56 ::S10180C56(){ note_ctor("S10180C56", this);} // tgen

static void Test_S10180C56()
{
  extern Class_Descriptor cd_S10180C56;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1430,2852)];
    init_test(&cd_S10180C56, buf);
    S10180C56 *dp, &lv = *(dp=new (buf) S10180C56());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11432,11404), "sizeof(S10180C56)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C56)");
    check_base_class_offset(lv, (S10180C53*), 0, "S10180C56");
    check_field_offset(lv, s10180c56f0, ABISELECT(16,12), "S10180C56.s10180c56f0");
    check_field_offset(lv, s10180c56f1, ABISELECT(48,44), "S10180C56.s10180c56f1");
    check_field_offset(lv, s10180c56f2, ABISELECT(56,48), "S10180C56.s10180c56f2");
    check_field_offset(lv, s10180c56f3, ABISELECT(72,56), "S10180C56.s10180c56f3");
    check_field_offset(lv, s10180c56f4, ABISELECT(160,132), "S10180C56.s10180c56f4");
    check_field_offset(lv, s10180c56f5, ABISELECT(7330,7302), "S10180C56.s10180c56f5");
    check_field_offset(lv, s10180c56f6, ABISELECT(11428,11400), "S10180C56.s10180c56f6");
    test_class_info(&lv, &cd_S10180C56);
    dp->~S10180C56();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C56(Test_S10180C56, "S10180C56", ABISELECT(11432,11404));

#else // __cplusplus

extern void _ZN9S10180C56C1Ev();
extern void _ZN9S10180C56D1Ev();
Name_Map name_map_S10180C56[] = {
  NSPAIR(_ZN9S10180C56C1Ev),
  NSPAIR(_ZN9S10180C56D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C53;
extern VTBL_ENTRY _ZTI9S10180C53[];
extern  VTBL_ENTRY _ZTV9S10180C53[];
static Base_Class bases_S10180C56[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C53,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C56[];
extern void _ZN9S10180C56D1Ev();
extern void _ZN9S10180C56D0Ev();
extern void _ZN9S10180C533v84Ev();
extern void _ZN9S10180C563v85Ev();
static  VTBL_ENTRY vtc_S10180C56[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C56[0]),
  (VTBL_ENTRY)&_ZN9S10180C56D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C56D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C533v84Ev,
  (VTBL_ENTRY)&_ZN9S10180C563v85Ev,
};
extern VTBL_ENTRY _ZTI9S10180C56[];
extern  VTBL_ENTRY _ZTV9S10180C56[];
Class_Descriptor cd_S10180C56 = {  "S10180C56", // class name
  bases_S10180C56, 1,
  &(vtc_S10180C56[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(11432,11404), // object size
  NSPAIRA(_ZTI9S10180C56),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C56),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  S10180C52  : S10180C53 {
  void *s10180c52f0[4];
  __tsi64 s10180c52f1;
  int s10180c52f2;
  ::S10180C37 s10180c52f3;
  ::S10180C54 s10180c52f4;
  short s10180c52f5[1024];
  int s10180c52f6[4];
  __tsi64 s10180c52f7[2];
  int s10180c52f8;
  ::S10180C56 s10180c52f9;
  virtual  ~S10180C52(); // _ZN9S10180C52D1Ev
  virtual void  v83(); // _ZN9S10180C523v83Ev
  S10180C52(); // tgen
};
//SIG(-1 S10180C52) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 Fp[4] FL Fi FC3{ m FC4{ FL[4]}} FC5{ m Fp FC6{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC7{ BC2 vd v3 FC3 Fi Fp[2] FC8{ m FC3 FC5 Fp Fi[5]} Fs[3585] Fc[4096] Fi}}


 S10180C52 ::~S10180C52(){ note_dtor("S10180C52", this);}
void  S10180C52 ::v83(){vfunc_called(this, "_ZN9S10180C523v83Ev");}
S10180C52 ::S10180C52(){ note_ctor("S10180C52", this);} // tgen

static void Test_S10180C52()
{
  extern Class_Descriptor cd_S10180C52;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1706,3396)];
    init_test(&cd_S10180C52, buf);
    S10180C52 *dp, &lv = *(dp=new (buf) S10180C52());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13640,13580), "sizeof(S10180C52)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C52)");
    check_base_class_offset(lv, (S10180C53*), 0, "S10180C52");
    check_field_offset(lv, s10180c52f0, ABISELECT(16,12), "S10180C52.s10180c52f0");
    check_field_offset(lv, s10180c52f1, ABISELECT(48,28), "S10180C52.s10180c52f1");
    check_field_offset(lv, s10180c52f2, ABISELECT(56,36), "S10180C52.s10180c52f2");
    check_field_offset(lv, s10180c52f3, ABISELECT(64,40), "S10180C52.s10180c52f3");
    check_field_offset(lv, s10180c52f4, ABISELECT(96,72), "S10180C52.s10180c52f4");
    check_field_offset(lv, s10180c52f5, ABISELECT(120,92), "S10180C52.s10180c52f5");
    check_field_offset(lv, s10180c52f6, ABISELECT(2168,2140), "S10180C52.s10180c52f6");
    check_field_offset(lv, s10180c52f7, ABISELECT(2184,2156), "S10180C52.s10180c52f7");
    check_field_offset(lv, s10180c52f8, ABISELECT(2200,2172), "S10180C52.s10180c52f8");
    check_field_offset(lv, s10180c52f9, ABISELECT(2208,2176), "S10180C52.s10180c52f9");
    test_class_info(&lv, &cd_S10180C52);
    dp->~S10180C52();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C52(Test_S10180C52, "S10180C52", ABISELECT(13640,13580));

#else // __cplusplus

extern void _ZN9S10180C52C1Ev();
extern void _ZN9S10180C52D1Ev();
Name_Map name_map_S10180C52[] = {
  NSPAIR(_ZN9S10180C52C1Ev),
  NSPAIR(_ZN9S10180C52D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C53;
extern VTBL_ENTRY _ZTI9S10180C53[];
extern  VTBL_ENTRY _ZTV9S10180C53[];
static Base_Class bases_S10180C52[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C53,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C52[];
extern void _ZN9S10180C52D1Ev();
extern void _ZN9S10180C52D0Ev();
extern void _ZN9S10180C533v84Ev();
extern void _ZN9S10180C523v83Ev();
static  VTBL_ENTRY vtc_S10180C52[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C52[0]),
  (VTBL_ENTRY)&_ZN9S10180C52D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C52D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C533v84Ev,
  (VTBL_ENTRY)&_ZN9S10180C523v83Ev,
};
extern VTBL_ENTRY _ZTI9S10180C52[];
extern  VTBL_ENTRY _ZTV9S10180C52[];
Class_Descriptor cd_S10180C52 = {  "S10180C52", // class name
  bases_S10180C52, 1,
  &(vtc_S10180C52[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13640,13580), // object size
  NSPAIRA(_ZTI9S10180C52),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C52),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  S10180C59  {
  int s10180c59f0[2];
  void  mf10180c59(); // _ZN9S10180C5910mf10180c59Ev
};
//SIG(-1 S10180C59) C1{ m Fi[2]}


void  S10180C59 ::mf10180c59(){}

static void Test_S10180C59()
{
  {
    init_simple_test("S10180C59");
    S10180C59 lv;
    check2(sizeof(lv), 8, "sizeof(S10180C59)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C59)");
    check_field_offset(lv, s10180c59f0, 0, "S10180C59.s10180c59f0");
  }
}
static Arrange_To_Call_Me vS10180C59(Test_S10180C59, "S10180C59", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C60  {
  ::S10180C37 s10180c60f0;
  ::S10180C54 s10180c60f1;
  void *s10180c60f2;
  int s10180c60f3[4];
  void  mf10180c60(); // _ZN9S10180C6010mf10180c60Ev
};
//SIG(-1 S10180C60) C1{ m FC2{ m FC3{ FL[4]}} FC4{ m Fp FC5{ Fi[4]}} Fp Fi[4]}


void  S10180C60 ::mf10180c60(){}

static void Test_S10180C60()
{
  {
    init_simple_test("S10180C60");
    S10180C60 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S10180C60)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C60)");
    check_field_offset(lv, s10180c60f0, 0, "S10180C60.s10180c60f0");
    check_field_offset(lv, s10180c60f1, 32, "S10180C60.s10180c60f1");
    check_field_offset(lv, s10180c60f2, ABISELECT(56,52), "S10180C60.s10180c60f2");
    check_field_offset(lv, s10180c60f3, ABISELECT(64,56), "S10180C60.s10180c60f3");
  }
}
static Arrange_To_Call_Me vS10180C60(Test_S10180C60, "S10180C60", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C61  {
  void *s10180c61f0;
  void  mf10180c61(); // _ZN9S10180C6110mf10180c61Ev
};
//SIG(-1 S10180C61) C1{ m Fp}


void  S10180C61 ::mf10180c61(){}

static void Test_S10180C61()
{
  {
    init_simple_test("S10180C61");
    S10180C61 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10180C61)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C61)");
    check_field_offset(lv, s10180c61f0, 0, "S10180C61.s10180c61f0");
  }
}
static Arrange_To_Call_Me vS10180C61(Test_S10180C61, "S10180C61", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C58  : S10180C53 {
  void *s10180c58f0[2];
  __tsi64 s10180c58f1;
  int s10180c58f2[4];
  ::S10180C59 s10180c58f3;
  ::S10180C37 s10180c58f4;
  ::S10180C60 s10180c58f5;
  ::S10180C61 s10180c58f6;
  virtual  ~S10180C58(); // _ZN9S10180C58D1Ev
  virtual void  v86(); // _ZN9S10180C583v86Ev
  S10180C58(); // tgen
};
//SIG(-1 S10180C58) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 Fp[2] FL Fi[4] FC3{ m Fi[2]} FC4{ m FC5{ FL[4]}} FC6{ m FC4 FC7{ m Fp FC8{ Fi[4]}} Fp Fi[4]} FC9{ m Fp}}


 S10180C58 ::~S10180C58(){ note_dtor("S10180C58", this);}
void  S10180C58 ::v86(){vfunc_called(this, "_ZN9S10180C583v86Ev");}
S10180C58 ::S10180C58(){ note_ctor("S10180C58", this);} // tgen

static void Test_S10180C58()
{
  extern Class_Descriptor cd_S10180C58;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,41)];
    init_test(&cd_S10180C58, buf);
    S10180C58 *dp, &lv = *(dp=new (buf) S10180C58());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,160), "sizeof(S10180C58)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C58)");
    check_base_class_offset(lv, (S10180C53*), 0, "S10180C58");
    check_field_offset(lv, s10180c58f0, ABISELECT(16,12), "S10180C58.s10180c58f0");
    check_field_offset(lv, s10180c58f1, ABISELECT(32,20), "S10180C58.s10180c58f1");
    check_field_offset(lv, s10180c58f2, ABISELECT(40,28), "S10180C58.s10180c58f2");
    check_field_offset(lv, s10180c58f3, ABISELECT(56,44), "S10180C58.s10180c58f3");
    check_field_offset(lv, s10180c58f4, ABISELECT(64,52), "S10180C58.s10180c58f4");
    check_field_offset(lv, s10180c58f5, ABISELECT(96,84), "S10180C58.s10180c58f5");
    check_field_offset(lv, s10180c58f6, ABISELECT(176,156), "S10180C58.s10180c58f6");
    test_class_info(&lv, &cd_S10180C58);
    dp->~S10180C58();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C58(Test_S10180C58, "S10180C58", ABISELECT(184,160));

#else // __cplusplus

extern void _ZN9S10180C58C1Ev();
extern void _ZN9S10180C58D1Ev();
Name_Map name_map_S10180C58[] = {
  NSPAIR(_ZN9S10180C58C1Ev),
  NSPAIR(_ZN9S10180C58D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C53;
extern VTBL_ENTRY _ZTI9S10180C53[];
extern  VTBL_ENTRY _ZTV9S10180C53[];
static Base_Class bases_S10180C58[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C53,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C58[];
extern void _ZN9S10180C58D1Ev();
extern void _ZN9S10180C58D0Ev();
extern void _ZN9S10180C533v84Ev();
extern void _ZN9S10180C583v86Ev();
static  VTBL_ENTRY vtc_S10180C58[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C58[0]),
  (VTBL_ENTRY)&_ZN9S10180C58D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C58D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C533v84Ev,
  (VTBL_ENTRY)&_ZN9S10180C583v86Ev,
};
extern VTBL_ENTRY _ZTI9S10180C58[];
extern  VTBL_ENTRY _ZTV9S10180C58[];
Class_Descriptor cd_S10180C58 = {  "S10180C58", // class name
  bases_S10180C58, 1,
  &(vtc_S10180C58[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,160), // object size
  NSPAIRA(_ZTI9S10180C58),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C58),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  S10180C47  {
  ::S10180C48 s10180c47f0;
  ::S10180C50 s10180c47f1;
  ::S10180C52 s10180c47f2;
  ::S10180C58 s10180c47f3;
  ::S10180C37 s10180c47f4;
  ::S10180C37 s10180c47f5;
  __tsi64 s10180c47f6;
  int s10180c47f7[5];
  void  mf10180c47(); // _ZN9S10180C4710mf10180c47Ev
  virtual  ~S10180C47(); // _ZN9S10180C47D1Ev
  S10180C47(); // tgen
};
//SIG(-1 S10180C47) C1{ vd m FC2{ vd m FC3{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC4{ BC5{ vd v7 v8 v9 v10 v11 v12 Fi Fp Fc} vd v1 v2 v3 v4 v5 v6 Fp} FC6{ BC7{ vd v14 Fi Fc[3]} vd v13 Fp[4] FL Fi FC8{ m FC9{ FL[4]}} FC10{ m Fp FC11{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC12{ BC7 vd v15 FC8 Fi Fp[2] FC13{ m FC8 FC10 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC14{ BC7 vd v16 Fp[2] FL Fi[4] FC15{ m Fi[2]} FC8 FC16{ m FC8 FC10 Fp Fi[4]} FC17{ m Fp}} FC8 FC8 FL Fi[5]}


void  S10180C47 ::mf10180c47(){}
 S10180C47 ::~S10180C47(){ note_dtor("S10180C47", this);}
S10180C47 ::S10180C47(){ note_ctor("S10180C47", this);} // tgen

static void Test_S10180C47()
{
  extern Class_Descriptor cd_S10180C47;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1763,3487)];
    init_test(&cd_S10180C47, buf);
    S10180C47 *dp, &lv = *(dp=new (buf) S10180C47());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14096,13944), "sizeof(S10180C47)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C47)");
    check_field_offset(lv, s10180c47f0, ABISELECT(8,4), "S10180C47.s10180c47f0");
    check_field_offset(lv, s10180c47f1, ABISELECT(136,92), "S10180C47.s10180c47f1");
    check_field_offset(lv, s10180c47f2, ABISELECT(176,112), "S10180C47.s10180c47f2");
    check_field_offset(lv, s10180c47f3, ABISELECT(13816,13692), "S10180C47.s10180c47f3");
    check_field_offset(lv, s10180c47f4, ABISELECT(14000,13852), "S10180C47.s10180c47f4");
    check_field_offset(lv, s10180c47f5, ABISELECT(14032,13884), "S10180C47.s10180c47f5");
    check_field_offset(lv, s10180c47f6, ABISELECT(14064,13916), "S10180C47.s10180c47f6");
    check_field_offset(lv, s10180c47f7, ABISELECT(14072,13924), "S10180C47.s10180c47f7");
    test_class_info(&lv, &cd_S10180C47);
    dp->~S10180C47();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C47(Test_S10180C47, "S10180C47", ABISELECT(14096,13944));

#else // __cplusplus

extern void _ZN9S10180C47C1Ev();
extern void _ZN9S10180C47D1Ev();
Name_Map name_map_S10180C47[] = {
  NSPAIR(_ZN9S10180C47C1Ev),
  NSPAIR(_ZN9S10180C47D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C47[];
extern void _ZN9S10180C47D1Ev();
extern void _ZN9S10180C47D0Ev();
static  VTBL_ENTRY vtc_S10180C47[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C47[0]),
  (VTBL_ENTRY)&_ZN9S10180C47D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C47D0Ev,
};
extern VTBL_ENTRY _ZTI9S10180C47[];
extern  VTBL_ENTRY _ZTV9S10180C47[];
Class_Descriptor cd_S10180C47 = {  "S10180C47", // class name
  0,0,//no base classes
  &(vtc_S10180C47[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(14096,13944), // object size
  NSPAIRA(_ZTI9S10180C47),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C47),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  S10180C63  {
  int s10180c63f0;
  void  mf10180c63(); // _ZN9S10180C6310mf10180c63Ev
};
//SIG(-1 S10180C63) C1{ m Fi}


void  S10180C63 ::mf10180c63(){}

static void Test_S10180C63()
{
  {
    init_simple_test("S10180C63");
    S10180C63 lv;
    check2(sizeof(lv), 4, "sizeof(S10180C63)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C63)");
    check_field_offset(lv, s10180c63f0, 0, "S10180C63.s10180c63f0");
  }
}
static Arrange_To_Call_Me vS10180C63(Test_S10180C63, "S10180C63", 4);

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S10180C63[];
VTBL_ENTRY *P__ZTI9S10180C63 = _ZTI9S10180C63; 
Class_Descriptor cd_S10180C63 = {  "S10180C63", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI9S10180C63),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  S10180C62  {
  ::S10180C41 s10180c62f0;
  ::S10180C63 s10180c62f1;
  int s10180c62f2;
  void  mf10180c62(); // _ZN9S10180C6210mf10180c62Ev
};
//SIG(-1 S10180C62) C1{ m FC2{ m FL[3] Fi[3] FL} FC3{ m Fi} Fi}


void  S10180C62 ::mf10180c62(){}

static void Test_S10180C62()
{
  {
    init_simple_test("S10180C62");
    S10180C62 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S10180C62)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C62)");
    check_field_offset(lv, s10180c62f0, 0, "S10180C62.s10180c62f0");
    check_field_offset(lv, s10180c62f1, ABISELECT(48,44), "S10180C62.s10180c62f1");
    check_field_offset(lv, s10180c62f2, ABISELECT(52,48), "S10180C62.s10180c62f2");
  }
}
static Arrange_To_Call_Me vS10180C62(Test_S10180C62, "S10180C62", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C44  : S10180C17 , S10180C24 {
  int s10180c44f0;
  ::S10180C45 s10180c44f1;
  ::S10180C46 s10180c44f2;
  void *s10180c44f3;
  ::S10180C47 s10180c44f4;
  __tsi64 s10180c44f5;
  ::S10180C62 s10180c44f6;
  char s10180c44f7[128];
  ::S10180C28 s10180c44f8;
  ::S10180C31 s10180c44f9;
  virtual  ~S10180C44(); // _ZN9S10180C44D1Ev
  virtual void  v70(); // _ZN9S10180C443v70Ev
  S10180C44(); // tgen
};
//SIG(-1 S10180C44) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v2} vd v1 Fi FC7{ m Fc[2]} FC8{ Fp[2]} Fp FC9{ vd m FC10{ vd m FC11{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC12{ BC13{ vd v9 v10 v11 v12 v13 v14 Fi Fp Fc} vd v3 v4 v5 v6 v7 v8 Fp} FC14{ BC15{ vd v16 Fi Fc[3]} vd v15 Fp[4] FL Fi FC16{ m FC17{ FL[4]}} FC18{ m Fp FC19{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC20{ BC15 vd v17 FC16 Fi Fp[2] FC21{ m FC16 FC18 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC22{ BC15 vd v18 Fp[2] FL Fi[4] FC23{ m Fi[2]} FC16 FC24{ m FC16 FC18 Fp Fi[4]} FC25{ m Fp}} FC16 FC16 FL Fi[5]} FL FC26{ m FC27{ m FL[3] Fi[3] FL} FC28{ m Fi} Fi} Fc[128] FC29{ m Fi[2]} FC30{ m FC31{ m Fp Fi[2] FC5} Fp[2]}}


 S10180C44 ::~S10180C44(){ note_dtor("S10180C44", this);}
void  S10180C44 ::v70(){vfunc_called(this, "_ZN9S10180C443v70Ev");}
S10180C44 ::S10180C44(){ note_ctor("S10180C44", this);} // tgen

static void Test_S10180C44()
{
  extern Class_Descriptor cd_S10180C44;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1804,3556)];
    init_test(&cd_S10180C44, buf);
    S10180C44 *dp, &lv = *(dp=new (buf) S10180C44());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14424,14220), "sizeof(S10180C44)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C44)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C44");
    check_base_class_offset(lv, (S10180C24*), ABISELECT(48,32), "S10180C44");
    check_field_offset(lv, s10180c44f0, ABISELECT(56,36), "S10180C44.s10180c44f0");
    check_field_offset(lv, s10180c44f1, ABISELECT(60,40), "S10180C44.s10180c44f1");
    check_field_offset(lv, s10180c44f2, ABISELECT(64,44), "S10180C44.s10180c44f2");
    check_field_offset(lv, s10180c44f3, ABISELECT(80,52), "S10180C44.s10180c44f3");
    check_field_offset(lv, s10180c44f4, ABISELECT(88,56), "S10180C44.s10180c44f4");
    check_field_offset(lv, s10180c44f5, ABISELECT(14184,14000), "S10180C44.s10180c44f5");
    check_field_offset(lv, s10180c44f6, ABISELECT(14192,14008), "S10180C44.s10180c44f6");
    check_field_offset(lv, s10180c44f7, ABISELECT(14248,14060), "S10180C44.s10180c44f7");
    check_field_offset(lv, s10180c44f8, ABISELECT(14376,14188), "S10180C44.s10180c44f8");
    check_field_offset(lv, s10180c44f9, ABISELECT(14384,14196), "S10180C44.s10180c44f9");
    test_class_info(&lv, &cd_S10180C44);
    dp->~S10180C44();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C44(Test_S10180C44, "S10180C44", ABISELECT(14424,14220));

#else // __cplusplus

extern void _ZN9S10180C44C1Ev();
extern void _ZN9S10180C44D1Ev();
Name_Map name_map_S10180C44[] = {
  NSPAIR(_ZN9S10180C44C1Ev),
  NSPAIR(_ZN9S10180C44D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C24;
extern VTBL_ENTRY _ZTI9S10180C24[];
extern  VTBL_ENTRY _ZTV9S10180C24[];
static Base_Class bases_S10180C44[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C24,    ABISELECT(48,32), //bcp->offset
    5, //bcp->virtual_function_table_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 _ZTI9S10180C44[];
extern void _ZN9S10180C44D1Ev();
extern void _ZN9S10180C44D0Ev();
extern void _ZN9S10180C443v70Ev();
extern void ABISELECT(_ZThn48_N9S10180C44D1Ev,_ZThn32_N9S10180C44D1Ev)();
extern void ABISELECT(_ZThn48_N9S10180C44D0Ev,_ZThn32_N9S10180C44D0Ev)();
extern void _ZN9S10180C243v41Ev();
static  VTBL_ENTRY vtc_S10180C44[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C44[0]),
  (VTBL_ENTRY)&_ZN9S10180C44D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C44D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C443v70Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10180C44[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C44D1Ev,_ZThn32_N9S10180C44D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C44D0Ev,_ZThn32_N9S10180C44D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C243v41Ev,
};
extern VTBL_ENTRY _ZTI9S10180C44[];
extern  VTBL_ENTRY _ZTV9S10180C44[];
Class_Descriptor cd_S10180C44 = {  "S10180C44", // class name
  bases_S10180C44, 2,
  &(vtc_S10180C44[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(14424,14220), // object size
  NSPAIRA(_ZTI9S10180C44),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10180C44),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  S10180C64  {
  void *s10180c64f0;
  int s10180c64f1[2];
  void  mf10180c64(); // _ZN9S10180C6410mf10180c64Ev
};
//SIG(-1 S10180C64) C1{ m Fp Fi[2]}


void  S10180C64 ::mf10180c64(){}

static void Test_S10180C64()
{
  {
    init_simple_test("S10180C64");
    S10180C64 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10180C64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C64)");
    check_field_offset(lv, s10180c64f0, 0, "S10180C64.s10180c64f0");
    check_field_offset(lv, s10180c64f1, ABISELECT(8,4), "S10180C64.s10180c64f1");
  }
}
static Arrange_To_Call_Me vS10180C64(Test_S10180C64, "S10180C64", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S10180C64 = {  "S10180C64", // 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  S10180C65  {
  char s10180c65f0[11];
  int s10180c65f1[2];
  void  mf10180c65(); // _ZN9S10180C6510mf10180c65Ev
};
//SIG(-1 S10180C65) C1{ m Fc[11] Fi[2]}


void  S10180C65 ::mf10180c65(){}

static void Test_S10180C65()
{
  {
    init_simple_test("S10180C65");
    S10180C65 lv;
    check2(sizeof(lv), 20, "sizeof(S10180C65)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C65)");
    check_field_offset(lv, s10180c65f0, 0, "S10180C65.s10180c65f0");
    check_field_offset(lv, s10180c65f1, 12, "S10180C65.s10180c65f1");
  }
}
static Arrange_To_Call_Me vS10180C65(Test_S10180C65, "S10180C65", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C67  {
};
//SIG(-1 S10180C67) C1{}



static void Test_S10180C67()
{
  {
    init_simple_test("S10180C67");
    S10180C67 lv;
    check2(sizeof(lv), 1, "sizeof(S10180C67)");
    check2(__alignof__(lv), 1, "__alignof__(S10180C67)");
  }
}
static Arrange_To_Call_Me vS10180C67(Test_S10180C67, "S10180C67", 1);

#else // __cplusplus

Class_Descriptor cd_S10180C67 = {  "S10180C67", // 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  S10180C66  : S10180C67 {
  __tsi64 s10180c66f0;
  int s10180c66f1;
};
//SIG(-1 S10180C66) C1{ BC2{} FL Fi}



static void Test_S10180C66()
{
  extern Class_Descriptor cd_S10180C66;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S10180C66, buf);
    S10180C66 &lv = *(new (buf) S10180C66());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10180C66)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C66)");
    check_base_class_offset(lv, (S10180C67*), 0, "S10180C66");
    check_field_offset(lv, s10180c66f0, 0, "S10180C66.s10180c66f0");
    check_field_offset(lv, s10180c66f1, 8, "S10180C66.s10180c66f1");
    test_class_info(&lv, &cd_S10180C66);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C66(Test_S10180C66, "S10180C66", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S10180C67;
static Base_Class bases_S10180C66[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C67,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C66 = {  "S10180C66", // class name
  bases_S10180C66, 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  S10180C74  {
  __tsi64 s10180c74f0[2];
  void  mf10180c74(); // _ZN9S10180C7410mf10180c74Ev
};
//SIG(-1 S10180C74) C1{ m FL[2]}


void  S10180C74 ::mf10180c74(){}

static void Test_S10180C74()
{
  {
    init_simple_test("S10180C74");
    S10180C74 lv;
    check2(sizeof(lv), 16, "sizeof(S10180C74)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C74)");
    check_field_offset(lv, s10180c74f0, 0, "S10180C74.s10180c74f0");
  }
}
static Arrange_To_Call_Me vS10180C74(Test_S10180C74, "S10180C74", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C73  {
  ::S10180C74 s10180c73f0;
  void  mf10180c73(); // _ZN9S10180C7310mf10180c73Ev
};
//SIG(-1 S10180C73) C1{ m FC2{ m FL[2]}}


void  S10180C73 ::mf10180c73(){}

static void Test_S10180C73()
{
  {
    init_simple_test("S10180C73");
    S10180C73 lv;
    check2(sizeof(lv), 16, "sizeof(S10180C73)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C73)");
    check_field_offset(lv, s10180c73f0, 0, "S10180C73.s10180c73f0");
  }
}
static Arrange_To_Call_Me vS10180C73(Test_S10180C73, "S10180C73", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C70  {
  void *s10180c70f0;
  ::S10180C12 s10180c70f1;
  ::S10180C13 s10180c70f2;
  ::S10180C13 s10180c70f3;
  int s10180c70f4[3];
  ::S10180C73 s10180c70f5;
  char s10180c70f6;
  int s10180c70f7;
  int s10180c70f8:8;
  int s10180c70f9:24;
  ::S10180C12 s10180c70f10;
  ::S10180C12 s10180c70f11;
  char s10180c70f12;
  void  mf10180c70(); // _ZN9S10180C7010mf10180c70Ev
};
//SIG(-1 S10180C70) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC3 FC3 Fi[3] FC5{ m FC6{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC2 FC2 Fc}


void  S10180C70 ::mf10180c70(){}

static void Test_S10180C70()
{
  {
    init_simple_test("S10180C70");
    static S10180C70 lv;
    check2(sizeof(lv), ABISELECT(168,120), "sizeof(S10180C70)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C70)");
    check_field_offset(lv, s10180c70f0, 0, "S10180C70.s10180c70f0");
    check_field_offset(lv, s10180c70f1, ABISELECT(8,4), "S10180C70.s10180c70f1");
    check_field_offset(lv, s10180c70f2, ABISELECT(32,20), "S10180C70.s10180c70f2");
    check_field_offset(lv, s10180c70f3, ABISELECT(48,32), "S10180C70.s10180c70f3");
    check_field_offset(lv, s10180c70f4, ABISELECT(64,44), "S10180C70.s10180c70f4");
    check_field_offset(lv, s10180c70f5, ABISELECT(80,56), "S10180C70.s10180c70f5");
    check_field_offset(lv, s10180c70f6, ABISELECT(96,72), "S10180C70.s10180c70f6");
    check_field_offset(lv, s10180c70f7, ABISELECT(100,76), "S10180C70.s10180c70f7");
    set_bf_and_test(lv, s10180c70f8, ABISELECT(104,80), 0, 8, 1, "S10180C70");
    set_bf_and_test(lv, s10180c70f8, ABISELECT(104,80), 0, 8, hide_sll(1LL<<7), "S10180C70");
    set_bf_and_test(lv, s10180c70f9, ABISELECT(105,81), 0, 24, 1, "S10180C70");
    set_bf_and_test(lv, s10180c70f9, ABISELECT(105,81), 0, 24, hide_sll(1LL<<23), "S10180C70");
    check_field_offset(lv, s10180c70f10, ABISELECT(112,84), "S10180C70.s10180c70f10");
    check_field_offset(lv, s10180c70f11, ABISELECT(136,100), "S10180C70.s10180c70f11");
    check_field_offset(lv, s10180c70f12, ABISELECT(160,116), "S10180C70.s10180c70f12");
  }
}
static Arrange_To_Call_Me vS10180C70(Test_S10180C70, "S10180C70", ABISELECT(168,120));

#else // __cplusplus

Class_Descriptor cd_S10180C70 = {  "S10180C70", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(168,120), // 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  S10180C69  : S10180C17 {
  ::S10180C70 s10180c69f0;
  void *s10180c69f1;
  char s10180c69f2;
  int s10180c69f3;
  virtual  ~S10180C69(); // _ZN9S10180C69D1Ev
  virtual void  v89(); // _ZN9S10180C693v89Ev
  virtual void  v90(); // _ZN9S10180C693v90Ev
  virtual void  v91(); // _ZN9S10180C693v91Ev
  virtual void  v92(); // _ZN9S10180C693v92Ev
  S10180C69(); // tgen
};
//SIG(-1 S10180C69) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 v2 v3 v4 FC6{ m Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC8 FC8 Fi[3] FC9{ m FC10{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi}


 S10180C69 ::~S10180C69(){ note_dtor("S10180C69", this);}
void  S10180C69 ::v89(){vfunc_called(this, "_ZN9S10180C693v89Ev");}
void  S10180C69 ::v90(){vfunc_called(this, "_ZN9S10180C693v90Ev");}
void  S10180C69 ::v91(){vfunc_called(this, "_ZN9S10180C693v91Ev");}
void  S10180C69 ::v92(){vfunc_called(this, "_ZN9S10180C693v92Ev");}
S10180C69 ::S10180C69(){ note_ctor("S10180C69", this);} // tgen

static void Test_S10180C69()
{
  extern Class_Descriptor cd_S10180C69;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10180C69, buf);
    S10180C69 *dp, &lv = *(dp=new (buf) S10180C69());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10180C69)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C69)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C69");
    check_field_offset(lv, s10180c69f0, ABISELECT(48,32), "S10180C69.s10180c69f0");
    check_field_offset(lv, s10180c69f1, ABISELECT(216,152), "S10180C69.s10180c69f1");
    check_field_offset(lv, s10180c69f2, ABISELECT(224,156), "S10180C69.s10180c69f2");
    check_field_offset(lv, s10180c69f3, ABISELECT(228,160), "S10180C69.s10180c69f3");
    test_class_info(&lv, &cd_S10180C69);
    dp->~S10180C69();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C69(Test_S10180C69, "S10180C69", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN9S10180C69C1Ev();
extern void _ZN9S10180C69D1Ev();
Name_Map name_map_S10180C69[] = {
  NSPAIR(_ZN9S10180C69C1Ev),
  NSPAIR(_ZN9S10180C69D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10180C69[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C69[];
extern void _ZN9S10180C69D1Ev();
extern void _ZN9S10180C69D0Ev();
extern void _ZN9S10180C693v89Ev();
extern void _ZN9S10180C693v90Ev();
extern void _ZN9S10180C693v91Ev();
extern void _ZN9S10180C693v92Ev();
static  VTBL_ENTRY vtc_S10180C69[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C69[0]),
  (VTBL_ENTRY)&_ZN9S10180C69D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C69D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v92Ev,
};
extern VTBL_ENTRY _ZTI9S10180C69[];
extern  VTBL_ENTRY _ZTV9S10180C69[];
Class_Descriptor cd_S10180C69 = {  "S10180C69", // class name
  bases_S10180C69, 1,
  &(vtc_S10180C69[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI9S10180C69),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C69),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  S10180C68  : S10180C69 {
  virtual void  v87(); // _ZN9S10180C683v87Ev
  virtual void  v88(); // _ZN9S10180C683v88Ev
  ~S10180C68(); // tgen
  S10180C68(); // tgen
};
//SIG(-1 S10180C68) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v3 v4 v5 v6 FC7{ m Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC9 FC9 Fi[3] FC10{ m FC11{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v1 v2}


void  S10180C68 ::v87(){vfunc_called(this, "_ZN9S10180C683v87Ev");}
void  S10180C68 ::v88(){vfunc_called(this, "_ZN9S10180C683v88Ev");}
S10180C68 ::~S10180C68(){ note_dtor("S10180C68", this);} // tgen
S10180C68 ::S10180C68(){ note_ctor("S10180C68", this);} // tgen

static void Test_S10180C68()
{
  extern Class_Descriptor cd_S10180C68;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10180C68, buf);
    S10180C68 *dp, &lv = *(dp=new (buf) S10180C68());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10180C68)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C68)");
    check_base_class_offset(lv, (S10180C17*)(S10180C69*), 0, "S10180C68");
    check_base_class_offset(lv, (S10180C69*), 0, "S10180C68");
    test_class_info(&lv, &cd_S10180C68);
    dp->~S10180C68();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C68(Test_S10180C68, "S10180C68", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN9S10180C68C1Ev();
extern void _ZN9S10180C68D1Ev();
Name_Map name_map_S10180C68[] = {
  NSPAIR(_ZN9S10180C68C1Ev),
  NSPAIR(_ZN9S10180C68D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C69;
extern VTBL_ENTRY _ZTI9S10180C69[];
extern  VTBL_ENTRY _ZTV9S10180C69[];
static Base_Class bases_S10180C68[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C69,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C68[];
extern void _ZN9S10180C68D1Ev();
extern void _ZN9S10180C68D0Ev();
extern void _ZN9S10180C693v89Ev();
extern void _ZN9S10180C693v90Ev();
extern void _ZN9S10180C693v91Ev();
extern void _ZN9S10180C693v92Ev();
extern void _ZN9S10180C683v87Ev();
extern void _ZN9S10180C683v88Ev();
static  VTBL_ENTRY vtc_S10180C68[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C68[0]),
  (VTBL_ENTRY)&_ZN9S10180C68D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C68D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v92Ev,
  (VTBL_ENTRY)&_ZN9S10180C683v87Ev,
  (VTBL_ENTRY)&_ZN9S10180C683v88Ev,
};
extern VTBL_ENTRY _ZTI9S10180C68[];
extern  VTBL_ENTRY _ZTV9S10180C68[];
Class_Descriptor cd_S10180C68 = {  "S10180C68", // class name
  bases_S10180C68, 2,
  &(vtc_S10180C68[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI9S10180C68),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C68),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  S10180C75  : S10180C69 {
  virtual void  v93(); // _ZN9S10180C753v93Ev
  ~S10180C75(); // tgen
  S10180C75(); // tgen
};
//SIG(-1 S10180C75) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v2 v3 v4 v5 FC7{ m Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC9 FC9 Fi[3] FC10{ m FC11{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v1}


void  S10180C75 ::v93(){vfunc_called(this, "_ZN9S10180C753v93Ev");}
S10180C75 ::~S10180C75(){ note_dtor("S10180C75", this);} // tgen
S10180C75 ::S10180C75(){ note_ctor("S10180C75", this);} // tgen

static void Test_S10180C75()
{
  extern Class_Descriptor cd_S10180C75;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10180C75, buf);
    S10180C75 *dp, &lv = *(dp=new (buf) S10180C75());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10180C75)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C75)");
    check_base_class_offset(lv, (S10180C17*)(S10180C69*), 0, "S10180C75");
    check_base_class_offset(lv, (S10180C69*), 0, "S10180C75");
    test_class_info(&lv, &cd_S10180C75);
    dp->~S10180C75();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C75(Test_S10180C75, "S10180C75", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN9S10180C75C1Ev();
extern void _ZN9S10180C75D1Ev();
Name_Map name_map_S10180C75[] = {
  NSPAIR(_ZN9S10180C75C1Ev),
  NSPAIR(_ZN9S10180C75D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C69;
extern VTBL_ENTRY _ZTI9S10180C69[];
extern  VTBL_ENTRY _ZTV9S10180C69[];
static Base_Class bases_S10180C75[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C69,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C75[];
extern void _ZN9S10180C75D1Ev();
extern void _ZN9S10180C75D0Ev();
extern void _ZN9S10180C693v89Ev();
extern void _ZN9S10180C693v90Ev();
extern void _ZN9S10180C693v91Ev();
extern void _ZN9S10180C693v92Ev();
extern void _ZN9S10180C753v93Ev();
static  VTBL_ENTRY vtc_S10180C75[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C75[0]),
  (VTBL_ENTRY)&_ZN9S10180C75D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C75D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v92Ev,
  (VTBL_ENTRY)&_ZN9S10180C753v93Ev,
};
extern VTBL_ENTRY _ZTI9S10180C75[];
extern  VTBL_ENTRY _ZTV9S10180C75[];
Class_Descriptor cd_S10180C75 = {  "S10180C75", // class name
  bases_S10180C75, 2,
  &(vtc_S10180C75[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI9S10180C75),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C75),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  S10180C25  : S10180C17 , S10180C2 , S10180C11 , S10180C26 , S10180C27 {
  int s10180c25f0;
  ::S10180C28 s10180c25f1;
  ::S10180C28 s10180c25f2;
  ::S10180C28 s10180c25f3;
  ::S10180C29 s10180c25f4;
  ::S10180C34 s10180c25f5;
  ::S10180C35 s10180c25f6;
  ::S10180C39 s10180c25f7;
  int s10180c25f8;
  void *s10180c25f9;
  ::S10180C44 s10180c25f10;
  int s10180c25f11[3];
  ::S10180C64 s10180c25f12;
  ::S10180C65 s10180c25f13;
  ::S10180C66 s10180c25f14;
  ::S10180C68 s10180c25f15;
  __tsi64 s10180c25f16;
  ::S10180C75 s10180c25f17;
  ::S10180C75 s10180c25f18;
  ::S10180C68 s10180c25f19;
  ::S10180C31 s10180c25f20;
  char s10180c25f21;
  virtual  ~S10180C25(); // _ZN9S10180C25D1Ev
  virtual void  v42(); // _ZN9S10180C253v42Ev
  virtual void  v43(); // _ZN9S10180C253v43Ev
  virtual void  v44(); // _ZN9S10180C253v44Ev
  virtual void  v45(); // _ZN9S10180C253v45Ev
  virtual void  v46(); // _ZN9S10180C253v46Ev
  virtual void  v47(); // _ZN9S10180C253v47Ev
  virtual void  v48(); // _ZN9S10180C253v48Ev
  virtual void  v49(); // _ZN9S10180C253v49Ev
  virtual void  v50(); // _ZN9S10180C253v50Ev
  virtual void  v51(); // _ZN9S10180C253v51Ev
  virtual void  v52(); // _ZN9S10180C253v52Ev
  virtual void  v53(); // _ZN9S10180C253v53Ev
  virtual void  v54(); // _ZN9S10180C253v54Ev
  virtual void  v55(); // _ZN9S10180C253v55Ev
  virtual void  v56(); // _ZN9S10180C253v56Ev
  virtual void  v57(); // _ZN9S10180C253v57Ev
  virtual void  v58(); // _ZN9S10180C253v58Ev
  virtual void  v59(); // _ZN9S10180C253v59Ev
  virtual void  v60(); // _ZN9S10180C253v60Ev
  virtual void  v61(); // _ZN9S10180C253v61Ev
  virtual void  v62(); // _ZN9S10180C253v62Ev
  virtual void  v63(); // _ZN9S10180C253v63Ev
  S10180C25(); // tgen
};
//SIG(-1 S10180C25) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v23} BC7{ vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 Fp FC8{ m FC9{ m Fp Fi FC4} Fi} FC10{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC11{ vd v48} BC12{ vd v49 v50} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi FC13{ m Fi[2]} FC13 FC13 FC14{ BC2 vd Fi Fp FC8 FL FC13 Fi Fc Fi FC15{ m FC16{ m Fp Fi[2] FC5} Fp[2]}} FC17{ BC7 vd v51 v52 v53} FC18{ vd m Fi Fp[3] FC19{ m Fc[2] Fp[3] Fi[4] FC20{ m FC21{ FL[4]}}}} FC22{ vd m FC20 Fi[2] FC23{ m FL[3] Fi[3] FL} FL FC24{ m Fi FC25{ m Fi[4]}} FC15 Fc[2] Fi[2] Fp[2] FL Fi[3]} Fi Fp FC26{ BC2 BC27{ vd v55} vd v54 Fi FC28{ m Fc[2]} FC29{ Fp[2]} Fp FC30{ vd m FC31{ vd m FC32{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC33{ BC34{ vd v62 v63 v64 v65 v66 v67 Fi Fp Fc} vd v56 v57 v58 v59 v60 v61 Fp} FC35{ BC36{ vd v69 Fi Fc[3]} vd v68 Fp[4] FL Fi FC20 FC37{ m Fp FC38{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC39{ BC36 vd v70 FC20 Fi Fp[2] FC40{ m FC20 FC37 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC41{ BC36 vd v71 Fp[2] FL Fi[4] FC42{ m Fi[2]} FC20 FC43{ m FC20 FC37 Fp Fi[4]} FC44{ m Fp}} FC20 FC20 FL Fi[5]} FL FC45{ m FC23 FC46{ m Fi} Fi} Fc[128] FC13 FC15} Fi[3] FC47{ m Fp Fi[2]} FC48{ m Fc[11] Fi[2]} FC49{ BC50{} FL Fi} FC51{ BC52{ BC2 vd v74 v75 v76 v77 FC53{ m Fp FC8 FC9 FC9 Fi[3] FC54{ m FC55{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v72 v73} FL FC56{ BC52 v78} FC56 FC51 FC15 Fc}


 S10180C25 ::~S10180C25(){ note_dtor("S10180C25", this);}
void  S10180C25 ::v42(){vfunc_called(this, "_ZN9S10180C253v42Ev");}
void  S10180C25 ::v43(){vfunc_called(this, "_ZN9S10180C253v43Ev");}
void  S10180C25 ::v44(){vfunc_called(this, "_ZN9S10180C253v44Ev");}
void  S10180C25 ::v45(){vfunc_called(this, "_ZN9S10180C253v45Ev");}
void  S10180C25 ::v46(){vfunc_called(this, "_ZN9S10180C253v46Ev");}
void  S10180C25 ::v47(){vfunc_called(this, "_ZN9S10180C253v47Ev");}
void  S10180C25 ::v48(){vfunc_called(this, "_ZN9S10180C253v48Ev");}
void  S10180C25 ::v49(){vfunc_called(this, "_ZN9S10180C253v49Ev");}
void  S10180C25 ::v50(){vfunc_called(this, "_ZN9S10180C253v50Ev");}
void  S10180C25 ::v51(){vfunc_called(this, "_ZN9S10180C253v51Ev");}
void  S10180C25 ::v52(){vfunc_called(this, "_ZN9S10180C253v52Ev");}
void  S10180C25 ::v53(){vfunc_called(this, "_ZN9S10180C253v53Ev");}
void  S10180C25 ::v54(){vfunc_called(this, "_ZN9S10180C253v54Ev");}
void  S10180C25 ::v55(){vfunc_called(this, "_ZN9S10180C253v55Ev");}
void  S10180C25 ::v56(){vfunc_called(this, "_ZN9S10180C253v56Ev");}
void  S10180C25 ::v57(){vfunc_called(this, "_ZN9S10180C253v57Ev");}
void  S10180C25 ::v58(){vfunc_called(this, "_ZN9S10180C253v58Ev");}
void  S10180C25 ::v59(){vfunc_called(this, "_ZN9S10180C253v59Ev");}
void  S10180C25 ::v60(){vfunc_called(this, "_ZN9S10180C253v60Ev");}
void  S10180C25 ::v61(){vfunc_called(this, "_ZN9S10180C253v61Ev");}
void  S10180C25 ::v62(){vfunc_called(this, "_ZN9S10180C253v62Ev");}
void  S10180C25 ::v63(){vfunc_called(this, "_ZN9S10180C253v63Ev");}
S10180C25 ::S10180C25(){ note_ctor("S10180C25", this);} // tgen

static void Test_S10180C25()
{
  extern Class_Descriptor cd_S10180C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2037,3888)];
    init_test(&cd_S10180C25, buf);
    S10180C25 *dp, &lv = *(dp=new (buf) S10180C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16288,15548), "sizeof(S10180C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C25)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C25");
    check_base_class_offset(lv, (S10180C2*), ABISELECT(48,32), "S10180C25");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(56,36), "S10180C25");
    check_base_class_offset(lv, (S10180C26*), ABISELECT(152,100), "S10180C25");
    check_base_class_offset(lv, (S10180C27*), ABISELECT(160,104), "S10180C25");
    check_field_offset(lv, s10180c25f0, ABISELECT(168,108), "S10180C25.s10180c25f0");
    check_field_offset(lv, s10180c25f1, ABISELECT(172,112), "S10180C25.s10180c25f1");
    check_field_offset(lv, s10180c25f2, ABISELECT(180,120), "S10180C25.s10180c25f2");
    check_field_offset(lv, s10180c25f3, ABISELECT(188,128), "S10180C25.s10180c25f3");
    check_field_offset(lv, s10180c25f4, ABISELECT(200,136), "S10180C25.s10180c25f4");
    check_field_offset(lv, s10180c25f5, ABISELECT(352,244), "S10180C25.s10180c25f5");
    check_field_offset(lv, s10180c25f6, ABISELECT(448,308), "S10180C25.s10180c25f6");
    check_field_offset(lv, s10180c25f7, ABISELECT(568,392), "S10180C25.s10180c25f7");
    check_field_offset(lv, s10180c25f8, ABISELECT(792,572), "S10180C25.s10180c25f8");
    check_field_offset(lv, s10180c25f9, ABISELECT(800,576), "S10180C25.s10180c25f9");
    check_field_offset(lv, s10180c25f10, ABISELECT(808,580), "S10180C25.s10180c25f10");
    check_field_offset(lv, s10180c25f11, ABISELECT(15232,14800), "S10180C25.s10180c25f11");
    check_field_offset(lv, s10180c25f12, ABISELECT(15248,14812), "S10180C25.s10180c25f12");
    check_field_offset(lv, s10180c25f13, ABISELECT(15264,14824), "S10180C25.s10180c25f13");
    check_field_offset(lv, s10180c25f14, ABISELECT(15288,14844), "S10180C25.s10180c25f14");
    check_field_offset(lv, s10180c25f15, ABISELECT(15304,14856), "S10180C25.s10180c25f15");
    check_field_offset(lv, s10180c25f16, ABISELECT(15536,15020), "S10180C25.s10180c25f16");
    check_field_offset(lv, s10180c25f17, ABISELECT(15544,15028), "S10180C25.s10180c25f17");
    check_field_offset(lv, s10180c25f18, ABISELECT(15776,15192), "S10180C25.s10180c25f18");
    check_field_offset(lv, s10180c25f19, ABISELECT(16008,15356), "S10180C25.s10180c25f19");
    check_field_offset(lv, s10180c25f20, ABISELECT(16240,15520), "S10180C25.s10180c25f20");
    check_field_offset(lv, s10180c25f21, ABISELECT(16280,15544), "S10180C25.s10180c25f21");
    test_class_info(&lv, &cd_S10180C25);
    dp->~S10180C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C25(Test_S10180C25, "S10180C25", ABISELECT(16288,15548));

#else // __cplusplus

extern void _ZN9S10180C25C1Ev();
extern void _ZN9S10180C25D1Ev();
Name_Map name_map_S10180C25[] = {
  NSPAIR(_ZN9S10180C25C1Ev),
  NSPAIR(_ZN9S10180C25D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
extern Class_Descriptor cd_S10180C26;
extern VTBL_ENTRY _ZTI9S10180C26[];
extern  VTBL_ENTRY _ZTV9S10180C26[];
extern Class_Descriptor cd_S10180C27;
extern VTBL_ENTRY _ZTI9S10180C27[];
extern  VTBL_ENTRY _ZTV9S10180C27[];
static Base_Class bases_S10180C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C2,    ABISELECT(48,32), //bcp->offset
    26, //bcp->virtual_function_table_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},
  {&cd_S10180C11,    ABISELECT(56,36), //bcp->offset
    31, //bcp->virtual_function_table_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},
  {&cd_S10180C26,    ABISELECT(152,100), //bcp->offset
    59, //bcp->virtual_function_table_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},
  {&cd_S10180C27,    ABISELECT(160,104), //bcp->offset
    64, //bcp->virtual_function_table_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 _ZTI9S10180C25[];
extern void _ZN9S10180C25D1Ev();
extern void _ZN9S10180C25D0Ev();
extern void _ZN9S10180C253v42Ev();
extern void _ZN9S10180C253v43Ev();
extern void _ZN9S10180C253v44Ev();
extern void _ZN9S10180C253v45Ev();
extern void _ZN9S10180C253v46Ev();
extern void _ZN9S10180C253v47Ev();
extern void _ZN9S10180C253v48Ev();
extern void _ZN9S10180C253v49Ev();
extern void _ZN9S10180C253v50Ev();
extern void _ZN9S10180C253v51Ev();
extern void _ZN9S10180C253v52Ev();
extern void _ZN9S10180C253v53Ev();
extern void _ZN9S10180C253v54Ev();
extern void _ZN9S10180C253v55Ev();
extern void _ZN9S10180C253v56Ev();
extern void _ZN9S10180C253v57Ev();
extern void _ZN9S10180C253v58Ev();
extern void _ZN9S10180C253v59Ev();
extern void _ZN9S10180C253v60Ev();
extern void _ZN9S10180C253v61Ev();
extern void _ZN9S10180C253v62Ev();
extern void _ZN9S10180C253v63Ev();
extern void ABISELECT(_ZThn48_N9S10180C25D1Ev,_ZThn32_N9S10180C25D1Ev)();
extern void ABISELECT(_ZThn48_N9S10180C25D0Ev,_ZThn32_N9S10180C25D0Ev)();
extern void _ZN8S10180C22v7Ev();
extern void ABISELECT(_ZThn56_N9S10180C25D1Ev,_ZThn36_N9S10180C25D1Ev)();
extern void ABISELECT(_ZThn56_N9S10180C25D0Ev,_ZThn36_N9S10180C25D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void ABISELECT(_ZThn152_N9S10180C25D1Ev,_ZThn100_N9S10180C25D1Ev)();
extern void ABISELECT(_ZThn152_N9S10180C25D0Ev,_ZThn100_N9S10180C25D0Ev)();
extern void _ZN9S10180C263v64Ev();
extern void ABISELECT(_ZThn160_N9S10180C25D1Ev,_ZThn104_N9S10180C25D1Ev)();
extern void ABISELECT(_ZThn160_N9S10180C25D0Ev,_ZThn104_N9S10180C25D0Ev)();
extern void _ZN9S10180C273v65Ev();
extern void _ZN9S10180C273v66Ev();
static  VTBL_ENTRY vtc_S10180C25[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C25[0]),
  (VTBL_ENTRY)&_ZN9S10180C25D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C25D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v42Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v43Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v44Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v45Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v46Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v47Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v48Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v49Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v50Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v51Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v52Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v53Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v54Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v55Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v56Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v57Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v58Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v59Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v60Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v61Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v62Ev,
  (VTBL_ENTRY)&_ZN9S10180C253v63Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10180C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C25D1Ev,_ZThn32_N9S10180C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C25D0Ev,_ZThn32_N9S10180C25D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S10180C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10180C25D1Ev,_ZThn36_N9S10180C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10180C25D0Ev,_ZThn36_N9S10180C25D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S10180C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10180C25D1Ev,_ZThn100_N9S10180C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10180C25D0Ev,_ZThn100_N9S10180C25D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C263v64Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S10180C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10180C25D1Ev,_ZThn104_N9S10180C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10180C25D0Ev,_ZThn104_N9S10180C25D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C273v65Ev,
  (VTBL_ENTRY)&_ZN9S10180C273v66Ev,
};
extern VTBL_ENTRY _ZTI9S10180C25[];
extern  VTBL_ENTRY _ZTV9S10180C25[];
Class_Descriptor cd_S10180C25 = {  "S10180C25", // class name
  bases_S10180C25, 5,
  &(vtc_S10180C25[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16288,15548), // object size
  NSPAIRA(_ZTI9S10180C25),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S10180C25),70, //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  S10180C81  {
  virtual  ~S10180C81(); // _ZN9S10180C81D1Ev
  virtual void  v99(); // _ZN9S10180C813v99Ev
  virtual void  v100(); // _ZN9S10180C814v100Ev
  virtual void  v101(); // _ZN9S10180C814v101Ev
  virtual void  v102(); // _ZN9S10180C814v102Ev
  virtual void  v103(); // _ZN9S10180C814v103Ev
  virtual void  v104(); // _ZN9S10180C814v104Ev
  virtual void  v105(); // _ZN9S10180C814v105Ev
  virtual void  v106(); // _ZN9S10180C814v106Ev
  virtual void  v107(); // _ZN9S10180C814v107Ev
  virtual void  v108(); // _ZN9S10180C814v108Ev
  virtual void  v109(); // _ZN9S10180C814v109Ev
  virtual void  v110(); // _ZN9S10180C814v110Ev
  virtual void  v111(); // _ZN9S10180C814v111Ev
  virtual void  v112(); // _ZN9S10180C814v112Ev
  virtual void  v113(); // _ZN9S10180C814v113Ev
  S10180C81(); // tgen
};
//SIG(-1 S10180C81) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15}


 S10180C81 ::~S10180C81(){ note_dtor("S10180C81", this);}
void  S10180C81 ::v99(){vfunc_called(this, "_ZN9S10180C813v99Ev");}
void  S10180C81 ::v100(){vfunc_called(this, "_ZN9S10180C814v100Ev");}
void  S10180C81 ::v101(){vfunc_called(this, "_ZN9S10180C814v101Ev");}
void  S10180C81 ::v102(){vfunc_called(this, "_ZN9S10180C814v102Ev");}
void  S10180C81 ::v103(){vfunc_called(this, "_ZN9S10180C814v103Ev");}
void  S10180C81 ::v104(){vfunc_called(this, "_ZN9S10180C814v104Ev");}
void  S10180C81 ::v105(){vfunc_called(this, "_ZN9S10180C814v105Ev");}
void  S10180C81 ::v106(){vfunc_called(this, "_ZN9S10180C814v106Ev");}
void  S10180C81 ::v107(){vfunc_called(this, "_ZN9S10180C814v107Ev");}
void  S10180C81 ::v108(){vfunc_called(this, "_ZN9S10180C814v108Ev");}
void  S10180C81 ::v109(){vfunc_called(this, "_ZN9S10180C814v109Ev");}
void  S10180C81 ::v110(){vfunc_called(this, "_ZN9S10180C814v110Ev");}
void  S10180C81 ::v111(){vfunc_called(this, "_ZN9S10180C814v111Ev");}
void  S10180C81 ::v112(){vfunc_called(this, "_ZN9S10180C814v112Ev");}
void  S10180C81 ::v113(){vfunc_called(this, "_ZN9S10180C814v113Ev");}
S10180C81 ::S10180C81(){ note_ctor("S10180C81", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10180C81C1Ev();
extern void _ZN9S10180C81D1Ev();
Name_Map name_map_S10180C81[] = {
  NSPAIR(_ZN9S10180C81C1Ev),
  NSPAIR(_ZN9S10180C81D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C81[];
extern void _ZN9S10180C81D1Ev();
extern void _ZN9S10180C81D0Ev();
extern void _ZN9S10180C813v99Ev();
extern void _ZN9S10180C814v100Ev();
extern void _ZN9S10180C814v101Ev();
extern void _ZN9S10180C814v102Ev();
extern void _ZN9S10180C814v103Ev();
extern void _ZN9S10180C814v104Ev();
extern void _ZN9S10180C814v105Ev();
extern void _ZN9S10180C814v106Ev();
extern void _ZN9S10180C814v107Ev();
extern void _ZN9S10180C814v108Ev();
extern void _ZN9S10180C814v109Ev();
extern void _ZN9S10180C814v110Ev();
extern void _ZN9S10180C814v111Ev();
extern void _ZN9S10180C814v112Ev();
extern void _ZN9S10180C814v113Ev();
static  VTBL_ENTRY vtc_S10180C81[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C81[0]),
  (VTBL_ENTRY)&_ZN9S10180C81D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C81D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C813v99Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v100Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v101Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v102Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v103Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v104Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v105Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v106Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v107Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v108Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v109Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v110Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v111Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v112Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v113Ev,
};
extern VTBL_ENTRY _ZTI9S10180C81[];
extern  VTBL_ENTRY _ZTV9S10180C81[];
Class_Descriptor cd_S10180C81 = {  "S10180C81", // class name
  0,0,//no base classes
  &(vtc_S10180C81[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10180C81),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C81),19, //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  S10180C82  {
  void *s10180c82f0;
  void  mf10180c82(); // _ZN9S10180C8210mf10180c82Ev
  virtual  ~S10180C82(); // _ZN9S10180C82D1Ev
  S10180C82(); // tgen
};
//SIG(-1 S10180C82) C1{ vd m Fp}


void  S10180C82 ::mf10180c82(){}
 S10180C82 ::~S10180C82(){ note_dtor("S10180C82", this);}
S10180C82 ::S10180C82(){ note_ctor("S10180C82", this);} // tgen

static void Test_S10180C82()
{
  extern Class_Descriptor cd_S10180C82;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10180C82, buf);
    S10180C82 *dp, &lv = *(dp=new (buf) S10180C82());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10180C82)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C82)");
    check_field_offset(lv, s10180c82f0, ABISELECT(8,4), "S10180C82.s10180c82f0");
    test_class_info(&lv, &cd_S10180C82);
    dp->~S10180C82();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C82(Test_S10180C82, "S10180C82", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S10180C82C1Ev();
extern void _ZN9S10180C82D1Ev();
Name_Map name_map_S10180C82[] = {
  NSPAIR(_ZN9S10180C82C1Ev),
  NSPAIR(_ZN9S10180C82D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C82[];
extern void _ZN9S10180C82D1Ev();
extern void _ZN9S10180C82D0Ev();
static  VTBL_ENTRY vtc_S10180C82[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C82[0]),
  (VTBL_ENTRY)&_ZN9S10180C82D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C82D0Ev,
};
extern VTBL_ENTRY _ZTI9S10180C82[];
extern  VTBL_ENTRY _ZTV9S10180C82[];
Class_Descriptor cd_S10180C82 = {  "S10180C82", // class name
  0,0,//no base classes
  &(vtc_S10180C82[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S10180C82),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C82),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  S10180C80  : S10180C81 , S10180C82 {
  ~S10180C80(); // tgen
  S10180C80(); // tgen
};
//SIG(-1 S10180C80) C1{ BC2{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15} BC3{ vd m Fp}}


S10180C80 ::~S10180C80(){ note_dtor("S10180C80", this);} // tgen
S10180C80 ::S10180C80(){ note_ctor("S10180C80", this);} // tgen

static void Test_S10180C80()
{
  extern Class_Descriptor cd_S10180C80;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10180C80, buf);
    S10180C80 *dp, &lv = *(dp=new (buf) S10180C80());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10180C80)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C80)");
    check_base_class_offset(lv, (S10180C81*), 0, "S10180C80");
    check_base_class_offset(lv, (S10180C82*), ABISELECT(8,4), "S10180C80");
    test_class_info(&lv, &cd_S10180C80);
    dp->~S10180C80();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C80(Test_S10180C80, "S10180C80", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S10180C80C1Ev();
extern void _ZN9S10180C80D1Ev();
Name_Map name_map_S10180C80[] = {
  NSPAIR(_ZN9S10180C80C1Ev),
  NSPAIR(_ZN9S10180C80D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C81;
extern VTBL_ENTRY _ZTI9S10180C81[];
extern  VTBL_ENTRY _ZTV9S10180C81[];
extern Class_Descriptor cd_S10180C82;
extern VTBL_ENTRY _ZTI9S10180C82[];
extern  VTBL_ENTRY _ZTV9S10180C82[];
static Base_Class bases_S10180C80[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C81,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C82,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI9S10180C80[];
extern void _ZN9S10180C80D1Ev();
extern void _ZN9S10180C80D0Ev();
extern void _ZN9S10180C813v99Ev();
extern void _ZN9S10180C814v100Ev();
extern void _ZN9S10180C814v101Ev();
extern void _ZN9S10180C814v102Ev();
extern void _ZN9S10180C814v103Ev();
extern void _ZN9S10180C814v104Ev();
extern void _ZN9S10180C814v105Ev();
extern void _ZN9S10180C814v106Ev();
extern void _ZN9S10180C814v107Ev();
extern void _ZN9S10180C814v108Ev();
extern void _ZN9S10180C814v109Ev();
extern void _ZN9S10180C814v110Ev();
extern void _ZN9S10180C814v111Ev();
extern void _ZN9S10180C814v112Ev();
extern void _ZN9S10180C814v113Ev();
extern void ABISELECT(_ZThn8_N9S10180C80D1Ev,_ZThn4_N9S10180C80D1Ev)();
extern void ABISELECT(_ZThn8_N9S10180C80D0Ev,_ZThn4_N9S10180C80D0Ev)();
static  VTBL_ENTRY vtc_S10180C80[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C80[0]),
  (VTBL_ENTRY)&_ZN9S10180C80D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C80D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C813v99Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v100Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v101Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v102Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v103Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v104Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v105Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v106Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v107Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v108Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v109Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v110Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v111Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v112Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v113Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S10180C80[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S10180C80D1Ev,_ZThn4_N9S10180C80D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S10180C80D0Ev,_ZThn4_N9S10180C80D0Ev),
};
extern VTBL_ENTRY _ZTI9S10180C80[];
extern  VTBL_ENTRY _ZTV9S10180C80[];
Class_Descriptor cd_S10180C80 = {  "S10180C80", // class name
  bases_S10180C80, 2,
  &(vtc_S10180C80[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S10180C80),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10180C80),23, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C83  {
  virtual  ~S10180C83(); // _ZN9S10180C83D1Ev
  virtual void  v114(); // _ZN9S10180C834v114Ev
  virtual void  v115(); // _ZN9S10180C834v115Ev
  S10180C83(); // tgen
};
//SIG(-1 S10180C83) C1{ vd v1 v2}


 S10180C83 ::~S10180C83(){ note_dtor("S10180C83", this);}
void  S10180C83 ::v114(){vfunc_called(this, "_ZN9S10180C834v114Ev");}
void  S10180C83 ::v115(){vfunc_called(this, "_ZN9S10180C834v115Ev");}
S10180C83 ::S10180C83(){ note_ctor("S10180C83", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10180C83C1Ev();
extern void _ZN9S10180C83D1Ev();
Name_Map name_map_S10180C83[] = {
  NSPAIR(_ZN9S10180C83C1Ev),
  NSPAIR(_ZN9S10180C83D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10180C83[];
extern void _ZN9S10180C83D1Ev();
extern void _ZN9S10180C83D0Ev();
extern void _ZN9S10180C834v114Ev();
extern void _ZN9S10180C834v115Ev();
static  VTBL_ENTRY vtc_S10180C83[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C83[0]),
  (VTBL_ENTRY)&_ZN9S10180C83D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C83D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C834v114Ev,
  (VTBL_ENTRY)&_ZN9S10180C834v115Ev,
};
extern VTBL_ENTRY _ZTI9S10180C83[];
extern  VTBL_ENTRY _ZTV9S10180C83[];
Class_Descriptor cd_S10180C83 = {  "S10180C83", // class name
  0,0,//no base classes
  &(vtc_S10180C83[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10180C83),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10180C83),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  S10180C86  : S10180C69 {
  virtual void  v150(); // _ZN9S10180C864v150Ev
  ~S10180C86(); // tgen
  S10180C86(); // tgen
};
//SIG(-1 S10180C86) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v2 v3 v4 v5 FC7{ m Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC9 FC9 Fi[3] FC10{ m FC11{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v1}


void  S10180C86 ::v150(){vfunc_called(this, "_ZN9S10180C864v150Ev");}
S10180C86 ::~S10180C86(){ note_dtor("S10180C86", this);} // tgen
S10180C86 ::S10180C86(){ note_ctor("S10180C86", this);} // tgen

static void Test_S10180C86()
{
  extern Class_Descriptor cd_S10180C86;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10180C86, buf);
    S10180C86 *dp, &lv = *(dp=new (buf) S10180C86());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10180C86)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C86)");
    check_base_class_offset(lv, (S10180C17*)(S10180C69*), 0, "S10180C86");
    check_base_class_offset(lv, (S10180C69*), 0, "S10180C86");
    test_class_info(&lv, &cd_S10180C86);
    dp->~S10180C86();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C86(Test_S10180C86, "S10180C86", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN9S10180C86C1Ev();
extern void _ZN9S10180C86D1Ev();
Name_Map name_map_S10180C86[] = {
  NSPAIR(_ZN9S10180C86C1Ev),
  NSPAIR(_ZN9S10180C86D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C69;
extern VTBL_ENTRY _ZTI9S10180C69[];
extern  VTBL_ENTRY _ZTV9S10180C69[];
static Base_Class bases_S10180C86[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C69,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C86[];
extern void _ZN9S10180C86D1Ev();
extern void _ZN9S10180C86D0Ev();
extern void _ZN9S10180C693v89Ev();
extern void _ZN9S10180C693v90Ev();
extern void _ZN9S10180C693v91Ev();
extern void _ZN9S10180C693v92Ev();
extern void _ZN9S10180C864v150Ev();
static  VTBL_ENTRY vtc_S10180C86[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C86[0]),
  (VTBL_ENTRY)&_ZN9S10180C86D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C86D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v92Ev,
  (VTBL_ENTRY)&_ZN9S10180C864v150Ev,
};
extern VTBL_ENTRY _ZTI9S10180C86[];
extern  VTBL_ENTRY _ZTV9S10180C86[];
Class_Descriptor cd_S10180C86 = {  "S10180C86", // class name
  bases_S10180C86, 2,
  &(vtc_S10180C86[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI9S10180C86),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C86),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  S10180C87  : S10180C69 {
  virtual void  v151(); // _ZN9S10180C874v151Ev
  virtual void  v152(); // _ZN9S10180C874v152Ev
  ~S10180C87(); // tgen
  S10180C87(); // tgen
};
//SIG(-1 S10180C87) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v3 v4 v5 v6 FC7{ m Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC9 FC9 Fi[3] FC10{ m FC11{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v1 v2}


void  S10180C87 ::v151(){vfunc_called(this, "_ZN9S10180C874v151Ev");}
void  S10180C87 ::v152(){vfunc_called(this, "_ZN9S10180C874v152Ev");}
S10180C87 ::~S10180C87(){ note_dtor("S10180C87", this);} // tgen
S10180C87 ::S10180C87(){ note_ctor("S10180C87", this);} // tgen

static void Test_S10180C87()
{
  extern Class_Descriptor cd_S10180C87;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10180C87, buf);
    S10180C87 *dp, &lv = *(dp=new (buf) S10180C87());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10180C87)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C87)");
    check_base_class_offset(lv, (S10180C17*)(S10180C69*), 0, "S10180C87");
    check_base_class_offset(lv, (S10180C69*), 0, "S10180C87");
    test_class_info(&lv, &cd_S10180C87);
    dp->~S10180C87();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C87(Test_S10180C87, "S10180C87", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN9S10180C87C1Ev();
extern void _ZN9S10180C87D1Ev();
Name_Map name_map_S10180C87[] = {
  NSPAIR(_ZN9S10180C87C1Ev),
  NSPAIR(_ZN9S10180C87D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C69;
extern VTBL_ENTRY _ZTI9S10180C69[];
extern  VTBL_ENTRY _ZTV9S10180C69[];
static Base_Class bases_S10180C87[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C69,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C87[];
extern void _ZN9S10180C87D1Ev();
extern void _ZN9S10180C87D0Ev();
extern void _ZN9S10180C693v89Ev();
extern void _ZN9S10180C693v90Ev();
extern void _ZN9S10180C693v91Ev();
extern void _ZN9S10180C693v92Ev();
extern void _ZN9S10180C874v151Ev();
extern void _ZN9S10180C874v152Ev();
static  VTBL_ENTRY vtc_S10180C87[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C87[0]),
  (VTBL_ENTRY)&_ZN9S10180C87D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C87D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v92Ev,
  (VTBL_ENTRY)&_ZN9S10180C874v151Ev,
  (VTBL_ENTRY)&_ZN9S10180C874v152Ev,
};
extern VTBL_ENTRY _ZTI9S10180C87[];
extern  VTBL_ENTRY _ZTV9S10180C87[];
Class_Descriptor cd_S10180C87 = {  "S10180C87", // class name
  bases_S10180C87, 2,
  &(vtc_S10180C87[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI9S10180C87),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C87),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  S10180C89  {
  void *s10180c89f0[3];
};
//SIG(-1 S10180C89) C1{ Fp[3]}



static void Test_S10180C89()
{
  {
    init_simple_test("S10180C89");
    S10180C89 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10180C89)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C89)");
    check_field_offset(lv, s10180c89f0, 0, "S10180C89.s10180c89f0");
  }
}
static Arrange_To_Call_Me vS10180C89(Test_S10180C89, "S10180C89", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C88  : S10180C69 {
  ::S10180C89 s10180c88f0;
  ::S10180C55 s10180c88f1[3];
  virtual void  v153(); // _ZN9S10180C884v153Ev
  virtual void  v154(); // _ZN9S10180C884v154Ev
  virtual void  v155(); // _ZN9S10180C884v155Ev
  ~S10180C88(); // tgen
  S10180C88(); // tgen
};
//SIG(-1 S10180C88) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v4 v5 v6 v7 FC7{ m Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC9 FC9 Fi[3] FC10{ m FC11{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v1 v2 v3 FC12{ Fp[3]} FC13{ Fi[4]}[3]}


void  S10180C88 ::v153(){vfunc_called(this, "_ZN9S10180C884v153Ev");}
void  S10180C88 ::v154(){vfunc_called(this, "_ZN9S10180C884v154Ev");}
void  S10180C88 ::v155(){vfunc_called(this, "_ZN9S10180C884v155Ev");}
S10180C88 ::~S10180C88(){ note_dtor("S10180C88", this);} // tgen
S10180C88 ::S10180C88(){ note_ctor("S10180C88", this);} // tgen

static void Test_S10180C88()
{
  extern Class_Descriptor cd_S10180C88;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,57)];
    init_test(&cd_S10180C88, buf);
    S10180C88 *dp, &lv = *(dp=new (buf) S10180C88());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,224), "sizeof(S10180C88)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C88)");
    check_base_class_offset(lv, (S10180C17*)(S10180C69*), 0, "S10180C88");
    check_base_class_offset(lv, (S10180C69*), 0, "S10180C88");
    check_field_offset(lv, s10180c88f0, ABISELECT(232,164), "S10180C88.s10180c88f0");
    check_field_offset(lv, s10180c88f1, ABISELECT(256,176), "S10180C88.s10180c88f1");
    test_class_info(&lv, &cd_S10180C88);
    dp->~S10180C88();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C88(Test_S10180C88, "S10180C88", ABISELECT(304,224));

#else // __cplusplus

extern void _ZN9S10180C88C1Ev();
extern void _ZN9S10180C88D1Ev();
Name_Map name_map_S10180C88[] = {
  NSPAIR(_ZN9S10180C88C1Ev),
  NSPAIR(_ZN9S10180C88D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C69;
extern VTBL_ENTRY _ZTI9S10180C69[];
extern  VTBL_ENTRY _ZTV9S10180C69[];
static Base_Class bases_S10180C88[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C69,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10180C88[];
extern void _ZN9S10180C88D1Ev();
extern void _ZN9S10180C88D0Ev();
extern void _ZN9S10180C693v89Ev();
extern void _ZN9S10180C693v90Ev();
extern void _ZN9S10180C693v91Ev();
extern void _ZN9S10180C693v92Ev();
extern void _ZN9S10180C884v153Ev();
extern void _ZN9S10180C884v154Ev();
extern void _ZN9S10180C884v155Ev();
static  VTBL_ENTRY vtc_S10180C88[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C88[0]),
  (VTBL_ENTRY)&_ZN9S10180C88D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C88D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v92Ev,
  (VTBL_ENTRY)&_ZN9S10180C884v153Ev,
  (VTBL_ENTRY)&_ZN9S10180C884v154Ev,
  (VTBL_ENTRY)&_ZN9S10180C884v155Ev,
};
extern VTBL_ENTRY _ZTI9S10180C88[];
extern  VTBL_ENTRY _ZTV9S10180C88[];
Class_Descriptor cd_S10180C88 = {  "S10180C88", // class name
  bases_S10180C88, 2,
  &(vtc_S10180C88[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,224), // object size
  NSPAIRA(_ZTI9S10180C88),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C88),11, //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  S10180C92  {
  ::S10180C13 s10180c92f0;
  int s10180c92f1[2];
  ::S10180C13 s10180c92f2;
  void  mf10180c92(); // _ZN9S10180C9210mf10180c92Ev
};
//SIG(-1 S10180C92) C1{ m FC2{ m Fp Fi FC3{ m}} Fi[2] FC2}


void  S10180C92 ::mf10180c92(){}

static void Test_S10180C92()
{
  {
    init_simple_test("S10180C92");
    S10180C92 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S10180C92)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C92)");
    check_field_offset(lv, s10180c92f0, 0, "S10180C92.s10180c92f0");
    check_field_offset(lv, s10180c92f1, ABISELECT(16,12), "S10180C92.s10180c92f1");
    check_field_offset(lv, s10180c92f2, ABISELECT(24,20), "S10180C92.s10180c92f2");
  }
}
static Arrange_To_Call_Me vS10180C92(Test_S10180C92, "S10180C92", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C93  {
  __tsi64 s10180c93f0;
  void  mf10180c93(); // _ZN9S10180C9310mf10180c93Ev
};
//SIG(-1 S10180C93) C1{ m FL}


void  S10180C93 ::mf10180c93(){}

static void Test_S10180C93()
{
  {
    init_simple_test("S10180C93");
    S10180C93 lv;
    check2(sizeof(lv), 8, "sizeof(S10180C93)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C93)");
    check_field_offset(lv, s10180c93f0, 0, "S10180C93.s10180c93f0");
  }
}
static Arrange_To_Call_Me vS10180C93(Test_S10180C93, "S10180C93", 8);

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S10180C93[];
VTBL_ENTRY *P__ZTI9S10180C93 = _ZTI9S10180C93; 
Class_Descriptor cd_S10180C93 = {  "S10180C93", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI9S10180C93),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  S10180C91  : S10180C17 , S10180C11 {
  ::S10180C92 s10180c91f0;
  int s10180c91f1[2];
  char s10180c91f2[2];
  int s10180c91f3;
  __tsi64 s10180c91f4[2];
  ::S10180C93 s10180c91f5;
  int s10180c91f6;
  virtual  ~S10180C91(); // _ZN9S10180C91D1Ev
  virtual void  v156(); // _ZN9S10180C914v156Ev
  virtual void  v157(); // _ZN9S10180C914v157Ev
  virtual void  v158(); // _ZN9S10180C914v158Ev
  virtual void  v159(); // _ZN9S10180C914v159Ev
  virtual void  v160(); // _ZN9S10180C914v160Ev
  virtual void  v161(); // _ZN9S10180C914v161Ev
  virtual void  v162(); // _ZN9S10180C914v162Ev
  virtual void  v163(); // _ZN9S10180C914v163Ev
  S10180C91(); // tgen
};
//SIG(-1 S10180C91) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 FC10{ m FC8 Fi[2] FC8} Fi[2] Fc[2] Fi FL[2] FC11{ m FL} Fi}


 S10180C91 ::~S10180C91(){ note_dtor("S10180C91", this);}
void  S10180C91 ::v156(){vfunc_called(this, "_ZN9S10180C914v156Ev");}
void  S10180C91 ::v157(){vfunc_called(this, "_ZN9S10180C914v157Ev");}
void  S10180C91 ::v158(){vfunc_called(this, "_ZN9S10180C914v158Ev");}
void  S10180C91 ::v159(){vfunc_called(this, "_ZN9S10180C914v159Ev");}
void  S10180C91 ::v160(){vfunc_called(this, "_ZN9S10180C914v160Ev");}
void  S10180C91 ::v161(){vfunc_called(this, "_ZN9S10180C914v161Ev");}
void  S10180C91 ::v162(){vfunc_called(this, "_ZN9S10180C914v162Ev");}
void  S10180C91 ::v163(){vfunc_called(this, "_ZN9S10180C914v163Ev");}
S10180C91 ::S10180C91(){ note_ctor("S10180C91", this);} // tgen

static void Test_S10180C91()
{
  extern Class_Descriptor cd_S10180C91;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,44)];
    init_test(&cd_S10180C91, buf);
    S10180C91 *dp, &lv = *(dp=new (buf) S10180C91());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,172), "sizeof(S10180C91)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C91)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C91");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C91");
    check_field_offset(lv, s10180c91f0, ABISELECT(144,96), "S10180C91.s10180c91f0");
    check_field_offset(lv, s10180c91f1, ABISELECT(184,128), "S10180C91.s10180c91f1");
    check_field_offset(lv, s10180c91f2, ABISELECT(192,136), "S10180C91.s10180c91f2");
    check_field_offset(lv, s10180c91f3, ABISELECT(196,140), "S10180C91.s10180c91f3");
    check_field_offset(lv, s10180c91f4, ABISELECT(200,144), "S10180C91.s10180c91f4");
    check_field_offset(lv, s10180c91f5, ABISELECT(216,160), "S10180C91.s10180c91f5");
    check_field_offset(lv, s10180c91f6, ABISELECT(224,168), "S10180C91.s10180c91f6");
    test_class_info(&lv, &cd_S10180C91);
    dp->~S10180C91();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C91(Test_S10180C91, "S10180C91", ABISELECT(232,172));

#else // __cplusplus

extern void _ZN9S10180C91C1Ev();
extern void _ZN9S10180C91D1Ev();
Name_Map name_map_S10180C91[] = {
  NSPAIR(_ZN9S10180C91C1Ev),
  NSPAIR(_ZN9S10180C91D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
static Base_Class bases_S10180C91[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    12, //bcp->virtual_function_table_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 _ZTI9S10180C91[];
extern void _ZN9S10180C91D1Ev();
extern void _ZN9S10180C91D0Ev();
extern void _ZN9S10180C914v156Ev();
extern void _ZN9S10180C914v157Ev();
extern void _ZN9S10180C914v158Ev();
extern void _ZN9S10180C914v159Ev();
extern void _ZN9S10180C914v160Ev();
extern void _ZN9S10180C914v161Ev();
extern void _ZN9S10180C914v162Ev();
extern void _ZN9S10180C914v163Ev();
extern void ABISELECT(_ZThn48_N9S10180C91D1Ev,_ZThn32_N9S10180C91D1Ev)();
extern void ABISELECT(_ZThn48_N9S10180C91D0Ev,_ZThn32_N9S10180C91D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
static  VTBL_ENTRY vtc_S10180C91[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C91[0]),
  (VTBL_ENTRY)&_ZN9S10180C91D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C91D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C914v156Ev,
  (VTBL_ENTRY)&_ZN9S10180C914v157Ev,
  (VTBL_ENTRY)&_ZN9S10180C914v158Ev,
  (VTBL_ENTRY)&_ZN9S10180C914v159Ev,
  (VTBL_ENTRY)&_ZN9S10180C914v160Ev,
  (VTBL_ENTRY)&_ZN9S10180C914v161Ev,
  (VTBL_ENTRY)&_ZN9S10180C914v162Ev,
  (VTBL_ENTRY)&_ZN9S10180C914v163Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10180C91[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C91D1Ev,_ZThn32_N9S10180C91D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C91D0Ev,_ZThn32_N9S10180C91D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
};
extern VTBL_ENTRY _ZTI9S10180C91[];
extern  VTBL_ENTRY _ZTV9S10180C91[];
Class_Descriptor cd_S10180C91 = {  "S10180C91", // class name
  bases_S10180C91, 2,
  &(vtc_S10180C91[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,172), // object size
  NSPAIRA(_ZTI9S10180C91),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10180C91),40, //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  S10180C95  : S10180C17 , S10180C11 {
  virtual  ~S10180C95(); // _ZN9S10180C95D1Ev
  virtual void  v169(); // _ZN9S10180C954v169Ev
  virtual void  v170(); // _ZN9S10180C954v170Ev
  virtual void  v171(); // _ZN9S10180C954v171Ev
  virtual void  v172(); // _ZN9S10180C954v172Ev
  virtual void  v173(); // _ZN9S10180C954v173Ev
  virtual void  v174(); // _ZN9S10180C954v174Ev
  S10180C95(); // tgen
};
//SIG(-1 S10180C95) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 v6}


 S10180C95 ::~S10180C95(){ note_dtor("S10180C95", this);}
void  S10180C95 ::v169(){vfunc_called(this, "_ZN9S10180C954v169Ev");}
void  S10180C95 ::v170(){vfunc_called(this, "_ZN9S10180C954v170Ev");}
void  S10180C95 ::v171(){vfunc_called(this, "_ZN9S10180C954v171Ev");}
void  S10180C95 ::v172(){vfunc_called(this, "_ZN9S10180C954v172Ev");}
void  S10180C95 ::v173(){vfunc_called(this, "_ZN9S10180C954v173Ev");}
void  S10180C95 ::v174(){vfunc_called(this, "_ZN9S10180C954v174Ev");}
S10180C95 ::S10180C95(){ note_ctor("S10180C95", this);} // tgen

static void Test_S10180C95()
{
  extern Class_Descriptor cd_S10180C95;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S10180C95, buf);
    S10180C95 *dp, &lv = *(dp=new (buf) S10180C95());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S10180C95)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C95)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C95");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C95");
    test_class_info(&lv, &cd_S10180C95);
    dp->~S10180C95();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C95(Test_S10180C95, "S10180C95", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN9S10180C95C1Ev();
extern void _ZN9S10180C95D1Ev();
Name_Map name_map_S10180C95[] = {
  NSPAIR(_ZN9S10180C95C1Ev),
  NSPAIR(_ZN9S10180C95D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
static Base_Class bases_S10180C95[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI9S10180C95[];
extern void _ZN9S10180C95D1Ev();
extern void _ZN9S10180C95D0Ev();
extern void _ZN9S10180C954v169Ev();
extern void _ZN9S10180C954v170Ev();
extern void _ZN9S10180C954v171Ev();
extern void _ZN9S10180C954v172Ev();
extern void _ZN9S10180C954v173Ev();
extern void _ZN9S10180C954v174Ev();
extern void ABISELECT(_ZThn48_N9S10180C95D1Ev,_ZThn32_N9S10180C95D1Ev)();
extern void ABISELECT(_ZThn48_N9S10180C95D0Ev,_ZThn32_N9S10180C95D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
static  VTBL_ENTRY vtc_S10180C95[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C95[0]),
  (VTBL_ENTRY)&_ZN9S10180C95D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C95D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v169Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v170Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v171Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v172Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v173Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v174Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10180C95[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C95D1Ev,_ZThn32_N9S10180C95D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C95D0Ev,_ZThn32_N9S10180C95D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
};
extern VTBL_ENTRY _ZTI9S10180C95[];
extern  VTBL_ENTRY _ZTV9S10180C95[];
Class_Descriptor cd_S10180C95 = {  "S10180C95", // class name
  bases_S10180C95, 2,
  &(vtc_S10180C95[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI9S10180C95),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10180C95),38, //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  S10180C96  {
  int s10180c96f0;
  void *s10180c96f1;
  int s10180c96f2;
  ::S10180C73 s10180c96f3;
  void  mf10180c96(); // _ZN9S10180C9610mf10180c96Ev
};
//SIG(-1 S10180C96) C1{ m Fi Fp Fi FC2{ m FC3{ m FL[2]}}}


void  S10180C96 ::mf10180c96(){}

static void Test_S10180C96()
{
  {
    init_simple_test("S10180C96");
    S10180C96 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S10180C96)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C96)");
    check_field_offset(lv, s10180c96f0, 0, "S10180C96.s10180c96f0");
    check_field_offset(lv, s10180c96f1, ABISELECT(8,4), "S10180C96.s10180c96f1");
    check_field_offset(lv, s10180c96f2, ABISELECT(16,8), "S10180C96.s10180c96f2");
    check_field_offset(lv, s10180c96f3, ABISELECT(24,12), "S10180C96.s10180c96f3");
  }
}
static Arrange_To_Call_Me vS10180C96(Test_S10180C96, "S10180C96", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C94  : S10180C95 , S10180C2 {
  ::S10180C96 s10180c94f0;
  ::S10180C32 s10180c94f1;
  virtual  ~S10180C94(); // _ZN9S10180C94D1Ev
  virtual void  v164(); // _ZN9S10180C944v164Ev
  virtual void  v165(); // _ZN9S10180C944v165Ev
  virtual void  v166(); // _ZN9S10180C944v166Ev
  virtual void  v167(); // _ZN9S10180C944v167Ev
  virtual void  v168(); // _ZN9S10180C944v168Ev
  S10180C94(); // tgen
};
//SIG(-1 S10180C94) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} BC7{ 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 Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC10{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v30 v31 v32 v33 v34 v35} BC11{ vd v36} vd v1 v2 v3 v4 v5 FC12{ m Fi Fp Fi FC13{ m FC14{ m FL[2]}}} FC15{ m Fp Fi[2] FC6}}


 S10180C94 ::~S10180C94(){ note_dtor("S10180C94", this);}
void  S10180C94 ::v164(){vfunc_called(this, "_ZN9S10180C944v164Ev");}
void  S10180C94 ::v165(){vfunc_called(this, "_ZN9S10180C944v165Ev");}
void  S10180C94 ::v166(){vfunc_called(this, "_ZN9S10180C944v166Ev");}
void  S10180C94 ::v167(){vfunc_called(this, "_ZN9S10180C944v167Ev");}
void  S10180C94 ::v168(){vfunc_called(this, "_ZN9S10180C944v168Ev");}
S10180C94 ::S10180C94(){ note_ctor("S10180C94", this);} // tgen

static void Test_S10180C94()
{
  extern Class_Descriptor cd_S10180C94;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,37)];
    init_test(&cd_S10180C94, buf);
    S10180C94 *dp, &lv = *(dp=new (buf) S10180C94());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,144), "sizeof(S10180C94)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C94)");
    check_base_class_offset(lv, (S10180C17*)(S10180C95*), 0, "S10180C94");
    check_base_class_offset(lv, (S10180C11*)(S10180C95*), ABISELECT(48,32), "S10180C94");
    check_base_class_offset(lv, (S10180C95*), 0, "S10180C94");
    check_base_class_offset(lv, (S10180C2*), ABISELECT(144,96), "S10180C94");
    check_field_offset(lv, s10180c94f0, ABISELECT(152,100), "S10180C94.s10180c94f0");
    check_field_offset(lv, s10180c94f1, ABISELECT(192,128), "S10180C94.s10180c94f1");
    test_class_info(&lv, &cd_S10180C94);
    dp->~S10180C94();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C94(Test_S10180C94, "S10180C94", ABISELECT(216,144));

#else // __cplusplus

extern void _ZN9S10180C94C1Ev();
extern void _ZN9S10180C94D1Ev();
Name_Map name_map_S10180C94[] = {
  NSPAIR(_ZN9S10180C94C1Ev),
  NSPAIR(_ZN9S10180C94D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
extern Class_Descriptor cd_S10180C95;
extern VTBL_ENTRY _ZTI9S10180C95[];
extern  VTBL_ENTRY _ZTV9S10180C95[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
static Base_Class bases_S10180C94[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    15, //bcp->virtual_function_table_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_S10180C95,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S10180C2,    ABISELECT(144,96), //bcp->offset
    43, //bcp->virtual_function_table_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 _ZTI9S10180C94[];
extern void _ZN9S10180C94D1Ev();
extern void _ZN9S10180C94D0Ev();
extern void _ZN9S10180C954v169Ev();
extern void _ZN9S10180C954v170Ev();
extern void _ZN9S10180C954v171Ev();
extern void _ZN9S10180C954v172Ev();
extern void _ZN9S10180C954v173Ev();
extern void _ZN9S10180C954v174Ev();
extern void _ZN9S10180C944v164Ev();
extern void _ZN9S10180C944v165Ev();
extern void _ZN9S10180C944v166Ev();
extern void _ZN9S10180C944v167Ev();
extern void _ZN9S10180C944v168Ev();
extern void ABISELECT(_ZThn48_N9S10180C94D1Ev,_ZThn32_N9S10180C94D1Ev)();
extern void ABISELECT(_ZThn48_N9S10180C94D0Ev,_ZThn32_N9S10180C94D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void ABISELECT(_ZThn144_N9S10180C94D1Ev,_ZThn96_N9S10180C94D1Ev)();
extern void ABISELECT(_ZThn144_N9S10180C94D0Ev,_ZThn96_N9S10180C94D0Ev)();
extern void _ZN8S10180C22v7Ev();
static  VTBL_ENTRY vtc_S10180C94[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C94[0]),
  (VTBL_ENTRY)&_ZN9S10180C94D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C94D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v169Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v170Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v171Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v172Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v173Ev,
  (VTBL_ENTRY)&_ZN9S10180C954v174Ev,
  (VTBL_ENTRY)&_ZN9S10180C944v164Ev,
  (VTBL_ENTRY)&_ZN9S10180C944v165Ev,
  (VTBL_ENTRY)&_ZN9S10180C944v166Ev,
  (VTBL_ENTRY)&_ZN9S10180C944v167Ev,
  (VTBL_ENTRY)&_ZN9S10180C944v168Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10180C94[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C94D1Ev,_ZThn32_N9S10180C94D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C94D0Ev,_ZThn32_N9S10180C94D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S10180C94[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S10180C94D1Ev,_ZThn96_N9S10180C94D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S10180C94D0Ev,_ZThn96_N9S10180C94D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
};
extern VTBL_ENTRY _ZTI9S10180C94[];
extern  VTBL_ENTRY _ZTV9S10180C94[];
Class_Descriptor cd_S10180C94 = {  "S10180C94", // class name
  bases_S10180C94, 4,
  &(vtc_S10180C94[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,144), // object size
  NSPAIRA(_ZTI9S10180C94),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10180C94),48, //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  S10180C99  : S10180C17 , S10180C11 {
  ::S10180C31 s10180c99f0;
  void *s10180c99f1[2];
  ::S10180C13 s10180c99f2;
  int s10180c99f3;
  virtual  ~S10180C99(); // _ZN9S10180C99D1Ev
  virtual void  v175(); // _ZN9S10180C994v175Ev
  virtual void  v176(); // _ZN9S10180C994v176Ev
  virtual void  v177(); // _ZN9S10180C994v177Ev
  virtual void  v178(); // _ZN9S10180C994v178Ev
  S10180C99(); // tgen
};
//SIG(-1 S10180C99) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 FC10{ m FC11{ m Fp Fi[2] FC5} Fp[2]} Fp[2] FC8 Fi}


 S10180C99 ::~S10180C99(){ note_dtor("S10180C99", this);}
void  S10180C99 ::v175(){vfunc_called(this, "_ZN9S10180C994v175Ev");}
void  S10180C99 ::v176(){vfunc_called(this, "_ZN9S10180C994v176Ev");}
void  S10180C99 ::v177(){vfunc_called(this, "_ZN9S10180C994v177Ev");}
void  S10180C99 ::v178(){vfunc_called(this, "_ZN9S10180C994v178Ev");}
S10180C99 ::S10180C99(){ note_ctor("S10180C99", this);} // tgen

static void Test_S10180C99()
{
  extern Class_Descriptor cd_S10180C99;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,37)];
    init_test(&cd_S10180C99, buf);
    S10180C99 *dp, &lv = *(dp=new (buf) S10180C99());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,144), "sizeof(S10180C99)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C99)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C99");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C99");
    check_field_offset(lv, s10180c99f0, ABISELECT(144,96), "S10180C99.s10180c99f0");
    check_field_offset(lv, s10180c99f1, ABISELECT(184,120), "S10180C99.s10180c99f1");
    check_field_offset(lv, s10180c99f2, ABISELECT(200,128), "S10180C99.s10180c99f2");
    check_field_offset(lv, s10180c99f3, ABISELECT(216,140), "S10180C99.s10180c99f3");
    test_class_info(&lv, &cd_S10180C99);
    dp->~S10180C99();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C99(Test_S10180C99, "S10180C99", ABISELECT(224,144));

#else // __cplusplus

extern void _ZN9S10180C99C1Ev();
extern void _ZN9S10180C99D1Ev();
Name_Map name_map_S10180C99[] = {
  NSPAIR(_ZN9S10180C99C1Ev),
  NSPAIR(_ZN9S10180C99D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
static Base_Class bases_S10180C99[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    8, //bcp->virtual_function_table_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 _ZTI9S10180C99[];
extern void _ZN9S10180C99D1Ev();
extern void _ZN9S10180C99D0Ev();
extern void _ZN9S10180C994v175Ev();
extern void _ZN9S10180C994v176Ev();
extern void _ZN9S10180C994v177Ev();
extern void _ZN9S10180C994v178Ev();
extern void ABISELECT(_ZThn48_N9S10180C99D1Ev,_ZThn32_N9S10180C99D1Ev)();
extern void ABISELECT(_ZThn48_N9S10180C99D0Ev,_ZThn32_N9S10180C99D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
static  VTBL_ENTRY vtc_S10180C99[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C99[0]),
  (VTBL_ENTRY)&_ZN9S10180C99D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C99D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C994v175Ev,
  (VTBL_ENTRY)&_ZN9S10180C994v176Ev,
  (VTBL_ENTRY)&_ZN9S10180C994v177Ev,
  (VTBL_ENTRY)&_ZN9S10180C994v178Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10180C99[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C99D1Ev,_ZThn32_N9S10180C99D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C99D0Ev,_ZThn32_N9S10180C99D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
};
extern VTBL_ENTRY _ZTI9S10180C99[];
extern  VTBL_ENTRY _ZTV9S10180C99[];
Class_Descriptor cd_S10180C99 = {  "S10180C99", // class name
  bases_S10180C99, 2,
  &(vtc_S10180C99[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,144), // object size
  NSPAIRA(_ZTI9S10180C99),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10180C99),36, //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  S10180C101  : S10180C17 {
  void *s10180c101f0;
  ::S10180C12 s10180c101f1;
  ::S10180C12 s10180c101f2;
  void *s10180c101f3;
  int s10180c101f4;
  ::S10180C73 s10180c101f5;
  virtual  ~S10180C101(); // _ZN10S10180C101D1Ev
  virtual void  v198(); // _ZN10S10180C1014v198Ev
  S10180C101(); // tgen
};
//SIG(-1 S10180C101) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 Fp FC6{ m FC7{ m Fp Fi FC4} Fi} FC6 Fp Fi FC8{ m FC9{ m FL[2]}}}


 S10180C101 ::~S10180C101(){ note_dtor("S10180C101", this);}
void  S10180C101 ::v198(){vfunc_called(this, "_ZN10S10180C1014v198Ev");}
S10180C101 ::S10180C101(){ note_ctor("S10180C101", this);} // tgen

static void Test_S10180C101()
{
  extern Class_Descriptor cd_S10180C101;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,24)];
    init_test(&cd_S10180C101, buf);
    S10180C101 *dp, &lv = *(dp=new (buf) S10180C101());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S10180C101)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C101)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C101");
    check_field_offset(lv, s10180c101f0, ABISELECT(48,32), "S10180C101.s10180c101f0");
    check_field_offset(lv, s10180c101f1, ABISELECT(56,36), "S10180C101.s10180c101f1");
    check_field_offset(lv, s10180c101f2, ABISELECT(80,52), "S10180C101.s10180c101f2");
    check_field_offset(lv, s10180c101f3, ABISELECT(104,68), "S10180C101.s10180c101f3");
    check_field_offset(lv, s10180c101f4, ABISELECT(112,72), "S10180C101.s10180c101f4");
    check_field_offset(lv, s10180c101f5, ABISELECT(120,76), "S10180C101.s10180c101f5");
    test_class_info(&lv, &cd_S10180C101);
    dp->~S10180C101();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C101(Test_S10180C101, "S10180C101", ABISELECT(136,92));

#else // __cplusplus

extern void _ZN10S10180C101C1Ev();
extern void _ZN10S10180C101D1Ev();
Name_Map name_map_S10180C101[] = {
  NSPAIR(_ZN10S10180C101C1Ev),
  NSPAIR(_ZN10S10180C101D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10180C101[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C101[];
extern void _ZN10S10180C101D1Ev();
extern void _ZN10S10180C101D0Ev();
extern void _ZN10S10180C1014v198Ev();
static  VTBL_ENTRY vtc_S10180C101[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C101[0]),
  (VTBL_ENTRY)&_ZN10S10180C101D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C101D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1014v198Ev,
};
extern VTBL_ENTRY _ZTI10S10180C101[];
extern  VTBL_ENTRY _ZTV10S10180C101[];
Class_Descriptor cd_S10180C101 = {  "S10180C101", // class name
  bases_S10180C101, 1,
  &(vtc_S10180C101[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,92), // object size
  NSPAIRA(_ZTI10S10180C101),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C101),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C100  : S10180C17 , S10180C11 , S10180C2 , S10180C80 , S10180C83 , S10180C26 {
  ::S10180C31 s10180c100f0;
  void *s10180c100f1[2];
  int s10180c100f2[2];
  ::S10180C101 s10180c100f3;
  ::S10180C68 s10180c100f4;
  ::S10180C87 s10180c100f5;
  ::S10180C87 s10180c100f6;
  ::S10180C73 s10180c100f7;
  ::S10180C73 s10180c100f8;
  ::S10180C73 s10180c100f9;
  int s10180c100f10;
  virtual  ~S10180C100(); // _ZN10S10180C100D1Ev
  virtual void  v179(); // _ZN10S10180C1004v179Ev
  virtual void  v180(); // _ZN10S10180C1004v180Ev
  virtual void  v181(); // _ZN10S10180C1004v181Ev
  virtual void  v182(); // _ZN10S10180C1004v182Ev
  virtual void  v183(); // _ZN10S10180C1004v183Ev
  virtual void  v184(); // _ZN10S10180C1004v184Ev
  virtual void  v185(); // _ZN10S10180C1004v185Ev
  virtual void  v186(); // _ZN10S10180C1004v186Ev
  virtual void  v187(); // _ZN10S10180C1004v187Ev
  virtual void  v188(); // _ZN10S10180C1004v188Ev
  virtual void  v189(); // _ZN10S10180C1004v189Ev
  virtual void  v190(); // _ZN10S10180C1004v190Ev
  virtual void  v191(); // _ZN10S10180C1004v191Ev
  virtual void  v192(); // _ZN10S10180C1004v192Ev
  virtual void  v193(); // _ZN10S10180C1004v193Ev
  virtual void  v194(); // _ZN10S10180C1004v194Ev
  virtual void  v195(); // _ZN10S10180C1004v195Ev
  virtual void  v196(); // _ZN10S10180C1004v196Ev
  virtual void  v197(); // _ZN10S10180C1004v197Ev
  S10180C100(); // tgen
};
//SIG(-1 S10180C100) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC10{ vd v44} BC11{ BC12{ vd v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59} BC13{ vd m Fp}} BC14{ vd v60 v61} BC15{ vd v62} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC16{ m FC17{ m Fp Fi[2] FC5} Fp[2]} Fp[2] Fi[2] FC18{ BC2 vd v63 Fp FC7 FC7 Fp Fi FC19{ m FC20{ m FL[2]}}} FC21{ BC22{ BC2 vd v66 v67 v68 v69 FC23{ m Fp FC7 FC8 FC8 Fi[3] FC19 Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi} v64 v65} FC24{ BC22 v70 v71} FC24 FC19 FC19 FC19 Fi}


 S10180C100 ::~S10180C100(){ note_dtor("S10180C100", this);}
void  S10180C100 ::v179(){vfunc_called(this, "_ZN10S10180C1004v179Ev");}
void  S10180C100 ::v180(){vfunc_called(this, "_ZN10S10180C1004v180Ev");}
void  S10180C100 ::v181(){vfunc_called(this, "_ZN10S10180C1004v181Ev");}
void  S10180C100 ::v182(){vfunc_called(this, "_ZN10S10180C1004v182Ev");}
void  S10180C100 ::v183(){vfunc_called(this, "_ZN10S10180C1004v183Ev");}
void  S10180C100 ::v184(){vfunc_called(this, "_ZN10S10180C1004v184Ev");}
void  S10180C100 ::v185(){vfunc_called(this, "_ZN10S10180C1004v185Ev");}
void  S10180C100 ::v186(){vfunc_called(this, "_ZN10S10180C1004v186Ev");}
void  S10180C100 ::v187(){vfunc_called(this, "_ZN10S10180C1004v187Ev");}
void  S10180C100 ::v188(){vfunc_called(this, "_ZN10S10180C1004v188Ev");}
void  S10180C100 ::v189(){vfunc_called(this, "_ZN10S10180C1004v189Ev");}
void  S10180C100 ::v190(){vfunc_called(this, "_ZN10S10180C1004v190Ev");}
void  S10180C100 ::v191(){vfunc_called(this, "_ZN10S10180C1004v191Ev");}
void  S10180C100 ::v192(){vfunc_called(this, "_ZN10S10180C1004v192Ev");}
void  S10180C100 ::v193(){vfunc_called(this, "_ZN10S10180C1004v193Ev");}
void  S10180C100 ::v194(){vfunc_called(this, "_ZN10S10180C1004v194Ev");}
void  S10180C100 ::v195(){vfunc_called(this, "_ZN10S10180C1004v195Ev");}
void  S10180C100 ::v196(){vfunc_called(this, "_ZN10S10180C1004v196Ev");}
void  S10180C100 ::v197(){vfunc_called(this, "_ZN10S10180C1004v197Ev");}
S10180C100 ::S10180C100(){ note_ctor("S10180C100", this);} // tgen

static void Test_S10180C100()
{
  extern Class_Descriptor cd_S10180C100;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(144,200)];
    init_test(&cd_S10180C100, buf);
    S10180C100 *dp, &lv = *(dp=new (buf) S10180C100());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1144,796), "sizeof(S10180C100)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C100)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C100");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C100");
    check_base_class_offset(lv, (S10180C2*), ABISELECT(144,96), "S10180C100");
    check_base_class_offset(lv, (S10180C81*)(S10180C80*), ABISELECT(152,100), "S10180C100");
    check_base_class_offset(lv, (S10180C82*)(S10180C80*), ABISELECT(160,104), "S10180C100");
    check_base_class_offset(lv, (S10180C80*), ABISELECT(152,100), "S10180C100");
    check_base_class_offset(lv, (S10180C83*), ABISELECT(176,112), "S10180C100");
    check_base_class_offset(lv, (S10180C26*), ABISELECT(184,116), "S10180C100");
    check_field_offset(lv, s10180c100f0, ABISELECT(192,120), "S10180C100.s10180c100f0");
    check_field_offset(lv, s10180c100f1, ABISELECT(232,144), "S10180C100.s10180c100f1");
    check_field_offset(lv, s10180c100f2, ABISELECT(248,152), "S10180C100.s10180c100f2");
    check_field_offset(lv, s10180c100f3, ABISELECT(256,160), "S10180C100.s10180c100f3");
    check_field_offset(lv, s10180c100f4, ABISELECT(392,252), "S10180C100.s10180c100f4");
    check_field_offset(lv, s10180c100f5, ABISELECT(624,416), "S10180C100.s10180c100f5");
    check_field_offset(lv, s10180c100f6, ABISELECT(856,580), "S10180C100.s10180c100f6");
    check_field_offset(lv, s10180c100f7, ABISELECT(1088,744), "S10180C100.s10180c100f7");
    check_field_offset(lv, s10180c100f8, ABISELECT(1104,760), "S10180C100.s10180c100f8");
    check_field_offset(lv, s10180c100f9, ABISELECT(1120,776), "S10180C100.s10180c100f9");
    check_field_offset(lv, s10180c100f10, ABISELECT(1136,792), "S10180C100.s10180c100f10");
    test_class_info(&lv, &cd_S10180C100);
    dp->~S10180C100();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C100(Test_S10180C100, "S10180C100", ABISELECT(1144,796));

#else // __cplusplus

extern void _ZN10S10180C100C1Ev();
extern void _ZN10S10180C100D1Ev();
Name_Map name_map_S10180C100[] = {
  NSPAIR(_ZN10S10180C100C1Ev),
  NSPAIR(_ZN10S10180C100D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
extern Class_Descriptor cd_S10180C81;
extern VTBL_ENTRY _ZTI9S10180C81[];
extern  VTBL_ENTRY _ZTV9S10180C81[];
extern Class_Descriptor cd_S10180C82;
extern VTBL_ENTRY _ZTI9S10180C82[];
extern  VTBL_ENTRY _ZTV9S10180C82[];
extern Class_Descriptor cd_S10180C80;
extern VTBL_ENTRY _ZTI9S10180C80[];
extern  VTBL_ENTRY _ZTV9S10180C80[];
extern Class_Descriptor cd_S10180C83;
extern VTBL_ENTRY _ZTI9S10180C83[];
extern  VTBL_ENTRY _ZTV9S10180C83[];
extern Class_Descriptor cd_S10180C26;
extern VTBL_ENTRY _ZTI9S10180C26[];
extern  VTBL_ENTRY _ZTV9S10180C26[];
static Base_Class bases_S10180C100[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    23, //bcp->virtual_function_table_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},
  {&cd_S10180C2,    ABISELECT(144,96), //bcp->offset
    51, //bcp->virtual_function_table_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},
  {&cd_S10180C81,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S10180C82,    ABISELECT(160,104), //bcp->offset
    75, //bcp->virtual_function_table_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_S10180C80,    ABISELECT(152,100), //bcp->offset
    56, //bcp->virtual_function_table_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},
  {&cd_S10180C83,    ABISELECT(176,112), //bcp->offset
    79, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C26,    ABISELECT(184,116), //bcp->offset
    85, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S10180C100[];
extern void _ZN10S10180C100D1Ev();
extern void _ZN10S10180C100D0Ev();
extern void _ZN10S10180C1004v179Ev();
extern void _ZN10S10180C1004v180Ev();
extern void _ZN10S10180C1004v181Ev();
extern void _ZN10S10180C1004v182Ev();
extern void _ZN10S10180C1004v183Ev();
extern void _ZN10S10180C1004v184Ev();
extern void _ZN10S10180C1004v185Ev();
extern void _ZN10S10180C1004v186Ev();
extern void _ZN10S10180C1004v187Ev();
extern void _ZN10S10180C1004v188Ev();
extern void _ZN10S10180C1004v189Ev();
extern void _ZN10S10180C1004v190Ev();
extern void _ZN10S10180C1004v191Ev();
extern void _ZN10S10180C1004v192Ev();
extern void _ZN10S10180C1004v193Ev();
extern void _ZN10S10180C1004v194Ev();
extern void _ZN10S10180C1004v195Ev();
extern void _ZN10S10180C1004v196Ev();
extern void _ZN10S10180C1004v197Ev();
extern void ABISELECT(_ZThn48_N10S10180C100D1Ev,_ZThn32_N10S10180C100D1Ev)();
extern void ABISELECT(_ZThn48_N10S10180C100D0Ev,_ZThn32_N10S10180C100D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void ABISELECT(_ZThn144_N10S10180C100D1Ev,_ZThn96_N10S10180C100D1Ev)();
extern void ABISELECT(_ZThn144_N10S10180C100D0Ev,_ZThn96_N10S10180C100D0Ev)();
extern void _ZN8S10180C22v7Ev();
extern void ABISELECT(_ZThn152_N10S10180C100D1Ev,_ZThn100_N10S10180C100D1Ev)();
extern void ABISELECT(_ZThn152_N10S10180C100D0Ev,_ZThn100_N10S10180C100D0Ev)();
extern void _ZN9S10180C813v99Ev();
extern void _ZN9S10180C814v100Ev();
extern void _ZN9S10180C814v101Ev();
extern void _ZN9S10180C814v102Ev();
extern void _ZN9S10180C814v103Ev();
extern void _ZN9S10180C814v104Ev();
extern void _ZN9S10180C814v105Ev();
extern void _ZN9S10180C814v106Ev();
extern void _ZN9S10180C814v107Ev();
extern void _ZN9S10180C814v108Ev();
extern void _ZN9S10180C814v109Ev();
extern void _ZN9S10180C814v110Ev();
extern void _ZN9S10180C814v111Ev();
extern void _ZN9S10180C814v112Ev();
extern void _ZN9S10180C814v113Ev();
extern void ABISELECT(_ZThn160_N10S10180C100D1Ev,_ZThn104_N10S10180C100D1Ev)();
extern void ABISELECT(_ZThn160_N10S10180C100D0Ev,_ZThn104_N10S10180C100D0Ev)();
extern void ABISELECT(_ZThn176_N10S10180C100D1Ev,_ZThn112_N10S10180C100D1Ev)();
extern void ABISELECT(_ZThn176_N10S10180C100D0Ev,_ZThn112_N10S10180C100D0Ev)();
extern void _ZN9S10180C834v114Ev();
extern void _ZN9S10180C834v115Ev();
extern void ABISELECT(_ZThn184_N10S10180C100D1Ev,_ZThn116_N10S10180C100D1Ev)();
extern void ABISELECT(_ZThn184_N10S10180C100D0Ev,_ZThn116_N10S10180C100D0Ev)();
extern void _ZN9S10180C263v64Ev();
static  VTBL_ENTRY vtc_S10180C100[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C100[0]),
  (VTBL_ENTRY)&_ZN10S10180C100D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C100D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v179Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v180Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v181Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v182Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v183Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v184Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v185Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v186Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v187Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v188Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v189Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v190Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v191Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v192Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v193Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v194Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v195Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v196Ev,
  (VTBL_ENTRY)&_ZN10S10180C1004v197Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10180C100[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C100D1Ev,_ZThn32_N10S10180C100D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C100D0Ev,_ZThn32_N10S10180C100D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI10S10180C100[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C100D1Ev,_ZThn96_N10S10180C100D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C100D0Ev,_ZThn96_N10S10180C100D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI10S10180C100[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N10S10180C100D1Ev,_ZThn100_N10S10180C100D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N10S10180C100D0Ev,_ZThn100_N10S10180C100D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C813v99Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v100Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v101Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v102Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v103Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v104Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v105Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v106Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v107Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v108Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v109Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v110Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v111Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v112Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v113Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI10S10180C100[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N10S10180C100D1Ev,_ZThn104_N10S10180C100D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N10S10180C100D0Ev,_ZThn104_N10S10180C100D0Ev),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI10S10180C100[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N10S10180C100D1Ev,_ZThn112_N10S10180C100D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N10S10180C100D0Ev,_ZThn112_N10S10180C100D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C834v114Ev,
  (VTBL_ENTRY)&_ZN9S10180C834v115Ev,
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI10S10180C100[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N10S10180C100D1Ev,_ZThn116_N10S10180C100D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N10S10180C100D0Ev,_ZThn116_N10S10180C100D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C263v64Ev,
};
extern VTBL_ENTRY _ZTI10S10180C100[];
extern  VTBL_ENTRY _ZTV10S10180C100[];
Class_Descriptor cd_S10180C100 = {  "S10180C100", // class name
  bases_S10180C100, 8,
  &(vtc_S10180C100[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1144,796), // object size
  NSPAIRA(_ZTI10S10180C100),ABISELECT(120,64), //typeinfo_var
  NSPAIRA(_ZTV10S10180C100),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C105  : S10180C69 {
  void *s10180c105f0[3];
  virtual void  v230(); // _ZN10S10180C1054v230Ev
  virtual void  v231(); // _ZN10S10180C1054v231Ev
  virtual void  v232(); // _ZN10S10180C1054v232Ev
  ~S10180C105(); // tgen
  S10180C105(); // tgen
};
//SIG(-1 S10180C105) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v4 v5 v6 v7 FC7{ m Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC9 FC9 Fi[3] FC10{ m FC11{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v1 v2 v3 Fp[3]}


void  S10180C105 ::v230(){vfunc_called(this, "_ZN10S10180C1054v230Ev");}
void  S10180C105 ::v231(){vfunc_called(this, "_ZN10S10180C1054v231Ev");}
void  S10180C105 ::v232(){vfunc_called(this, "_ZN10S10180C1054v232Ev");}
S10180C105 ::~S10180C105(){ note_dtor("S10180C105", this);} // tgen
S10180C105 ::S10180C105(){ note_ctor("S10180C105", this);} // tgen

static void Test_S10180C105()
{
  extern Class_Descriptor cd_S10180C105;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,45)];
    init_test(&cd_S10180C105, buf);
    S10180C105 *dp, &lv = *(dp=new (buf) S10180C105());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,176), "sizeof(S10180C105)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C105)");
    check_base_class_offset(lv, (S10180C17*)(S10180C69*), 0, "S10180C105");
    check_base_class_offset(lv, (S10180C69*), 0, "S10180C105");
    check_field_offset(lv, s10180c105f0, ABISELECT(232,164), "S10180C105.s10180c105f0");
    test_class_info(&lv, &cd_S10180C105);
    dp->~S10180C105();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C105(Test_S10180C105, "S10180C105", ABISELECT(256,176));

#else // __cplusplus

extern void _ZN10S10180C105C1Ev();
extern void _ZN10S10180C105D1Ev();
Name_Map name_map_S10180C105[] = {
  NSPAIR(_ZN10S10180C105C1Ev),
  NSPAIR(_ZN10S10180C105D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C69;
extern VTBL_ENTRY _ZTI9S10180C69[];
extern  VTBL_ENTRY _ZTV9S10180C69[];
static Base_Class bases_S10180C105[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C69,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C105[];
extern void _ZN10S10180C105D1Ev();
extern void _ZN10S10180C105D0Ev();
extern void _ZN9S10180C693v89Ev();
extern void _ZN9S10180C693v90Ev();
extern void _ZN9S10180C693v91Ev();
extern void _ZN9S10180C693v92Ev();
extern void _ZN10S10180C1054v230Ev();
extern void _ZN10S10180C1054v231Ev();
extern void _ZN10S10180C1054v232Ev();
static  VTBL_ENTRY vtc_S10180C105[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C105[0]),
  (VTBL_ENTRY)&_ZN10S10180C105D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C105D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v92Ev,
  (VTBL_ENTRY)&_ZN10S10180C1054v230Ev,
  (VTBL_ENTRY)&_ZN10S10180C1054v231Ev,
  (VTBL_ENTRY)&_ZN10S10180C1054v232Ev,
};
extern VTBL_ENTRY _ZTI10S10180C105[];
extern  VTBL_ENTRY _ZTV10S10180C105[];
Class_Descriptor cd_S10180C105 = {  "S10180C105", // class name
  bases_S10180C105, 2,
  &(vtc_S10180C105[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,176), // object size
  NSPAIRA(_ZTI10S10180C105),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C105),11, //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  S10180C106  : S10180C69 {
  virtual void  v233(); // _ZN10S10180C1064v233Ev
  ~S10180C106(); // tgen
  S10180C106(); // tgen
};
//SIG(-1 S10180C106) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v2 v3 v4 v5 FC7{ m Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC9 FC9 Fi[3] FC10{ m FC11{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v1}


void  S10180C106 ::v233(){vfunc_called(this, "_ZN10S10180C1064v233Ev");}
S10180C106 ::~S10180C106(){ note_dtor("S10180C106", this);} // tgen
S10180C106 ::S10180C106(){ note_ctor("S10180C106", this);} // tgen

static void Test_S10180C106()
{
  extern Class_Descriptor cd_S10180C106;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10180C106, buf);
    S10180C106 *dp, &lv = *(dp=new (buf) S10180C106());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10180C106)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C106)");
    check_base_class_offset(lv, (S10180C17*)(S10180C69*), 0, "S10180C106");
    check_base_class_offset(lv, (S10180C69*), 0, "S10180C106");
    test_class_info(&lv, &cd_S10180C106);
    dp->~S10180C106();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C106(Test_S10180C106, "S10180C106", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN10S10180C106C1Ev();
extern void _ZN10S10180C106D1Ev();
Name_Map name_map_S10180C106[] = {
  NSPAIR(_ZN10S10180C106C1Ev),
  NSPAIR(_ZN10S10180C106D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C69;
extern VTBL_ENTRY _ZTI9S10180C69[];
extern  VTBL_ENTRY _ZTV9S10180C69[];
static Base_Class bases_S10180C106[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C69,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C106[];
extern void _ZN10S10180C106D1Ev();
extern void _ZN10S10180C106D0Ev();
extern void _ZN9S10180C693v89Ev();
extern void _ZN9S10180C693v90Ev();
extern void _ZN9S10180C693v91Ev();
extern void _ZN9S10180C693v92Ev();
extern void _ZN10S10180C1064v233Ev();
static  VTBL_ENTRY vtc_S10180C106[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C106[0]),
  (VTBL_ENTRY)&_ZN10S10180C106D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C106D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v92Ev,
  (VTBL_ENTRY)&_ZN10S10180C1064v233Ev,
};
extern VTBL_ENTRY _ZTI10S10180C106[];
extern  VTBL_ENTRY _ZTV10S10180C106[];
Class_Descriptor cd_S10180C106 = {  "S10180C106", // class name
  bases_S10180C106, 2,
  &(vtc_S10180C106[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI10S10180C106),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C106),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  S10180C110  {
  void *s10180c110f0;
  ::S10180C73 s10180c110f1;
  ::S10180C73 s10180c110f2;
  int s10180c110f3[3];
  char s10180c110f4[2];
  int s10180c110f5;
  void *s10180c110f6;
  void  mf10180c110(); // _ZN10S10180C11011mf10180c110Ev
};
//SIG(-1 S10180C110) C1{ m Fp FC2{ m FC3{ m FL[2]}} FC2 Fi[3] Fc[2] Fi Fp}


void  S10180C110 ::mf10180c110(){}

static void Test_S10180C110()
{
  {
    init_simple_test("S10180C110");
    S10180C110 lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S10180C110)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C110)");
    check_field_offset(lv, s10180c110f0, 0, "S10180C110.s10180c110f0");
    check_field_offset(lv, s10180c110f1, ABISELECT(8,4), "S10180C110.s10180c110f1");
    check_field_offset(lv, s10180c110f2, ABISELECT(24,20), "S10180C110.s10180c110f2");
    check_field_offset(lv, s10180c110f3, ABISELECT(40,36), "S10180C110.s10180c110f3");
    check_field_offset(lv, s10180c110f4, ABISELECT(52,48), "S10180C110.s10180c110f4");
    check_field_offset(lv, s10180c110f5, ABISELECT(56,52), "S10180C110.s10180c110f5");
    check_field_offset(lv, s10180c110f6, ABISELECT(64,56), "S10180C110.s10180c110f6");
  }
}
static Arrange_To_Call_Me vS10180C110(Test_S10180C110, "S10180C110", ABISELECT(72,60));

#else // __cplusplus

Class_Descriptor cd_S10180C110 = {  "S10180C110", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(72,60), // 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  S10180C111  {
  void *s10180c111f0;
  void  mf10180c111(); // _ZN10S10180C11111mf10180c111Ev
};
//SIG(-1 S10180C111) C1{ m Fp}


void  S10180C111 ::mf10180c111(){}

static void Test_S10180C111()
{
  {
    init_simple_test("S10180C111");
    S10180C111 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10180C111)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C111)");
    check_field_offset(lv, s10180c111f0, 0, "S10180C111.s10180c111f0");
  }
}
static Arrange_To_Call_Me vS10180C111(Test_S10180C111, "S10180C111", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C109  : S10180C110 {
  ::S10180C61 s10180c109f0;
  ::S10180C111 s10180c109f1;
  ::S10180C61 s10180c109f2;
  ::S10180C13 s10180c109f3;
  ::S10180C13 s10180c109f4;
  ::S10180C61 s10180c109f5;
  ::S10180C111 s10180c109f6;
  ::S10180C61 s10180c109f7;
  ::S10180C13 s10180c109f8;
  ::S10180C13 s10180c109f9;
  ::S10180C13 s10180c109f10;
  char s10180c109f11;
  int s10180c109f12;
  void *s10180c109f13;
};
//SIG(-1 S10180C109) C1{ BC2{ m Fp FC3{ m FC4{ m FL[2]}} FC3 Fi[3] Fc[2] Fi Fp} FC5{ m Fp} FC6{ m Fp} FC5 FC7{ m Fp Fi FC8{ m}} FC7 FC5 FC6 FC5 FC7 FC7 FC7 Fc Fi Fp}



static void Test_S10180C109()
{
  extern Class_Descriptor cd_S10180C109;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,40)];
    init_test(&cd_S10180C109, buf);
    S10180C109 &lv = *(new (buf) S10180C109());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,156), "sizeof(S10180C109)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C109)");
    check_base_class_offset(lv, (S10180C110*), 0, "S10180C109");
    check_field_offset(lv, s10180c109f0, ABISELECT(72,60), "S10180C109.s10180c109f0");
    check_field_offset(lv, s10180c109f1, ABISELECT(80,64), "S10180C109.s10180c109f1");
    check_field_offset(lv, s10180c109f2, ABISELECT(88,68), "S10180C109.s10180c109f2");
    check_field_offset(lv, s10180c109f3, ABISELECT(96,72), "S10180C109.s10180c109f3");
    check_field_offset(lv, s10180c109f4, ABISELECT(112,84), "S10180C109.s10180c109f4");
    check_field_offset(lv, s10180c109f5, ABISELECT(128,96), "S10180C109.s10180c109f5");
    check_field_offset(lv, s10180c109f6, ABISELECT(136,100), "S10180C109.s10180c109f6");
    check_field_offset(lv, s10180c109f7, ABISELECT(144,104), "S10180C109.s10180c109f7");
    check_field_offset(lv, s10180c109f8, ABISELECT(152,108), "S10180C109.s10180c109f8");
    check_field_offset(lv, s10180c109f9, ABISELECT(168,120), "S10180C109.s10180c109f9");
    check_field_offset(lv, s10180c109f10, ABISELECT(184,132), "S10180C109.s10180c109f10");
    check_field_offset(lv, s10180c109f11, ABISELECT(200,144), "S10180C109.s10180c109f11");
    check_field_offset(lv, s10180c109f12, ABISELECT(204,148), "S10180C109.s10180c109f12");
    check_field_offset(lv, s10180c109f13, ABISELECT(208,152), "S10180C109.s10180c109f13");
    test_class_info(&lv, &cd_S10180C109);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C109(Test_S10180C109, "S10180C109", ABISELECT(216,156));

#else // __cplusplus

extern Class_Descriptor cd_S10180C110;
static Base_Class bases_S10180C109[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C110,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C109 = {  "S10180C109", // class name
  bases_S10180C109, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(216,156), // 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  S10180C108  : S10180C109 {
  ::S10180C13 s10180c108f0;
};
//SIG(-1 S10180C108) C1{ BC2{ BC3{ m Fp FC4{ m FC5{ m FL[2]}} FC4 Fi[3] Fc[2] Fi Fp} FC6{ m Fp} FC7{ m Fp} FC6 FC8{ m Fp Fi FC9{ m}} FC8 FC6 FC7 FC6 FC8 FC8 FC8 Fc Fi Fp} FC8}



static void Test_S10180C108()
{
  extern Class_Descriptor cd_S10180C108;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,43)];
    init_test(&cd_S10180C108, buf);
    S10180C108 &lv = *(new (buf) S10180C108());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,168), "sizeof(S10180C108)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C108)");
    check_base_class_offset(lv, (S10180C110*)(S10180C109*), 0, "S10180C108");
    check_base_class_offset(lv, (S10180C109*), 0, "S10180C108");
    check_field_offset(lv, s10180c108f0, ABISELECT(216,156), "S10180C108.s10180c108f0");
    test_class_info(&lv, &cd_S10180C108);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C108(Test_S10180C108, "S10180C108", ABISELECT(232,168));

#else // __cplusplus

extern Class_Descriptor cd_S10180C110;
extern Class_Descriptor cd_S10180C109;
static Base_Class bases_S10180C108[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C110,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C109,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C108 = {  "S10180C108", // class name
  bases_S10180C108, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(232,168), // 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  S10180C107  : S10180C17 {
  ::S10180C108 s10180c107f0;
  int s10180c107f1;
  virtual  ~S10180C107(); // _ZN10S10180C107D1Ev
  virtual void  v234(); // _ZN10S10180C1074v234Ev
  virtual void  v235(); // _ZN10S10180C1074v235Ev
  S10180C107(); // tgen
};
//SIG(-1 S10180C107) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 v2 FC6{ BC7{ BC8{ m Fp FC9{ m FC10{ m FL[2]}} FC9 Fi[3] Fc[2] Fi Fp} FC11{ m Fp} FC12{ m Fp} FC11 FC13{ m Fp Fi FC4} FC13 FC11 FC12 FC11 FC13 FC13 FC13 Fc Fi Fp} FC13} Fi}


 S10180C107 ::~S10180C107(){ note_dtor("S10180C107", this);}
void  S10180C107 ::v234(){vfunc_called(this, "_ZN10S10180C1074v234Ev");}
void  S10180C107 ::v235(){vfunc_called(this, "_ZN10S10180C1074v235Ev");}
S10180C107 ::S10180C107(){ note_ctor("S10180C107", this);} // tgen

static void Test_S10180C107()
{
  extern Class_Descriptor cd_S10180C107;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,52)];
    init_test(&cd_S10180C107, buf);
    S10180C107 *dp, &lv = *(dp=new (buf) S10180C107());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,204), "sizeof(S10180C107)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C107)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C107");
    check_field_offset(lv, s10180c107f0, ABISELECT(48,32), "S10180C107.s10180c107f0");
    check_field_offset(lv, s10180c107f1, ABISELECT(280,200), "S10180C107.s10180c107f1");
    test_class_info(&lv, &cd_S10180C107);
    dp->~S10180C107();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C107(Test_S10180C107, "S10180C107", ABISELECT(288,204));

#else // __cplusplus

extern void _ZN10S10180C107C1Ev();
extern void _ZN10S10180C107D1Ev();
Name_Map name_map_S10180C107[] = {
  NSPAIR(_ZN10S10180C107C1Ev),
  NSPAIR(_ZN10S10180C107D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10180C107[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C107[];
extern void _ZN10S10180C107D1Ev();
extern void _ZN10S10180C107D0Ev();
extern void _ZN10S10180C1074v234Ev();
extern void _ZN10S10180C1074v235Ev();
static  VTBL_ENTRY vtc_S10180C107[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C107[0]),
  (VTBL_ENTRY)&_ZN10S10180C107D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C107D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1074v234Ev,
  (VTBL_ENTRY)&_ZN10S10180C1074v235Ev,
};
extern VTBL_ENTRY _ZTI10S10180C107[];
extern  VTBL_ENTRY _ZTV10S10180C107[];
Class_Descriptor cd_S10180C107 = {  "S10180C107", // class name
  bases_S10180C107, 1,
  &(vtc_S10180C107[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,204), // object size
  NSPAIRA(_ZTI10S10180C107),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C107),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  S10180C112  : S10180C106 {
  virtual void  v236(); // _ZN10S10180C1124v236Ev
  ~S10180C112(); // tgen
  S10180C112(); // tgen
};
//SIG(-1 S10180C112) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 Fc} vd v2 v3 v4 v5 FC8{ m Fp FC9{ m FC10{ m Fp Fi FC6} Fi} FC10 FC10 Fi[3] FC11{ m FC12{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC9 FC9 Fc} Fp Fc Fi} v6} v1}


void  S10180C112 ::v236(){vfunc_called(this, "_ZN10S10180C1124v236Ev");}
S10180C112 ::~S10180C112(){ note_dtor("S10180C112", this);} // tgen
S10180C112 ::S10180C112(){ note_ctor("S10180C112", this);} // tgen

static void Test_S10180C112()
{
  extern Class_Descriptor cd_S10180C112;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10180C112, buf);
    S10180C112 *dp, &lv = *(dp=new (buf) S10180C112());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10180C112)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C112)");
    check_base_class_offset(lv, (S10180C17*)(S10180C69*)(S10180C106*), 0, "S10180C112");
    check_base_class_offset(lv, (S10180C69*)(S10180C106*), 0, "S10180C112");
    check_base_class_offset(lv, (S10180C106*), 0, "S10180C112");
    test_class_info(&lv, &cd_S10180C112);
    dp->~S10180C112();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C112(Test_S10180C112, "S10180C112", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN10S10180C112C1Ev();
extern void _ZN10S10180C112D1Ev();
Name_Map name_map_S10180C112[] = {
  NSPAIR(_ZN10S10180C112C1Ev),
  NSPAIR(_ZN10S10180C112D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C69;
extern VTBL_ENTRY _ZTI9S10180C69[];
extern  VTBL_ENTRY _ZTV9S10180C69[];
extern Class_Descriptor cd_S10180C106;
extern VTBL_ENTRY _ZTI10S10180C106[];
extern  VTBL_ENTRY _ZTV10S10180C106[];
static Base_Class bases_S10180C112[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C69,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C106,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C112[];
extern void _ZN10S10180C112D1Ev();
extern void _ZN10S10180C112D0Ev();
extern void _ZN9S10180C693v89Ev();
extern void _ZN9S10180C693v90Ev();
extern void _ZN9S10180C693v91Ev();
extern void _ZN9S10180C693v92Ev();
extern void _ZN10S10180C1064v233Ev();
extern void _ZN10S10180C1124v236Ev();
static  VTBL_ENTRY vtc_S10180C112[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C112[0]),
  (VTBL_ENTRY)&_ZN10S10180C112D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C112D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10180C693v92Ev,
  (VTBL_ENTRY)&_ZN10S10180C1064v233Ev,
  (VTBL_ENTRY)&_ZN10S10180C1124v236Ev,
};
extern VTBL_ENTRY _ZTI10S10180C112[];
extern  VTBL_ENTRY _ZTV10S10180C112[];
Class_Descriptor cd_S10180C112 = {  "S10180C112", // class name
  bases_S10180C112, 3,
  &(vtc_S10180C112[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI10S10180C112),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C112),10, //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  S10180C104  : S10180C17 , S10180C11 , S10180C2 {
  int s10180c104f0[2];
  ::S10180C86 s10180c104f1;
  ::S10180C31 s10180c104f2;
  ::S10180C105 s10180c104f3;
  ::S10180C106 s10180c104f4;
  ::S10180C87 s10180c104f5;
  ::S10180C68 s10180c104f6;
  ::S10180C107 s10180c104f7;
  ::S10180C75 s10180c104f8;
  ::S10180C112 s10180c104f9;
  ::S10180C75 s10180c104f10;
  void *s10180c104f11;
  ::S10180C111 s10180c104f12;
  void *s10180c104f13[2];
  int s10180c104f14;
  char s10180c104f15[3];
  int s10180c104f16;
  __tsi64 s10180c104f17[2];
  virtual  ~S10180C104(); // _ZN10S10180C104D1Ev
  virtual void  v207(); // _ZN10S10180C1044v207Ev
  virtual void  v208(); // _ZN10S10180C1044v208Ev
  virtual void  v209(); // _ZN10S10180C1044v209Ev
  virtual void  v210(); // _ZN10S10180C1044v210Ev
  virtual void  v211(); // _ZN10S10180C1044v211Ev
  virtual void  v212(); // _ZN10S10180C1044v212Ev
  virtual void  v213(); // _ZN10S10180C1044v213Ev
  virtual void  v214(); // _ZN10S10180C1044v214Ev
  virtual void  v215(); // _ZN10S10180C1044v215Ev
  virtual void  v216(); // _ZN10S10180C1044v216Ev
  virtual void  v217(); // _ZN10S10180C1044v217Ev
  virtual void  v218(); // _ZN10S10180C1044v218Ev
  virtual void  v219(); // _ZN10S10180C1044v219Ev
  virtual void  v220(); // _ZN10S10180C1044v220Ev
  virtual void  v221(); // _ZN10S10180C1044v221Ev
  virtual void  v222(); // _ZN10S10180C1044v222Ev
  virtual void  v223(); // _ZN10S10180C1044v223Ev
  virtual void  v224(); // _ZN10S10180C1044v224Ev
  virtual void  v225(); // _ZN10S10180C1044v225Ev
  virtual void  v226(); // _ZN10S10180C1044v226Ev
  virtual void  v227(); // _ZN10S10180C1044v227Ev
  virtual void  v228(); // _ZN10S10180C1044v228Ev
  virtual void  v229(); // _ZN10S10180C1044v229Ev
  S10180C104(); // tgen
};
//SIG(-1 S10180C104) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC10{ vd v48} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fi[2] FC11{ BC12{ BC2 vd v50 v51 v52 v53 FC13{ m Fp FC7 FC8 FC8 Fi[3] FC14{ m FC15{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi} v49} FC16{ m FC17{ m Fp Fi[2] FC5} Fp[2]} FC18{ BC12 v54 v55 v56 Fp[3]} FC19{ BC12 v57} FC20{ BC12 v58 v59} FC21{ BC12 v60 v61} FC22{ BC2 vd v62 v63 FC23{ BC24{ BC25{ m Fp FC14 FC14 Fi[3] Fc[2] Fi Fp} FC26{ m Fp} FC27{ m Fp} FC26 FC8 FC8 FC26 FC27 FC26 FC8 FC8 FC8 Fc Fi Fp} FC8} Fi} FC28{ BC12 v64} FC29{ BC19 v65} FC28 Fp FC27 Fp[2] Fi Fc[3] Fi FL[2]}


 S10180C104 ::~S10180C104(){ note_dtor("S10180C104", this);}
void  S10180C104 ::v207(){vfunc_called(this, "_ZN10S10180C1044v207Ev");}
void  S10180C104 ::v208(){vfunc_called(this, "_ZN10S10180C1044v208Ev");}
void  S10180C104 ::v209(){vfunc_called(this, "_ZN10S10180C1044v209Ev");}
void  S10180C104 ::v210(){vfunc_called(this, "_ZN10S10180C1044v210Ev");}
void  S10180C104 ::v211(){vfunc_called(this, "_ZN10S10180C1044v211Ev");}
void  S10180C104 ::v212(){vfunc_called(this, "_ZN10S10180C1044v212Ev");}
void  S10180C104 ::v213(){vfunc_called(this, "_ZN10S10180C1044v213Ev");}
void  S10180C104 ::v214(){vfunc_called(this, "_ZN10S10180C1044v214Ev");}
void  S10180C104 ::v215(){vfunc_called(this, "_ZN10S10180C1044v215Ev");}
void  S10180C104 ::v216(){vfunc_called(this, "_ZN10S10180C1044v216Ev");}
void  S10180C104 ::v217(){vfunc_called(this, "_ZN10S10180C1044v217Ev");}
void  S10180C104 ::v218(){vfunc_called(this, "_ZN10S10180C1044v218Ev");}
void  S10180C104 ::v219(){vfunc_called(this, "_ZN10S10180C1044v219Ev");}
void  S10180C104 ::v220(){vfunc_called(this, "_ZN10S10180C1044v220Ev");}
void  S10180C104 ::v221(){vfunc_called(this, "_ZN10S10180C1044v221Ev");}
void  S10180C104 ::v222(){vfunc_called(this, "_ZN10S10180C1044v222Ev");}
void  S10180C104 ::v223(){vfunc_called(this, "_ZN10S10180C1044v223Ev");}
void  S10180C104 ::v224(){vfunc_called(this, "_ZN10S10180C1044v224Ev");}
void  S10180C104 ::v225(){vfunc_called(this, "_ZN10S10180C1044v225Ev");}
void  S10180C104 ::v226(){vfunc_called(this, "_ZN10S10180C1044v226Ev");}
void  S10180C104 ::v227(){vfunc_called(this, "_ZN10S10180C1044v227Ev");}
void  S10180C104 ::v228(){vfunc_called(this, "_ZN10S10180C1044v228Ev");}
void  S10180C104 ::v229(){vfunc_called(this, "_ZN10S10180C1044v229Ev");}
S10180C104 ::S10180C104(){ note_ctor("S10180C104", this);} // tgen

static void Test_S10180C104()
{
  extern Class_Descriptor cd_S10180C104;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(305,427)];
    init_test(&cd_S10180C104, buf);
    S10180C104 *dp, &lv = *(dp=new (buf) S10180C104());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2432,1704), "sizeof(S10180C104)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C104)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C104");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C104");
    check_base_class_offset(lv, (S10180C2*), ABISELECT(144,96), "S10180C104");
    check_field_offset(lv, s10180c104f0, ABISELECT(152,100), "S10180C104.s10180c104f0");
    check_field_offset(lv, s10180c104f1, ABISELECT(160,108), "S10180C104.s10180c104f1");
    check_field_offset(lv, s10180c104f2, ABISELECT(392,272), "S10180C104.s10180c104f2");
    check_field_offset(lv, s10180c104f3, ABISELECT(432,296), "S10180C104.s10180c104f3");
    check_field_offset(lv, s10180c104f4, ABISELECT(688,472), "S10180C104.s10180c104f4");
    check_field_offset(lv, s10180c104f5, ABISELECT(920,636), "S10180C104.s10180c104f5");
    check_field_offset(lv, s10180c104f6, ABISELECT(1152,800), "S10180C104.s10180c104f6");
    check_field_offset(lv, s10180c104f7, ABISELECT(1384,964), "S10180C104.s10180c104f7");
    check_field_offset(lv, s10180c104f8, ABISELECT(1672,1168), "S10180C104.s10180c104f8");
    check_field_offset(lv, s10180c104f9, ABISELECT(1904,1332), "S10180C104.s10180c104f9");
    check_field_offset(lv, s10180c104f10, ABISELECT(2136,1496), "S10180C104.s10180c104f10");
    check_field_offset(lv, s10180c104f11, ABISELECT(2368,1660), "S10180C104.s10180c104f11");
    check_field_offset(lv, s10180c104f12, ABISELECT(2376,1664), "S10180C104.s10180c104f12");
    check_field_offset(lv, s10180c104f13, ABISELECT(2384,1668), "S10180C104.s10180c104f13");
    check_field_offset(lv, s10180c104f14, ABISELECT(2400,1676), "S10180C104.s10180c104f14");
    check_field_offset(lv, s10180c104f15, ABISELECT(2404,1680), "S10180C104.s10180c104f15");
    check_field_offset(lv, s10180c104f16, ABISELECT(2408,1684), "S10180C104.s10180c104f16");
    check_field_offset(lv, s10180c104f17, ABISELECT(2416,1688), "S10180C104.s10180c104f17");
    test_class_info(&lv, &cd_S10180C104);
    dp->~S10180C104();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C104(Test_S10180C104, "S10180C104", ABISELECT(2432,1704));

#else // __cplusplus

extern void _ZN10S10180C104C1Ev();
extern void _ZN10S10180C104D1Ev();
Name_Map name_map_S10180C104[] = {
  NSPAIR(_ZN10S10180C104C1Ev),
  NSPAIR(_ZN10S10180C104D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
static Base_Class bases_S10180C104[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    27, //bcp->virtual_function_table_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},
  {&cd_S10180C2,    ABISELECT(144,96), //bcp->offset
    55, //bcp->virtual_function_table_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 _ZTI10S10180C104[];
extern void _ZN10S10180C104D1Ev();
extern void _ZN10S10180C104D0Ev();
extern void _ZN10S10180C1044v207Ev();
extern void _ZN10S10180C1044v208Ev();
extern void _ZN10S10180C1044v209Ev();
extern void _ZN10S10180C1044v210Ev();
extern void _ZN10S10180C1044v211Ev();
extern void _ZN10S10180C1044v212Ev();
extern void _ZN10S10180C1044v213Ev();
extern void _ZN10S10180C1044v214Ev();
extern void _ZN10S10180C1044v215Ev();
extern void _ZN10S10180C1044v216Ev();
extern void _ZN10S10180C1044v217Ev();
extern void _ZN10S10180C1044v218Ev();
extern void _ZN10S10180C1044v219Ev();
extern void _ZN10S10180C1044v220Ev();
extern void _ZN10S10180C1044v221Ev();
extern void _ZN10S10180C1044v222Ev();
extern void _ZN10S10180C1044v223Ev();
extern void _ZN10S10180C1044v224Ev();
extern void _ZN10S10180C1044v225Ev();
extern void _ZN10S10180C1044v226Ev();
extern void _ZN10S10180C1044v227Ev();
extern void _ZN10S10180C1044v228Ev();
extern void _ZN10S10180C1044v229Ev();
extern void ABISELECT(_ZThn48_N10S10180C104D1Ev,_ZThn32_N10S10180C104D1Ev)();
extern void ABISELECT(_ZThn48_N10S10180C104D0Ev,_ZThn32_N10S10180C104D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void ABISELECT(_ZThn144_N10S10180C104D1Ev,_ZThn96_N10S10180C104D1Ev)();
extern void ABISELECT(_ZThn144_N10S10180C104D0Ev,_ZThn96_N10S10180C104D0Ev)();
extern void _ZN8S10180C22v7Ev();
static  VTBL_ENTRY vtc_S10180C104[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C104[0]),
  (VTBL_ENTRY)&_ZN10S10180C104D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C104D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v207Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v208Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v209Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v210Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v211Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v212Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v213Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v214Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v215Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v216Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v217Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v218Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v219Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v220Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v221Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v222Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v223Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v224Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v225Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v226Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v227Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v228Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v229Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10180C104[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C104D1Ev,_ZThn32_N10S10180C104D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C104D0Ev,_ZThn32_N10S10180C104D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI10S10180C104[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C104D1Ev,_ZThn96_N10S10180C104D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C104D0Ev,_ZThn96_N10S10180C104D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
};
extern VTBL_ENTRY _ZTI10S10180C104[];
extern  VTBL_ENTRY _ZTV10S10180C104[];
Class_Descriptor cd_S10180C104 = {  "S10180C104", // class name
  bases_S10180C104, 3,
  &(vtc_S10180C104[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2432,1704), // object size
  NSPAIRA(_ZTI10S10180C104),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV10S10180C104),60, //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  S10180C114  {
  void *s10180c114f0;
  void  mf10180c114(); // _ZN10S10180C11411mf10180c114Ev
};
//SIG(-1 S10180C114) C1{ m Fp}


void  S10180C114 ::mf10180c114(){}

static void Test_S10180C114()
{
  {
    init_simple_test("S10180C114");
    S10180C114 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10180C114)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C114)");
    check_field_offset(lv, s10180c114f0, 0, "S10180C114.s10180c114f0");
  }
}
static Arrange_To_Call_Me vS10180C114(Test_S10180C114, "S10180C114", ABISELECT(8,4));

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S10180C114[];
VTBL_ENTRY *P__ZTI10S10180C114 = _ZTI10S10180C114; 
Class_Descriptor cd_S10180C114 = {  "S10180C114", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S10180C114),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  S10180C118  {
  int s10180c118f0[2];
  void  mf10180c118(); // _ZN10S10180C11811mf10180c118Ev
};
//SIG(-1 S10180C118) C1{ m Fi[2]}


void  S10180C118 ::mf10180c118(){}

static void Test_S10180C118()
{
  {
    init_simple_test("S10180C118");
    S10180C118 lv;
    check2(sizeof(lv), 8, "sizeof(S10180C118)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C118)");
    check_field_offset(lv, s10180c118f0, 0, "S10180C118.s10180c118f0");
  }
}
static Arrange_To_Call_Me vS10180C118(Test_S10180C118, "S10180C118", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C117  {
  ::S10180C118 s10180c117f0;
  ::S10180C118 s10180c117f1;
  void  mf10180c117(); // _ZN10S10180C11711mf10180c117Ev
};
//SIG(-1 S10180C117) C1{ m FC2{ m Fi[2]} FC2}


void  S10180C117 ::mf10180c117(){}

static void Test_S10180C117()
{
  {
    init_simple_test("S10180C117");
    S10180C117 lv;
    check2(sizeof(lv), 16, "sizeof(S10180C117)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C117)");
    check_field_offset(lv, s10180c117f0, 0, "S10180C117.s10180c117f0");
    check_field_offset(lv, s10180c117f1, 8, "S10180C117.s10180c117f1");
  }
}
static Arrange_To_Call_Me vS10180C117(Test_S10180C117, "S10180C117", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C116  {
  void *s10180c116f0[2];
  int s10180c116f1[2];
  void *s10180c116f2;
  __tsi64 s10180c116f3;
  void *s10180c116f4[9];
  short s10180c116f5;
  void *s10180c116f6[2];
  ::S10180C117 s10180c116f7;
  ::S10180C118 s10180c116f8;
  char s10180c116f9;
  int s10180c116f10[3];
  char s10180c116f11;
  int s10180c116f12[6];
  char s10180c116f13;
  void  mf10180c116(); // _ZN10S10180C11611mf10180c116Ev
};
//SIG(-1 S10180C116) C1{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC2{ m FC3{ m Fi[2]} FC3} FC3 Fc Fi[3] Fc Fi[6] Fc}


void  S10180C116 ::mf10180c116(){}

static void Test_S10180C116()
{
  {
    init_simple_test("S10180C116");
    S10180C116 lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S10180C116)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C116)");
    check_field_offset(lv, s10180c116f0, 0, "S10180C116.s10180c116f0");
    check_field_offset(lv, s10180c116f1, ABISELECT(16,8), "S10180C116.s10180c116f1");
    check_field_offset(lv, s10180c116f2, ABISELECT(24,16), "S10180C116.s10180c116f2");
    check_field_offset(lv, s10180c116f3, ABISELECT(32,20), "S10180C116.s10180c116f3");
    check_field_offset(lv, s10180c116f4, ABISELECT(40,28), "S10180C116.s10180c116f4");
    check_field_offset(lv, s10180c116f5, ABISELECT(112,64), "S10180C116.s10180c116f5");
    check_field_offset(lv, s10180c116f6, ABISELECT(120,68), "S10180C116.s10180c116f6");
    check_field_offset(lv, s10180c116f7, ABISELECT(136,76), "S10180C116.s10180c116f7");
    check_field_offset(lv, s10180c116f8, ABISELECT(152,92), "S10180C116.s10180c116f8");
    check_field_offset(lv, s10180c116f9, ABISELECT(160,100), "S10180C116.s10180c116f9");
    check_field_offset(lv, s10180c116f10, ABISELECT(164,104), "S10180C116.s10180c116f10");
    check_field_offset(lv, s10180c116f11, ABISELECT(176,116), "S10180C116.s10180c116f11");
    check_field_offset(lv, s10180c116f12, ABISELECT(180,120), "S10180C116.s10180c116f12");
    check_field_offset(lv, s10180c116f13, ABISELECT(204,144), "S10180C116.s10180c116f13");
  }
}
static Arrange_To_Call_Me vS10180C116(Test_S10180C116, "S10180C116", ABISELECT(208,148));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C115  {
  void *s10180c115f0;
  ::S10180C111 s10180c115f1;
  void *s10180c115f2[5];
  ::S10180C116 s10180c115f3;
  void  mf10180c115(); // _ZN10S10180C11511mf10180c115Ev
};
//SIG(-1 S10180C115) C1{ m Fp FC2{ m Fp} Fp[5] FC3{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC4{ m FC5{ m Fi[2]} FC5} FC5 Fc Fi[3] Fc Fi[6] Fc}}


void  S10180C115 ::mf10180c115(){}

static void Test_S10180C115()
{
  {
    init_simple_test("S10180C115");
    S10180C115 lv;
    check2(sizeof(lv), ABISELECT(264,176), "sizeof(S10180C115)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C115)");
    check_field_offset(lv, s10180c115f0, 0, "S10180C115.s10180c115f0");
    check_field_offset(lv, s10180c115f1, ABISELECT(8,4), "S10180C115.s10180c115f1");
    check_field_offset(lv, s10180c115f2, ABISELECT(16,8), "S10180C115.s10180c115f2");
    check_field_offset(lv, s10180c115f3, ABISELECT(56,28), "S10180C115.s10180c115f3");
  }
}
static Arrange_To_Call_Me vS10180C115(Test_S10180C115, "S10180C115", ABISELECT(264,176));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C103  : S10180C104 {
  ::S10180C114 s10180c103f0;
  ::S10180C115 s10180c103f1;
  int s10180c103f2;
  virtual  ~S10180C103(); // _ZN10S10180C103D1Ev
  virtual void  v201(); // _ZN10S10180C1034v201Ev
  virtual void  v202(); // _ZN10S10180C1034v202Ev
  virtual void  v203(); // _ZN10S10180C1034v203Ev
  virtual void  v204(); // _ZN10S10180C1034v204Ev
  virtual void  v205(); // _ZN10S10180C1034v205Ev
  virtual void  v206(); // _ZN10S10180C1034v206Ev
  S10180C103(); // tgen
};
//SIG(-1 S10180C103) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} BC7{ 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 Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC10{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC11{ vd v31} vd v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 Fi[2] FC12{ BC13{ BC3 vd v56 v57 v58 v59 FC14{ m Fp FC8 FC9 FC9 Fi[3] FC15{ m FC16{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v55} FC17{ m FC18{ m Fp Fi[2] FC6} Fp[2]} FC19{ BC13 v60 v61 v62 Fp[3]} FC20{ BC13 v63} FC21{ BC13 v64 v65} FC22{ BC13 v66 v67} FC23{ BC3 vd v68 v69 FC24{ BC25{ BC26{ m Fp FC15 FC15 Fi[3] Fc[2] Fi Fp} FC27{ m Fp} FC28{ m Fp} FC27 FC9 FC9 FC27 FC28 FC27 FC9 FC9 FC9 Fc Fi Fp} FC9} Fi} FC29{ BC13 v70} FC30{ BC20 v71} FC29 Fp FC28 Fp[2] Fi Fc[3] Fi FL[2]} vd v1 v2 v3 v4 v5 v6 FC31{ m Fp} FC32{ m Fp FC28 Fp[5] FC33{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC34{ m FC35{ m Fi[2]} FC35} FC35 Fc Fi[3] Fc Fi[6] Fc}} Fi}


 S10180C103 ::~S10180C103(){ note_dtor("S10180C103", this);}
void  S10180C103 ::v201(){vfunc_called(this, "_ZN10S10180C1034v201Ev");}
void  S10180C103 ::v202(){vfunc_called(this, "_ZN10S10180C1034v202Ev");}
void  S10180C103 ::v203(){vfunc_called(this, "_ZN10S10180C1034v203Ev");}
void  S10180C103 ::v204(){vfunc_called(this, "_ZN10S10180C1034v204Ev");}
void  S10180C103 ::v205(){vfunc_called(this, "_ZN10S10180C1034v205Ev");}
void  S10180C103 ::v206(){vfunc_called(this, "_ZN10S10180C1034v206Ev");}
S10180C103 ::S10180C103(){ note_ctor("S10180C103", this);} // tgen

static void Test_S10180C103()
{
  extern Class_Descriptor cd_S10180C103;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(340,473)];
    init_test(&cd_S10180C103, buf);
    S10180C103 *dp, &lv = *(dp=new (buf) S10180C103());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2712,1888), "sizeof(S10180C103)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C103)");
    check_base_class_offset(lv, (S10180C17*)(S10180C104*), 0, "S10180C103");
    check_base_class_offset(lv, (S10180C11*)(S10180C104*), ABISELECT(48,32), "S10180C103");
    check_base_class_offset(lv, (S10180C2*)(S10180C104*), ABISELECT(144,96), "S10180C103");
    check_base_class_offset(lv, (S10180C104*), 0, "S10180C103");
    check_field_offset(lv, s10180c103f0, ABISELECT(2432,1704), "S10180C103.s10180c103f0");
    check_field_offset(lv, s10180c103f1, ABISELECT(2440,1708), "S10180C103.s10180c103f1");
    check_field_offset(lv, s10180c103f2, ABISELECT(2704,1884), "S10180C103.s10180c103f2");
    test_class_info(&lv, &cd_S10180C103);
    dp->~S10180C103();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C103(Test_S10180C103, "S10180C103", ABISELECT(2712,1888));

#else // __cplusplus

extern void _ZN10S10180C103C1Ev();
extern void _ZN10S10180C103D1Ev();
Name_Map name_map_S10180C103[] = {
  NSPAIR(_ZN10S10180C103C1Ev),
  NSPAIR(_ZN10S10180C103D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
extern Class_Descriptor cd_S10180C104;
extern VTBL_ENTRY _ZTI10S10180C104[];
extern  VTBL_ENTRY _ZTV10S10180C104[];
static Base_Class bases_S10180C103[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    33, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S10180C2,    ABISELECT(144,96), //bcp->offset
    61, //bcp->virtual_function_table_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_S10180C104,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C103[];
extern void _ZN10S10180C103D1Ev();
extern void _ZN10S10180C103D0Ev();
extern void _ZN10S10180C1044v207Ev();
extern void _ZN10S10180C1044v208Ev();
extern void _ZN10S10180C1044v209Ev();
extern void _ZN10S10180C1044v210Ev();
extern void _ZN10S10180C1044v211Ev();
extern void _ZN10S10180C1044v212Ev();
extern void _ZN10S10180C1044v213Ev();
extern void _ZN10S10180C1044v214Ev();
extern void _ZN10S10180C1044v215Ev();
extern void _ZN10S10180C1044v216Ev();
extern void _ZN10S10180C1044v217Ev();
extern void _ZN10S10180C1044v218Ev();
extern void _ZN10S10180C1044v219Ev();
extern void _ZN10S10180C1044v220Ev();
extern void _ZN10S10180C1044v221Ev();
extern void _ZN10S10180C1044v222Ev();
extern void _ZN10S10180C1044v223Ev();
extern void _ZN10S10180C1044v224Ev();
extern void _ZN10S10180C1044v225Ev();
extern void _ZN10S10180C1044v226Ev();
extern void _ZN10S10180C1044v227Ev();
extern void _ZN10S10180C1044v228Ev();
extern void _ZN10S10180C1044v229Ev();
extern void _ZN10S10180C1034v201Ev();
extern void _ZN10S10180C1034v202Ev();
extern void _ZN10S10180C1034v203Ev();
extern void _ZN10S10180C1034v204Ev();
extern void _ZN10S10180C1034v205Ev();
extern void _ZN10S10180C1034v206Ev();
extern void ABISELECT(_ZThn48_N10S10180C103D1Ev,_ZThn32_N10S10180C103D1Ev)();
extern void ABISELECT(_ZThn48_N10S10180C103D0Ev,_ZThn32_N10S10180C103D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void ABISELECT(_ZThn144_N10S10180C103D1Ev,_ZThn96_N10S10180C103D1Ev)();
extern void ABISELECT(_ZThn144_N10S10180C103D0Ev,_ZThn96_N10S10180C103D0Ev)();
extern void _ZN8S10180C22v7Ev();
static  VTBL_ENTRY vtc_S10180C103[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C103[0]),
  (VTBL_ENTRY)&_ZN10S10180C103D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C103D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v207Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v208Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v209Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v210Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v211Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v212Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v213Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v214Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v215Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v216Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v217Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v218Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v219Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v220Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v221Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v222Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v223Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v224Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v225Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v226Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v227Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v228Ev,
  (VTBL_ENTRY)&_ZN10S10180C1044v229Ev,
  (VTBL_ENTRY)&_ZN10S10180C1034v201Ev,
  (VTBL_ENTRY)&_ZN10S10180C1034v202Ev,
  (VTBL_ENTRY)&_ZN10S10180C1034v203Ev,
  (VTBL_ENTRY)&_ZN10S10180C1034v204Ev,
  (VTBL_ENTRY)&_ZN10S10180C1034v205Ev,
  (VTBL_ENTRY)&_ZN10S10180C1034v206Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10180C103[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C103D1Ev,_ZThn32_N10S10180C103D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C103D0Ev,_ZThn32_N10S10180C103D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI10S10180C103[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C103D1Ev,_ZThn96_N10S10180C103D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C103D0Ev,_ZThn96_N10S10180C103D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
};
extern VTBL_ENTRY _ZTI10S10180C103[];
extern  VTBL_ENTRY _ZTV10S10180C103[];
Class_Descriptor cd_S10180C103 = {  "S10180C103", // class name
  bases_S10180C103, 4,
  &(vtc_S10180C103[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2712,1888), // object size
  NSPAIRA(_ZTI10S10180C103),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C103),66, //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  S10180C120  {
  char s10180c120f0[5];
  void  mf10180c120(); // _ZN10S10180C12011mf10180c120Ev
};
//SIG(-1 S10180C120) C1{ m Fc[5]}


void  S10180C120 ::mf10180c120(){}

static void Test_S10180C120()
{
  {
    init_simple_test("S10180C120");
    S10180C120 lv;
    check2(sizeof(lv), 5, "sizeof(S10180C120)");
    check2(__alignof__(lv), 1, "__alignof__(S10180C120)");
    check_field_offset(lv, s10180c120f0, 0, "S10180C120.s10180c120f0");
  }
}
static Arrange_To_Call_Me vS10180C120(Test_S10180C120, "S10180C120", 5);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C121  {
  ::S10180C73 s10180c121f0;
  ::S10180C73 s10180c121f1;
  ::S10180C73 s10180c121f2;
  ::S10180C61 s10180c121f3;
  int s10180c121f4;
  char s10180c121f5[2];
  int s10180c121f6;
  void  mf10180c121(); // _ZN10S10180C12111mf10180c121Ev
};
//SIG(-1 S10180C121) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC4{ m Fp} Fi Fc[2] Fi}


void  S10180C121 ::mf10180c121(){}

static void Test_S10180C121()
{
  {
    init_simple_test("S10180C121");
    S10180C121 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S10180C121)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C121)");
    check_field_offset(lv, s10180c121f0, 0, "S10180C121.s10180c121f0");
    check_field_offset(lv, s10180c121f1, 16, "S10180C121.s10180c121f1");
    check_field_offset(lv, s10180c121f2, 32, "S10180C121.s10180c121f2");
    check_field_offset(lv, s10180c121f3, 48, "S10180C121.s10180c121f3");
    check_field_offset(lv, s10180c121f4, ABISELECT(56,52), "S10180C121.s10180c121f4");
    check_field_offset(lv, s10180c121f5, ABISELECT(60,56), "S10180C121.s10180c121f5");
    check_field_offset(lv, s10180c121f6, ABISELECT(64,60), "S10180C121.s10180c121f6");
  }
}
static Arrange_To_Call_Me vS10180C121(Test_S10180C121, "S10180C121", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C123  {
  void *s10180c123f0[3];
  ::S10180C59 s10180c123f1;
  ::S10180C13 s10180c123f2;
  __tsi64 s10180c123f3[2];
  char s10180c123f4;
  void  mf10180c123(); // _ZN10S10180C12311mf10180c123Ev
};
//SIG(-1 S10180C123) C1{ m Fp[3] FC2{ m Fi[2]} FC3{ m Fp Fi FC4{ m}} FL[2] Fc}


void  S10180C123 ::mf10180c123(){}

static void Test_S10180C123()
{
  {
    init_simple_test("S10180C123");
    S10180C123 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S10180C123)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C123)");
    check_field_offset(lv, s10180c123f0, 0, "S10180C123.s10180c123f0");
    check_field_offset(lv, s10180c123f1, ABISELECT(24,12), "S10180C123.s10180c123f1");
    check_field_offset(lv, s10180c123f2, ABISELECT(32,20), "S10180C123.s10180c123f2");
    check_field_offset(lv, s10180c123f3, ABISELECT(48,32), "S10180C123.s10180c123f3");
    check_field_offset(lv, s10180c123f4, ABISELECT(64,48), "S10180C123.s10180c123f4");
  }
}
static Arrange_To_Call_Me vS10180C123(Test_S10180C123, "S10180C123", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C122  : S10180C17 {
  ::S10180C123 s10180c122f0;
  ::S10180C31 s10180c122f1;
  virtual  ~S10180C122(); // _ZN10S10180C122D1Ev
  S10180C122(); // tgen
};
//SIG(-1 S10180C122) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd FC6{ m Fp[3] FC7{ m Fi[2]} FC8{ m Fp Fi FC4} FL[2] Fc} FC9{ m FC10{ m Fp Fi[2] FC5} Fp[2]}}


 S10180C122 ::~S10180C122(){ note_dtor("S10180C122", this);}
S10180C122 ::S10180C122(){ note_ctor("S10180C122", this);} // tgen

static void Test_S10180C122()
{
  extern Class_Descriptor cd_S10180C122;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,28)];
    init_test(&cd_S10180C122, buf);
    S10180C122 *dp, &lv = *(dp=new (buf) S10180C122());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S10180C122)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C122)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C122");
    check_field_offset(lv, s10180c122f0, ABISELECT(48,32), "S10180C122.s10180c122f0");
    check_field_offset(lv, s10180c122f1, ABISELECT(120,84), "S10180C122.s10180c122f1");
    test_class_info(&lv, &cd_S10180C122);
    dp->~S10180C122();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C122(Test_S10180C122, "S10180C122", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN10S10180C122C1Ev();
extern void _ZN10S10180C122D1Ev();
Name_Map name_map_S10180C122[] = {
  NSPAIR(_ZN10S10180C122C1Ev),
  NSPAIR(_ZN10S10180C122D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10180C122[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C122[];
extern void _ZN10S10180C122D1Ev();
extern void _ZN10S10180C122D0Ev();
static  VTBL_ENTRY vtc_S10180C122[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C122[0]),
  (VTBL_ENTRY)&_ZN10S10180C122D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C122D0Ev,
};
extern VTBL_ENTRY _ZTI10S10180C122[];
extern  VTBL_ENTRY _ZTV10S10180C122[];
Class_Descriptor cd_S10180C122 = {  "S10180C122", // class name
  bases_S10180C122, 1,
  &(vtc_S10180C122[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI10S10180C122),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C122),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  S10180C124  {
  ::S10180C5 s10180c124f0;
  int s10180c124f1;
  void  mf10180c124(); // _ZN10S10180C12411mf10180c124Ev
};
//SIG(-1 S10180C124) C1{ m FC2{ BC3{ m Fp Fi FC4{ m} FC4}} Fi}


void  S10180C124 ::mf10180c124(){}

static void Test_S10180C124()
{
  {
    init_simple_test("S10180C124");
    S10180C124 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S10180C124)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C124)");
    check_field_offset(lv, s10180c124f0, 0, "S10180C124.s10180c124f0");
    check_field_offset(lv, s10180c124f1, ABISELECT(16,12), "S10180C124.s10180c124f1");
  }
}
static Arrange_To_Call_Me vS10180C124(Test_S10180C124, "S10180C124", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C79  : S10180C17 , S10180C11 , S10180C2 , S10180C80 , S10180C83 , S10180C26 {
  void *s10180c79f0[5];
  int s10180c79f1;
  void *s10180c79f2;
  ::S10180C59 s10180c79f3;
  ::S10180C61 s10180c79f4;
  ::S10180C86 s10180c79f5;
  ::S10180C68 s10180c79f6;
  ::S10180C75 s10180c79f7;
  ::S10180C87 s10180c79f8;
  ::S10180C88 s10180c79f9;
  ::S10180C91 s10180c79f10;
  ::S10180C94 s10180c79f11;
  ::S10180C99 s10180c79f12;
  ::S10180C100 s10180c79f13;
  ::S10180C103 s10180c79f14;
  void *s10180c79f15;
  ::S10180C31 s10180c79f16;
  char s10180c79f17[2];
  int s10180c79f18;
  ::S10180C120 s10180c79f19;
  ::S10180C121 s10180c79f20;
  ::S10180C73 s10180c79f21;
  ::S10180C73 s10180c79f22;
  ::S10180C73 s10180c79f23;
  void *s10180c79f24;
  ::S10180C122 s10180c79f25;
  char s10180c79f26[2];
  __tsi64 s10180c79f27;
  char s10180c79f28[2];
  int s10180c79f29;
  ::S10180C111 s10180c79f30;
  ::S10180C124 s10180c79f31;
  char s10180c79f32;
  int s10180c79f33;
  virtual  ~S10180C79(); // _ZN9S10180C79D1Ev
  virtual void  v116(); // _ZN9S10180C794v116Ev
  virtual void  v117(); // _ZN9S10180C794v117Ev
  virtual void  v118(); // _ZN9S10180C794v118Ev
  virtual void  v119(); // _ZN9S10180C794v119Ev
  virtual void  v120(); // _ZN9S10180C794v120Ev
  virtual void  v121(); // _ZN9S10180C794v121Ev
  virtual void  v122(); // _ZN9S10180C794v122Ev
  virtual void  v123(); // _ZN9S10180C794v123Ev
  virtual void  v124(); // _ZN9S10180C794v124Ev
  virtual void  v125(); // _ZN9S10180C794v125Ev
  virtual void  v126(); // _ZN9S10180C794v126Ev
  virtual void  v127(); // _ZN9S10180C794v127Ev
  virtual void  v128(); // _ZN9S10180C794v128Ev
  virtual void  v129(); // _ZN9S10180C794v129Ev
  virtual void  v130(); // _ZN9S10180C794v130Ev
  virtual void  v131(); // _ZN9S10180C794v131Ev
  virtual void  v132(); // _ZN9S10180C794v132Ev
  virtual void  v133(); // _ZN9S10180C794v133Ev
  virtual void  v134(); // _ZN9S10180C794v134Ev
  virtual void  v135(); // _ZN9S10180C794v135Ev
  virtual void  v136(); // _ZN9S10180C794v136Ev
  virtual void  v137(); // _ZN9S10180C794v137Ev
  virtual void  v138(); // _ZN9S10180C794v138Ev
  virtual void  v139(); // _ZN9S10180C794v139Ev
  virtual void  v140(); // _ZN9S10180C794v140Ev
  virtual void  v141(); // _ZN9S10180C794v141Ev
  virtual void  v142(); // _ZN9S10180C794v142Ev
  virtual void  v143(); // _ZN9S10180C794v143Ev
  virtual void  v144(); // _ZN9S10180C794v144Ev
  virtual void  v145(); // _ZN9S10180C794v145Ev
  virtual void  v146(); // _ZN9S10180C794v146Ev
  virtual void  v147(); // _ZN9S10180C794v147Ev
  virtual void  v148(); // _ZN9S10180C794v148Ev
  virtual void  v149(); // _ZN9S10180C794v149Ev
  S10180C79(); // tgen
};
//SIG(-1 S10180C79) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC10{ vd v59} BC11{ BC12{ vd v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74} BC13{ vd m Fp}} BC14{ vd v75 v76} BC15{ vd v77} 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 Fp[5] Fi Fp FC16{ m Fi[2]} FC17{ m Fp} FC18{ BC19{ BC2 vd v79 v80 v81 v82 FC20{ m Fp FC7 FC8 FC8 Fi[3] FC21{ m FC22{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi} v78} FC23{ BC19 v83 v84} FC24{ BC19 v85} FC25{ BC19 v86 v87} FC26{ BC19 v88 v89 v90 FC27{ Fp[3]} FC28{ Fi[4]}[3]} FC29{ BC2 BC6 vd v91 v92 v93 v94 v95 v96 v97 v98 FC30{ m FC8 Fi[2] FC8} Fi[2] Fc[2] Fi FL[2] FC31{ m FL} Fi} FC32{ BC33{ BC2 BC6 vd v104 v105 v106 v107 v108 v109} BC10 vd v99 v100 v101 v102 v103 FC34{ m Fi Fp Fi FC21} FC35{ m Fp Fi[2] FC5}} FC36{ BC2 BC6 vd v110 v111 v112 v113 FC37{ m FC35 Fp[2]} Fp[2] FC8 Fi} FC38{ BC2 BC6 BC10 BC11 BC14 BC15 vd v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 FC37 Fp[2] Fi[2] FC39{ BC2 vd v133 Fp FC7 FC7 Fp Fi FC21} FC23 FC25 FC25 FC21 FC21 FC21 Fi} FC40{ BC41{ BC2 BC6 BC10 vd v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 Fi[2] FC18 FC37 FC42{ BC19 v163 v164 v165 Fp[3]} FC43{ BC19 v166} FC25 FC23 FC44{ BC2 vd v167 v168 FC45{ BC46{ BC47{ m Fp FC21 FC21 Fi[3] Fc[2] Fi Fp} FC17 FC48{ m Fp} FC17 FC8 FC8 FC17 FC48 FC17 FC8 FC8 FC8 Fc Fi Fp} FC8} Fi} FC24 FC49{ BC43 v169} FC24 Fp FC48 Fp[2] Fi Fc[3] Fi FL[2]} vd v134 v135 v136 v137 v138 v139 FC50{ m Fp} FC51{ m Fp FC48 Fp[5] FC52{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC53{ m FC54{ m Fi[2]} FC54} FC54 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC37 Fc[2] Fi FC55{ m Fc[5]} FC56{ m FC21 FC21 FC21 FC17 Fi Fc[2] Fi} FC21 FC21 FC21 Fp FC57{ BC2 vd FC58{ m Fp[3] FC16 FC8 FL[2] Fc} FC37} Fc[2] FL Fc[2] Fi FC48 FC59{ m FC60{ BC61{ m Fp Fi FC62{ m} FC62}} Fi} Fc Fi}


 S10180C79 ::~S10180C79(){ note_dtor("S10180C79", this);}
void  S10180C79 ::v116(){vfunc_called(this, "_ZN9S10180C794v116Ev");}
void  S10180C79 ::v117(){vfunc_called(this, "_ZN9S10180C794v117Ev");}
void  S10180C79 ::v118(){vfunc_called(this, "_ZN9S10180C794v118Ev");}
void  S10180C79 ::v119(){vfunc_called(this, "_ZN9S10180C794v119Ev");}
void  S10180C79 ::v120(){vfunc_called(this, "_ZN9S10180C794v120Ev");}
void  S10180C79 ::v121(){vfunc_called(this, "_ZN9S10180C794v121Ev");}
void  S10180C79 ::v122(){vfunc_called(this, "_ZN9S10180C794v122Ev");}
void  S10180C79 ::v123(){vfunc_called(this, "_ZN9S10180C794v123Ev");}
void  S10180C79 ::v124(){vfunc_called(this, "_ZN9S10180C794v124Ev");}
void  S10180C79 ::v125(){vfunc_called(this, "_ZN9S10180C794v125Ev");}
void  S10180C79 ::v126(){vfunc_called(this, "_ZN9S10180C794v126Ev");}
void  S10180C79 ::v127(){vfunc_called(this, "_ZN9S10180C794v127Ev");}
void  S10180C79 ::v128(){vfunc_called(this, "_ZN9S10180C794v128Ev");}
void  S10180C79 ::v129(){vfunc_called(this, "_ZN9S10180C794v129Ev");}
void  S10180C79 ::v130(){vfunc_called(this, "_ZN9S10180C794v130Ev");}
void  S10180C79 ::v131(){vfunc_called(this, "_ZN9S10180C794v131Ev");}
void  S10180C79 ::v132(){vfunc_called(this, "_ZN9S10180C794v132Ev");}
void  S10180C79 ::v133(){vfunc_called(this, "_ZN9S10180C794v133Ev");}
void  S10180C79 ::v134(){vfunc_called(this, "_ZN9S10180C794v134Ev");}
void  S10180C79 ::v135(){vfunc_called(this, "_ZN9S10180C794v135Ev");}
void  S10180C79 ::v136(){vfunc_called(this, "_ZN9S10180C794v136Ev");}
void  S10180C79 ::v137(){vfunc_called(this, "_ZN9S10180C794v137Ev");}
void  S10180C79 ::v138(){vfunc_called(this, "_ZN9S10180C794v138Ev");}
void  S10180C79 ::v139(){vfunc_called(this, "_ZN9S10180C794v139Ev");}
void  S10180C79 ::v140(){vfunc_called(this, "_ZN9S10180C794v140Ev");}
void  S10180C79 ::v141(){vfunc_called(this, "_ZN9S10180C794v141Ev");}
void  S10180C79 ::v142(){vfunc_called(this, "_ZN9S10180C794v142Ev");}
void  S10180C79 ::v143(){vfunc_called(this, "_ZN9S10180C794v143Ev");}
void  S10180C79 ::v144(){vfunc_called(this, "_ZN9S10180C794v144Ev");}
void  S10180C79 ::v145(){vfunc_called(this, "_ZN9S10180C794v145Ev");}
void  S10180C79 ::v146(){vfunc_called(this, "_ZN9S10180C794v146Ev");}
void  S10180C79 ::v147(){vfunc_called(this, "_ZN9S10180C794v147Ev");}
void  S10180C79 ::v148(){vfunc_called(this, "_ZN9S10180C794v148Ev");}
void  S10180C79 ::v149(){vfunc_called(this, "_ZN9S10180C794v149Ev");}
S10180C79 ::S10180C79(){ note_ctor("S10180C79", this);} // tgen

static void Test_S10180C79()
{
  extern Class_Descriptor cd_S10180C79;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(806,1126)];
    init_test(&cd_S10180C79, buf);
    S10180C79 *dp, &lv = *(dp=new (buf) S10180C79());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6440,4500), "sizeof(S10180C79)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C79)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C79");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C79");
    check_base_class_offset(lv, (S10180C2*), ABISELECT(144,96), "S10180C79");
    check_base_class_offset(lv, (S10180C81*)(S10180C80*), ABISELECT(152,100), "S10180C79");
    check_base_class_offset(lv, (S10180C82*)(S10180C80*), ABISELECT(160,104), "S10180C79");
    check_base_class_offset(lv, (S10180C80*), ABISELECT(152,100), "S10180C79");
    check_base_class_offset(lv, (S10180C83*), ABISELECT(176,112), "S10180C79");
    check_base_class_offset(lv, (S10180C26*), ABISELECT(184,116), "S10180C79");
    check_field_offset(lv, s10180c79f0, ABISELECT(192,120), "S10180C79.s10180c79f0");
    check_field_offset(lv, s10180c79f1, ABISELECT(232,140), "S10180C79.s10180c79f1");
    check_field_offset(lv, s10180c79f2, ABISELECT(240,144), "S10180C79.s10180c79f2");
    check_field_offset(lv, s10180c79f3, ABISELECT(248,148), "S10180C79.s10180c79f3");
    check_field_offset(lv, s10180c79f4, ABISELECT(256,156), "S10180C79.s10180c79f4");
    check_field_offset(lv, s10180c79f5, ABISELECT(264,160), "S10180C79.s10180c79f5");
    check_field_offset(lv, s10180c79f6, ABISELECT(496,324), "S10180C79.s10180c79f6");
    check_field_offset(lv, s10180c79f7, ABISELECT(728,488), "S10180C79.s10180c79f7");
    check_field_offset(lv, s10180c79f8, ABISELECT(960,652), "S10180C79.s10180c79f8");
    check_field_offset(lv, s10180c79f9, ABISELECT(1192,816), "S10180C79.s10180c79f9");
    check_field_offset(lv, s10180c79f10, ABISELECT(1496,1040), "S10180C79.s10180c79f10");
    check_field_offset(lv, s10180c79f11, ABISELECT(1728,1212), "S10180C79.s10180c79f11");
    check_field_offset(lv, s10180c79f12, ABISELECT(1944,1356), "S10180C79.s10180c79f12");
    check_field_offset(lv, s10180c79f13, ABISELECT(2168,1500), "S10180C79.s10180c79f13");
    check_field_offset(lv, s10180c79f14, ABISELECT(3312,2296), "S10180C79.s10180c79f14");
    check_field_offset(lv, s10180c79f15, ABISELECT(6024,4184), "S10180C79.s10180c79f15");
    check_field_offset(lv, s10180c79f16, ABISELECT(6032,4188), "S10180C79.s10180c79f16");
    check_field_offset(lv, s10180c79f17, ABISELECT(6072,4212), "S10180C79.s10180c79f17");
    check_field_offset(lv, s10180c79f18, ABISELECT(6076,4216), "S10180C79.s10180c79f18");
    check_field_offset(lv, s10180c79f19, ABISELECT(6080,4220), "S10180C79.s10180c79f19");
    check_field_offset(lv, s10180c79f20, ABISELECT(6088,4228), "S10180C79.s10180c79f20");
    check_field_offset(lv, s10180c79f21, ABISELECT(6160,4292), "S10180C79.s10180c79f21");
    check_field_offset(lv, s10180c79f22, ABISELECT(6176,4308), "S10180C79.s10180c79f22");
    check_field_offset(lv, s10180c79f23, ABISELECT(6192,4324), "S10180C79.s10180c79f23");
    check_field_offset(lv, s10180c79f24, ABISELECT(6208,4340), "S10180C79.s10180c79f24");
    check_field_offset(lv, s10180c79f25, ABISELECT(6216,4344), "S10180C79.s10180c79f25");
    check_field_offset(lv, s10180c79f26, ABISELECT(6376,4452), "S10180C79.s10180c79f26");
    check_field_offset(lv, s10180c79f27, ABISELECT(6384,4456), "S10180C79.s10180c79f27");
    check_field_offset(lv, s10180c79f28, ABISELECT(6392,4464), "S10180C79.s10180c79f28");
    check_field_offset(lv, s10180c79f29, ABISELECT(6396,4468), "S10180C79.s10180c79f29");
    check_field_offset(lv, s10180c79f30, ABISELECT(6400,4472), "S10180C79.s10180c79f30");
    check_field_offset(lv, s10180c79f31, ABISELECT(6408,4476), "S10180C79.s10180c79f31");
    check_field_offset(lv, s10180c79f32, ABISELECT(6432,4492), "S10180C79.s10180c79f32");
    check_field_offset(lv, s10180c79f33, ABISELECT(6436,4496), "S10180C79.s10180c79f33");
    test_class_info(&lv, &cd_S10180C79);
    dp->~S10180C79();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C79(Test_S10180C79, "S10180C79", ABISELECT(6440,4500));

#else // __cplusplus

extern void _ZN9S10180C79C1Ev();
extern void _ZN9S10180C79D1Ev();
Name_Map name_map_S10180C79[] = {
  NSPAIR(_ZN9S10180C79C1Ev),
  NSPAIR(_ZN9S10180C79D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
extern Class_Descriptor cd_S10180C81;
extern VTBL_ENTRY _ZTI9S10180C81[];
extern  VTBL_ENTRY _ZTV9S10180C81[];
extern Class_Descriptor cd_S10180C82;
extern VTBL_ENTRY _ZTI9S10180C82[];
extern  VTBL_ENTRY _ZTV9S10180C82[];
extern Class_Descriptor cd_S10180C80;
extern VTBL_ENTRY _ZTI9S10180C80[];
extern  VTBL_ENTRY _ZTV9S10180C80[];
extern Class_Descriptor cd_S10180C83;
extern VTBL_ENTRY _ZTI9S10180C83[];
extern  VTBL_ENTRY _ZTV9S10180C83[];
extern Class_Descriptor cd_S10180C26;
extern VTBL_ENTRY _ZTI9S10180C26[];
extern  VTBL_ENTRY _ZTV9S10180C26[];
static Base_Class bases_S10180C79[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    38, //bcp->virtual_function_table_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},
  {&cd_S10180C2,    ABISELECT(144,96), //bcp->offset
    66, //bcp->virtual_function_table_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},
  {&cd_S10180C81,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S10180C82,    ABISELECT(160,104), //bcp->offset
    90, //bcp->virtual_function_table_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_S10180C80,    ABISELECT(152,100), //bcp->offset
    71, //bcp->virtual_function_table_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},
  {&cd_S10180C83,    ABISELECT(176,112), //bcp->offset
    94, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C26,    ABISELECT(184,116), //bcp->offset
    100, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S10180C79[];
extern void _ZN9S10180C79D1Ev();
extern void _ZN9S10180C79D0Ev();
extern void _ZN9S10180C794v116Ev();
extern void _ZN9S10180C794v117Ev();
extern void _ZN9S10180C794v118Ev();
extern void _ZN9S10180C794v119Ev();
extern void _ZN9S10180C794v120Ev();
extern void _ZN9S10180C794v121Ev();
extern void _ZN9S10180C794v122Ev();
extern void _ZN9S10180C794v123Ev();
extern void _ZN9S10180C794v124Ev();
extern void _ZN9S10180C794v125Ev();
extern void _ZN9S10180C794v126Ev();
extern void _ZN9S10180C794v127Ev();
extern void _ZN9S10180C794v128Ev();
extern void _ZN9S10180C794v129Ev();
extern void _ZN9S10180C794v130Ev();
extern void _ZN9S10180C794v131Ev();
extern void _ZN9S10180C794v132Ev();
extern void _ZN9S10180C794v133Ev();
extern void _ZN9S10180C794v134Ev();
extern void _ZN9S10180C794v135Ev();
extern void _ZN9S10180C794v136Ev();
extern void _ZN9S10180C794v137Ev();
extern void _ZN9S10180C794v138Ev();
extern void _ZN9S10180C794v139Ev();
extern void _ZN9S10180C794v140Ev();
extern void _ZN9S10180C794v141Ev();
extern void _ZN9S10180C794v142Ev();
extern void _ZN9S10180C794v143Ev();
extern void _ZN9S10180C794v144Ev();
extern void _ZN9S10180C794v145Ev();
extern void _ZN9S10180C794v146Ev();
extern void _ZN9S10180C794v147Ev();
extern void _ZN9S10180C794v148Ev();
extern void _ZN9S10180C794v149Ev();
extern void ABISELECT(_ZThn48_N9S10180C79D1Ev,_ZThn32_N9S10180C79D1Ev)();
extern void ABISELECT(_ZThn48_N9S10180C79D0Ev,_ZThn32_N9S10180C79D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void ABISELECT(_ZThn144_N9S10180C79D1Ev,_ZThn96_N9S10180C79D1Ev)();
extern void ABISELECT(_ZThn144_N9S10180C79D0Ev,_ZThn96_N9S10180C79D0Ev)();
extern void _ZN8S10180C22v7Ev();
extern void ABISELECT(_ZThn152_N9S10180C79D1Ev,_ZThn100_N9S10180C79D1Ev)();
extern void ABISELECT(_ZThn152_N9S10180C79D0Ev,_ZThn100_N9S10180C79D0Ev)();
extern void _ZN9S10180C813v99Ev();
extern void _ZN9S10180C814v100Ev();
extern void _ZN9S10180C814v101Ev();
extern void _ZN9S10180C814v102Ev();
extern void _ZN9S10180C814v103Ev();
extern void _ZN9S10180C814v104Ev();
extern void _ZN9S10180C814v105Ev();
extern void _ZN9S10180C814v106Ev();
extern void _ZN9S10180C814v107Ev();
extern void _ZN9S10180C814v108Ev();
extern void _ZN9S10180C814v109Ev();
extern void _ZN9S10180C814v110Ev();
extern void _ZN9S10180C814v111Ev();
extern void _ZN9S10180C814v112Ev();
extern void _ZN9S10180C814v113Ev();
extern void ABISELECT(_ZThn160_N9S10180C79D1Ev,_ZThn104_N9S10180C79D1Ev)();
extern void ABISELECT(_ZThn160_N9S10180C79D0Ev,_ZThn104_N9S10180C79D0Ev)();
extern void ABISELECT(_ZThn176_N9S10180C79D1Ev,_ZThn112_N9S10180C79D1Ev)();
extern void ABISELECT(_ZThn176_N9S10180C79D0Ev,_ZThn112_N9S10180C79D0Ev)();
extern void _ZN9S10180C834v114Ev();
extern void _ZN9S10180C834v115Ev();
extern void ABISELECT(_ZThn184_N9S10180C79D1Ev,_ZThn116_N9S10180C79D1Ev)();
extern void ABISELECT(_ZThn184_N9S10180C79D0Ev,_ZThn116_N9S10180C79D0Ev)();
extern void _ZN9S10180C263v64Ev();
static  VTBL_ENTRY vtc_S10180C79[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C79[0]),
  (VTBL_ENTRY)&_ZN9S10180C79D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C79D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v116Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v117Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v118Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v119Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v120Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v121Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v122Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v123Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v124Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v125Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v126Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v127Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v128Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v129Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v130Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v131Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v132Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v133Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v134Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v135Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v136Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v137Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v138Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v139Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v140Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v141Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v142Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v143Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v144Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v145Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v146Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v147Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v148Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v149Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10180C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C79D1Ev,_ZThn32_N9S10180C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C79D0Ev,_ZThn32_N9S10180C79D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S10180C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S10180C79D1Ev,_ZThn96_N9S10180C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S10180C79D0Ev,_ZThn96_N9S10180C79D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S10180C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10180C79D1Ev,_ZThn100_N9S10180C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10180C79D0Ev,_ZThn100_N9S10180C79D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C813v99Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v100Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v101Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v102Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v103Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v104Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v105Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v106Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v107Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v108Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v109Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v110Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v111Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v112Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v113Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S10180C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10180C79D1Ev,_ZThn104_N9S10180C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10180C79D0Ev,_ZThn104_N9S10180C79D0Ev),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI9S10180C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N9S10180C79D1Ev,_ZThn112_N9S10180C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N9S10180C79D0Ev,_ZThn112_N9S10180C79D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C834v114Ev,
  (VTBL_ENTRY)&_ZN9S10180C834v115Ev,
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI9S10180C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S10180C79D1Ev,_ZThn116_N9S10180C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S10180C79D0Ev,_ZThn116_N9S10180C79D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C263v64Ev,
};
extern VTBL_ENTRY _ZTI9S10180C79[];
extern  VTBL_ENTRY _ZTV9S10180C79[];
Class_Descriptor cd_S10180C79 = {  "S10180C79", // class name
  bases_S10180C79, 8,
  &(vtc_S10180C79[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(6440,4500), // object size
  NSPAIRA(_ZTI9S10180C79),ABISELECT(120,64), //typeinfo_var
  NSPAIRA(_ZTV9S10180C79),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C78  : S10180C79 {
  char s10180c78f0;
  virtual  ~S10180C78(); // _ZN9S10180C78D1Ev
  virtual void  v97(); // _ZN9S10180C783v97Ev
  virtual void  v98(); // _ZN9S10180C783v98Ev
  S10180C78(); // tgen
};
//SIG(-1 S10180C78) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} BC7{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC10{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC11{ vd v27} BC12{ BC13{ vd v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42} BC14{ vd m Fp}} BC15{ vd v43 v44} BC16{ vd v45} vd 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 Fp[5] Fi Fp FC17{ m Fi[2]} FC18{ m Fp} FC19{ BC20{ BC3 vd v81 v82 v83 v84 FC21{ m Fp FC8 FC9 FC9 Fi[3] FC22{ m FC23{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v80} FC24{ BC20 v85 v86} FC25{ BC20 v87} FC26{ BC20 v88 v89} FC27{ BC20 v90 v91 v92 FC28{ Fp[3]} FC29{ Fi[4]}[3]} FC30{ BC3 BC7 vd v93 v94 v95 v96 v97 v98 v99 v100 FC31{ m FC9 Fi[2] FC9} Fi[2] Fc[2] Fi FL[2] FC32{ m FL} Fi} FC33{ BC34{ BC3 BC7 vd v106 v107 v108 v109 v110 v111} BC11 vd v101 v102 v103 v104 v105 FC35{ m Fi Fp Fi FC22} FC36{ m Fp Fi[2] FC6}} FC37{ BC3 BC7 vd v112 v113 v114 v115 FC38{ m FC36 Fp[2]} Fp[2] FC9 Fi} FC39{ BC3 BC7 BC11 BC12 BC15 BC16 vd v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 FC38 Fp[2] Fi[2] FC40{ BC3 vd v135 Fp FC8 FC8 Fp Fi FC22} FC24 FC26 FC26 FC22 FC22 FC22 Fi} FC41{ BC42{ BC3 BC7 BC11 vd v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 Fi[2] FC19 FC38 FC43{ BC20 v165 v166 v167 Fp[3]} FC44{ BC20 v168} FC26 FC24 FC45{ BC3 vd v169 v170 FC46{ BC47{ BC48{ m Fp FC22 FC22 Fi[3] Fc[2] Fi Fp} FC18 FC49{ m Fp} FC18 FC9 FC9 FC18 FC49 FC18 FC9 FC9 FC9 Fc Fi Fp} FC9} Fi} FC25 FC50{ BC44 v171} FC25 Fp FC49 Fp[2] Fi Fc[3] Fi FL[2]} vd v136 v137 v138 v139 v140 v141 FC51{ m Fp} FC52{ m Fp FC49 Fp[5] FC53{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC54{ m FC55{ m Fi[2]} FC55} FC55 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC38 Fc[2] Fi FC56{ m Fc[5]} FC57{ m FC22 FC22 FC22 FC18 Fi Fc[2] Fi} FC22 FC22 FC22 Fp FC58{ BC3 vd FC59{ m Fp[3] FC17 FC9 FL[2] Fc} FC38} Fc[2] FL Fc[2] Fi FC49 FC60{ m FC61{ BC62{ m Fp Fi FC63{ m} FC63}} Fi} Fc Fi} vd v1 v2 Fc}


 S10180C78 ::~S10180C78(){ note_dtor("S10180C78", this);}
void  S10180C78 ::v97(){vfunc_called(this, "_ZN9S10180C783v97Ev");}
void  S10180C78 ::v98(){vfunc_called(this, "_ZN9S10180C783v98Ev");}
S10180C78 ::S10180C78(){ note_ctor("S10180C78", this);} // tgen

static void Test_S10180C78()
{
  extern Class_Descriptor cd_S10180C78;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(807,1127)];
    init_test(&cd_S10180C78, buf);
    S10180C78 *dp, &lv = *(dp=new (buf) S10180C78());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6448,4504), "sizeof(S10180C78)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C78)");
    check_base_class_offset(lv, (S10180C17*)(S10180C79*), 0, "S10180C78");
    check_base_class_offset(lv, (S10180C11*)(S10180C79*), ABISELECT(48,32), "S10180C78");
    check_base_class_offset(lv, (S10180C2*)(S10180C79*), ABISELECT(144,96), "S10180C78");
    check_base_class_offset(lv, (S10180C81*)(S10180C80*)(S10180C79*), ABISELECT(152,100), "S10180C78");
    check_base_class_offset(lv, (S10180C82*)(S10180C80*)(S10180C79*), ABISELECT(160,104), "S10180C78");
    check_base_class_offset(lv, (S10180C80*)(S10180C79*), ABISELECT(152,100), "S10180C78");
    check_base_class_offset(lv, (S10180C83*)(S10180C79*), ABISELECT(176,112), "S10180C78");
    check_base_class_offset(lv, (S10180C26*)(S10180C79*), ABISELECT(184,116), "S10180C78");
    check_base_class_offset(lv, (S10180C79*), 0, "S10180C78");
    check_field_offset(lv, s10180c78f0, ABISELECT(6440,4500), "S10180C78.s10180c78f0");
    test_class_info(&lv, &cd_S10180C78);
    dp->~S10180C78();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C78(Test_S10180C78, "S10180C78", ABISELECT(6448,4504));

#else // __cplusplus

extern void _ZN9S10180C78C1Ev();
extern void _ZN9S10180C78D1Ev();
Name_Map name_map_S10180C78[] = {
  NSPAIR(_ZN9S10180C78C1Ev),
  NSPAIR(_ZN9S10180C78D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
extern Class_Descriptor cd_S10180C81;
extern VTBL_ENTRY _ZTI9S10180C81[];
extern  VTBL_ENTRY _ZTV9S10180C81[];
extern Class_Descriptor cd_S10180C82;
extern VTBL_ENTRY _ZTI9S10180C82[];
extern  VTBL_ENTRY _ZTV9S10180C82[];
extern Class_Descriptor cd_S10180C80;
extern VTBL_ENTRY _ZTI9S10180C80[];
extern  VTBL_ENTRY _ZTV9S10180C80[];
extern Class_Descriptor cd_S10180C83;
extern VTBL_ENTRY _ZTI9S10180C83[];
extern  VTBL_ENTRY _ZTV9S10180C83[];
extern Class_Descriptor cd_S10180C26;
extern VTBL_ENTRY _ZTI9S10180C26[];
extern  VTBL_ENTRY _ZTV9S10180C26[];
extern Class_Descriptor cd_S10180C79;
extern VTBL_ENTRY _ZTI9S10180C79[];
extern  VTBL_ENTRY _ZTV9S10180C79[];
static Base_Class bases_S10180C78[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S10180C11,    ABISELECT(48,32), //bcp->offset
    40, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S10180C2,    ABISELECT(144,96), //bcp->offset
    68, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S10180C81,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S10180C82,    ABISELECT(160,104), //bcp->offset
    92, //bcp->virtual_function_table_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_S10180C80,    ABISELECT(152,100), //bcp->offset
    73, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S10180C83,    ABISELECT(176,112), //bcp->offset
    96, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S10180C26,    ABISELECT(184,116), //bcp->offset
    102, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S10180C79,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S10180C78[];
extern void _ZN9S10180C78D1Ev();
extern void _ZN9S10180C78D0Ev();
extern void _ZN9S10180C794v116Ev();
extern void _ZN9S10180C794v117Ev();
extern void _ZN9S10180C794v118Ev();
extern void _ZN9S10180C794v119Ev();
extern void _ZN9S10180C794v120Ev();
extern void _ZN9S10180C794v121Ev();
extern void _ZN9S10180C794v122Ev();
extern void _ZN9S10180C794v123Ev();
extern void _ZN9S10180C794v124Ev();
extern void _ZN9S10180C794v125Ev();
extern void _ZN9S10180C794v126Ev();
extern void _ZN9S10180C794v127Ev();
extern void _ZN9S10180C794v128Ev();
extern void _ZN9S10180C794v129Ev();
extern void _ZN9S10180C794v130Ev();
extern void _ZN9S10180C794v131Ev();
extern void _ZN9S10180C794v132Ev();
extern void _ZN9S10180C794v133Ev();
extern void _ZN9S10180C794v134Ev();
extern void _ZN9S10180C794v135Ev();
extern void _ZN9S10180C794v136Ev();
extern void _ZN9S10180C794v137Ev();
extern void _ZN9S10180C794v138Ev();
extern void _ZN9S10180C794v139Ev();
extern void _ZN9S10180C794v140Ev();
extern void _ZN9S10180C794v141Ev();
extern void _ZN9S10180C794v142Ev();
extern void _ZN9S10180C794v143Ev();
extern void _ZN9S10180C794v144Ev();
extern void _ZN9S10180C794v145Ev();
extern void _ZN9S10180C794v146Ev();
extern void _ZN9S10180C794v147Ev();
extern void _ZN9S10180C794v148Ev();
extern void _ZN9S10180C794v149Ev();
extern void _ZN9S10180C783v97Ev();
extern void _ZN9S10180C783v98Ev();
extern void ABISELECT(_ZThn48_N9S10180C78D1Ev,_ZThn32_N9S10180C78D1Ev)();
extern void ABISELECT(_ZThn48_N9S10180C78D0Ev,_ZThn32_N9S10180C78D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void ABISELECT(_ZThn144_N9S10180C78D1Ev,_ZThn96_N9S10180C78D1Ev)();
extern void ABISELECT(_ZThn144_N9S10180C78D0Ev,_ZThn96_N9S10180C78D0Ev)();
extern void _ZN8S10180C22v7Ev();
extern void ABISELECT(_ZThn152_N9S10180C78D1Ev,_ZThn100_N9S10180C78D1Ev)();
extern void ABISELECT(_ZThn152_N9S10180C78D0Ev,_ZThn100_N9S10180C78D0Ev)();
extern void _ZN9S10180C813v99Ev();
extern void _ZN9S10180C814v100Ev();
extern void _ZN9S10180C814v101Ev();
extern void _ZN9S10180C814v102Ev();
extern void _ZN9S10180C814v103Ev();
extern void _ZN9S10180C814v104Ev();
extern void _ZN9S10180C814v105Ev();
extern void _ZN9S10180C814v106Ev();
extern void _ZN9S10180C814v107Ev();
extern void _ZN9S10180C814v108Ev();
extern void _ZN9S10180C814v109Ev();
extern void _ZN9S10180C814v110Ev();
extern void _ZN9S10180C814v111Ev();
extern void _ZN9S10180C814v112Ev();
extern void _ZN9S10180C814v113Ev();
extern void ABISELECT(_ZThn160_N9S10180C78D1Ev,_ZThn104_N9S10180C78D1Ev)();
extern void ABISELECT(_ZThn160_N9S10180C78D0Ev,_ZThn104_N9S10180C78D0Ev)();
extern void ABISELECT(_ZThn176_N9S10180C78D1Ev,_ZThn112_N9S10180C78D1Ev)();
extern void ABISELECT(_ZThn176_N9S10180C78D0Ev,_ZThn112_N9S10180C78D0Ev)();
extern void _ZN9S10180C834v114Ev();
extern void _ZN9S10180C834v115Ev();
extern void ABISELECT(_ZThn184_N9S10180C78D1Ev,_ZThn116_N9S10180C78D1Ev)();
extern void ABISELECT(_ZThn184_N9S10180C78D0Ev,_ZThn116_N9S10180C78D0Ev)();
extern void _ZN9S10180C263v64Ev();
static  VTBL_ENTRY vtc_S10180C78[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C78[0]),
  (VTBL_ENTRY)&_ZN9S10180C78D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C78D0Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v116Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v117Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v118Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v119Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v120Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v121Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v122Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v123Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v124Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v125Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v126Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v127Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v128Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v129Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v130Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v131Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v132Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v133Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v134Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v135Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v136Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v137Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v138Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v139Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v140Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v141Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v142Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v143Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v144Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v145Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v146Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v147Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v148Ev,
  (VTBL_ENTRY)&_ZN9S10180C794v149Ev,
  (VTBL_ENTRY)&_ZN9S10180C783v97Ev,
  (VTBL_ENTRY)&_ZN9S10180C783v98Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10180C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C78D1Ev,_ZThn32_N9S10180C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10180C78D0Ev,_ZThn32_N9S10180C78D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S10180C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S10180C78D1Ev,_ZThn96_N9S10180C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S10180C78D0Ev,_ZThn96_N9S10180C78D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S10180C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10180C78D1Ev,_ZThn100_N9S10180C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10180C78D0Ev,_ZThn100_N9S10180C78D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C813v99Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v100Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v101Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v102Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v103Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v104Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v105Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v106Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v107Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v108Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v109Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v110Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v111Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v112Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v113Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S10180C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10180C78D1Ev,_ZThn104_N9S10180C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10180C78D0Ev,_ZThn104_N9S10180C78D0Ev),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI9S10180C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N9S10180C78D1Ev,_ZThn112_N9S10180C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N9S10180C78D0Ev,_ZThn112_N9S10180C78D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C834v114Ev,
  (VTBL_ENTRY)&_ZN9S10180C834v115Ev,
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI9S10180C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S10180C78D1Ev,_ZThn116_N9S10180C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S10180C78D0Ev,_ZThn116_N9S10180C78D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C263v64Ev,
};
extern VTBL_ENTRY _ZTI9S10180C78[];
extern  VTBL_ENTRY _ZTV9S10180C78[];
Class_Descriptor cd_S10180C78 = {  "S10180C78", // class name
  bases_S10180C78, 9,
  &(vtc_S10180C78[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(6448,4504), // object size
  NSPAIRA(_ZTI9S10180C78),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10180C78),107, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  9, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C16  : S10180C2 , S10180C17 , S10180C24 {
  void *s10180c16f0[5];
  ::S10180C25 s10180c16f1;
  ::S10180C78 s10180c16f2;
  ::S10180C87 s10180c16f3;
  ::S10180C87 s10180c16f4;
  void *s10180c16f5;
  char s10180c16f6;
  void *s10180c16f7;
  int s10180c16f8;
  virtual  ~S10180C16(); // _ZN9S10180C16D1Ev
  virtual void  v39(); // _ZN9S10180C163v39Ev
  virtual void  v40(); // _ZN9S10180C163v40Ev
  S10180C16(); // tgen
};
//SIG(-1 S10180C16) C1{ BC2{ vd v3} BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} BC7{ vd v4} vd v1 v2 Fp[5] FC8{ BC3 BC2 BC9{ vd v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 Fp FC10{ m FC11{ m Fp Fi FC5} Fi} FC12{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC13{ vd v51} BC14{ vd v52 v53} vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fi FC15{ m Fi[2]} FC15 FC15 FC16{ BC3 vd Fi Fp FC10 FL FC15 Fi Fc Fi FC17{ m FC18{ m Fp Fi[2] FC6} Fp[2]}} FC19{ BC9 vd v54 v55 v56} FC20{ vd m Fi Fp[3] FC21{ m Fc[2] Fp[3] Fi[4] FC22{ m FC23{ FL[4]}}}} FC24{ vd m FC22 Fi[2] FC25{ m FL[3] Fi[3] FL} FL FC26{ m Fi FC27{ m Fi[4]}} FC17 Fc[2] Fi[2] Fp[2] FL Fi[3]} Fi Fp FC28{ BC3 BC7 vd v57 Fi FC29{ m Fc[2]} FC30{ Fp[2]} Fp FC31{ vd m FC32{ vd m FC33{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC34{ BC35{ vd v64 v65 v66 v67 v68 v69 Fi Fp Fc} vd v58 v59 v60 v61 v62 v63 Fp} FC36{ BC37{ vd v71 Fi Fc[3]} vd v70 Fp[4] FL Fi FC22 FC38{ m Fp FC39{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC40{ BC37 vd v72 FC22 Fi Fp[2] FC41{ m FC22 FC38 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC42{ BC37 vd v73 Fp[2] FL Fi[4] FC43{ m Fi[2]} FC22 FC44{ m FC22 FC38 Fp Fi[4]} FC45{ m Fp}} FC22 FC22 FL Fi[5]} FL FC46{ m FC25 FC47{ m Fi} Fi} Fc[128] FC15 FC17} Fi[3] FC48{ m Fp Fi[2]} FC49{ m Fc[11] Fi[2]} FC50{ BC51{} FL Fi} FC52{ BC53{ BC3 vd v76 v77 v78 v79 FC54{ m Fp FC10 FC11 FC11 Fi[3] FC55{ m FC56{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC10 FC10 Fc} Fp Fc Fi} v74 v75} FL FC57{ BC53 v80} FC57 FC52 FC17 Fc} FC58{ BC59{ BC3 BC9 BC2 BC60{ BC61{ vd v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97} BC62{ vd m Fp}} BC63{ vd v98 v99} BC13 vd v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[5] Fi Fp FC43 FC45 FC64{ BC53 v134} FC52 FC57 FC65{ BC53 v135 v136} FC66{ BC53 v137 v138 v139 FC67{ Fp[3]} FC39[3]} FC68{ BC3 BC9 vd v140 v141 v142 v143 v144 v145 v146 v147 FC69{ m FC11 Fi[2] FC11} Fi[2] Fc[2] Fi FL[2] FC70{ m FL} Fi} FC71{ BC72{ BC3 BC9 vd v153 v154 v155 v156 v157 v158} BC2 vd v148 v149 v150 v151 v152 FC73{ m Fi Fp Fi FC55} FC18} FC74{ BC3 BC9 vd v159 v160 v161 v162 FC17 Fp[2] FC11 Fi} FC75{ BC3 BC9 BC2 BC60 BC63 BC13 vd v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 FC17 Fp[2] Fi[2] FC76{ BC3 vd v182 Fp FC10 FC10 Fp Fi FC55} FC52 FC65 FC65 FC55 FC55 FC55 Fi} FC77{ BC78{ BC3 BC9 BC2 vd v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 Fi[2] FC64 FC17 FC79{ BC53 v212 v213 v214 Fp[3]} FC80{ BC53 v215} FC65 FC52 FC81{ BC3 vd v216 v217 FC82{ BC83{ BC84{ m Fp FC55 FC55 Fi[3] Fc[2] Fi Fp} FC45 FC85{ m Fp} FC45 FC11 FC11 FC45 FC85 FC45 FC11 FC11 FC11 Fc Fi Fp} FC11} Fi} FC57 FC86{ BC80 v218} FC57 Fp FC85 Fp[2] Fi Fc[3] Fi FL[2]} vd v183 v184 v185 v186 v187 v188 FC87{ m Fp} FC88{ m Fp FC85 Fp[5] FC89{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC90{ m FC91{ m Fi[2]} FC91} FC91 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC17 Fc[2] Fi FC92{ m Fc[5]} FC93{ m FC55 FC55 FC55 FC45 Fi Fc[2] Fi} FC55 FC55 FC55 Fp FC94{ BC3 vd FC95{ m Fp[3] FC43 FC11 FL[2] Fc} FC17} Fc[2] FL Fc[2] Fi FC85 FC96{ m FC97{ BC98{ m Fp Fi FC99{ m} FC99}} Fi} Fc Fi} vd v81 v82 Fc} FC65 FC65 Fp Fc Fp Fi}


 S10180C16 ::~S10180C16(){ note_dtor("S10180C16", this);}
void  S10180C16 ::v39(){vfunc_called(this, "_ZN9S10180C163v39Ev");}
void  S10180C16 ::v40(){vfunc_called(this, "_ZN9S10180C163v40Ev");}
S10180C16 ::S10180C16(){ note_ctor("S10180C16", this);} // tgen

static void Test_S10180C16()
{
  extern Class_Descriptor cd_S10180C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2918,5115)];
    init_test(&cd_S10180C16, buf);
    S10180C16 *dp, &lv = *(dp=new (buf) S10180C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(23336,20456), "sizeof(S10180C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C16)");
    check_base_class_offset(lv, (S10180C2*), 0, "S10180C16");
    check_base_class_offset(lv, (S10180C17*), ABISELECT(8,4), "S10180C16");
    check_base_class_offset(lv, (S10180C24*), ABISELECT(56,36), "S10180C16");
    check_field_offset(lv, s10180c16f0, ABISELECT(64,40), "S10180C16.s10180c16f0");
    check_field_offset(lv, s10180c16f1, ABISELECT(104,60), "S10180C16.s10180c16f1");
    check_field_offset(lv, s10180c16f2, ABISELECT(16392,15608), "S10180C16.s10180c16f2");
    check_field_offset(lv, s10180c16f3, ABISELECT(22840,20112), "S10180C16.s10180c16f3");
    check_field_offset(lv, s10180c16f4, ABISELECT(23072,20276), "S10180C16.s10180c16f4");
    check_field_offset(lv, s10180c16f5, ABISELECT(23304,20440), "S10180C16.s10180c16f5");
    check_field_offset(lv, s10180c16f6, ABISELECT(23312,20444), "S10180C16.s10180c16f6");
    check_field_offset(lv, s10180c16f7, ABISELECT(23320,20448), "S10180C16.s10180c16f7");
    check_field_offset(lv, s10180c16f8, ABISELECT(23328,20452), "S10180C16.s10180c16f8");
    test_class_info(&lv, &cd_S10180C16);
    dp->~S10180C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C16(Test_S10180C16, "S10180C16", ABISELECT(23336,20456));

#else // __cplusplus

extern void _ZN9S10180C16C1Ev();
extern void _ZN9S10180C16D1Ev();
Name_Map name_map_S10180C16[] = {
  NSPAIR(_ZN9S10180C16C1Ev),
  NSPAIR(_ZN9S10180C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C24;
extern VTBL_ENTRY _ZTI9S10180C24[];
extern  VTBL_ENTRY _ZTV9S10180C24[];
static Base_Class bases_S10180C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C17,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_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},
  {&cd_S10180C24,    ABISELECT(56,36), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI9S10180C16[];
extern void _ZN9S10180C16D1Ev();
extern void _ZN9S10180C16D0Ev();
extern void _ZN8S10180C22v7Ev();
extern void _ZN9S10180C163v39Ev();
extern void _ZN9S10180C163v40Ev();
extern void ABISELECT(_ZThn8_N9S10180C16D1Ev,_ZThn4_N9S10180C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S10180C16D0Ev,_ZThn4_N9S10180C16D0Ev)();
extern void ABISELECT(_ZThn56_N9S10180C16D1Ev,_ZThn36_N9S10180C16D1Ev)();
extern void ABISELECT(_ZThn56_N9S10180C16D0Ev,_ZThn36_N9S10180C16D0Ev)();
extern void _ZN9S10180C243v41Ev();
static  VTBL_ENTRY vtc_S10180C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10180C16[0]),
  (VTBL_ENTRY)&_ZN9S10180C16D1Ev,
  (VTBL_ENTRY)&_ZN9S10180C16D0Ev,
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
  (VTBL_ENTRY)&_ZN9S10180C163v39Ev,
  (VTBL_ENTRY)&_ZN9S10180C163v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S10180C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S10180C16D1Ev,_ZThn4_N9S10180C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S10180C16D0Ev,_ZThn4_N9S10180C16D0Ev),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S10180C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10180C16D1Ev,_ZThn36_N9S10180C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10180C16D0Ev,_ZThn36_N9S10180C16D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C243v41Ev,
};
extern VTBL_ENTRY _ZTI9S10180C16[];
extern  VTBL_ENTRY _ZTV9S10180C16[];
Class_Descriptor cd_S10180C16 = {  "S10180C16", // class name
  bases_S10180C16, 3,
  &(vtc_S10180C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(23336,20456), // object size
  NSPAIRA(_ZTI9S10180C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S10180C16),16, //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  S10180C133  {
  void  mf10180c133(); // _ZN10S10180C13311mf10180c133Ev
};
//SIG(-1 S10180C133) C1{ m}


void  S10180C133 ::mf10180c133(){}

static void Test_S10180C133()
{
  {
    init_simple_test("S10180C133");
    S10180C133 lv;
    check2(sizeof(lv), 1, "sizeof(S10180C133)");
    check2(__alignof__(lv), 1, "__alignof__(S10180C133)");
  }
}
static Arrange_To_Call_Me vS10180C133(Test_S10180C133, "S10180C133", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S10180C133[];
VTBL_ENTRY *P__ZTI10S10180C133 = _ZTI10S10180C133; 
Class_Descriptor cd_S10180C133 = {  "S10180C133", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S10180C133),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  S10180C132  {
  void *s10180c132f0;
  int s10180c132f1[2];
  ::S10180C133 s10180c132f2;
  void  mf10180c132(); // _ZN10S10180C13211mf10180c132Ev
};
//SIG(-1 S10180C132) C1{ m Fp Fi[2] FC2{ m}}


void  S10180C132 ::mf10180c132(){}

static void Test_S10180C132()
{
  {
    init_simple_test("S10180C132");
    S10180C132 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S10180C132)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C132)");
    check_field_offset(lv, s10180c132f0, 0, "S10180C132.s10180c132f0");
    check_field_offset(lv, s10180c132f1, ABISELECT(8,4), "S10180C132.s10180c132f1");
    check_field_offset(lv, s10180c132f2, ABISELECT(16,12), "S10180C132.s10180c132f2");
  }
}
static Arrange_To_Call_Me vS10180C132(Test_S10180C132, "S10180C132", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C131  {
  ::S10180C132 s10180c131f0;
  ::S10180C43 s10180c131f1[3];
  void *s10180c131f2[2];
  int s10180c131f3;
  char s10180c131f4;
  virtual  ~S10180C131(); // _ZN10S10180C131D1Ev
  virtual void  v246(); // _ZN10S10180C1314v246Ev
  virtual void  v247(); // _ZN10S10180C1314v247Ev
  S10180C131(); // tgen
};
//SIG(-1 S10180C131) C1{ vd v1 v2 FC2{ m Fp Fi[2] FC3{ m}} FC4{ m Fi[4]}[3] Fp[2] Fi Fc}


 S10180C131 ::~S10180C131(){ note_dtor("S10180C131", this);}
void  S10180C131 ::v246(){vfunc_called(this, "_ZN10S10180C1314v246Ev");}
void  S10180C131 ::v247(){vfunc_called(this, "_ZN10S10180C1314v247Ev");}
S10180C131 ::S10180C131(){ note_ctor("S10180C131", this);} // tgen

static void Test_S10180C131()
{
  extern Class_Descriptor cd_S10180C131;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,22)];
    init_test(&cd_S10180C131, buf);
    S10180C131 *dp, &lv = *(dp=new (buf) S10180C131());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,84), "sizeof(S10180C131)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C131)");
    check_field_offset(lv, s10180c131f0, ABISELECT(8,4), "S10180C131.s10180c131f0");
    check_field_offset(lv, s10180c131f1, ABISELECT(32,20), "S10180C131.s10180c131f1");
    check_field_offset(lv, s10180c131f2, ABISELECT(80,68), "S10180C131.s10180c131f2");
    check_field_offset(lv, s10180c131f3, ABISELECT(96,76), "S10180C131.s10180c131f3");
    check_field_offset(lv, s10180c131f4, ABISELECT(100,80), "S10180C131.s10180c131f4");
    test_class_info(&lv, &cd_S10180C131);
    dp->~S10180C131();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C131(Test_S10180C131, "S10180C131", ABISELECT(104,84));

#else // __cplusplus

extern void _ZN10S10180C131C1Ev();
extern void _ZN10S10180C131D1Ev();
Name_Map name_map_S10180C131[] = {
  NSPAIR(_ZN10S10180C131C1Ev),
  NSPAIR(_ZN10S10180C131D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S10180C131[];
extern void _ZN10S10180C131D1Ev();
extern void _ZN10S10180C131D0Ev();
extern void _ZN10S10180C1314v246Ev();
extern void _ZN10S10180C1314v247Ev();
static  VTBL_ENTRY vtc_S10180C131[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C131[0]),
  (VTBL_ENTRY)&_ZN10S10180C131D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C131D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1314v246Ev,
  (VTBL_ENTRY)&_ZN10S10180C1314v247Ev,
};
extern VTBL_ENTRY _ZTI10S10180C131[];
extern  VTBL_ENTRY _ZTV10S10180C131[];
Class_Descriptor cd_S10180C131 = {  "S10180C131", // class name
  0,0,//no base classes
  &(vtc_S10180C131[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,84), // object size
  NSPAIRA(_ZTI10S10180C131),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S10180C131),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  S10180C138  {
  void  mf10180c138(); // _ZN10S10180C13811mf10180c138Ev
};
//SIG(-1 S10180C138) C1{ m}


void  S10180C138 ::mf10180c138(){}

static void Test_S10180C138()
{
  {
    init_simple_test("S10180C138");
    S10180C138 lv;
    check2(sizeof(lv), 1, "sizeof(S10180C138)");
    check2(__alignof__(lv), 1, "__alignof__(S10180C138)");
  }
}
static Arrange_To_Call_Me vS10180C138(Test_S10180C138, "S10180C138", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S10180C138[];
VTBL_ENTRY *P__ZTI10S10180C138 = _ZTI10S10180C138; 
Class_Descriptor cd_S10180C138 = {  "S10180C138", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S10180C138),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  S10180C136  {
  void *s10180c136f0;
  int s10180c136f1;
  ::S10180C133 s10180c136f2;
  ::S10180C138 s10180c136f3;
  void  mf10180c136(); // _ZN10S10180C13611mf10180c136Ev
};
//SIG(-1 S10180C136) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S10180C136 ::mf10180c136(){}

static void Test_S10180C136()
{
  {
    init_simple_test("S10180C136");
    S10180C136 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10180C136)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C136)");
    check_field_offset(lv, s10180c136f0, 0, "S10180C136.s10180c136f0");
    check_field_offset(lv, s10180c136f1, ABISELECT(8,4), "S10180C136.s10180c136f1");
    check_field_offset(lv, s10180c136f2, ABISELECT(12,8), "S10180C136.s10180c136f2");
    check_field_offset(lv, s10180c136f3, ABISELECT(13,9), "S10180C136.s10180c136f3");
  }
}
static Arrange_To_Call_Me vS10180C136(Test_S10180C136, "S10180C136", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S10180C136 = {  "S10180C136", // 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  S10180C140  {
  void *s10180c140f0[2];
  ::S10180C13 s10180c140f1;
  ::S10180C132 s10180c140f2;
  int s10180c140f3[2];
  void  mf10180c140(); // _ZN10S10180C14011mf10180c140Ev
};
//SIG(-1 S10180C140) C1{ m Fp[2] FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi[2] FC5{ m}} Fi[2]}


void  S10180C140 ::mf10180c140(){}

static void Test_S10180C140()
{
  {
    init_simple_test("S10180C140");
    S10180C140 lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S10180C140)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C140)");
    check_field_offset(lv, s10180c140f0, 0, "S10180C140.s10180c140f0");
    check_field_offset(lv, s10180c140f1, ABISELECT(16,8), "S10180C140.s10180c140f1");
    check_field_offset(lv, s10180c140f2, ABISELECT(32,20), "S10180C140.s10180c140f2");
    check_field_offset(lv, s10180c140f3, ABISELECT(56,36), "S10180C140.s10180c140f3");
  }
}
static Arrange_To_Call_Me vS10180C140(Test_S10180C140, "S10180C140", ABISELECT(64,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C139  : S10180C17 {
  ::S10180C140 s10180c139f0;
  virtual  ~S10180C139(); // _ZN10S10180C139D1Ev
  virtual void  v249(); // _ZN10S10180C1394v249Ev
  virtual void  v250(); // _ZN10S10180C1394v250Ev
  virtual void  v251(); // _ZN10S10180C1394v251Ev
  virtual void  v252(); // _ZN10S10180C1394v252Ev
  S10180C139(); // tgen
};
//SIG(-1 S10180C139) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 v2 v3 v4 FC6{ m Fp[2] FC7{ m Fp Fi FC4} FC8{ m Fp Fi[2] FC9{ m}} Fi[2]}}


 S10180C139 ::~S10180C139(){ note_dtor("S10180C139", this);}
void  S10180C139 ::v249(){vfunc_called(this, "_ZN10S10180C1394v249Ev");}
void  S10180C139 ::v250(){vfunc_called(this, "_ZN10S10180C1394v250Ev");}
void  S10180C139 ::v251(){vfunc_called(this, "_ZN10S10180C1394v251Ev");}
void  S10180C139 ::v252(){vfunc_called(this, "_ZN10S10180C1394v252Ev");}
S10180C139 ::S10180C139(){ note_ctor("S10180C139", this);} // tgen

static void Test_S10180C139()
{
  extern Class_Descriptor cd_S10180C139;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S10180C139, buf);
    S10180C139 *dp, &lv = *(dp=new (buf) S10180C139());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S10180C139)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C139)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C139");
    check_field_offset(lv, s10180c139f0, ABISELECT(48,32), "S10180C139.s10180c139f0");
    test_class_info(&lv, &cd_S10180C139);
    dp->~S10180C139();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C139(Test_S10180C139, "S10180C139", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN10S10180C139C1Ev();
extern void _ZN10S10180C139D1Ev();
Name_Map name_map_S10180C139[] = {
  NSPAIR(_ZN10S10180C139C1Ev),
  NSPAIR(_ZN10S10180C139D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10180C139[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C139[];
extern void _ZN10S10180C139D1Ev();
extern void _ZN10S10180C139D0Ev();
extern void _ZN10S10180C1394v249Ev();
extern void _ZN10S10180C1394v250Ev();
extern void _ZN10S10180C1394v251Ev();
extern void _ZN10S10180C1394v252Ev();
static  VTBL_ENTRY vtc_S10180C139[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C139[0]),
  (VTBL_ENTRY)&_ZN10S10180C139D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C139D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1394v249Ev,
  (VTBL_ENTRY)&_ZN10S10180C1394v250Ev,
  (VTBL_ENTRY)&_ZN10S10180C1394v251Ev,
  (VTBL_ENTRY)&_ZN10S10180C1394v252Ev,
};
extern VTBL_ENTRY _ZTI10S10180C139[];
extern  VTBL_ENTRY _ZTV10S10180C139[];
Class_Descriptor cd_S10180C139 = {  "S10180C139", // class name
  bases_S10180C139, 1,
  &(vtc_S10180C139[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI10S10180C139),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C139),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  S10180C135  : S10180C2 {
  void *s10180c135f0[2];
  ::S10180C136 s10180c135f1;
  ::S10180C139 s10180c135f2;
  virtual  ~S10180C135(); // _ZN10S10180C135D1Ev
  virtual void  v248(); // _ZN10S10180C1354v248Ev
  S10180C135(); // tgen
};
//SIG(-1 S10180C135) C1{ BC2{ vd v2} vd v1 Fp[2] FC3{ m Fp Fi FC4{ m} FC5{ m}} FC6{ BC7{ vd m FC8{ m Fp Fi FC9{ m} FC10{ m}} FC8 Fc} vd v3 v4 v5 v6 FC11{ m Fp[2] FC12{ m Fp Fi FC9} FC13{ m Fp Fi[2] FC4} Fi[2]}}}


 S10180C135 ::~S10180C135(){ note_dtor("S10180C135", this);}
void  S10180C135 ::v248(){vfunc_called(this, "_ZN10S10180C1354v248Ev");}
S10180C135 ::S10180C135(){ note_ctor("S10180C135", this);} // tgen

static void Test_S10180C135()
{
  extern Class_Descriptor cd_S10180C135;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,26)];
    init_test(&cd_S10180C135, buf);
    S10180C135 *dp, &lv = *(dp=new (buf) S10180C135());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,100), "sizeof(S10180C135)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C135)");
    check_base_class_offset(lv, (S10180C2*), 0, "S10180C135");
    check_field_offset(lv, s10180c135f0, ABISELECT(8,4), "S10180C135.s10180c135f0");
    check_field_offset(lv, s10180c135f1, ABISELECT(24,12), "S10180C135.s10180c135f1");
    check_field_offset(lv, s10180c135f2, ABISELECT(40,24), "S10180C135.s10180c135f2");
    test_class_info(&lv, &cd_S10180C135);
    dp->~S10180C135();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C135(Test_S10180C135, "S10180C135", ABISELECT(152,100));

#else // __cplusplus

extern void _ZN10S10180C135C1Ev();
extern void _ZN10S10180C135D1Ev();
Name_Map name_map_S10180C135[] = {
  NSPAIR(_ZN10S10180C135C1Ev),
  NSPAIR(_ZN10S10180C135D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
static Base_Class bases_S10180C135[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C135[];
extern void _ZN10S10180C135D1Ev();
extern void _ZN10S10180C135D0Ev();
extern void _ZN8S10180C22v7Ev();
extern void _ZN10S10180C1354v248Ev();
static  VTBL_ENTRY vtc_S10180C135[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C135[0]),
  (VTBL_ENTRY)&_ZN10S10180C135D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C135D0Ev,
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
  (VTBL_ENTRY)&_ZN10S10180C1354v248Ev,
};
extern VTBL_ENTRY _ZTI10S10180C135[];
extern  VTBL_ENTRY _ZTV10S10180C135[];
Class_Descriptor cd_S10180C135 = {  "S10180C135", // class name
  bases_S10180C135, 1,
  &(vtc_S10180C135[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,100), // object size
  NSPAIRA(_ZTI10S10180C135),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C135),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  S10180C147  {
  ::S10180C93 s10180c147f0;
  void  mf10180c147(); // _ZN10S10180C14711mf10180c147Ev
};
//SIG(-1 S10180C147) C1{ m FC2{ m FL}}


void  S10180C147 ::mf10180c147(){}

static void Test_S10180C147()
{
  {
    init_simple_test("S10180C147");
    S10180C147 lv;
    check2(sizeof(lv), 8, "sizeof(S10180C147)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C147)");
    check_field_offset(lv, s10180c147f0, 0, "S10180C147.s10180c147f0");
  }
}
static Arrange_To_Call_Me vS10180C147(Test_S10180C147, "S10180C147", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C146  {
  ::S10180C73 s10180c146f0;
  ::S10180C73 s10180c146f1;
  ::S10180C147 s10180c146f2;
  ::S10180C147 s10180c146f3;
  ::S10180C73 s10180c146f4;
  ::S10180C73 s10180c146f5;
  void  mf10180c146(); // _ZN10S10180C14611mf10180c146Ev
};
//SIG(-1 S10180C146) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC4{ m FC5{ m FL}} FC4 FC2 FC2}


void  S10180C146 ::mf10180c146(){}

static void Test_S10180C146()
{
  {
    init_simple_test("S10180C146");
    S10180C146 lv;
    check2(sizeof(lv), 80, "sizeof(S10180C146)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C146)");
    check_field_offset(lv, s10180c146f0, 0, "S10180C146.s10180c146f0");
    check_field_offset(lv, s10180c146f1, 16, "S10180C146.s10180c146f1");
    check_field_offset(lv, s10180c146f2, 32, "S10180C146.s10180c146f2");
    check_field_offset(lv, s10180c146f3, 40, "S10180C146.s10180c146f3");
    check_field_offset(lv, s10180c146f4, 48, "S10180C146.s10180c146f4");
    check_field_offset(lv, s10180c146f5, 64, "S10180C146.s10180c146f5");
  }
}
static Arrange_To_Call_Me vS10180C146(Test_S10180C146, "S10180C146", 80);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C145  : S10180C17 {
  void *s10180c145f0[2];
  ::S10180C111 s10180c145f1;
  char s10180c145f2[2];
  void *s10180c145f3;
  ::S10180C146 s10180c145f4;
  ::S10180C12 s10180c145f5;
  void *s10180c145f6[4];
  ::S10180C31 s10180c145f7;
  virtual  ~S10180C145(); // _ZN10S10180C145D1Ev
  virtual void  v262(); // _ZN10S10180C1454v262Ev
  virtual void  v263(); // _ZN10S10180C1454v263Ev
  virtual void  v264(); // _ZN10S10180C1454v264Ev
  virtual void  v265(); // _ZN10S10180C1454v265Ev
  virtual void  v266(); // _ZN10S10180C1454v266Ev
  virtual void  v267(); // _ZN10S10180C1454v267Ev
  virtual void  v268(); // _ZN10S10180C1454v268Ev
  virtual void  v269(); // _ZN10S10180C1454v269Ev
  virtual void  v270(); // _ZN10S10180C1454v270Ev
  virtual void  v271(); // _ZN10S10180C1454v271Ev
  virtual void  v272(); // _ZN10S10180C1454v272Ev
  virtual void  v273(); // _ZN10S10180C1454v273Ev
  virtual void  v274(); // _ZN10S10180C1454v274Ev
  virtual void  v275(); // _ZN10S10180C1454v275Ev
  virtual void  v276(); // _ZN10S10180C1454v276Ev
  virtual void  v277(); // _ZN10S10180C1454v277Ev
  virtual void  v278(); // _ZN10S10180C1454v278Ev
  virtual void  v279(); // _ZN10S10180C1454v279Ev
  virtual void  v280(); // _ZN10S10180C1454v280Ev
  virtual void  v281(); // _ZN10S10180C1454v281Ev
  S10180C145(); // tgen
};
//SIG(-1 S10180C145) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp[2] FC6{ m Fp} Fc[2] Fp FC7{ m FC8{ m FC9{ m FL[2]}} FC8 FC10{ m FC11{ m FL}} FC10 FC8 FC8} FC12{ m FC13{ m Fp Fi FC4} Fi} Fp[4] FC14{ m FC15{ m Fp Fi[2] FC5} Fp[2]}}


 S10180C145 ::~S10180C145(){ note_dtor("S10180C145", this);}
void  S10180C145 ::v262(){vfunc_called(this, "_ZN10S10180C1454v262Ev");}
void  S10180C145 ::v263(){vfunc_called(this, "_ZN10S10180C1454v263Ev");}
void  S10180C145 ::v264(){vfunc_called(this, "_ZN10S10180C1454v264Ev");}
void  S10180C145 ::v265(){vfunc_called(this, "_ZN10S10180C1454v265Ev");}
void  S10180C145 ::v266(){vfunc_called(this, "_ZN10S10180C1454v266Ev");}
void  S10180C145 ::v267(){vfunc_called(this, "_ZN10S10180C1454v267Ev");}
void  S10180C145 ::v268(){vfunc_called(this, "_ZN10S10180C1454v268Ev");}
void  S10180C145 ::v269(){vfunc_called(this, "_ZN10S10180C1454v269Ev");}
void  S10180C145 ::v270(){vfunc_called(this, "_ZN10S10180C1454v270Ev");}
void  S10180C145 ::v271(){vfunc_called(this, "_ZN10S10180C1454v271Ev");}
void  S10180C145 ::v272(){vfunc_called(this, "_ZN10S10180C1454v272Ev");}
void  S10180C145 ::v273(){vfunc_called(this, "_ZN10S10180C1454v273Ev");}
void  S10180C145 ::v274(){vfunc_called(this, "_ZN10S10180C1454v274Ev");}
void  S10180C145 ::v275(){vfunc_called(this, "_ZN10S10180C1454v275Ev");}
void  S10180C145 ::v276(){vfunc_called(this, "_ZN10S10180C1454v276Ev");}
void  S10180C145 ::v277(){vfunc_called(this, "_ZN10S10180C1454v277Ev");}
void  S10180C145 ::v278(){vfunc_called(this, "_ZN10S10180C1454v278Ev");}
void  S10180C145 ::v279(){vfunc_called(this, "_ZN10S10180C1454v279Ev");}
void  S10180C145 ::v280(){vfunc_called(this, "_ZN10S10180C1454v280Ev");}
void  S10180C145 ::v281(){vfunc_called(this, "_ZN10S10180C1454v281Ev");}
S10180C145 ::S10180C145(){ note_ctor("S10180C145", this);} // tgen

static void Test_S10180C145()
{
  extern Class_Descriptor cd_S10180C145;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,48)];
    init_test(&cd_S10180C145, buf);
    S10180C145 *dp, &lv = *(dp=new (buf) S10180C145());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,188), "sizeof(S10180C145)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C145)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C145");
    check_field_offset(lv, s10180c145f0, ABISELECT(48,32), "S10180C145.s10180c145f0");
    check_field_offset(lv, s10180c145f1, ABISELECT(64,40), "S10180C145.s10180c145f1");
    check_field_offset(lv, s10180c145f2, ABISELECT(72,44), "S10180C145.s10180c145f2");
    check_field_offset(lv, s10180c145f3, ABISELECT(80,48), "S10180C145.s10180c145f3");
    check_field_offset(lv, s10180c145f4, ABISELECT(88,52), "S10180C145.s10180c145f4");
    check_field_offset(lv, s10180c145f5, ABISELECT(168,132), "S10180C145.s10180c145f5");
    check_field_offset(lv, s10180c145f6, ABISELECT(192,148), "S10180C145.s10180c145f6");
    check_field_offset(lv, s10180c145f7, ABISELECT(224,164), "S10180C145.s10180c145f7");
    test_class_info(&lv, &cd_S10180C145);
    dp->~S10180C145();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C145(Test_S10180C145, "S10180C145", ABISELECT(264,188));

#else // __cplusplus

extern void _ZN10S10180C145C1Ev();
extern void _ZN10S10180C145D1Ev();
Name_Map name_map_S10180C145[] = {
  NSPAIR(_ZN10S10180C145C1Ev),
  NSPAIR(_ZN10S10180C145D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10180C145[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C145[];
extern void _ZN10S10180C145D1Ev();
extern void _ZN10S10180C145D0Ev();
extern void _ZN10S10180C1454v262Ev();
extern void _ZN10S10180C1454v263Ev();
extern void _ZN10S10180C1454v264Ev();
extern void _ZN10S10180C1454v265Ev();
extern void _ZN10S10180C1454v266Ev();
extern void _ZN10S10180C1454v267Ev();
extern void _ZN10S10180C1454v268Ev();
extern void _ZN10S10180C1454v269Ev();
extern void _ZN10S10180C1454v270Ev();
extern void _ZN10S10180C1454v271Ev();
extern void _ZN10S10180C1454v272Ev();
extern void _ZN10S10180C1454v273Ev();
extern void _ZN10S10180C1454v274Ev();
extern void _ZN10S10180C1454v275Ev();
extern void _ZN10S10180C1454v276Ev();
extern void _ZN10S10180C1454v277Ev();
extern void _ZN10S10180C1454v278Ev();
extern void _ZN10S10180C1454v279Ev();
extern void _ZN10S10180C1454v280Ev();
extern void _ZN10S10180C1454v281Ev();
static  VTBL_ENTRY vtc_S10180C145[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C145[0]),
  (VTBL_ENTRY)&_ZN10S10180C145D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C145D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v281Ev,
};
extern VTBL_ENTRY _ZTI10S10180C145[];
extern  VTBL_ENTRY _ZTV10S10180C145[];
Class_Descriptor cd_S10180C145 = {  "S10180C145", // class name
  bases_S10180C145, 1,
  &(vtc_S10180C145[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,188), // object size
  NSPAIRA(_ZTI10S10180C145),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C145),24, //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  S10180C150  {
  void *s10180c150f0[2];
  void  mf10180c150(); // _ZN10S10180C15011mf10180c150Ev
};
//SIG(-1 S10180C150) C1{ m Fp[2]}


void  S10180C150 ::mf10180c150(){}

static void Test_S10180C150()
{
  {
    init_simple_test("S10180C150");
    S10180C150 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10180C150)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C150)");
    check_field_offset(lv, s10180c150f0, 0, "S10180C150.s10180c150f0");
  }
}
static Arrange_To_Call_Me vS10180C150(Test_S10180C150, "S10180C150", ABISELECT(16,8));

#else // __cplusplus

Class_Descriptor cd_S10180C150 = {  "S10180C150", // 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  S10180C149  {
  int s10180c149f0[2];
  ::S10180C13 s10180c149f1;
  ::S10180C13 s10180c149f2;
  ::S10180C13 s10180c149f3;
  ::S10180C13 s10180c149f4;
  ::S10180C150 s10180c149f5;
  __tsi64 s10180c149f6[2];
  void  mf10180c149(); // _ZN10S10180C14911mf10180c149Ev
  virtual  ~S10180C149(); // _ZN10S10180C149D1Ev
  S10180C149(); // tgen
};
//SIG(-1 S10180C149) C1{ vd m Fi[2] FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 FC4{ m Fp[2]} FL[2]}


void  S10180C149 ::mf10180c149(){}
 S10180C149 ::~S10180C149(){ note_dtor("S10180C149", this);}
S10180C149 ::S10180C149(){ note_ctor("S10180C149", this);} // tgen

static void Test_S10180C149()
{
  extern Class_Descriptor cd_S10180C149;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,22)];
    init_test(&cd_S10180C149, buf);
    S10180C149 *dp, &lv = *(dp=new (buf) S10180C149());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S10180C149)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C149)");
    check_field_offset(lv, s10180c149f0, ABISELECT(8,4), "S10180C149.s10180c149f0");
    check_field_offset(lv, s10180c149f1, ABISELECT(16,12), "S10180C149.s10180c149f1");
    check_field_offset(lv, s10180c149f2, ABISELECT(32,24), "S10180C149.s10180c149f2");
    check_field_offset(lv, s10180c149f3, ABISELECT(48,36), "S10180C149.s10180c149f3");
    check_field_offset(lv, s10180c149f4, ABISELECT(64,48), "S10180C149.s10180c149f4");
    check_field_offset(lv, s10180c149f5, ABISELECT(80,60), "S10180C149.s10180c149f5");
    check_field_offset(lv, s10180c149f6, ABISELECT(96,68), "S10180C149.s10180c149f6");
    test_class_info(&lv, &cd_S10180C149);
    dp->~S10180C149();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C149(Test_S10180C149, "S10180C149", ABISELECT(112,84));

#else // __cplusplus

extern void _ZN10S10180C149C1Ev();
extern void _ZN10S10180C149D1Ev();
Name_Map name_map_S10180C149[] = {
  NSPAIR(_ZN10S10180C149C1Ev),
  NSPAIR(_ZN10S10180C149D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S10180C149[];
extern void _ZN10S10180C149D1Ev();
extern void _ZN10S10180C149D0Ev();
static  VTBL_ENTRY vtc_S10180C149[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C149[0]),
  (VTBL_ENTRY)&_ZN10S10180C149D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C149D0Ev,
};
extern VTBL_ENTRY _ZTI10S10180C149[];
extern  VTBL_ENTRY _ZTV10S10180C149[];
Class_Descriptor cd_S10180C149 = {  "S10180C149", // class name
  0,0,//no base classes
  &(vtc_S10180C149[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI10S10180C149),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S10180C149),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  S10180C144  : S10180C145 {
  ::S10180C149 s10180c144f0;
  void *s10180c144f1;
  virtual  ~S10180C144(); // _ZN10S10180C144D1Ev
  virtual void  v282(); // _ZN10S10180C1444v282Ev
  virtual void  v283(); // _ZN10S10180C1444v283Ev
  virtual void  v284(); // _ZN10S10180C1444v284Ev
  virtual void  v285(); // _ZN10S10180C1444v285Ev
  virtual void  v286(); // _ZN10S10180C1444v286Ev
  virtual void  v287(); // _ZN10S10180C1444v287Ev
  virtual void  v288(); // _ZN10S10180C1444v288Ev
  virtual void  v289(); // _ZN10S10180C1444v289Ev
  virtual void  v290(); // _ZN10S10180C1444v290Ev
  virtual void  v291(); // _ZN10S10180C1444v291Ev
  virtual void  v292(); // _ZN10S10180C1444v292Ev
  virtual void  v293(); // _ZN10S10180C1444v293Ev
  virtual void  v294(); // _ZN10S10180C1444v294Ev
  virtual void  v295(); // _ZN10S10180C1444v295Ev
  virtual void  v296(); // _ZN10S10180C1444v296Ev
  virtual void  v297(); // _ZN10S10180C1444v297Ev
  virtual void  v298(); // _ZN10S10180C1444v298Ev
  virtual void  v299(); // _ZN10S10180C1444v299Ev
  virtual void  v300(); // _ZN10S10180C1444v300Ev
  S10180C144(); // tgen
};
//SIG(-1 S10180C144) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 Fp[2] FC7{ m Fp} Fc[2] Fp FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC11{ m FC12{ m FL}} FC11 FC9 FC9} FC13{ m FC14{ m Fp Fi FC5} Fi} Fp[4] FC15{ m FC16{ m Fp Fi[2] FC6} Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC17{ vd m Fi[2] FC14 FC14 FC14 FC14 FC18{ m Fp[2]} FL[2]} Fp}


 S10180C144 ::~S10180C144(){ note_dtor("S10180C144", this);}
void  S10180C144 ::v282(){vfunc_called(this, "_ZN10S10180C1444v282Ev");}
void  S10180C144 ::v283(){vfunc_called(this, "_ZN10S10180C1444v283Ev");}
void  S10180C144 ::v284(){vfunc_called(this, "_ZN10S10180C1444v284Ev");}
void  S10180C144 ::v285(){vfunc_called(this, "_ZN10S10180C1444v285Ev");}
void  S10180C144 ::v286(){vfunc_called(this, "_ZN10S10180C1444v286Ev");}
void  S10180C144 ::v287(){vfunc_called(this, "_ZN10S10180C1444v287Ev");}
void  S10180C144 ::v288(){vfunc_called(this, "_ZN10S10180C1444v288Ev");}
void  S10180C144 ::v289(){vfunc_called(this, "_ZN10S10180C1444v289Ev");}
void  S10180C144 ::v290(){vfunc_called(this, "_ZN10S10180C1444v290Ev");}
void  S10180C144 ::v291(){vfunc_called(this, "_ZN10S10180C1444v291Ev");}
void  S10180C144 ::v292(){vfunc_called(this, "_ZN10S10180C1444v292Ev");}
void  S10180C144 ::v293(){vfunc_called(this, "_ZN10S10180C1444v293Ev");}
void  S10180C144 ::v294(){vfunc_called(this, "_ZN10S10180C1444v294Ev");}
void  S10180C144 ::v295(){vfunc_called(this, "_ZN10S10180C1444v295Ev");}
void  S10180C144 ::v296(){vfunc_called(this, "_ZN10S10180C1444v296Ev");}
void  S10180C144 ::v297(){vfunc_called(this, "_ZN10S10180C1444v297Ev");}
void  S10180C144 ::v298(){vfunc_called(this, "_ZN10S10180C1444v298Ev");}
void  S10180C144 ::v299(){vfunc_called(this, "_ZN10S10180C1444v299Ev");}
void  S10180C144 ::v300(){vfunc_called(this, "_ZN10S10180C1444v300Ev");}
S10180C144 ::S10180C144(){ note_ctor("S10180C144", this);} // tgen

static void Test_S10180C144()
{
  extern Class_Descriptor cd_S10180C144;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,70)];
    init_test(&cd_S10180C144, buf);
    S10180C144 *dp, &lv = *(dp=new (buf) S10180C144());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S10180C144)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C144)");
    check_base_class_offset(lv, (S10180C17*)(S10180C145*), 0, "S10180C144");
    check_base_class_offset(lv, (S10180C145*), 0, "S10180C144");
    check_field_offset(lv, s10180c144f0, ABISELECT(264,188), "S10180C144.s10180c144f0");
    check_field_offset(lv, s10180c144f1, ABISELECT(376,272), "S10180C144.s10180c144f1");
    test_class_info(&lv, &cd_S10180C144);
    dp->~S10180C144();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C144(Test_S10180C144, "S10180C144", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN10S10180C144C1Ev();
extern void _ZN10S10180C144D1Ev();
Name_Map name_map_S10180C144[] = {
  NSPAIR(_ZN10S10180C144C1Ev),
  NSPAIR(_ZN10S10180C144D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C145;
extern VTBL_ENTRY _ZTI10S10180C145[];
extern  VTBL_ENTRY _ZTV10S10180C145[];
static Base_Class bases_S10180C144[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C144[];
extern void _ZN10S10180C144D1Ev();
extern void _ZN10S10180C144D0Ev();
extern void _ZN10S10180C1454v262Ev();
extern void _ZN10S10180C1454v263Ev();
extern void _ZN10S10180C1454v264Ev();
extern void _ZN10S10180C1454v265Ev();
extern void _ZN10S10180C1454v266Ev();
extern void _ZN10S10180C1454v267Ev();
extern void _ZN10S10180C1454v268Ev();
extern void _ZN10S10180C1454v269Ev();
extern void _ZN10S10180C1454v270Ev();
extern void _ZN10S10180C1454v271Ev();
extern void _ZN10S10180C1454v272Ev();
extern void _ZN10S10180C1454v273Ev();
extern void _ZN10S10180C1454v274Ev();
extern void _ZN10S10180C1454v275Ev();
extern void _ZN10S10180C1454v276Ev();
extern void _ZN10S10180C1454v277Ev();
extern void _ZN10S10180C1454v278Ev();
extern void _ZN10S10180C1454v279Ev();
extern void _ZN10S10180C1454v280Ev();
extern void _ZN10S10180C1454v281Ev();
extern void _ZN10S10180C1444v282Ev();
extern void _ZN10S10180C1444v283Ev();
extern void _ZN10S10180C1444v284Ev();
extern void _ZN10S10180C1444v285Ev();
extern void _ZN10S10180C1444v286Ev();
extern void _ZN10S10180C1444v287Ev();
extern void _ZN10S10180C1444v288Ev();
extern void _ZN10S10180C1444v289Ev();
extern void _ZN10S10180C1444v290Ev();
extern void _ZN10S10180C1444v291Ev();
extern void _ZN10S10180C1444v292Ev();
extern void _ZN10S10180C1444v293Ev();
extern void _ZN10S10180C1444v294Ev();
extern void _ZN10S10180C1444v295Ev();
extern void _ZN10S10180C1444v296Ev();
extern void _ZN10S10180C1444v297Ev();
extern void _ZN10S10180C1444v298Ev();
extern void _ZN10S10180C1444v299Ev();
extern void _ZN10S10180C1444v300Ev();
static  VTBL_ENTRY vtc_S10180C144[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C144[0]),
  (VTBL_ENTRY)&_ZN10S10180C144D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C144D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v282Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v283Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v284Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v285Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v286Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v287Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v288Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v289Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v290Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v291Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v292Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v293Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v294Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v295Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v296Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v297Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v298Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v299Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v300Ev,
};
extern VTBL_ENTRY _ZTI10S10180C144[];
extern  VTBL_ENTRY _ZTV10S10180C144[];
Class_Descriptor cd_S10180C144 = {  "S10180C144", // class name
  bases_S10180C144, 2,
  &(vtc_S10180C144[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI10S10180C144),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C144),43, //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  S10180C143  : S10180C144 {
  int s10180c143f0[3];
  virtual  ~S10180C143(); // _ZN10S10180C143D1Ev
  virtual void  v253(); // _ZN10S10180C1434v253Ev
  virtual void  v254(); // _ZN10S10180C1434v254Ev
  virtual void  v255(); // _ZN10S10180C1434v255Ev
  virtual void  v256(); // _ZN10S10180C1434v256Ev
  virtual void  v257(); // _ZN10S10180C1434v257Ev
  virtual void  v258(); // _ZN10S10180C1434v258Ev
  virtual void  v259(); // _ZN10S10180C1434v259Ev
  virtual void  v260(); // _ZN10S10180C1434v260Ev
  virtual void  v261(); // _ZN10S10180C1434v261Ev
  S10180C143(); // tgen
};
//SIG(-1 S10180C143) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 Fc} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 Fp[2] FC8{ m Fp} Fc[2] Fp FC9{ m FC10{ m FC11{ m FL[2]}} FC10 FC12{ m FC13{ m FL}} FC12 FC10 FC10} FC14{ m FC15{ m Fp Fi FC6} Fi} Fp[4] FC16{ m FC17{ m Fp Fi[2] FC7} Fp[2]}} vd v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 FC18{ vd m Fi[2] FC15 FC15 FC15 FC15 FC19{ m Fp[2]} FL[2]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi[3]}


 S10180C143 ::~S10180C143(){ note_dtor("S10180C143", this);}
void  S10180C143 ::v253(){vfunc_called(this, "_ZN10S10180C1434v253Ev");}
void  S10180C143 ::v254(){vfunc_called(this, "_ZN10S10180C1434v254Ev");}
void  S10180C143 ::v255(){vfunc_called(this, "_ZN10S10180C1434v255Ev");}
void  S10180C143 ::v256(){vfunc_called(this, "_ZN10S10180C1434v256Ev");}
void  S10180C143 ::v257(){vfunc_called(this, "_ZN10S10180C1434v257Ev");}
void  S10180C143 ::v258(){vfunc_called(this, "_ZN10S10180C1434v258Ev");}
void  S10180C143 ::v259(){vfunc_called(this, "_ZN10S10180C1434v259Ev");}
void  S10180C143 ::v260(){vfunc_called(this, "_ZN10S10180C1434v260Ev");}
void  S10180C143 ::v261(){vfunc_called(this, "_ZN10S10180C1434v261Ev");}
S10180C143 ::S10180C143(){ note_ctor("S10180C143", this);} // tgen

static void Test_S10180C143()
{
  extern Class_Descriptor cd_S10180C143;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,73)];
    init_test(&cd_S10180C143, buf);
    S10180C143 *dp, &lv = *(dp=new (buf) S10180C143());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S10180C143)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C143)");
    check_base_class_offset(lv, (S10180C17*)(S10180C145*)(S10180C144*), 0, "S10180C143");
    check_base_class_offset(lv, (S10180C145*)(S10180C144*), 0, "S10180C143");
    check_base_class_offset(lv, (S10180C144*), 0, "S10180C143");
    check_field_offset(lv, s10180c143f0, ABISELECT(384,276), "S10180C143.s10180c143f0");
    test_class_info(&lv, &cd_S10180C143);
    dp->~S10180C143();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C143(Test_S10180C143, "S10180C143", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN10S10180C143C1Ev();
extern void _ZN10S10180C143D1Ev();
Name_Map name_map_S10180C143[] = {
  NSPAIR(_ZN10S10180C143C1Ev),
  NSPAIR(_ZN10S10180C143D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C145;
extern VTBL_ENTRY _ZTI10S10180C145[];
extern  VTBL_ENTRY _ZTV10S10180C145[];
extern Class_Descriptor cd_S10180C144;
extern VTBL_ENTRY _ZTI10S10180C144[];
extern  VTBL_ENTRY _ZTV10S10180C144[];
static Base_Class bases_S10180C143[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C144,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C143[];
extern void _ZN10S10180C143D1Ev();
extern void _ZN10S10180C143D0Ev();
extern void _ZN10S10180C1454v262Ev();
extern void _ZN10S10180C1454v263Ev();
extern void _ZN10S10180C1454v264Ev();
extern void _ZN10S10180C1454v265Ev();
extern void _ZN10S10180C1454v266Ev();
extern void _ZN10S10180C1454v267Ev();
extern void _ZN10S10180C1454v268Ev();
extern void _ZN10S10180C1454v269Ev();
extern void _ZN10S10180C1454v270Ev();
extern void _ZN10S10180C1454v271Ev();
extern void _ZN10S10180C1454v272Ev();
extern void _ZN10S10180C1454v273Ev();
extern void _ZN10S10180C1454v274Ev();
extern void _ZN10S10180C1454v275Ev();
extern void _ZN10S10180C1454v276Ev();
extern void _ZN10S10180C1454v277Ev();
extern void _ZN10S10180C1454v278Ev();
extern void _ZN10S10180C1454v279Ev();
extern void _ZN10S10180C1454v280Ev();
extern void _ZN10S10180C1454v281Ev();
extern void _ZN10S10180C1444v282Ev();
extern void _ZN10S10180C1444v283Ev();
extern void _ZN10S10180C1444v284Ev();
extern void _ZN10S10180C1444v285Ev();
extern void _ZN10S10180C1444v286Ev();
extern void _ZN10S10180C1444v287Ev();
extern void _ZN10S10180C1444v288Ev();
extern void _ZN10S10180C1444v289Ev();
extern void _ZN10S10180C1444v290Ev();
extern void _ZN10S10180C1444v291Ev();
extern void _ZN10S10180C1444v292Ev();
extern void _ZN10S10180C1444v293Ev();
extern void _ZN10S10180C1444v294Ev();
extern void _ZN10S10180C1444v295Ev();
extern void _ZN10S10180C1444v296Ev();
extern void _ZN10S10180C1444v297Ev();
extern void _ZN10S10180C1444v298Ev();
extern void _ZN10S10180C1444v299Ev();
extern void _ZN10S10180C1444v300Ev();
extern void _ZN10S10180C1434v253Ev();
extern void _ZN10S10180C1434v254Ev();
extern void _ZN10S10180C1434v255Ev();
extern void _ZN10S10180C1434v256Ev();
extern void _ZN10S10180C1434v257Ev();
extern void _ZN10S10180C1434v258Ev();
extern void _ZN10S10180C1434v259Ev();
extern void _ZN10S10180C1434v260Ev();
extern void _ZN10S10180C1434v261Ev();
static  VTBL_ENTRY vtc_S10180C143[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C143[0]),
  (VTBL_ENTRY)&_ZN10S10180C143D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C143D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v282Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v283Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v284Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v285Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v286Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v287Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v288Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v289Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v290Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v291Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v292Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v293Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v294Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v295Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v296Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v297Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v298Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v299Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v300Ev,
  (VTBL_ENTRY)&_ZN10S10180C1434v253Ev,
  (VTBL_ENTRY)&_ZN10S10180C1434v254Ev,
  (VTBL_ENTRY)&_ZN10S10180C1434v255Ev,
  (VTBL_ENTRY)&_ZN10S10180C1434v256Ev,
  (VTBL_ENTRY)&_ZN10S10180C1434v257Ev,
  (VTBL_ENTRY)&_ZN10S10180C1434v258Ev,
  (VTBL_ENTRY)&_ZN10S10180C1434v259Ev,
  (VTBL_ENTRY)&_ZN10S10180C1434v260Ev,
  (VTBL_ENTRY)&_ZN10S10180C1434v261Ev,
};
extern VTBL_ENTRY _ZTI10S10180C143[];
extern  VTBL_ENTRY _ZTV10S10180C143[];
Class_Descriptor cd_S10180C143 = {  "S10180C143", // class name
  bases_S10180C143, 3,
  &(vtc_S10180C143[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI10S10180C143),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C143),52, //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  S10180C151  : S10180C145 {
  ::S10180C149 s10180c151f0;
  void *s10180c151f1;
  virtual  ~S10180C151(); // _ZN10S10180C151D1Ev
  virtual void  v301(); // _ZN10S10180C1514v301Ev
  virtual void  v302(); // _ZN10S10180C1514v302Ev
  virtual void  v303(); // _ZN10S10180C1514v303Ev
  virtual void  v304(); // _ZN10S10180C1514v304Ev
  virtual void  v305(); // _ZN10S10180C1514v305Ev
  virtual void  v306(); // _ZN10S10180C1514v306Ev
  virtual void  v307(); // _ZN10S10180C1514v307Ev
  virtual void  v308(); // _ZN10S10180C1514v308Ev
  virtual void  v309(); // _ZN10S10180C1514v309Ev
  virtual void  v310(); // _ZN10S10180C1514v310Ev
  virtual void  v311(); // _ZN10S10180C1514v311Ev
  virtual void  v312(); // _ZN10S10180C1514v312Ev
  virtual void  v313(); // _ZN10S10180C1514v313Ev
  virtual void  v314(); // _ZN10S10180C1514v314Ev
  virtual void  v315(); // _ZN10S10180C1514v315Ev
  virtual void  v316(); // _ZN10S10180C1514v316Ev
  virtual void  v317(); // _ZN10S10180C1514v317Ev
  virtual void  v318(); // _ZN10S10180C1514v318Ev
  virtual void  v319(); // _ZN10S10180C1514v319Ev
  S10180C151(); // tgen
};
//SIG(-1 S10180C151) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 Fp[2] FC7{ m Fp} Fc[2] Fp FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC11{ m FC12{ m FL}} FC11 FC9 FC9} FC13{ m FC14{ m Fp Fi FC5} Fi} Fp[4] FC15{ m FC16{ m Fp Fi[2] FC6} Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC17{ vd m Fi[2] FC14 FC14 FC14 FC14 FC18{ m Fp[2]} FL[2]} Fp}


 S10180C151 ::~S10180C151(){ note_dtor("S10180C151", this);}
void  S10180C151 ::v301(){vfunc_called(this, "_ZN10S10180C1514v301Ev");}
void  S10180C151 ::v302(){vfunc_called(this, "_ZN10S10180C1514v302Ev");}
void  S10180C151 ::v303(){vfunc_called(this, "_ZN10S10180C1514v303Ev");}
void  S10180C151 ::v304(){vfunc_called(this, "_ZN10S10180C1514v304Ev");}
void  S10180C151 ::v305(){vfunc_called(this, "_ZN10S10180C1514v305Ev");}
void  S10180C151 ::v306(){vfunc_called(this, "_ZN10S10180C1514v306Ev");}
void  S10180C151 ::v307(){vfunc_called(this, "_ZN10S10180C1514v307Ev");}
void  S10180C151 ::v308(){vfunc_called(this, "_ZN10S10180C1514v308Ev");}
void  S10180C151 ::v309(){vfunc_called(this, "_ZN10S10180C1514v309Ev");}
void  S10180C151 ::v310(){vfunc_called(this, "_ZN10S10180C1514v310Ev");}
void  S10180C151 ::v311(){vfunc_called(this, "_ZN10S10180C1514v311Ev");}
void  S10180C151 ::v312(){vfunc_called(this, "_ZN10S10180C1514v312Ev");}
void  S10180C151 ::v313(){vfunc_called(this, "_ZN10S10180C1514v313Ev");}
void  S10180C151 ::v314(){vfunc_called(this, "_ZN10S10180C1514v314Ev");}
void  S10180C151 ::v315(){vfunc_called(this, "_ZN10S10180C1514v315Ev");}
void  S10180C151 ::v316(){vfunc_called(this, "_ZN10S10180C1514v316Ev");}
void  S10180C151 ::v317(){vfunc_called(this, "_ZN10S10180C1514v317Ev");}
void  S10180C151 ::v318(){vfunc_called(this, "_ZN10S10180C1514v318Ev");}
void  S10180C151 ::v319(){vfunc_called(this, "_ZN10S10180C1514v319Ev");}
S10180C151 ::S10180C151(){ note_ctor("S10180C151", this);} // tgen

static void Test_S10180C151()
{
  extern Class_Descriptor cd_S10180C151;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,70)];
    init_test(&cd_S10180C151, buf);
    S10180C151 *dp, &lv = *(dp=new (buf) S10180C151());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S10180C151)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C151)");
    check_base_class_offset(lv, (S10180C17*)(S10180C145*), 0, "S10180C151");
    check_base_class_offset(lv, (S10180C145*), 0, "S10180C151");
    check_field_offset(lv, s10180c151f0, ABISELECT(264,188), "S10180C151.s10180c151f0");
    check_field_offset(lv, s10180c151f1, ABISELECT(376,272), "S10180C151.s10180c151f1");
    test_class_info(&lv, &cd_S10180C151);
    dp->~S10180C151();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C151(Test_S10180C151, "S10180C151", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN10S10180C151C1Ev();
extern void _ZN10S10180C151D1Ev();
Name_Map name_map_S10180C151[] = {
  NSPAIR(_ZN10S10180C151C1Ev),
  NSPAIR(_ZN10S10180C151D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C145;
extern VTBL_ENTRY _ZTI10S10180C145[];
extern  VTBL_ENTRY _ZTV10S10180C145[];
static Base_Class bases_S10180C151[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C151[];
extern void _ZN10S10180C151D1Ev();
extern void _ZN10S10180C151D0Ev();
extern void _ZN10S10180C1454v262Ev();
extern void _ZN10S10180C1454v263Ev();
extern void _ZN10S10180C1454v264Ev();
extern void _ZN10S10180C1454v265Ev();
extern void _ZN10S10180C1454v266Ev();
extern void _ZN10S10180C1454v267Ev();
extern void _ZN10S10180C1454v268Ev();
extern void _ZN10S10180C1454v269Ev();
extern void _ZN10S10180C1454v270Ev();
extern void _ZN10S10180C1454v271Ev();
extern void _ZN10S10180C1454v272Ev();
extern void _ZN10S10180C1454v273Ev();
extern void _ZN10S10180C1454v274Ev();
extern void _ZN10S10180C1454v275Ev();
extern void _ZN10S10180C1454v276Ev();
extern void _ZN10S10180C1454v277Ev();
extern void _ZN10S10180C1454v278Ev();
extern void _ZN10S10180C1454v279Ev();
extern void _ZN10S10180C1454v280Ev();
extern void _ZN10S10180C1454v281Ev();
extern void _ZN10S10180C1514v301Ev();
extern void _ZN10S10180C1514v302Ev();
extern void _ZN10S10180C1514v303Ev();
extern void _ZN10S10180C1514v304Ev();
extern void _ZN10S10180C1514v305Ev();
extern void _ZN10S10180C1514v306Ev();
extern void _ZN10S10180C1514v307Ev();
extern void _ZN10S10180C1514v308Ev();
extern void _ZN10S10180C1514v309Ev();
extern void _ZN10S10180C1514v310Ev();
extern void _ZN10S10180C1514v311Ev();
extern void _ZN10S10180C1514v312Ev();
extern void _ZN10S10180C1514v313Ev();
extern void _ZN10S10180C1514v314Ev();
extern void _ZN10S10180C1514v315Ev();
extern void _ZN10S10180C1514v316Ev();
extern void _ZN10S10180C1514v317Ev();
extern void _ZN10S10180C1514v318Ev();
extern void _ZN10S10180C1514v319Ev();
static  VTBL_ENTRY vtc_S10180C151[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C151[0]),
  (VTBL_ENTRY)&_ZN10S10180C151D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C151D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v301Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v302Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v303Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v304Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v305Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v306Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v307Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v308Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v309Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v310Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v311Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v312Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v313Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v314Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v315Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v316Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v317Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v318Ev,
  (VTBL_ENTRY)&_ZN10S10180C1514v319Ev,
};
extern VTBL_ENTRY _ZTI10S10180C151[];
extern  VTBL_ENTRY _ZTV10S10180C151[];
Class_Descriptor cd_S10180C151 = {  "S10180C151", // class name
  bases_S10180C151, 2,
  &(vtc_S10180C151[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI10S10180C151),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C151),43, //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  S10180C152  : S10180C144 {
  virtual  ~S10180C152(); // _ZN10S10180C152D1Ev
  virtual void  v320(); // _ZN10S10180C1524v320Ev
  virtual void  v321(); // _ZN10S10180C1524v321Ev
  S10180C152(); // tgen
};
//SIG(-1 S10180C152) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 Fc} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[2] FC8{ m Fp} Fc[2] Fp FC9{ m FC10{ m FC11{ m FL[2]}} FC10 FC12{ m FC13{ m FL}} FC12 FC10 FC10} FC14{ m FC15{ m Fp Fi FC6} Fi} Fp[4] FC16{ m FC17{ m Fp Fi[2] FC7} Fp[2]}} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 FC18{ vd m Fi[2] FC15 FC15 FC15 FC15 FC19{ m Fp[2]} FL[2]} Fp} vd v1 v2}


 S10180C152 ::~S10180C152(){ note_dtor("S10180C152", this);}
void  S10180C152 ::v320(){vfunc_called(this, "_ZN10S10180C1524v320Ev");}
void  S10180C152 ::v321(){vfunc_called(this, "_ZN10S10180C1524v321Ev");}
S10180C152 ::S10180C152(){ note_ctor("S10180C152", this);} // tgen

static void Test_S10180C152()
{
  extern Class_Descriptor cd_S10180C152;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,70)];
    init_test(&cd_S10180C152, buf);
    S10180C152 *dp, &lv = *(dp=new (buf) S10180C152());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S10180C152)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C152)");
    check_base_class_offset(lv, (S10180C17*)(S10180C145*)(S10180C144*), 0, "S10180C152");
    check_base_class_offset(lv, (S10180C145*)(S10180C144*), 0, "S10180C152");
    check_base_class_offset(lv, (S10180C144*), 0, "S10180C152");
    test_class_info(&lv, &cd_S10180C152);
    dp->~S10180C152();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C152(Test_S10180C152, "S10180C152", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN10S10180C152C1Ev();
extern void _ZN10S10180C152D1Ev();
Name_Map name_map_S10180C152[] = {
  NSPAIR(_ZN10S10180C152C1Ev),
  NSPAIR(_ZN10S10180C152D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C145;
extern VTBL_ENTRY _ZTI10S10180C145[];
extern  VTBL_ENTRY _ZTV10S10180C145[];
extern Class_Descriptor cd_S10180C144;
extern VTBL_ENTRY _ZTI10S10180C144[];
extern  VTBL_ENTRY _ZTV10S10180C144[];
static Base_Class bases_S10180C152[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C144,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C152[];
extern void _ZN10S10180C152D1Ev();
extern void _ZN10S10180C152D0Ev();
extern void _ZN10S10180C1454v262Ev();
extern void _ZN10S10180C1454v263Ev();
extern void _ZN10S10180C1454v264Ev();
extern void _ZN10S10180C1454v265Ev();
extern void _ZN10S10180C1454v266Ev();
extern void _ZN10S10180C1454v267Ev();
extern void _ZN10S10180C1454v268Ev();
extern void _ZN10S10180C1454v269Ev();
extern void _ZN10S10180C1454v270Ev();
extern void _ZN10S10180C1454v271Ev();
extern void _ZN10S10180C1454v272Ev();
extern void _ZN10S10180C1454v273Ev();
extern void _ZN10S10180C1454v274Ev();
extern void _ZN10S10180C1454v275Ev();
extern void _ZN10S10180C1454v276Ev();
extern void _ZN10S10180C1454v277Ev();
extern void _ZN10S10180C1454v278Ev();
extern void _ZN10S10180C1454v279Ev();
extern void _ZN10S10180C1454v280Ev();
extern void _ZN10S10180C1454v281Ev();
extern void _ZN10S10180C1444v282Ev();
extern void _ZN10S10180C1444v283Ev();
extern void _ZN10S10180C1444v284Ev();
extern void _ZN10S10180C1444v285Ev();
extern void _ZN10S10180C1444v286Ev();
extern void _ZN10S10180C1444v287Ev();
extern void _ZN10S10180C1444v288Ev();
extern void _ZN10S10180C1444v289Ev();
extern void _ZN10S10180C1444v290Ev();
extern void _ZN10S10180C1444v291Ev();
extern void _ZN10S10180C1444v292Ev();
extern void _ZN10S10180C1444v293Ev();
extern void _ZN10S10180C1444v294Ev();
extern void _ZN10S10180C1444v295Ev();
extern void _ZN10S10180C1444v296Ev();
extern void _ZN10S10180C1444v297Ev();
extern void _ZN10S10180C1444v298Ev();
extern void _ZN10S10180C1444v299Ev();
extern void _ZN10S10180C1444v300Ev();
extern void _ZN10S10180C1524v320Ev();
extern void _ZN10S10180C1524v321Ev();
static  VTBL_ENTRY vtc_S10180C152[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C152[0]),
  (VTBL_ENTRY)&_ZN10S10180C152D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C152D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v282Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v283Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v284Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v285Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v286Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v287Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v288Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v289Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v290Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v291Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v292Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v293Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v294Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v295Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v296Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v297Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v298Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v299Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v300Ev,
  (VTBL_ENTRY)&_ZN10S10180C1524v320Ev,
  (VTBL_ENTRY)&_ZN10S10180C1524v321Ev,
};
extern VTBL_ENTRY _ZTI10S10180C152[];
extern  VTBL_ENTRY _ZTV10S10180C152[];
Class_Descriptor cd_S10180C152 = {  "S10180C152", // class name
  bases_S10180C152, 3,
  &(vtc_S10180C152[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI10S10180C152),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C152),45, //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  S10180C154  : S10180C145 {
  int s10180c154f0[2];
  __tsi64 s10180c154f1;
  int s10180c154f2;
  virtual  ~S10180C154(); // _ZN10S10180C154D1Ev
  virtual void  v324(); // _ZN10S10180C1544v324Ev
  virtual void  v325(); // _ZN10S10180C1544v325Ev
  virtual void  v326(); // _ZN10S10180C1544v326Ev
  virtual void  v327(); // _ZN10S10180C1544v327Ev
  virtual void  v328(); // _ZN10S10180C1544v328Ev
  virtual void  v329(); // _ZN10S10180C1544v329Ev
  virtual void  v330(); // _ZN10S10180C1544v330Ev
  virtual void  v331(); // _ZN10S10180C1544v331Ev
  virtual void  v332(); // _ZN10S10180C1544v332Ev
  virtual void  v333(); // _ZN10S10180C1544v333Ev
  virtual void  v334(); // _ZN10S10180C1544v334Ev
  virtual void  v335(); // _ZN10S10180C1544v335Ev
  S10180C154(); // tgen
};
//SIG(1 S10180C154) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fp[2] FC7{ m Fp} Fc[2] Fp FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC11{ m FC12{ m FL}} FC11 FC9 FC9} FC13{ m FC14{ m Fp Fi FC5} Fi} Fp[4] FC15{ m FC16{ m Fp Fi[2] FC6} Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fi[2] FL Fi}


 S10180C154 ::~S10180C154(){ note_dtor("S10180C154", this);}
void  S10180C154 ::v324(){vfunc_called(this, "_ZN10S10180C1544v324Ev");}
void  S10180C154 ::v325(){vfunc_called(this, "_ZN10S10180C1544v325Ev");}
void  S10180C154 ::v326(){vfunc_called(this, "_ZN10S10180C1544v326Ev");}
void  S10180C154 ::v327(){vfunc_called(this, "_ZN10S10180C1544v327Ev");}
void  S10180C154 ::v328(){vfunc_called(this, "_ZN10S10180C1544v328Ev");}
void  S10180C154 ::v329(){vfunc_called(this, "_ZN10S10180C1544v329Ev");}
void  S10180C154 ::v330(){vfunc_called(this, "_ZN10S10180C1544v330Ev");}
void  S10180C154 ::v331(){vfunc_called(this, "_ZN10S10180C1544v331Ev");}
void  S10180C154 ::v332(){vfunc_called(this, "_ZN10S10180C1544v332Ev");}
void  S10180C154 ::v333(){vfunc_called(this, "_ZN10S10180C1544v333Ev");}
void  S10180C154 ::v334(){vfunc_called(this, "_ZN10S10180C1544v334Ev");}
void  S10180C154 ::v335(){vfunc_called(this, "_ZN10S10180C1544v335Ev");}
S10180C154 ::S10180C154(){ note_ctor("S10180C154", this);} // tgen

static void Test_S10180C154()
{
  extern Class_Descriptor cd_S10180C154;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,53)];
    init_test(&cd_S10180C154, buf);
    S10180C154 *dp, &lv = *(dp=new (buf) S10180C154());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,208), "sizeof(S10180C154)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C154)");
    check_base_class_offset(lv, (S10180C17*)(S10180C145*), 0, "S10180C154");
    check_base_class_offset(lv, (S10180C145*), 0, "S10180C154");
    check_field_offset(lv, s10180c154f0, ABISELECT(264,188), "S10180C154.s10180c154f0");
    check_field_offset(lv, s10180c154f1, ABISELECT(272,196), "S10180C154.s10180c154f1");
    check_field_offset(lv, s10180c154f2, ABISELECT(280,204), "S10180C154.s10180c154f2");
    test_class_info(&lv, &cd_S10180C154);
    dp->~S10180C154();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C154(Test_S10180C154, "S10180C154", ABISELECT(288,208));

#else // __cplusplus

extern void _ZN10S10180C154C1Ev();
extern void _ZN10S10180C154D1Ev();
Name_Map name_map_S10180C154[] = {
  NSPAIR(_ZN10S10180C154C1Ev),
  NSPAIR(_ZN10S10180C154D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C145;
extern VTBL_ENTRY _ZTI10S10180C145[];
extern  VTBL_ENTRY _ZTV10S10180C145[];
static Base_Class bases_S10180C154[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C154[];
extern void _ZN10S10180C154D1Ev();
extern void _ZN10S10180C154D0Ev();
extern void _ZN10S10180C1454v262Ev();
extern void _ZN10S10180C1454v263Ev();
extern void _ZN10S10180C1454v264Ev();
extern void _ZN10S10180C1454v265Ev();
extern void _ZN10S10180C1454v266Ev();
extern void _ZN10S10180C1454v267Ev();
extern void _ZN10S10180C1454v268Ev();
extern void _ZN10S10180C1454v269Ev();
extern void _ZN10S10180C1454v270Ev();
extern void _ZN10S10180C1454v271Ev();
extern void _ZN10S10180C1454v272Ev();
extern void _ZN10S10180C1454v273Ev();
extern void _ZN10S10180C1454v274Ev();
extern void _ZN10S10180C1454v275Ev();
extern void _ZN10S10180C1454v276Ev();
extern void _ZN10S10180C1454v277Ev();
extern void _ZN10S10180C1454v278Ev();
extern void _ZN10S10180C1454v279Ev();
extern void _ZN10S10180C1454v280Ev();
extern void _ZN10S10180C1454v281Ev();
extern void _ZN10S10180C1544v324Ev();
extern void _ZN10S10180C1544v325Ev();
extern void _ZN10S10180C1544v326Ev();
extern void _ZN10S10180C1544v327Ev();
extern void _ZN10S10180C1544v328Ev();
extern void _ZN10S10180C1544v329Ev();
extern void _ZN10S10180C1544v330Ev();
extern void _ZN10S10180C1544v331Ev();
extern void _ZN10S10180C1544v332Ev();
extern void _ZN10S10180C1544v333Ev();
extern void _ZN10S10180C1544v334Ev();
extern void _ZN10S10180C1544v335Ev();
static  VTBL_ENTRY vtc_S10180C154[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C154[0]),
  (VTBL_ENTRY)&_ZN10S10180C154D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C154D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v324Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v325Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v326Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v327Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v328Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v329Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v330Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v331Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v332Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v333Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v334Ev,
  (VTBL_ENTRY)&_ZN10S10180C1544v335Ev,
};
extern VTBL_ENTRY _ZTI10S10180C154[];
extern  VTBL_ENTRY _ZTV10S10180C154[];
Class_Descriptor cd_S10180C154 = {  "S10180C154", // class name
  bases_S10180C154, 2,
  &(vtc_S10180C154[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,208), // object size
  NSPAIRA(_ZTI10S10180C154),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C154),36, //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  S10180C155  : S10180C144 {
  virtual  ~S10180C155(); // _ZN10S10180C155D1Ev
  virtual void  v336(); // _ZN10S10180C1554v336Ev
  virtual void  v337(); // _ZN10S10180C1554v337Ev
  virtual void  v338(); // _ZN10S10180C1554v338Ev
  S10180C155(); // tgen
};
//SIG(-1 S10180C155) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 Fc} vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp[2] FC8{ m Fp} Fc[2] Fp FC9{ m FC10{ m FC11{ m FL[2]}} FC10 FC12{ m FC13{ m FL}} FC12 FC10 FC10} FC14{ m FC15{ m Fp Fi FC6} Fi} Fp[4] FC16{ m FC17{ m Fp Fi[2] FC7} Fp[2]}} vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 FC18{ vd m Fi[2] FC15 FC15 FC15 FC15 FC19{ m Fp[2]} FL[2]} Fp} vd v1 v2 v3}


 S10180C155 ::~S10180C155(){ note_dtor("S10180C155", this);}
void  S10180C155 ::v336(){vfunc_called(this, "_ZN10S10180C1554v336Ev");}
void  S10180C155 ::v337(){vfunc_called(this, "_ZN10S10180C1554v337Ev");}
void  S10180C155 ::v338(){vfunc_called(this, "_ZN10S10180C1554v338Ev");}
S10180C155 ::S10180C155(){ note_ctor("S10180C155", this);} // tgen

static void Test_S10180C155()
{
  extern Class_Descriptor cd_S10180C155;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,70)];
    init_test(&cd_S10180C155, buf);
    S10180C155 *dp, &lv = *(dp=new (buf) S10180C155());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S10180C155)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C155)");
    check_base_class_offset(lv, (S10180C17*)(S10180C145*)(S10180C144*), 0, "S10180C155");
    check_base_class_offset(lv, (S10180C145*)(S10180C144*), 0, "S10180C155");
    check_base_class_offset(lv, (S10180C144*), 0, "S10180C155");
    test_class_info(&lv, &cd_S10180C155);
    dp->~S10180C155();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C155(Test_S10180C155, "S10180C155", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN10S10180C155C1Ev();
extern void _ZN10S10180C155D1Ev();
Name_Map name_map_S10180C155[] = {
  NSPAIR(_ZN10S10180C155C1Ev),
  NSPAIR(_ZN10S10180C155D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C145;
extern VTBL_ENTRY _ZTI10S10180C145[];
extern  VTBL_ENTRY _ZTV10S10180C145[];
extern Class_Descriptor cd_S10180C144;
extern VTBL_ENTRY _ZTI10S10180C144[];
extern  VTBL_ENTRY _ZTV10S10180C144[];
static Base_Class bases_S10180C155[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C144,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C155[];
extern void _ZN10S10180C155D1Ev();
extern void _ZN10S10180C155D0Ev();
extern void _ZN10S10180C1454v262Ev();
extern void _ZN10S10180C1454v263Ev();
extern void _ZN10S10180C1454v264Ev();
extern void _ZN10S10180C1454v265Ev();
extern void _ZN10S10180C1454v266Ev();
extern void _ZN10S10180C1454v267Ev();
extern void _ZN10S10180C1454v268Ev();
extern void _ZN10S10180C1454v269Ev();
extern void _ZN10S10180C1454v270Ev();
extern void _ZN10S10180C1454v271Ev();
extern void _ZN10S10180C1454v272Ev();
extern void _ZN10S10180C1454v273Ev();
extern void _ZN10S10180C1454v274Ev();
extern void _ZN10S10180C1454v275Ev();
extern void _ZN10S10180C1454v276Ev();
extern void _ZN10S10180C1454v277Ev();
extern void _ZN10S10180C1454v278Ev();
extern void _ZN10S10180C1454v279Ev();
extern void _ZN10S10180C1454v280Ev();
extern void _ZN10S10180C1454v281Ev();
extern void _ZN10S10180C1444v282Ev();
extern void _ZN10S10180C1444v283Ev();
extern void _ZN10S10180C1444v284Ev();
extern void _ZN10S10180C1444v285Ev();
extern void _ZN10S10180C1444v286Ev();
extern void _ZN10S10180C1444v287Ev();
extern void _ZN10S10180C1444v288Ev();
extern void _ZN10S10180C1444v289Ev();
extern void _ZN10S10180C1444v290Ev();
extern void _ZN10S10180C1444v291Ev();
extern void _ZN10S10180C1444v292Ev();
extern void _ZN10S10180C1444v293Ev();
extern void _ZN10S10180C1444v294Ev();
extern void _ZN10S10180C1444v295Ev();
extern void _ZN10S10180C1444v296Ev();
extern void _ZN10S10180C1444v297Ev();
extern void _ZN10S10180C1444v298Ev();
extern void _ZN10S10180C1444v299Ev();
extern void _ZN10S10180C1444v300Ev();
extern void _ZN10S10180C1554v336Ev();
extern void _ZN10S10180C1554v337Ev();
extern void _ZN10S10180C1554v338Ev();
static  VTBL_ENTRY vtc_S10180C155[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C155[0]),
  (VTBL_ENTRY)&_ZN10S10180C155D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C155D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v282Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v283Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v284Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v285Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v286Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v287Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v288Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v289Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v290Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v291Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v292Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v293Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v294Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v295Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v296Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v297Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v298Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v299Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v300Ev,
  (VTBL_ENTRY)&_ZN10S10180C1554v336Ev,
  (VTBL_ENTRY)&_ZN10S10180C1554v337Ev,
  (VTBL_ENTRY)&_ZN10S10180C1554v338Ev,
};
extern VTBL_ENTRY _ZTI10S10180C155[];
extern  VTBL_ENTRY _ZTV10S10180C155[];
Class_Descriptor cd_S10180C155 = {  "S10180C155", // class name
  bases_S10180C155, 3,
  &(vtc_S10180C155[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI10S10180C155),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C155),46, //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  S10180C157  : S10180C144 {
  virtual  ~S10180C157(); // _ZN10S10180C157D1Ev
  virtual void  v342(); // _ZN10S10180C1574v342Ev
  virtual void  v343(); // _ZN10S10180C1574v343Ev
  S10180C157(); // tgen
};
//SIG(-1 S10180C157) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 Fc} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[2] FC8{ m Fp} Fc[2] Fp FC9{ m FC10{ m FC11{ m FL[2]}} FC10 FC12{ m FC13{ m FL}} FC12 FC10 FC10} FC14{ m FC15{ m Fp Fi FC6} Fi} Fp[4] FC16{ m FC17{ m Fp Fi[2] FC7} Fp[2]}} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 FC18{ vd m Fi[2] FC15 FC15 FC15 FC15 FC19{ m Fp[2]} FL[2]} Fp} vd v1 v2}


 S10180C157 ::~S10180C157(){ note_dtor("S10180C157", this);}
void  S10180C157 ::v342(){vfunc_called(this, "_ZN10S10180C1574v342Ev");}
void  S10180C157 ::v343(){vfunc_called(this, "_ZN10S10180C1574v343Ev");}
S10180C157 ::S10180C157(){ note_ctor("S10180C157", this);} // tgen

static void Test_S10180C157()
{
  extern Class_Descriptor cd_S10180C157;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,70)];
    init_test(&cd_S10180C157, buf);
    S10180C157 *dp, &lv = *(dp=new (buf) S10180C157());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S10180C157)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C157)");
    check_base_class_offset(lv, (S10180C17*)(S10180C145*)(S10180C144*), 0, "S10180C157");
    check_base_class_offset(lv, (S10180C145*)(S10180C144*), 0, "S10180C157");
    check_base_class_offset(lv, (S10180C144*), 0, "S10180C157");
    test_class_info(&lv, &cd_S10180C157);
    dp->~S10180C157();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C157(Test_S10180C157, "S10180C157", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN10S10180C157C1Ev();
extern void _ZN10S10180C157D1Ev();
Name_Map name_map_S10180C157[] = {
  NSPAIR(_ZN10S10180C157C1Ev),
  NSPAIR(_ZN10S10180C157D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C145;
extern VTBL_ENTRY _ZTI10S10180C145[];
extern  VTBL_ENTRY _ZTV10S10180C145[];
extern Class_Descriptor cd_S10180C144;
extern VTBL_ENTRY _ZTI10S10180C144[];
extern  VTBL_ENTRY _ZTV10S10180C144[];
static Base_Class bases_S10180C157[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C144,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C157[];
extern void _ZN10S10180C157D1Ev();
extern void _ZN10S10180C157D0Ev();
extern void _ZN10S10180C1454v262Ev();
extern void _ZN10S10180C1454v263Ev();
extern void _ZN10S10180C1454v264Ev();
extern void _ZN10S10180C1454v265Ev();
extern void _ZN10S10180C1454v266Ev();
extern void _ZN10S10180C1454v267Ev();
extern void _ZN10S10180C1454v268Ev();
extern void _ZN10S10180C1454v269Ev();
extern void _ZN10S10180C1454v270Ev();
extern void _ZN10S10180C1454v271Ev();
extern void _ZN10S10180C1454v272Ev();
extern void _ZN10S10180C1454v273Ev();
extern void _ZN10S10180C1454v274Ev();
extern void _ZN10S10180C1454v275Ev();
extern void _ZN10S10180C1454v276Ev();
extern void _ZN10S10180C1454v277Ev();
extern void _ZN10S10180C1454v278Ev();
extern void _ZN10S10180C1454v279Ev();
extern void _ZN10S10180C1454v280Ev();
extern void _ZN10S10180C1454v281Ev();
extern void _ZN10S10180C1444v282Ev();
extern void _ZN10S10180C1444v283Ev();
extern void _ZN10S10180C1444v284Ev();
extern void _ZN10S10180C1444v285Ev();
extern void _ZN10S10180C1444v286Ev();
extern void _ZN10S10180C1444v287Ev();
extern void _ZN10S10180C1444v288Ev();
extern void _ZN10S10180C1444v289Ev();
extern void _ZN10S10180C1444v290Ev();
extern void _ZN10S10180C1444v291Ev();
extern void _ZN10S10180C1444v292Ev();
extern void _ZN10S10180C1444v293Ev();
extern void _ZN10S10180C1444v294Ev();
extern void _ZN10S10180C1444v295Ev();
extern void _ZN10S10180C1444v296Ev();
extern void _ZN10S10180C1444v297Ev();
extern void _ZN10S10180C1444v298Ev();
extern void _ZN10S10180C1444v299Ev();
extern void _ZN10S10180C1444v300Ev();
extern void _ZN10S10180C1574v342Ev();
extern void _ZN10S10180C1574v343Ev();
static  VTBL_ENTRY vtc_S10180C157[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C157[0]),
  (VTBL_ENTRY)&_ZN10S10180C157D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C157D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10180C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v282Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v283Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v284Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v285Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v286Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v287Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v288Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v289Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v290Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v291Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v292Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v293Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v294Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v295Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v296Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v297Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v298Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v299Ev,
  (VTBL_ENTRY)&_ZN10S10180C1444v300Ev,
  (VTBL_ENTRY)&_ZN10S10180C1574v342Ev,
  (VTBL_ENTRY)&_ZN10S10180C1574v343Ev,
};
extern VTBL_ENTRY _ZTI10S10180C157[];
extern  VTBL_ENTRY _ZTV10S10180C157[];
Class_Descriptor cd_S10180C157 = {  "S10180C157", // class name
  bases_S10180C157, 3,
  &(vtc_S10180C157[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI10S10180C157),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C157),45, //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  S10180C158  : S10180C17 , S10180C2 , S10180C11 {
  void *s10180c158f0;
  ::S10180C135 s10180c158f1;
  ::S10180C101 s10180c158f2;
  ::S10180C68 s10180c158f3;
  ::S10180C75 s10180c158f4;
  void *s10180c158f5;
  __tsi64 s10180c158f6;
  ::S10180C13 s10180c158f7;
  virtual  ~S10180C158(); // _ZN10S10180C158D1Ev
  virtual void  v344(); // _ZN10S10180C1584v344Ev
  virtual void  v345(); // _ZN10S10180C1584v345Ev
  virtual void  v346(); // _ZN10S10180C1584v346Ev
  virtual void  v347(); // _ZN10S10180C1584v347Ev
  S10180C158(); // tgen
};
//SIG(-1 S10180C158) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v5} BC7{ 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 Fp FC8{ m FC9{ m Fp Fi FC4} Fi} FC10{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 Fp FC11{ BC6 vd v30 Fp[2] FC12{ m Fp Fi FC13{ m} FC14{ m}} FC15{ BC2 vd v31 v32 v33 v34 FC16{ m Fp[2] FC9 FC17{ m Fp Fi[2] FC13} Fi[2]}}} FC18{ BC2 vd v35 Fp FC8 FC8 Fp Fi FC19{ m FC20{ m FL[2]}}} FC21{ BC22{ BC2 vd v38 v39 v40 v41 FC23{ m Fp FC8 FC9 FC9 Fi[3] FC19 Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v36 v37} FC24{ BC22 v42} Fp FL FC9}


 S10180C158 ::~S10180C158(){ note_dtor("S10180C158", this);}
void  S10180C158 ::v344(){vfunc_called(this, "_ZN10S10180C1584v344Ev");}
void  S10180C158 ::v345(){vfunc_called(this, "_ZN10S10180C1584v345Ev");}
void  S10180C158 ::v346(){vfunc_called(this, "_ZN10S10180C1584v346Ev");}
void  S10180C158 ::v347(){vfunc_called(this, "_ZN10S10180C1584v347Ev");}
S10180C158 ::S10180C158(){ note_ctor("S10180C158", this);} // tgen

static void Test_S10180C158()
{
  extern Class_Descriptor cd_S10180C158;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(119,163)];
    init_test(&cd_S10180C158, buf);
    S10180C158 *dp, &lv = *(dp=new (buf) S10180C158());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,648), "sizeof(S10180C158)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C158)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C158");
    check_base_class_offset(lv, (S10180C2*), ABISELECT(48,32), "S10180C158");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(56,36), "S10180C158");
    check_field_offset(lv, s10180c158f0, ABISELECT(152,100), "S10180C158.s10180c158f0");
    check_field_offset(lv, s10180c158f1, ABISELECT(160,104), "S10180C158.s10180c158f1");
    check_field_offset(lv, s10180c158f2, ABISELECT(312,204), "S10180C158.s10180c158f2");
    check_field_offset(lv, s10180c158f3, ABISELECT(448,296), "S10180C158.s10180c158f3");
    check_field_offset(lv, s10180c158f4, ABISELECT(680,460), "S10180C158.s10180c158f4");
    check_field_offset(lv, s10180c158f5, ABISELECT(912,624), "S10180C158.s10180c158f5");
    check_field_offset(lv, s10180c158f6, ABISELECT(920,628), "S10180C158.s10180c158f6");
    check_field_offset(lv, s10180c158f7, ABISELECT(928,636), "S10180C158.s10180c158f7");
    test_class_info(&lv, &cd_S10180C158);
    dp->~S10180C158();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C158(Test_S10180C158, "S10180C158", ABISELECT(944,648));

#else // __cplusplus

extern void _ZN10S10180C158C1Ev();
extern void _ZN10S10180C158D1Ev();
Name_Map name_map_S10180C158[] = {
  NSPAIR(_ZN10S10180C158C1Ev),
  NSPAIR(_ZN10S10180C158D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
static Base_Class bases_S10180C158[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C2,    ABISELECT(48,32), //bcp->offset
    8, //bcp->virtual_function_table_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},
  {&cd_S10180C11,    ABISELECT(56,36), //bcp->offset
    13, //bcp->virtual_function_table_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 _ZTI10S10180C158[];
extern void _ZN10S10180C158D1Ev();
extern void _ZN10S10180C158D0Ev();
extern void _ZN10S10180C1584v344Ev();
extern void _ZN10S10180C1584v345Ev();
extern void _ZN10S10180C1584v346Ev();
extern void _ZN10S10180C1584v347Ev();
extern void ABISELECT(_ZThn48_N10S10180C158D1Ev,_ZThn32_N10S10180C158D1Ev)();
extern void ABISELECT(_ZThn48_N10S10180C158D0Ev,_ZThn32_N10S10180C158D0Ev)();
extern void _ZN8S10180C22v7Ev();
extern void ABISELECT(_ZThn56_N10S10180C158D1Ev,_ZThn36_N10S10180C158D1Ev)();
extern void ABISELECT(_ZThn56_N10S10180C158D0Ev,_ZThn36_N10S10180C158D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
static  VTBL_ENTRY vtc_S10180C158[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C158[0]),
  (VTBL_ENTRY)&_ZN10S10180C158D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C158D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1584v344Ev,
  (VTBL_ENTRY)&_ZN10S10180C1584v345Ev,
  (VTBL_ENTRY)&_ZN10S10180C1584v346Ev,
  (VTBL_ENTRY)&_ZN10S10180C1584v347Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10180C158[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C158D1Ev,_ZThn32_N10S10180C158D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C158D0Ev,_ZThn32_N10S10180C158D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI10S10180C158[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N10S10180C158D1Ev,_ZThn36_N10S10180C158D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N10S10180C158D0Ev,_ZThn36_N10S10180C158D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
};
extern VTBL_ENTRY _ZTI10S10180C158[];
extern  VTBL_ENTRY _ZTV10S10180C158[];
Class_Descriptor cd_S10180C158 = {  "S10180C158", // class name
  bases_S10180C158, 3,
  &(vtc_S10180C158[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(944,648), // object size
  NSPAIRA(_ZTI10S10180C158),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV10S10180C158),41, //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  S10180C159  {
  __tsi64 s10180c159f0;
  char s10180c159f1;
  __tsi64 s10180c159f2[2];
  ::S10180C114 s10180c159f3;
  void  mf10180c159(); // _ZN10S10180C15911mf10180c159Ev
};
//SIG(-1 S10180C159) C1{ m FL Fc FL[2] FC2{ m Fp}}


void  S10180C159 ::mf10180c159(){}

static void Test_S10180C159()
{
  {
    init_simple_test("S10180C159");
    S10180C159 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S10180C159)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C159)");
    check_field_offset(lv, s10180c159f0, 0, "S10180C159.s10180c159f0");
    check_field_offset(lv, s10180c159f1, 8, "S10180C159.s10180c159f1");
    check_field_offset(lv, s10180c159f2, ABISELECT(16,12), "S10180C159.s10180c159f2");
    check_field_offset(lv, s10180c159f3, ABISELECT(32,28), "S10180C159.s10180c159f3");
  }
}
static Arrange_To_Call_Me vS10180C159(Test_S10180C159, "S10180C159", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C160  : S10180C17 , S10180C11 , S10180C2 {
  int s10180c160f0;
  ::S10180C86 s10180c160f1;
  ::S10180C31 s10180c160f2;
  ::S10180C105 s10180c160f3;
  ::S10180C106 s10180c160f4;
  ::S10180C87 s10180c160f5;
  ::S10180C68 s10180c160f6;
  ::S10180C111 s10180c160f7;
  void *s10180c160f8[2];
  int s10180c160f9;
  virtual  ~S10180C160(); // _ZN10S10180C160D1Ev
  virtual void  v348(); // _ZN10S10180C1604v348Ev
  virtual void  v349(); // _ZN10S10180C1604v349Ev
  virtual void  v350(); // _ZN10S10180C1604v350Ev
  virtual void  v351(); // _ZN10S10180C1604v351Ev
  virtual void  v352(); // _ZN10S10180C1604v352Ev
  virtual void  v353(); // _ZN10S10180C1604v353Ev
  S10180C160(); // tgen
};
//SIG(-1 S10180C160) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC10{ vd v31} vd v1 v2 v3 v4 v5 v6 Fi FC11{ BC12{ BC2 vd v33 v34 v35 v36 FC13{ m Fp FC7 FC8 FC8 Fi[3] FC14{ m FC15{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi} v32} FC16{ m FC17{ m Fp Fi[2] FC5} Fp[2]} FC18{ BC12 v37 v38 v39 Fp[3]} FC19{ BC12 v40} FC20{ BC12 v41 v42} FC21{ BC12 v43 v44} FC22{ m Fp} Fp[2] Fi}


 S10180C160 ::~S10180C160(){ note_dtor("S10180C160", this);}
void  S10180C160 ::v348(){vfunc_called(this, "_ZN10S10180C1604v348Ev");}
void  S10180C160 ::v349(){vfunc_called(this, "_ZN10S10180C1604v349Ev");}
void  S10180C160 ::v350(){vfunc_called(this, "_ZN10S10180C1604v350Ev");}
void  S10180C160 ::v351(){vfunc_called(this, "_ZN10S10180C1604v351Ev");}
void  S10180C160 ::v352(){vfunc_called(this, "_ZN10S10180C1604v352Ev");}
void  S10180C160 ::v353(){vfunc_called(this, "_ZN10S10180C1604v353Ev");}
S10180C160 ::S10180C160(){ note_ctor("S10180C160", this);} // tgen

static void Test_S10180C160()
{
  extern Class_Descriptor cd_S10180C160;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(178,245)];
    init_test(&cd_S10180C160, buf);
    S10180C160 *dp, &lv = *(dp=new (buf) S10180C160());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1416,976), "sizeof(S10180C160)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C160)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C160");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C160");
    check_base_class_offset(lv, (S10180C2*), ABISELECT(144,96), "S10180C160");
    check_field_offset(lv, s10180c160f0, ABISELECT(152,100), "S10180C160.s10180c160f0");
    check_field_offset(lv, s10180c160f1, ABISELECT(160,104), "S10180C160.s10180c160f1");
    check_field_offset(lv, s10180c160f2, ABISELECT(392,268), "S10180C160.s10180c160f2");
    check_field_offset(lv, s10180c160f3, ABISELECT(432,292), "S10180C160.s10180c160f3");
    check_field_offset(lv, s10180c160f4, ABISELECT(688,468), "S10180C160.s10180c160f4");
    check_field_offset(lv, s10180c160f5, ABISELECT(920,632), "S10180C160.s10180c160f5");
    check_field_offset(lv, s10180c160f6, ABISELECT(1152,796), "S10180C160.s10180c160f6");
    check_field_offset(lv, s10180c160f7, ABISELECT(1384,960), "S10180C160.s10180c160f7");
    check_field_offset(lv, s10180c160f8, ABISELECT(1392,964), "S10180C160.s10180c160f8");
    check_field_offset(lv, s10180c160f9, ABISELECT(1408,972), "S10180C160.s10180c160f9");
    test_class_info(&lv, &cd_S10180C160);
    dp->~S10180C160();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C160(Test_S10180C160, "S10180C160", ABISELECT(1416,976));

#else // __cplusplus

extern void _ZN10S10180C160C1Ev();
extern void _ZN10S10180C160D1Ev();
Name_Map name_map_S10180C160[] = {
  NSPAIR(_ZN10S10180C160C1Ev),
  NSPAIR(_ZN10S10180C160D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
static Base_Class bases_S10180C160[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    10, //bcp->virtual_function_table_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},
  {&cd_S10180C2,    ABISELECT(144,96), //bcp->offset
    38, //bcp->virtual_function_table_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 _ZTI10S10180C160[];
extern void _ZN10S10180C160D1Ev();
extern void _ZN10S10180C160D0Ev();
extern void _ZN10S10180C1604v348Ev();
extern void _ZN10S10180C1604v349Ev();
extern void _ZN10S10180C1604v350Ev();
extern void _ZN10S10180C1604v351Ev();
extern void _ZN10S10180C1604v352Ev();
extern void _ZN10S10180C1604v353Ev();
extern void ABISELECT(_ZThn48_N10S10180C160D1Ev,_ZThn32_N10S10180C160D1Ev)();
extern void ABISELECT(_ZThn48_N10S10180C160D0Ev,_ZThn32_N10S10180C160D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void ABISELECT(_ZThn144_N10S10180C160D1Ev,_ZThn96_N10S10180C160D1Ev)();
extern void ABISELECT(_ZThn144_N10S10180C160D0Ev,_ZThn96_N10S10180C160D0Ev)();
extern void _ZN8S10180C22v7Ev();
static  VTBL_ENTRY vtc_S10180C160[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C160[0]),
  (VTBL_ENTRY)&_ZN10S10180C160D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C160D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1604v348Ev,
  (VTBL_ENTRY)&_ZN10S10180C1604v349Ev,
  (VTBL_ENTRY)&_ZN10S10180C1604v350Ev,
  (VTBL_ENTRY)&_ZN10S10180C1604v351Ev,
  (VTBL_ENTRY)&_ZN10S10180C1604v352Ev,
  (VTBL_ENTRY)&_ZN10S10180C1604v353Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10180C160[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C160D1Ev,_ZThn32_N10S10180C160D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C160D0Ev,_ZThn32_N10S10180C160D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI10S10180C160[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C160D1Ev,_ZThn96_N10S10180C160D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C160D0Ev,_ZThn96_N10S10180C160D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
};
extern VTBL_ENTRY _ZTI10S10180C160[];
extern  VTBL_ENTRY _ZTV10S10180C160[];
Class_Descriptor cd_S10180C160 = {  "S10180C160", // class name
  bases_S10180C160, 3,
  &(vtc_S10180C160[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1416,976), // object size
  NSPAIRA(_ZTI10S10180C160),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV10S10180C160),43, //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  S10180C161  {
  void *s10180c161f0;
  int s10180c161f1[2];
  ::S10180C138 s10180c161f2;
  void  mf10180c161(); // _ZN10S10180C16111mf10180c161Ev
};
//SIG(-1 S10180C161) C1{ m Fp Fi[2] FC2{ m}}


void  S10180C161 ::mf10180c161(){}

static void Test_S10180C161()
{
  {
    init_simple_test("S10180C161");
    S10180C161 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S10180C161)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C161)");
    check_field_offset(lv, s10180c161f0, 0, "S10180C161.s10180c161f0");
    check_field_offset(lv, s10180c161f1, ABISELECT(8,4), "S10180C161.s10180c161f1");
    check_field_offset(lv, s10180c161f2, ABISELECT(16,12), "S10180C161.s10180c161f2");
  }
}
static Arrange_To_Call_Me vS10180C161(Test_S10180C161, "S10180C161", ABISELECT(24,16));

#else // __cplusplus

Class_Descriptor cd_S10180C161 = {  "S10180C161", // 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  S10180C165  {
  int s10180c165f0[2];
  __tsi64 s10180c165f1;
  char s10180c165f2;
};
//SIG(1 S10180C165) C1{ Fi[2] FL Fc}



static void Test_S10180C165()
{
  {
    init_simple_test("S10180C165");
    S10180C165 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S10180C165)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C165)");
    check_field_offset(lv, s10180c165f0, 0, "S10180C165.s10180c165f0");
    check_field_offset(lv, s10180c165f1, 8, "S10180C165.s10180c165f1");
    check_field_offset(lv, s10180c165f2, 16, "S10180C165.s10180c165f2");
  }
}
static Arrange_To_Call_Me vS10180C165(Test_S10180C165, "S10180C165", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C164  {
  int s10180c164f0;
  ::S10180C165 s10180c164f1[9];
  int s10180c164f2;
};
//SIG(-1 S10180C164) C1{ Fi FC2{ Fi[2] FL Fc}[9] Fi}



static void Test_S10180C164()
{
  {
    init_simple_test("S10180C164");
    S10180C164 lv;
    check2(sizeof(lv), ABISELECT(232,188), "sizeof(S10180C164)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C164)");
    check_field_offset(lv, s10180c164f0, 0, "S10180C164.s10180c164f0");
    check_field_offset(lv, s10180c164f1, ABISELECT(8,4), "S10180C164.s10180c164f1");
    check_field_offset(lv, s10180c164f2, ABISELECT(224,184), "S10180C164.s10180c164f2");
  }
}
static Arrange_To_Call_Me vS10180C164(Test_S10180C164, "S10180C164", ABISELECT(232,188));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C163  {
  ::S10180C31 s10180c163f0;
  ::S10180C164 s10180c163f1;
  ::S10180C13 s10180c163f2;
  void  mf10180c163(); // _ZN10S10180C16311mf10180c163Ev
};
//SIG(-1 S10180C163) C1{ m FC2{ m FC3{ m Fp Fi[2] FC4{ m}} Fp[2]} FC5{ Fi FC6{ Fi[2] FL Fc}[9] Fi} FC7{ m Fp Fi FC8{ m}}}


void  S10180C163 ::mf10180c163(){}

static void Test_S10180C163()
{
  {
    init_simple_test("S10180C163");
    S10180C163 lv;
    check2(sizeof(lv), ABISELECT(288,224), "sizeof(S10180C163)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C163)");
    check_field_offset(lv, s10180c163f0, 0, "S10180C163.s10180c163f0");
    check_field_offset(lv, s10180c163f1, ABISELECT(40,24), "S10180C163.s10180c163f1");
    check_field_offset(lv, s10180c163f2, ABISELECT(272,212), "S10180C163.s10180c163f2");
  }
}
static Arrange_To_Call_Me vS10180C163(Test_S10180C163, "S10180C163", ABISELECT(288,224));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C130  : S10180C17 , S10180C11 , S10180C2 {
  ::S10180C31 s10180c130f0;
  void *s10180c130f1;
  ::S10180C68 s10180c130f2;
  ::S10180C94 s10180c130f3;
  ::S10180C61 s10180c130f4;
  ::S10180C131 s10180c130f5;
  ::S10180C135 s10180c130f6;
  ::S10180C101 s10180c130f7;
  ::S10180C143 s10180c130f8;
  ::S10180C151 s10180c130f9;
  ::S10180C152 s10180c130f10;
  ::S10180C152 s10180c130f11;
  ::S10180C154 s10180c130f12[9];
  ::S10180C155 s10180c130f13;
  ::S10180C155 s10180c130f14;
  ::S10180C157 s10180c130f15;
  ::S10180C158 s10180c130f16;
  void *s10180c130f17;
  int s10180c130f18;
  ::S10180C159 s10180c130f19;
  ::S10180C104 s10180c130f20;
  ::S10180C160 s10180c130f21;
  ::S10180C124 s10180c130f22;
  ::S10180C87 s10180c130f23;
  ::S10180C88 s10180c130f24;
  ::S10180C75 s10180c130f25;
  ::S10180C68 s10180c130f26;
  void *s10180c130f27;
  ::S10180C161 s10180c130f28;
  int s10180c130f29;
  ::S10180C163 s10180c130f30;
  void *s10180c130f31[2];
  int s10180c130f32;
  virtual  ~S10180C130(); // _ZN10S10180C130D1Ev
  virtual void  v238(); // _ZN10S10180C1304v238Ev
  virtual void  v239(); // _ZN10S10180C1304v239Ev
  virtual void  v240(); // _ZN10S10180C1304v240Ev
  virtual void  v241(); // _ZN10S10180C1304v241Ev
  virtual void  v242(); // _ZN10S10180C1304v242Ev
  virtual void  v243(); // _ZN10S10180C1304v243Ev
  virtual void  v244(); // _ZN10S10180C1304v244Ev
  virtual void  v245(); // _ZN10S10180C1304v245Ev
  S10180C130(); // tgen
};
//SIG(-1 S10180C130) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC10{ vd v33} vd v1 v2 v3 v4 v5 v6 v7 v8 FC11{ m FC12{ m Fp Fi[2] FC5} Fp[2]} Fp FC13{ BC14{ BC2 vd v36 v37 v38 v39 FC15{ m Fp FC7 FC8 FC8 Fi[3] FC16{ m FC17{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi} v34 v35} FC18{ BC19{ BC2 BC6 vd v45 v46 v47 v48 v49 v50} BC10 vd v40 v41 v42 v43 v44 FC20{ m Fi Fp Fi FC16} FC12} FC21{ m Fp} FC22{ vd v51 v52 FC23{ m Fp Fi[2] FC24{ m}} FC25{ m Fi[4]}[3] Fp[2] Fi Fc} FC26{ BC10 vd v53 Fp[2] FC27{ m Fp Fi FC24 FC28{ m}} FC29{ BC2 vd v54 v55 v56 v57 FC30{ m Fp[2] FC8 FC23 Fi[2]}}} FC31{ BC2 vd v58 Fp FC7 FC7 Fp Fi FC16} FC32{ BC33{ BC34{ BC2 vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fp[2] FC35{ m Fp} Fc[2] Fp FC36{ m FC16 FC16 FC37{ m FC38{ m FL}} FC37 FC16 FC16} FC7 Fp[4] FC11} vd v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 FC39{ vd m Fi[2] FC8 FC8 FC8 FC8 FC40{ m Fp[2]} FL[2]} Fp} vd v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi[3]} FC41{ BC34 vd v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 FC39 Fp} FC42{ BC33 vd v126 v127} FC42 FC43{ BC34 vd v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 Fi[2] FL Fi}[9] FC44{ BC33 vd v140 v141 v142} FC44 FC45{ BC33 vd v143 v144} FC46{ BC2 BC10 BC6 vd v145 v146 v147 v148 Fp FC26 FC31 FC13 FC47{ BC14 v149} Fp FL FC8} Fp Fi FC48{ m FL Fc FL[2] FC49{ m Fp}} FC50{ BC2 BC6 BC10 vd v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 Fi[2] FC51{ BC14 v173} FC11 FC52{ BC14 v174 v175 v176 Fp[3]} FC53{ BC14 v177} FC54{ BC14 v178 v179} FC13 FC55{ BC2 vd v180 v181 FC56{ BC57{ BC58{ m Fp FC16 FC16 Fi[3] Fc[2] Fi Fp} FC21 FC35 FC21 FC8 FC8 FC21 FC35 FC21 FC8 FC8 FC8 Fc Fi Fp} FC8} Fi} FC47 FC59{ BC53 v182} FC47 Fp FC35 Fp[2] Fi Fc[3] Fi FL[2]} FC60{ BC2 BC6 BC10 vd v183 v184 v185 v186 v187 v188 Fi FC51 FC11 FC52 FC53 FC54 FC13 FC35 Fp[2] Fi} FC61{ m FC62{ BC63{ m Fp Fi FC64{ m} FC64}} Fi} FC54 FC65{ BC14 v189 v190 v191 FC66{ Fp[3]} FC67{ Fi[4]}[3]} FC47 FC13 Fp FC68{ m Fp Fi[2] FC28} Fi FC69{ m FC11 FC70{ Fi FC71{ Fi[2] FL Fc}[9] Fi} FC8} Fp[2] Fi}


 S10180C130 ::~S10180C130(){ note_dtor("S10180C130", this);}
void  S10180C130 ::v238(){vfunc_called(this, "_ZN10S10180C1304v238Ev");}
void  S10180C130 ::v239(){vfunc_called(this, "_ZN10S10180C1304v239Ev");}
void  S10180C130 ::v240(){vfunc_called(this, "_ZN10S10180C1304v240Ev");}
void  S10180C130 ::v241(){vfunc_called(this, "_ZN10S10180C1304v241Ev");}
void  S10180C130 ::v242(){vfunc_called(this, "_ZN10S10180C1304v242Ev");}
void  S10180C130 ::v243(){vfunc_called(this, "_ZN10S10180C1304v243Ev");}
void  S10180C130 ::v244(){vfunc_called(this, "_ZN10S10180C1304v244Ev");}
void  S10180C130 ::v245(){vfunc_called(this, "_ZN10S10180C1304v245Ev");}
S10180C130 ::S10180C130(){ note_ctor("S10180C130", this);} // tgen

static void Test_S10180C130()
{
  extern Class_Descriptor cd_S10180C130;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1572,2224)];
    init_test(&cd_S10180C130, buf);
    S10180C130 *dp, &lv = *(dp=new (buf) S10180C130());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12568,8892), "sizeof(S10180C130)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C130)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C130");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C130");
    check_base_class_offset(lv, (S10180C2*), ABISELECT(144,96), "S10180C130");
    check_field_offset(lv, s10180c130f0, ABISELECT(152,100), "S10180C130.s10180c130f0");
    check_field_offset(lv, s10180c130f1, ABISELECT(192,124), "S10180C130.s10180c130f1");
    check_field_offset(lv, s10180c130f2, ABISELECT(200,128), "S10180C130.s10180c130f2");
    check_field_offset(lv, s10180c130f3, ABISELECT(432,292), "S10180C130.s10180c130f3");
    check_field_offset(lv, s10180c130f4, ABISELECT(648,436), "S10180C130.s10180c130f4");
    check_field_offset(lv, s10180c130f5, ABISELECT(656,440), "S10180C130.s10180c130f5");
    check_field_offset(lv, s10180c130f6, ABISELECT(760,524), "S10180C130.s10180c130f6");
    check_field_offset(lv, s10180c130f7, ABISELECT(912,624), "S10180C130.s10180c130f7");
    check_field_offset(lv, s10180c130f8, ABISELECT(1048,716), "S10180C130.s10180c130f8");
    check_field_offset(lv, s10180c130f9, ABISELECT(1448,1004), "S10180C130.s10180c130f9");
    check_field_offset(lv, s10180c130f10, ABISELECT(1832,1280), "S10180C130.s10180c130f10");
    check_field_offset(lv, s10180c130f11, ABISELECT(2216,1556), "S10180C130.s10180c130f11");
    check_field_offset(lv, s10180c130f12, ABISELECT(2600,1832), "S10180C130.s10180c130f12");
    check_field_offset(lv, s10180c130f13, ABISELECT(5192,3704), "S10180C130.s10180c130f13");
    check_field_offset(lv, s10180c130f14, ABISELECT(5576,3980), "S10180C130.s10180c130f14");
    check_field_offset(lv, s10180c130f15, ABISELECT(5960,4256), "S10180C130.s10180c130f15");
    check_field_offset(lv, s10180c130f16, ABISELECT(6344,4532), "S10180C130.s10180c130f16");
    check_field_offset(lv, s10180c130f17, ABISELECT(7288,5180), "S10180C130.s10180c130f17");
    check_field_offset(lv, s10180c130f18, ABISELECT(7296,5184), "S10180C130.s10180c130f18");
    check_field_offset(lv, s10180c130f19, ABISELECT(7304,5188), "S10180C130.s10180c130f19");
    check_field_offset(lv, s10180c130f20, ABISELECT(7344,5220), "S10180C130.s10180c130f20");
    check_field_offset(lv, s10180c130f21, ABISELECT(9776,6924), "S10180C130.s10180c130f21");
    check_field_offset(lv, s10180c130f22, ABISELECT(11192,7900), "S10180C130.s10180c130f22");
    check_field_offset(lv, s10180c130f23, ABISELECT(11216,7916), "S10180C130.s10180c130f23");
    check_field_offset(lv, s10180c130f24, ABISELECT(11448,8080), "S10180C130.s10180c130f24");
    check_field_offset(lv, s10180c130f25, ABISELECT(11752,8304), "S10180C130.s10180c130f25");
    check_field_offset(lv, s10180c130f26, ABISELECT(11984,8468), "S10180C130.s10180c130f26");
    check_field_offset(lv, s10180c130f27, ABISELECT(12216,8632), "S10180C130.s10180c130f27");
    check_field_offset(lv, s10180c130f28, ABISELECT(12224,8636), "S10180C130.s10180c130f28");
    check_field_offset(lv, s10180c130f29, ABISELECT(12248,8652), "S10180C130.s10180c130f29");
    check_field_offset(lv, s10180c130f30, ABISELECT(12256,8656), "S10180C130.s10180c130f30");
    check_field_offset(lv, s10180c130f31, ABISELECT(12544,8880), "S10180C130.s10180c130f31");
    check_field_offset(lv, s10180c130f32, ABISELECT(12560,8888), "S10180C130.s10180c130f32");
    test_class_info(&lv, &cd_S10180C130);
    dp->~S10180C130();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C130(Test_S10180C130, "S10180C130", ABISELECT(12568,8892));

#else // __cplusplus

extern void _ZN10S10180C130C1Ev();
extern void _ZN10S10180C130D1Ev();
Name_Map name_map_S10180C130[] = {
  NSPAIR(_ZN10S10180C130C1Ev),
  NSPAIR(_ZN10S10180C130D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
static Base_Class bases_S10180C130[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    12, //bcp->virtual_function_table_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},
  {&cd_S10180C2,    ABISELECT(144,96), //bcp->offset
    40, //bcp->virtual_function_table_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 _ZTI10S10180C130[];
extern void _ZN10S10180C130D1Ev();
extern void _ZN10S10180C130D0Ev();
extern void _ZN10S10180C1304v238Ev();
extern void _ZN10S10180C1304v239Ev();
extern void _ZN10S10180C1304v240Ev();
extern void _ZN10S10180C1304v241Ev();
extern void _ZN10S10180C1304v242Ev();
extern void _ZN10S10180C1304v243Ev();
extern void _ZN10S10180C1304v244Ev();
extern void _ZN10S10180C1304v245Ev();
extern void ABISELECT(_ZThn48_N10S10180C130D1Ev,_ZThn32_N10S10180C130D1Ev)();
extern void ABISELECT(_ZThn48_N10S10180C130D0Ev,_ZThn32_N10S10180C130D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void ABISELECT(_ZThn144_N10S10180C130D1Ev,_ZThn96_N10S10180C130D1Ev)();
extern void ABISELECT(_ZThn144_N10S10180C130D0Ev,_ZThn96_N10S10180C130D0Ev)();
extern void _ZN8S10180C22v7Ev();
static  VTBL_ENTRY vtc_S10180C130[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C130[0]),
  (VTBL_ENTRY)&_ZN10S10180C130D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C130D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1304v238Ev,
  (VTBL_ENTRY)&_ZN10S10180C1304v239Ev,
  (VTBL_ENTRY)&_ZN10S10180C1304v240Ev,
  (VTBL_ENTRY)&_ZN10S10180C1304v241Ev,
  (VTBL_ENTRY)&_ZN10S10180C1304v242Ev,
  (VTBL_ENTRY)&_ZN10S10180C1304v243Ev,
  (VTBL_ENTRY)&_ZN10S10180C1304v244Ev,
  (VTBL_ENTRY)&_ZN10S10180C1304v245Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10180C130[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C130D1Ev,_ZThn32_N10S10180C130D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C130D0Ev,_ZThn32_N10S10180C130D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI10S10180C130[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C130D1Ev,_ZThn96_N10S10180C130D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C130D0Ev,_ZThn96_N10S10180C130D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
};
extern VTBL_ENTRY _ZTI10S10180C130[];
extern  VTBL_ENTRY _ZTV10S10180C130[];
Class_Descriptor cd_S10180C130 = {  "S10180C130", // class name
  bases_S10180C130, 3,
  &(vtc_S10180C130[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(12568,8892), // object size
  NSPAIRA(_ZTI10S10180C130),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV10S10180C130),45, //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  S10180C168  : S10180C17 {
  void *s10180c168f0;
  ::S10180C61 s10180c168f1;
  void *s10180c168f2[4];
  int s10180c168f3;
  virtual  ~S10180C168(); // _ZN10S10180C168D1Ev
  virtual void  v367(); // _ZN10S10180C1684v367Ev
  virtual void  v368(); // _ZN10S10180C1684v368Ev
  virtual void  v369(); // _ZN10S10180C1684v369Ev
  virtual void  v370(); // _ZN10S10180C1684v370Ev
  virtual void  v371(); // _ZN10S10180C1684v371Ev
  S10180C168(); // tgen
};
//SIG(-1 S10180C168) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 v2 v3 v4 v5 Fp FC6{ m Fp} Fp[4] Fi}


 S10180C168 ::~S10180C168(){ note_dtor("S10180C168", this);}
void  S10180C168 ::v367(){vfunc_called(this, "_ZN10S10180C1684v367Ev");}
void  S10180C168 ::v368(){vfunc_called(this, "_ZN10S10180C1684v368Ev");}
void  S10180C168 ::v369(){vfunc_called(this, "_ZN10S10180C1684v369Ev");}
void  S10180C168 ::v370(){vfunc_called(this, "_ZN10S10180C1684v370Ev");}
void  S10180C168 ::v371(){vfunc_called(this, "_ZN10S10180C1684v371Ev");}
S10180C168 ::S10180C168(){ note_ctor("S10180C168", this);} // tgen

static void Test_S10180C168()
{
  extern Class_Descriptor cd_S10180C168;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,16)];
    init_test(&cd_S10180C168, buf);
    S10180C168 *dp, &lv = *(dp=new (buf) S10180C168());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S10180C168)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C168)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C168");
    check_field_offset(lv, s10180c168f0, ABISELECT(48,32), "S10180C168.s10180c168f0");
    check_field_offset(lv, s10180c168f1, ABISELECT(56,36), "S10180C168.s10180c168f1");
    check_field_offset(lv, s10180c168f2, ABISELECT(64,40), "S10180C168.s10180c168f2");
    check_field_offset(lv, s10180c168f3, ABISELECT(96,56), "S10180C168.s10180c168f3");
    test_class_info(&lv, &cd_S10180C168);
    dp->~S10180C168();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C168(Test_S10180C168, "S10180C168", ABISELECT(104,60));

#else // __cplusplus

extern void _ZN10S10180C168C1Ev();
extern void _ZN10S10180C168D1Ev();
Name_Map name_map_S10180C168[] = {
  NSPAIR(_ZN10S10180C168C1Ev),
  NSPAIR(_ZN10S10180C168D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10180C168[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C168[];
extern void _ZN10S10180C168D1Ev();
extern void _ZN10S10180C168D0Ev();
extern void _ZN10S10180C1684v367Ev();
extern void _ZN10S10180C1684v368Ev();
extern void _ZN10S10180C1684v369Ev();
extern void _ZN10S10180C1684v370Ev();
extern void _ZN10S10180C1684v371Ev();
static  VTBL_ENTRY vtc_S10180C168[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C168[0]),
  (VTBL_ENTRY)&_ZN10S10180C168D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C168D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1684v367Ev,
  (VTBL_ENTRY)&_ZN10S10180C1684v368Ev,
  (VTBL_ENTRY)&_ZN10S10180C1684v369Ev,
  (VTBL_ENTRY)&_ZN10S10180C1684v370Ev,
  (VTBL_ENTRY)&_ZN10S10180C1684v371Ev,
};
extern VTBL_ENTRY _ZTI10S10180C168[];
extern  VTBL_ENTRY _ZTV10S10180C168[];
Class_Descriptor cd_S10180C168 = {  "S10180C168", // class name
  bases_S10180C168, 1,
  &(vtc_S10180C168[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,60), // object size
  NSPAIRA(_ZTI10S10180C168),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C168),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  S10180C169  {
  int s10180c169f0[2];
  void  mf10180c169(); // _ZN10S10180C16911mf10180c169Ev
};
//SIG(-1 S10180C169) C1{ m Fi[2]}


void  S10180C169 ::mf10180c169(){}

static void Test_S10180C169()
{
  {
    init_simple_test("S10180C169");
    S10180C169 lv;
    check2(sizeof(lv), 8, "sizeof(S10180C169)");
    check2(__alignof__(lv), 4, "__alignof__(S10180C169)");
    check_field_offset(lv, s10180c169f0, 0, "S10180C169.s10180c169f0");
  }
}
static Arrange_To_Call_Me vS10180C169(Test_S10180C169, "S10180C169", 8);

#else // __cplusplus

Class_Descriptor cd_S10180C169 = {  "S10180C169", // class name
  0,0,//no base classes
  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  S10180C167  : S10180C168 {
  void *s10180c167f0[2];
  int s10180c167f1[4];
  ::S10180C61 s10180c167f2;
  ::S10180C169 s10180c167f3;
  ::S10180C169 s10180c167f4;
  char s10180c167f5[2];
  ::S10180C61 s10180c167f6;
  ::S10180C147 s10180c167f7;
  int s10180c167f8;
  virtual  ~S10180C167(); // _ZN10S10180C167D1Ev
  virtual void  v362(); // _ZN10S10180C1674v362Ev
  virtual void  v363(); // _ZN10S10180C1674v363Ev
  virtual void  v364(); // _ZN10S10180C1674v364Ev
  virtual void  v365(); // _ZN10S10180C1674v365Ev
  virtual void  v366(); // _ZN10S10180C1674v366Ev
  S10180C167(); // tgen
};
//SIG(-1 S10180C167) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v6 v7 v8 v9 v10 Fp FC7{ m Fp} Fp[4] Fi} vd v1 v2 v3 v4 v5 Fp[2] Fi[4] FC7 FC8{ m Fi[2]} FC8 Fc[2] FC7 FC9{ m FC10{ m FL}} Fi}


 S10180C167 ::~S10180C167(){ note_dtor("S10180C167", this);}
void  S10180C167 ::v362(){vfunc_called(this, "_ZN10S10180C1674v362Ev");}
void  S10180C167 ::v363(){vfunc_called(this, "_ZN10S10180C1674v363Ev");}
void  S10180C167 ::v364(){vfunc_called(this, "_ZN10S10180C1674v364Ev");}
void  S10180C167 ::v365(){vfunc_called(this, "_ZN10S10180C1674v365Ev");}
void  S10180C167 ::v366(){vfunc_called(this, "_ZN10S10180C1674v366Ev");}
S10180C167 ::S10180C167(){ note_ctor("S10180C167", this);} // tgen

static void Test_S10180C167()
{
  extern Class_Descriptor cd_S10180C167;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,32)];
    init_test(&cd_S10180C167, buf);
    S10180C167 *dp, &lv = *(dp=new (buf) S10180C167());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S10180C167)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C167)");
    check_base_class_offset(lv, (S10180C17*)(S10180C168*), 0, "S10180C167");
    check_base_class_offset(lv, (S10180C168*), 0, "S10180C167");
    check_field_offset(lv, s10180c167f0, ABISELECT(104,60), "S10180C167.s10180c167f0");
    check_field_offset(lv, s10180c167f1, ABISELECT(120,68), "S10180C167.s10180c167f1");
    check_field_offset(lv, s10180c167f2, ABISELECT(136,84), "S10180C167.s10180c167f2");
    check_field_offset(lv, s10180c167f3, ABISELECT(144,88), "S10180C167.s10180c167f3");
    check_field_offset(lv, s10180c167f4, ABISELECT(152,96), "S10180C167.s10180c167f4");
    check_field_offset(lv, s10180c167f5, ABISELECT(160,104), "S10180C167.s10180c167f5");
    check_field_offset(lv, s10180c167f6, ABISELECT(168,108), "S10180C167.s10180c167f6");
    check_field_offset(lv, s10180c167f7, ABISELECT(176,112), "S10180C167.s10180c167f7");
    check_field_offset(lv, s10180c167f8, ABISELECT(184,120), "S10180C167.s10180c167f8");
    test_class_info(&lv, &cd_S10180C167);
    dp->~S10180C167();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C167(Test_S10180C167, "S10180C167", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN10S10180C167C1Ev();
extern void _ZN10S10180C167D1Ev();
Name_Map name_map_S10180C167[] = {
  NSPAIR(_ZN10S10180C167C1Ev),
  NSPAIR(_ZN10S10180C167D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C168;
extern VTBL_ENTRY _ZTI10S10180C168[];
extern  VTBL_ENTRY _ZTV10S10180C168[];
static Base_Class bases_S10180C167[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C168,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C167[];
extern void _ZN10S10180C167D1Ev();
extern void _ZN10S10180C167D0Ev();
extern void _ZN10S10180C1684v367Ev();
extern void _ZN10S10180C1684v368Ev();
extern void _ZN10S10180C1684v369Ev();
extern void _ZN10S10180C1684v370Ev();
extern void _ZN10S10180C1684v371Ev();
extern void _ZN10S10180C1674v362Ev();
extern void _ZN10S10180C1674v363Ev();
extern void _ZN10S10180C1674v364Ev();
extern void _ZN10S10180C1674v365Ev();
extern void _ZN10S10180C1674v366Ev();
static  VTBL_ENTRY vtc_S10180C167[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C167[0]),
  (VTBL_ENTRY)&_ZN10S10180C167D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C167D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1684v367Ev,
  (VTBL_ENTRY)&_ZN10S10180C1684v368Ev,
  (VTBL_ENTRY)&_ZN10S10180C1684v369Ev,
  (VTBL_ENTRY)&_ZN10S10180C1684v370Ev,
  (VTBL_ENTRY)&_ZN10S10180C1684v371Ev,
  (VTBL_ENTRY)&_ZN10S10180C1674v362Ev,
  (VTBL_ENTRY)&_ZN10S10180C1674v363Ev,
  (VTBL_ENTRY)&_ZN10S10180C1674v364Ev,
  (VTBL_ENTRY)&_ZN10S10180C1674v365Ev,
  (VTBL_ENTRY)&_ZN10S10180C1674v366Ev,
};
extern VTBL_ENTRY _ZTI10S10180C167[];
extern  VTBL_ENTRY _ZTV10S10180C167[];
Class_Descriptor cd_S10180C167 = {  "S10180C167", // class name
  bases_S10180C167, 2,
  &(vtc_S10180C167[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI10S10180C167),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C167),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  S10180C171  {
  ::S10180C161 s10180c171f0;
  int s10180c171f1;
  void  mf10180c171(); // _ZN10S10180C17111mf10180c171Ev
};
//SIG(-1 S10180C171) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fi}


void  S10180C171 ::mf10180c171(){}

static void Test_S10180C171()
{
  {
    init_simple_test("S10180C171");
    S10180C171 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S10180C171)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C171)");
    check_field_offset(lv, s10180c171f0, 0, "S10180C171.s10180c171f0");
    check_field_offset(lv, s10180c171f1, ABISELECT(24,16), "S10180C171.s10180c171f1");
  }
}
static Arrange_To_Call_Me vS10180C171(Test_S10180C171, "S10180C171", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C170  : S10180C17 , S10180C11 {
  void *s10180c170f0;
  ::S10180C171 s10180c170f1;
  int s10180c170f2;
  void *s10180c170f3;
  char s10180c170f4;
  virtual  ~S10180C170(); // _ZN10S10180C170D1Ev
  virtual void  v372(); // _ZN10S10180C1704v372Ev
  virtual void  v373(); // _ZN10S10180C1704v373Ev
  virtual void  v374(); // _ZN10S10180C1704v374Ev
  virtual void  v375(); // _ZN10S10180C1704v375Ev
  virtual void  v376(); // _ZN10S10180C1704v376Ev
  S10180C170(); // tgen
};
//SIG(-1 S10180C170) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 Fp FC10{ m FC11{ m Fp Fi[2] FC12{ m}} Fi} Fi Fp Fc}


 S10180C170 ::~S10180C170(){ note_dtor("S10180C170", this);}
void  S10180C170 ::v372(){vfunc_called(this, "_ZN10S10180C1704v372Ev");}
void  S10180C170 ::v373(){vfunc_called(this, "_ZN10S10180C1704v373Ev");}
void  S10180C170 ::v374(){vfunc_called(this, "_ZN10S10180C1704v374Ev");}
void  S10180C170 ::v375(){vfunc_called(this, "_ZN10S10180C1704v375Ev");}
void  S10180C170 ::v376(){vfunc_called(this, "_ZN10S10180C1704v376Ev");}
S10180C170 ::S10180C170(){ note_ctor("S10180C170", this);} // tgen

static void Test_S10180C170()
{
  extern Class_Descriptor cd_S10180C170;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,34)];
    init_test(&cd_S10180C170, buf);
    S10180C170 *dp, &lv = *(dp=new (buf) S10180C170());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,132), "sizeof(S10180C170)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C170)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C170");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C170");
    check_field_offset(lv, s10180c170f0, ABISELECT(144,96), "S10180C170.s10180c170f0");
    check_field_offset(lv, s10180c170f1, ABISELECT(152,100), "S10180C170.s10180c170f1");
    check_field_offset(lv, s10180c170f2, ABISELECT(184,120), "S10180C170.s10180c170f2");
    check_field_offset(lv, s10180c170f3, ABISELECT(192,124), "S10180C170.s10180c170f3");
    check_field_offset(lv, s10180c170f4, ABISELECT(200,128), "S10180C170.s10180c170f4");
    test_class_info(&lv, &cd_S10180C170);
    dp->~S10180C170();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C170(Test_S10180C170, "S10180C170", ABISELECT(208,132));

#else // __cplusplus

extern void _ZN10S10180C170C1Ev();
extern void _ZN10S10180C170D1Ev();
Name_Map name_map_S10180C170[] = {
  NSPAIR(_ZN10S10180C170C1Ev),
  NSPAIR(_ZN10S10180C170D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
static Base_Class bases_S10180C170[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //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 _ZTI10S10180C170[];
extern void _ZN10S10180C170D1Ev();
extern void _ZN10S10180C170D0Ev();
extern void _ZN10S10180C1704v372Ev();
extern void _ZN10S10180C1704v373Ev();
extern void _ZN10S10180C1704v374Ev();
extern void _ZN10S10180C1704v375Ev();
extern void _ZN10S10180C1704v376Ev();
extern void ABISELECT(_ZThn48_N10S10180C170D1Ev,_ZThn32_N10S10180C170D1Ev)();
extern void ABISELECT(_ZThn48_N10S10180C170D0Ev,_ZThn32_N10S10180C170D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
static  VTBL_ENTRY vtc_S10180C170[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C170[0]),
  (VTBL_ENTRY)&_ZN10S10180C170D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C170D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1704v372Ev,
  (VTBL_ENTRY)&_ZN10S10180C1704v373Ev,
  (VTBL_ENTRY)&_ZN10S10180C1704v374Ev,
  (VTBL_ENTRY)&_ZN10S10180C1704v375Ev,
  (VTBL_ENTRY)&_ZN10S10180C1704v376Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10180C170[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C170D1Ev,_ZThn32_N10S10180C170D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C170D0Ev,_ZThn32_N10S10180C170D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
};
extern VTBL_ENTRY _ZTI10S10180C170[];
extern  VTBL_ENTRY _ZTV10S10180C170[];
Class_Descriptor cd_S10180C170 = {  "S10180C170", // class name
  bases_S10180C170, 2,
  &(vtc_S10180C170[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,132), // object size
  NSPAIRA(_ZTI10S10180C170),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S10180C170),37, //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  S10180C166  : S10180C17 , S10180C11 , S10180C2 , S10180C80 {
  void *s10180c166f0[2];
  ::S10180C61 s10180c166f1;
  int s10180c166f2[2];
  ::S10180C167 s10180c166f3;
  void *s10180c166f4;
  ::S10180C170 s10180c166f5;
  char s10180c166f6;
  ::S10180C31 s10180c166f7;
  char s10180c166f8[2];
  virtual  ~S10180C166(); // _ZN10S10180C166D1Ev
  virtual void  v354(); // _ZN10S10180C1664v354Ev
  virtual void  v355(); // _ZN10S10180C1664v355Ev
  virtual void  v356(); // _ZN10S10180C1664v356Ev
  virtual void  v357(); // _ZN10S10180C1664v357Ev
  virtual void  v358(); // _ZN10S10180C1664v358Ev
  virtual void  v359(); // _ZN10S10180C1664v359Ev
  virtual void  v360(); // _ZN10S10180C1664v360Ev
  virtual void  v361(); // _ZN10S10180C1664v361Ev
  S10180C166(); // tgen
};
//SIG(-1 S10180C166) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC10{ vd v33} BC11{ BC12{ vd v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48} BC13{ vd m Fp}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2] FC14{ m Fp} Fi[2] FC15{ BC16{ BC2 vd v54 v55 v56 v57 v58 Fp FC14 Fp[4] Fi} vd v49 v50 v51 v52 v53 Fp[2] Fi[4] FC14 FC17{ m Fi[2]} FC17 Fc[2] FC14 FC18{ m FC19{ m FL}} Fi} Fp FC20{ BC2 BC6 vd v59 v60 v61 v62 v63 Fp FC21{ m FC22{ m Fp Fi[2] FC23{ m}} Fi} Fi Fp Fc} Fc FC24{ m FC25{ m Fp Fi[2] FC5} Fp[2]} Fc[2]}


 S10180C166 ::~S10180C166(){ note_dtor("S10180C166", this);}
void  S10180C166 ::v354(){vfunc_called(this, "_ZN10S10180C1664v354Ev");}
void  S10180C166 ::v355(){vfunc_called(this, "_ZN10S10180C1664v355Ev");}
void  S10180C166 ::v356(){vfunc_called(this, "_ZN10S10180C1664v356Ev");}
void  S10180C166 ::v357(){vfunc_called(this, "_ZN10S10180C1664v357Ev");}
void  S10180C166 ::v358(){vfunc_called(this, "_ZN10S10180C1664v358Ev");}
void  S10180C166 ::v359(){vfunc_called(this, "_ZN10S10180C1664v359Ev");}
void  S10180C166 ::v360(){vfunc_called(this, "_ZN10S10180C1664v360Ev");}
void  S10180C166 ::v361(){vfunc_called(this, "_ZN10S10180C1664v361Ev");}
S10180C166 ::S10180C166(){ note_ctor("S10180C166", this);} // tgen

static void Test_S10180C166()
{
  extern Class_Descriptor cd_S10180C166;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(85,107)];
    init_test(&cd_S10180C166, buf);
    S10180C166 *dp, &lv = *(dp=new (buf) S10180C166());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,424), "sizeof(S10180C166)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C166)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C166");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C166");
    check_base_class_offset(lv, (S10180C2*), ABISELECT(144,96), "S10180C166");
    check_base_class_offset(lv, (S10180C81*)(S10180C80*), ABISELECT(152,100), "S10180C166");
    check_base_class_offset(lv, (S10180C82*)(S10180C80*), ABISELECT(160,104), "S10180C166");
    check_base_class_offset(lv, (S10180C80*), ABISELECT(152,100), "S10180C166");
    check_field_offset(lv, s10180c166f0, ABISELECT(176,112), "S10180C166.s10180c166f0");
    check_field_offset(lv, s10180c166f1, ABISELECT(192,120), "S10180C166.s10180c166f1");
    check_field_offset(lv, s10180c166f2, ABISELECT(200,124), "S10180C166.s10180c166f2");
    check_field_offset(lv, s10180c166f3, ABISELECT(208,132), "S10180C166.s10180c166f3");
    check_field_offset(lv, s10180c166f4, ABISELECT(400,256), "S10180C166.s10180c166f4");
    check_field_offset(lv, s10180c166f5, ABISELECT(408,260), "S10180C166.s10180c166f5");
    check_field_offset(lv, s10180c166f6, ABISELECT(616,392), "S10180C166.s10180c166f6");
    check_field_offset(lv, s10180c166f7, ABISELECT(624,396), "S10180C166.s10180c166f7");
    check_field_offset(lv, s10180c166f8, ABISELECT(664,420), "S10180C166.s10180c166f8");
    test_class_info(&lv, &cd_S10180C166);
    dp->~S10180C166();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C166(Test_S10180C166, "S10180C166", ABISELECT(672,424));

#else // __cplusplus

extern void _ZN10S10180C166C1Ev();
extern void _ZN10S10180C166D1Ev();
Name_Map name_map_S10180C166[] = {
  NSPAIR(_ZN10S10180C166C1Ev),
  NSPAIR(_ZN10S10180C166D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
extern Class_Descriptor cd_S10180C81;
extern VTBL_ENTRY _ZTI9S10180C81[];
extern  VTBL_ENTRY _ZTV9S10180C81[];
extern Class_Descriptor cd_S10180C82;
extern VTBL_ENTRY _ZTI9S10180C82[];
extern  VTBL_ENTRY _ZTV9S10180C82[];
extern Class_Descriptor cd_S10180C80;
extern VTBL_ENTRY _ZTI9S10180C80[];
extern  VTBL_ENTRY _ZTV9S10180C80[];
static Base_Class bases_S10180C166[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    12, //bcp->virtual_function_table_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},
  {&cd_S10180C2,    ABISELECT(144,96), //bcp->offset
    40, //bcp->virtual_function_table_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},
  {&cd_S10180C81,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S10180C82,    ABISELECT(160,104), //bcp->offset
    64, //bcp->virtual_function_table_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_S10180C80,    ABISELECT(152,100), //bcp->offset
    45, //bcp->virtual_function_table_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 _ZTI10S10180C166[];
extern void _ZN10S10180C166D1Ev();
extern void _ZN10S10180C166D0Ev();
extern void _ZN10S10180C1664v354Ev();
extern void _ZN10S10180C1664v355Ev();
extern void _ZN10S10180C1664v356Ev();
extern void _ZN10S10180C1664v357Ev();
extern void _ZN10S10180C1664v358Ev();
extern void _ZN10S10180C1664v359Ev();
extern void _ZN10S10180C1664v360Ev();
extern void _ZN10S10180C1664v361Ev();
extern void ABISELECT(_ZThn48_N10S10180C166D1Ev,_ZThn32_N10S10180C166D1Ev)();
extern void ABISELECT(_ZThn48_N10S10180C166D0Ev,_ZThn32_N10S10180C166D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
extern void ABISELECT(_ZThn144_N10S10180C166D1Ev,_ZThn96_N10S10180C166D1Ev)();
extern void ABISELECT(_ZThn144_N10S10180C166D0Ev,_ZThn96_N10S10180C166D0Ev)();
extern void _ZN8S10180C22v7Ev();
extern void ABISELECT(_ZThn152_N10S10180C166D1Ev,_ZThn100_N10S10180C166D1Ev)();
extern void ABISELECT(_ZThn152_N10S10180C166D0Ev,_ZThn100_N10S10180C166D0Ev)();
extern void _ZN9S10180C813v99Ev();
extern void _ZN9S10180C814v100Ev();
extern void _ZN9S10180C814v101Ev();
extern void _ZN9S10180C814v102Ev();
extern void _ZN9S10180C814v103Ev();
extern void _ZN9S10180C814v104Ev();
extern void _ZN9S10180C814v105Ev();
extern void _ZN9S10180C814v106Ev();
extern void _ZN9S10180C814v107Ev();
extern void _ZN9S10180C814v108Ev();
extern void _ZN9S10180C814v109Ev();
extern void _ZN9S10180C814v110Ev();
extern void _ZN9S10180C814v111Ev();
extern void _ZN9S10180C814v112Ev();
extern void _ZN9S10180C814v113Ev();
extern void ABISELECT(_ZThn160_N10S10180C166D1Ev,_ZThn104_N10S10180C166D1Ev)();
extern void ABISELECT(_ZThn160_N10S10180C166D0Ev,_ZThn104_N10S10180C166D0Ev)();
static  VTBL_ENTRY vtc_S10180C166[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C166[0]),
  (VTBL_ENTRY)&_ZN10S10180C166D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C166D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1664v354Ev,
  (VTBL_ENTRY)&_ZN10S10180C1664v355Ev,
  (VTBL_ENTRY)&_ZN10S10180C1664v356Ev,
  (VTBL_ENTRY)&_ZN10S10180C1664v357Ev,
  (VTBL_ENTRY)&_ZN10S10180C1664v358Ev,
  (VTBL_ENTRY)&_ZN10S10180C1664v359Ev,
  (VTBL_ENTRY)&_ZN10S10180C1664v360Ev,
  (VTBL_ENTRY)&_ZN10S10180C1664v361Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10180C166[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C166D1Ev,_ZThn32_N10S10180C166D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C166D0Ev,_ZThn32_N10S10180C166D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI10S10180C166[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C166D1Ev,_ZThn96_N10S10180C166D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10180C166D0Ev,_ZThn96_N10S10180C166D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI10S10180C166[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N10S10180C166D1Ev,_ZThn100_N10S10180C166D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N10S10180C166D0Ev,_ZThn100_N10S10180C166D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C813v99Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v100Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v101Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v102Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v103Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v104Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v105Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v106Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v107Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v108Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v109Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v110Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v111Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v112Ev,
  (VTBL_ENTRY)&_ZN9S10180C814v113Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI10S10180C166[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N10S10180C166D1Ev,_ZThn104_N10S10180C166D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N10S10180C166D0Ev,_ZThn104_N10S10180C166D0Ev),
};
extern VTBL_ENTRY _ZTI10S10180C166[];
extern  VTBL_ENTRY _ZTV10S10180C166[];
Class_Descriptor cd_S10180C166 = {  "S10180C166", // class name
  bases_S10180C166, 6,
  &(vtc_S10180C166[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(672,424), // object size
  NSPAIRA(_ZTI10S10180C166),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV10S10180C166),68, //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  S10180C174  : S10180C17 {
  void *s10180c174f0;
  virtual  ~S10180C174(); // _ZN10S10180C174D1Ev
  S10180C174(); // tgen
};
//SIG(-1 S10180C174) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd Fp}


 S10180C174 ::~S10180C174(){ note_dtor("S10180C174", this);}
S10180C174 ::S10180C174(){ note_ctor("S10180C174", this);} // tgen

static void Test_S10180C174()
{
  extern Class_Descriptor cd_S10180C174;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S10180C174, buf);
    S10180C174 *dp, &lv = *(dp=new (buf) S10180C174());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S10180C174)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C174)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C174");
    check_field_offset(lv, s10180c174f0, ABISELECT(48,32), "S10180C174.s10180c174f0");
    test_class_info(&lv, &cd_S10180C174);
    dp->~S10180C174();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C174(Test_S10180C174, "S10180C174", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN10S10180C174C1Ev();
extern void _ZN10S10180C174D1Ev();
Name_Map name_map_S10180C174[] = {
  NSPAIR(_ZN10S10180C174C1Ev),
  NSPAIR(_ZN10S10180C174D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10180C174[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C174[];
extern void _ZN10S10180C174D1Ev();
extern void _ZN10S10180C174D0Ev();
static  VTBL_ENTRY vtc_S10180C174[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C174[0]),
  (VTBL_ENTRY)&_ZN10S10180C174D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C174D0Ev,
};
extern VTBL_ENTRY _ZTI10S10180C174[];
extern  VTBL_ENTRY _ZTV10S10180C174[];
Class_Descriptor cd_S10180C174 = {  "S10180C174", // class name
  bases_S10180C174, 1,
  &(vtc_S10180C174[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI10S10180C174),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C174),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  S10180C175  : S10180C17 , S10180C11 {
  virtual  ~S10180C175(); // _ZN10S10180C175D1Ev
  virtual void  v377(); // _ZN10S10180C1754v377Ev
  virtual void  v378(); // _ZN10S10180C1754v378Ev
  virtual void  v379(); // _ZN10S10180C1754v379Ev
  virtual void  v380(); // _ZN10S10180C1754v380Ev
  S10180C175(); // tgen
};
//SIG(-1 S10180C175) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4}


 S10180C175 ::~S10180C175(){ note_dtor("S10180C175", this);}
void  S10180C175 ::v377(){vfunc_called(this, "_ZN10S10180C1754v377Ev");}
void  S10180C175 ::v378(){vfunc_called(this, "_ZN10S10180C1754v378Ev");}
void  S10180C175 ::v379(){vfunc_called(this, "_ZN10S10180C1754v379Ev");}
void  S10180C175 ::v380(){vfunc_called(this, "_ZN10S10180C1754v380Ev");}
S10180C175 ::S10180C175(){ note_ctor("S10180C175", this);} // tgen

static void Test_S10180C175()
{
  extern Class_Descriptor cd_S10180C175;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S10180C175, buf);
    S10180C175 *dp, &lv = *(dp=new (buf) S10180C175());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S10180C175)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C175)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10180C175");
    check_base_class_offset(lv, (S10180C11*), ABISELECT(48,32), "S10180C175");
    test_class_info(&lv, &cd_S10180C175);
    dp->~S10180C175();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C175(Test_S10180C175, "S10180C175", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN10S10180C175C1Ev();
extern void _ZN10S10180C175D1Ev();
Name_Map name_map_S10180C175[] = {
  NSPAIR(_ZN10S10180C175C1Ev),
  NSPAIR(_ZN10S10180C175D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10180C11;
extern VTBL_ENTRY _ZTI9S10180C11[];
extern  VTBL_ENTRY _ZTV9S10180C11[];
static Base_Class bases_S10180C175[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C11,    ABISELECT(48,32), //bcp->offset
    8, //bcp->virtual_function_table_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 _ZTI10S10180C175[];
extern void _ZN10S10180C175D1Ev();
extern void _ZN10S10180C175D0Ev();
extern void _ZN10S10180C1754v377Ev();
extern void _ZN10S10180C1754v378Ev();
extern void _ZN10S10180C1754v379Ev();
extern void _ZN10S10180C1754v380Ev();
extern void ABISELECT(_ZThn48_N10S10180C175D1Ev,_ZThn32_N10S10180C175D1Ev)();
extern void ABISELECT(_ZThn48_N10S10180C175D0Ev,_ZThn32_N10S10180C175D0Ev)();
extern void _ZN9S10180C113v15Ev();
extern void _ZN9S10180C113v16Ev();
extern void _ZN9S10180C113v17Ev();
extern void _ZN9S10180C113v18Ev();
extern void _ZN9S10180C113v19Ev();
extern void _ZN9S10180C113v20Ev();
extern void _ZN9S10180C113v21Ev();
extern void _ZN9S10180C113v22Ev();
extern void _ZN9S10180C113v23Ev();
extern void _ZN9S10180C113v24Ev();
extern void _ZN9S10180C113v25Ev();
extern void _ZN9S10180C113v26Ev();
extern void _ZN9S10180C113v27Ev();
extern void _ZN9S10180C113v28Ev();
extern void _ZN9S10180C113v29Ev();
extern void _ZN9S10180C113v30Ev();
extern void _ZN9S10180C113v31Ev();
extern void _ZN9S10180C113v32Ev();
extern void _ZN9S10180C113v33Ev();
extern void _ZN9S10180C113v34Ev();
extern void _ZN9S10180C113v35Ev();
extern void _ZN9S10180C113v36Ev();
extern void _ZN9S10180C113v37Ev();
extern void _ZN9S10180C113v38Ev();
static  VTBL_ENTRY vtc_S10180C175[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C175[0]),
  (VTBL_ENTRY)&_ZN10S10180C175D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C175D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1754v377Ev,
  (VTBL_ENTRY)&_ZN10S10180C1754v378Ev,
  (VTBL_ENTRY)&_ZN10S10180C1754v379Ev,
  (VTBL_ENTRY)&_ZN10S10180C1754v380Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10180C175[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C175D1Ev,_ZThn32_N10S10180C175D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10180C175D0Ev,_ZThn32_N10S10180C175D0Ev),
  (VTBL_ENTRY)&_ZN9S10180C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10180C113v38Ev,
};
extern VTBL_ENTRY _ZTI10S10180C175[];
extern  VTBL_ENTRY _ZTV10S10180C175[];
Class_Descriptor cd_S10180C175 = {  "S10180C175", // class name
  bases_S10180C175, 2,
  &(vtc_S10180C175[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI10S10180C175),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S10180C175),36, //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  S10180C129  : S10180C2 , S10180C17 {
  void *s10180c129f0[6];
  ::S10180C130 s10180c129f1;
  ::S10180C79 s10180c129f2;
  ::S10180C166 s10180c129f3;
  ::S10180C174 s10180c129f4;
  ::S10180C175 s10180c129f5;
  ::S10180C87 s10180c129f6;
  void *s10180c129f7;
  int s10180c129f8;
  void *s10180c129f9;
  int s10180c129f10;
  virtual  ~S10180C129(); // _ZN10S10180C129D1Ev
  virtual void  v237(); // _ZN10S10180C1294v237Ev
  S10180C129(); // tgen
};
//SIG(-1 S10180C129) C1{ BC2{ vd v2} BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v1 Fp[6] FC7{ BC3 BC8{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fp FC9{ m FC10{ m Fp Fi FC5} Fi} FC11{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC2 vd v3 v4 v5 v6 v7 v8 v9 v10 FC12{ m FC13{ m Fp Fi[2] FC6} Fp[2]} Fp FC14{ BC15{ BC3 vd v37 v38 v39 v40 FC16{ m Fp FC9 FC10 FC10 Fi[3] FC17{ m FC18{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC9 FC9 Fc} Fp Fc Fi} v35 v36} FC19{ BC20{ BC3 BC8 vd v46 v47 v48 v49 v50 v51} BC2 vd v41 v42 v43 v44 v45 FC21{ m Fi Fp Fi FC17} FC13} FC22{ m Fp} FC23{ vd v52 v53 FC24{ m Fp Fi[2] FC25{ m}} FC26{ m Fi[4]}[3] Fp[2] Fi Fc} FC27{ BC2 vd v54 Fp[2] FC28{ m Fp Fi FC25 FC29{ m}} FC30{ BC3 vd v55 v56 v57 v58 FC31{ m Fp[2] FC10 FC24 Fi[2]}}} FC32{ BC3 vd v59 Fp FC9 FC9 Fp Fi FC17} FC33{ BC34{ BC35{ BC3 vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fp[2] FC36{ m Fp} Fc[2] Fp FC37{ m FC17 FC17 FC38{ m FC39{ m FL}} FC38 FC17 FC17} FC9 Fp[4] FC12} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 FC40{ vd m Fi[2] FC10 FC10 FC10 FC10 FC41{ m Fp[2]} FL[2]} Fp} vd v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi[3]} FC42{ BC35 vd v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 FC40 Fp} FC43{ BC34 vd v127 v128} FC43 FC44{ BC35 vd v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 Fi[2] FL Fi}[9] FC45{ BC34 vd v141 v142 v143} FC45 FC46{ BC34 vd v144 v145} FC47{ BC3 BC2 BC8 vd v146 v147 v148 v149 Fp FC27 FC32 FC14 FC48{ BC15 v150} Fp FL FC10} Fp Fi FC49{ m FL Fc FL[2] FC50{ m Fp}} FC51{ BC3 BC8 BC2 vd v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 Fi[2] FC52{ BC15 v174} FC12 FC53{ BC15 v175 v176 v177 Fp[3]} FC54{ BC15 v178} FC55{ BC15 v179 v180} FC14 FC56{ BC3 vd v181 v182 FC57{ BC58{ BC59{ m Fp FC17 FC17 Fi[3] Fc[2] Fi Fp} FC22 FC36 FC22 FC10 FC10 FC22 FC36 FC22 FC10 FC10 FC10 Fc Fi Fp} FC10} Fi} FC48 FC60{ BC54 v183} FC48 Fp FC36 Fp[2] Fi Fc[3] Fi FL[2]} FC61{ BC3 BC8 BC2 vd v184 v185 v186 v187 v188 v189 Fi FC52 FC12 FC53 FC54 FC55 FC14 FC36 Fp[2] Fi} FC62{ m FC63{ BC64{ m Fp Fi FC65{ m} FC65}} Fi} FC55 FC66{ BC15 v190 v191 v192 FC67{ Fp[3]} FC68{ Fi[4]}[3]} FC48 FC14 Fp FC69{ m Fp Fi[2] FC29} Fi FC70{ m FC12 FC71{ Fi FC72{ Fi[2] FL Fc}[9] Fi} FC10} Fp[2] Fi} FC73{ BC3 BC8 BC2 BC74{ BC75{ vd v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241} BC76{ vd m Fp}} BC77{ vd v242 v243} BC78{ vd v244} vd v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 Fp[5] Fi Fp FC79{ m Fi[2]} FC22 FC52 FC14 FC48 FC55 FC66 FC80{ BC3 BC8 vd v245 v246 v247 v248 v249 v250 v251 v252 FC81{ m FC10 Fi[2] FC10} Fi[2] Fc[2] Fi FL[2] FC39 Fi} FC19 FC82{ BC3 BC8 vd v253 v254 v255 v256 FC12 Fp[2] FC10 Fi} FC83{ BC3 BC8 BC2 BC74 BC77 BC78 vd v257 v258 v259 v260 v261 v262 v263 v264 v265 v266 v267 v268 v269 v270 v271 v272 v273 v274 v275 FC12 Fp[2] Fi[2] FC32 FC14 FC55 FC55 FC17 FC17 FC17 Fi} FC84{ BC51 vd v276 v277 v278 v279 v280 v281 FC50 FC85{ m Fp FC36 Fp[5] FC86{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC87{ m FC88{ m Fi[2]} FC88} FC88 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC12 Fc[2] Fi FC89{ m Fc[5]} FC90{ m FC17 FC17 FC17 FC22 Fi Fc[2] Fi} FC17 FC17 FC17 Fp FC91{ BC3 vd FC92{ m Fp[3] FC79 FC10 FL[2] Fc} FC12} Fc[2] FL Fc[2] Fi FC36 FC62 Fc Fi} FC93{ BC3 BC8 BC2 BC74 vd v282 v283 v284 v285 v286 v287 v288 v289 Fp[2] FC22 Fi[2] FC94{ BC95{ BC3 vd v295 v296 v297 v298 v299 Fp FC22 Fp[4] Fi} vd v290 v291 v292 v293 v294 Fp[2] Fi[4] FC22 FC96{ m Fi[2]} FC96 Fc[2] FC22 FC38 Fi} Fp FC97{ BC3 BC8 vd v300 v301 v302 v303 v304 Fp FC98{ m FC69 Fi} Fi Fp Fc} Fc FC12 Fc[2]} FC99{ BC3 vd Fp} FC100{ BC3 BC8 vd v305 v306 v307 v308} FC55 Fp Fi Fp Fi}


 S10180C129 ::~S10180C129(){ note_dtor("S10180C129", this);}
void  S10180C129 ::v237(){vfunc_called(this, "_ZN10S10180C1294v237Ev");}
S10180C129 ::S10180C129(){ note_ctor("S10180C129", this);} // tgen

static void Test_S10180C129()
{
  extern Class_Descriptor cd_S10180C129;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2532,3548)];
    init_test(&cd_S10180C129, buf);
    S10180C129 *dp, &lv = *(dp=new (buf) S10180C129());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20248,14188), "sizeof(S10180C129)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C129)");
    check_base_class_offset(lv, (S10180C2*), 0, "S10180C129");
    check_base_class_offset(lv, (S10180C17*), ABISELECT(8,4), "S10180C129");
    check_field_offset(lv, s10180c129f0, ABISELECT(56,36), "S10180C129.s10180c129f0");
    check_field_offset(lv, s10180c129f1, ABISELECT(104,60), "S10180C129.s10180c129f1");
    check_field_offset(lv, s10180c129f2, ABISELECT(12672,8952), "S10180C129.s10180c129f2");
    check_field_offset(lv, s10180c129f3, ABISELECT(19112,13452), "S10180C129.s10180c129f3");
    check_field_offset(lv, s10180c129f4, ABISELECT(19784,13876), "S10180C129.s10180c129f4");
    check_field_offset(lv, s10180c129f5, ABISELECT(19840,13912), "S10180C129.s10180c129f5");
    check_field_offset(lv, s10180c129f6, ABISELECT(19984,14008), "S10180C129.s10180c129f6");
    check_field_offset(lv, s10180c129f7, ABISELECT(20216,14172), "S10180C129.s10180c129f7");
    check_field_offset(lv, s10180c129f8, ABISELECT(20224,14176), "S10180C129.s10180c129f8");
    check_field_offset(lv, s10180c129f9, ABISELECT(20232,14180), "S10180C129.s10180c129f9");
    check_field_offset(lv, s10180c129f10, ABISELECT(20240,14184), "S10180C129.s10180c129f10");
    test_class_info(&lv, &cd_S10180C129);
    dp->~S10180C129();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C129(Test_S10180C129, "S10180C129", ABISELECT(20248,14188));

#else // __cplusplus

extern void _ZN10S10180C129C1Ev();
extern void _ZN10S10180C129D1Ev();
Name_Map name_map_S10180C129[] = {
  NSPAIR(_ZN10S10180C129C1Ev),
  NSPAIR(_ZN10S10180C129D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10180C129[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C17,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_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 _ZTI10S10180C129[];
extern void _ZN10S10180C129D1Ev();
extern void _ZN10S10180C129D0Ev();
extern void _ZN8S10180C22v7Ev();
extern void _ZN10S10180C1294v237Ev();
extern void ABISELECT(_ZThn8_N10S10180C129D1Ev,_ZThn4_N10S10180C129D1Ev)();
extern void ABISELECT(_ZThn8_N10S10180C129D0Ev,_ZThn4_N10S10180C129D0Ev)();
static  VTBL_ENTRY vtc_S10180C129[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C129[0]),
  (VTBL_ENTRY)&_ZN10S10180C129D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C129D0Ev,
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
  (VTBL_ENTRY)&_ZN10S10180C1294v237Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI10S10180C129[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N10S10180C129D1Ev,_ZThn4_N10S10180C129D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N10S10180C129D0Ev,_ZThn4_N10S10180C129D0Ev),
};
extern VTBL_ENTRY _ZTI10S10180C129[];
extern  VTBL_ENTRY _ZTV10S10180C129[];
Class_Descriptor cd_S10180C129 = {  "S10180C129", // class name
  bases_S10180C129, 2,
  &(vtc_S10180C129[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(20248,14188), // object size
  NSPAIRA(_ZTI10S10180C129),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S10180C129),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  S10180C177  {
  virtual  ~S10180C177(); // _ZN10S10180C177D1Ev
  virtual void  v389(); // _ZN10S10180C1774v389Ev
  virtual void  v390(); // _ZN10S10180C1774v390Ev
  virtual void  v391(); // _ZN10S10180C1774v391Ev
  virtual void  v392(); // _ZN10S10180C1774v392Ev
  virtual void  v393(); // _ZN10S10180C1774v393Ev
  virtual void  v394(); // _ZN10S10180C1774v394Ev
  virtual void  v395(); // _ZN10S10180C1774v395Ev
  virtual void  v396(); // _ZN10S10180C1774v396Ev
  S10180C177(); // tgen
};
//SIG(-1 S10180C177) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8}


 S10180C177 ::~S10180C177(){ note_dtor("S10180C177", this);}
void  S10180C177 ::v389(){vfunc_called(this, "_ZN10S10180C1774v389Ev");}
void  S10180C177 ::v390(){vfunc_called(this, "_ZN10S10180C1774v390Ev");}
void  S10180C177 ::v391(){vfunc_called(this, "_ZN10S10180C1774v391Ev");}
void  S10180C177 ::v392(){vfunc_called(this, "_ZN10S10180C1774v392Ev");}
void  S10180C177 ::v393(){vfunc_called(this, "_ZN10S10180C1774v393Ev");}
void  S10180C177 ::v394(){vfunc_called(this, "_ZN10S10180C1774v394Ev");}
void  S10180C177 ::v395(){vfunc_called(this, "_ZN10S10180C1774v395Ev");}
void  S10180C177 ::v396(){vfunc_called(this, "_ZN10S10180C1774v396Ev");}
S10180C177 ::S10180C177(){ note_ctor("S10180C177", this);} // tgen

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

#else // __cplusplus

extern void _ZN10S10180C177C1Ev();
extern void _ZN10S10180C177D1Ev();
Name_Map name_map_S10180C177[] = {
  NSPAIR(_ZN10S10180C177C1Ev),
  NSPAIR(_ZN10S10180C177D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S10180C177[];
extern void _ZN10S10180C177D1Ev();
extern void _ZN10S10180C177D0Ev();
extern void _ZN10S10180C1774v389Ev();
extern void _ZN10S10180C1774v390Ev();
extern void _ZN10S10180C1774v391Ev();
extern void _ZN10S10180C1774v392Ev();
extern void _ZN10S10180C1774v393Ev();
extern void _ZN10S10180C1774v394Ev();
extern void _ZN10S10180C1774v395Ev();
extern void _ZN10S10180C1774v396Ev();
static  VTBL_ENTRY vtc_S10180C177[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C177[0]),
  (VTBL_ENTRY)&_ZN10S10180C177D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C177D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v389Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v390Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v391Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v392Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v393Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v394Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v395Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v396Ev,
};
extern VTBL_ENTRY _ZTI10S10180C177[];
extern  VTBL_ENTRY _ZTV10S10180C177[];
Class_Descriptor cd_S10180C177 = {  "S10180C177", // class name
  0,0,//no base classes
  &(vtc_S10180C177[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S10180C177),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S10180C177),12, //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  S10180C176  : S10180C177 {
  void *s10180c176f0[2];
  virtual  ~S10180C176(); // _ZN10S10180C176D1Ev
  virtual void  v381(); // _ZN10S10180C1764v381Ev
  virtual void  v382(); // _ZN10S10180C1764v382Ev
  virtual void  v383(); // _ZN10S10180C1764v383Ev
  virtual void  v384(); // _ZN10S10180C1764v384Ev
  virtual void  v385(); // _ZN10S10180C1764v385Ev
  virtual void  v386(); // _ZN10S10180C1764v386Ev
  virtual void  v387(); // _ZN10S10180C1764v387Ev
  virtual void  v388(); // _ZN10S10180C1764v388Ev
  S10180C176(); // tgen
};
//SIG(-1 S10180C176) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S10180C176 ::~S10180C176(){ note_dtor("S10180C176", this);}
void  S10180C176 ::v381(){vfunc_called(this, "_ZN10S10180C1764v381Ev");}
void  S10180C176 ::v382(){vfunc_called(this, "_ZN10S10180C1764v382Ev");}
void  S10180C176 ::v383(){vfunc_called(this, "_ZN10S10180C1764v383Ev");}
void  S10180C176 ::v384(){vfunc_called(this, "_ZN10S10180C1764v384Ev");}
void  S10180C176 ::v385(){vfunc_called(this, "_ZN10S10180C1764v385Ev");}
void  S10180C176 ::v386(){vfunc_called(this, "_ZN10S10180C1764v386Ev");}
void  S10180C176 ::v387(){vfunc_called(this, "_ZN10S10180C1764v387Ev");}
void  S10180C176 ::v388(){vfunc_called(this, "_ZN10S10180C1764v388Ev");}
S10180C176 ::S10180C176(){ note_ctor("S10180C176", this);} // tgen

static void Test_S10180C176()
{
  extern Class_Descriptor cd_S10180C176;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10180C176, buf);
    S10180C176 *dp, &lv = *(dp=new (buf) S10180C176());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10180C176)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C176)");
    check_base_class_offset(lv, (S10180C177*), 0, "S10180C176");
    check_field_offset(lv, s10180c176f0, ABISELECT(8,4), "S10180C176.s10180c176f0");
    test_class_info(&lv, &cd_S10180C176);
    dp->~S10180C176();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C176(Test_S10180C176, "S10180C176", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN10S10180C176C1Ev();
extern void _ZN10S10180C176D1Ev();
Name_Map name_map_S10180C176[] = {
  NSPAIR(_ZN10S10180C176C1Ev),
  NSPAIR(_ZN10S10180C176D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C177;
extern VTBL_ENTRY _ZTI10S10180C177[];
extern  VTBL_ENTRY _ZTV10S10180C177[];
static Base_Class bases_S10180C176[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C177,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10180C176[];
extern void _ZN10S10180C176D1Ev();
extern void _ZN10S10180C176D0Ev();
extern void _ZN10S10180C1774v389Ev();
extern void _ZN10S10180C1774v390Ev();
extern void _ZN10S10180C1774v391Ev();
extern void _ZN10S10180C1774v392Ev();
extern void _ZN10S10180C1774v393Ev();
extern void _ZN10S10180C1774v394Ev();
extern void _ZN10S10180C1774v395Ev();
extern void _ZN10S10180C1774v396Ev();
extern void _ZN10S10180C1764v381Ev();
extern void _ZN10S10180C1764v382Ev();
extern void _ZN10S10180C1764v383Ev();
extern void _ZN10S10180C1764v384Ev();
extern void _ZN10S10180C1764v385Ev();
extern void _ZN10S10180C1764v386Ev();
extern void _ZN10S10180C1764v387Ev();
extern void _ZN10S10180C1764v388Ev();
static  VTBL_ENTRY vtc_S10180C176[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C176[0]),
  (VTBL_ENTRY)&_ZN10S10180C176D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C176D0Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v389Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v390Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v391Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v392Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v393Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v394Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v395Ev,
  (VTBL_ENTRY)&_ZN10S10180C1774v396Ev,
  (VTBL_ENTRY)&_ZN10S10180C1764v381Ev,
  (VTBL_ENTRY)&_ZN10S10180C1764v382Ev,
  (VTBL_ENTRY)&_ZN10S10180C1764v383Ev,
  (VTBL_ENTRY)&_ZN10S10180C1764v384Ev,
  (VTBL_ENTRY)&_ZN10S10180C1764v385Ev,
  (VTBL_ENTRY)&_ZN10S10180C1764v386Ev,
  (VTBL_ENTRY)&_ZN10S10180C1764v387Ev,
  (VTBL_ENTRY)&_ZN10S10180C1764v388Ev,
};
extern VTBL_ENTRY _ZTI10S10180C176[];
extern  VTBL_ENTRY _ZTV10S10180C176[];
Class_Descriptor cd_S10180C176 = {  "S10180C176", // class name
  bases_S10180C176, 1,
  &(vtc_S10180C176[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S10180C176),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10180C176),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10180C178  {
  int s10180c178f0;
  void  mf10180c178(); // _ZN10S10180C17811mf10180c178Ev
  virtual  ~S10180C178(); // _ZN10S10180C178D1Ev
  S10180C178(); // tgen
};
//SIG(-1 S10180C178) C1{ vd m Fi}


void  S10180C178 ::mf10180c178(){}
 S10180C178 ::~S10180C178(){ note_dtor("S10180C178", this);}
S10180C178 ::S10180C178(){ note_ctor("S10180C178", this);} // tgen

static void Test_S10180C178()
{
  extern Class_Descriptor cd_S10180C178;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10180C178, buf);
    S10180C178 *dp, &lv = *(dp=new (buf) S10180C178());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10180C178)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C178)");
    check_field_offset(lv, s10180c178f0, ABISELECT(8,4), "S10180C178.s10180c178f0");
    test_class_info(&lv, &cd_S10180C178);
    dp->~S10180C178();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C178(Test_S10180C178, "S10180C178", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN10S10180C178C1Ev();
extern void _ZN10S10180C178D1Ev();
Name_Map name_map_S10180C178[] = {
  NSPAIR(_ZN10S10180C178C1Ev),
  NSPAIR(_ZN10S10180C178D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S10180C178[];
extern void _ZN10S10180C178D1Ev();
extern void _ZN10S10180C178D0Ev();
static  VTBL_ENTRY vtc_S10180C178[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10180C178[0]),
  (VTBL_ENTRY)&_ZN10S10180C178D1Ev,
  (VTBL_ENTRY)&_ZN10S10180C178D0Ev,
};
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
Class_Descriptor cd_S10180C178 = {  "S10180C178", // class name
  0,0,//no base classes
  &(vtc_S10180C178[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S10180C178),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S10180C178),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  S10180C179  {
  void *s10180c179f0;
  int s10180c179f1;
  void  mf10180c179(); // _ZN10S10180C17911mf10180c179Ev
};
//SIG(-1 S10180C179) C1{ m Fp Fi}


void  S10180C179 ::mf10180c179(){}

static void Test_S10180C179()
{
  {
    init_simple_test("S10180C179");
    S10180C179 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10180C179)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C179)");
    check_field_offset(lv, s10180c179f0, 0, "S10180C179.s10180c179f0");
    check_field_offset(lv, s10180c179f1, ABISELECT(8,4), "S10180C179.s10180c179f1");
  }
}
static Arrange_To_Call_Me vS10180C179(Test_S10180C179, "S10180C179", ABISELECT(16,8));

#else // __cplusplus

Class_Descriptor cd_S10180C179 = {  "S10180C179", // 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  S10180C1  : S10180C2 , S10180C3 {
  ::S10180C4 s10180c1f0;
  ::S10180C9 s10180c1f1;
  void *s10180c1f2[3];
  ::S10180C10 s10180c1f3;
  ::S10180C16 s10180c1f4;
  ::S10180C129 s10180c1f5;
  ::S10180C87 s10180c1f6;
  ::S10180C87 s10180c1f7;
  ::S10180C176 s10180c1f8;
  ::S10180C13 s10180c1f9;
  ::S10180C178 s10180c1f10;
  int s10180c1f11;
  ::S10180C31 s10180c1f12;
  int s10180c1f13;
  ::S10180C179 s10180c1f14;
  ::S10180C179 s10180c1f15;
  ::S10180C179 s10180c1f16;
  virtual  ~S10180C1(); // _ZN8S10180C1D1Ev
  virtual void  v1(); // _ZN8S10180C12v1Ev
  virtual void  v2(); // _ZN8S10180C12v2Ev
  virtual void  v3(); // _ZN8S10180C12v3Ev
  virtual void  v4(); // _ZN8S10180C12v4Ev
  virtual void  v5(); // _ZN8S10180C12v5Ev
  virtual void  v6(); // _ZN8S10180C12v6Ev
  S10180C1(); // tgen
};
//SIG(1 S10180C1) C1{ BC2{ vd v7} BC3{ vd v8 v9 v10 v11 v12 Fp} vd v1 v2 v3 v4 v5 v6 FC4{ m Fp FC5{ BC6{ m Fp Fi FC7{ m} FC7}}} FC8{ m Fi Fp Fi[4] Fp} Fp[3] FC9{ BC10{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 Fp FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} FC14{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v13 v14 FC11 Fp} FC15{ BC2 BC16{ vd m FC17{ m Fp Fi FC13 FC18{ m}} FC17 Fc} BC19{ vd v41} vd v39 v40 Fp[5] FC20{ BC16 BC2 BC10 BC21{ vd v64} BC22{ vd v65 v66} vd v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 Fi FC23{ m Fi[2]} FC23 FC23 FC24{ BC16 vd Fi Fp FC11 FL FC23 Fi Fc Fi FC25{ m FC26{ m Fp Fi[2] FC18} Fp[2]}} FC27{ BC10 vd v67 v68 v69} FC28{ vd m Fi Fp[3] FC29{ m Fc[2] Fp[3] Fi[4] FC30{ m FC31{ FL[4]}}}} FC32{ vd m FC30 Fi[2] FC33{ m FL[3] Fi[3] FL} FL FC34{ m Fi FC35{ m Fi[4]}} FC25 Fc[2] Fi[2] Fp[2] FL Fi[3]} Fi Fp FC36{ BC16 BC19 vd v70 Fi FC37{ m Fc[2]} FC38{ Fp[2]} Fp FC39{ vd m FC40{ vd m FC41{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC42{ BC43{ vd v77 v78 v79 v80 v81 v82 Fi Fp Fc} vd v71 v72 v73 v74 v75 v76 Fp} FC44{ BC45{ vd v84 Fi Fc[3]} vd v83 Fp[4] FL Fi FC30 FC46{ m Fp FC47{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC48{ BC45 vd v85 FC30 Fi Fp[2] FC49{ m FC30 FC46 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC50{ BC45 vd v86 Fp[2] FL Fi[4] FC51{ m Fi[2]} FC30 FC52{ m FC30 FC46 Fp Fi[4]} FC53{ m Fp}} FC30 FC30 FL Fi[5]} FL FC54{ m FC33 FC55{ m Fi} Fi} Fc[128] FC23 FC25} Fi[3] FC56{ m Fp Fi[2]} FC57{ m Fc[11] Fi[2]} FC58{ BC59{} FL Fi} FC60{ BC61{ BC16 vd v89 v90 v91 v92 FC62{ m Fp FC11 FC12 FC12 Fi[3] FC63{ m FC64{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC11 FC11 Fc} Fp Fc Fi} v87 v88} FL FC65{ BC61 v93} FC65 FC60 FC25 Fc} FC66{ BC67{ BC16 BC10 BC2 BC68{ BC69{ vd v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110} BC70{ vd m Fp}} BC71{ vd v111 v112} BC21 vd v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 Fp[5] Fi Fp FC51 FC53 FC72{ BC61 v147} FC60 FC65 FC73{ BC61 v148 v149} FC74{ BC61 v150 v151 v152 FC75{ Fp[3]} FC47[3]} FC76{ BC16 BC10 vd v153 v154 v155 v156 v157 v158 v159 v160 FC77{ m FC12 Fi[2] FC12} Fi[2] Fc[2] Fi FL[2] FC78{ m FL} Fi} FC79{ BC80{ BC16 BC10 vd v166 v167 v168 v169 v170 v171} BC2 vd v161 v162 v163 v164 v165 FC81{ m Fi Fp Fi FC63} FC26} FC82{ BC16 BC10 vd v172 v173 v174 v175 FC25 Fp[2] FC12 Fi} FC83{ BC16 BC10 BC2 BC68 BC71 BC21 vd v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 FC25 Fp[2] Fi[2] FC84{ BC16 vd v195 Fp FC11 FC11 Fp Fi FC63} FC60 FC73 FC73 FC63 FC63 FC63 Fi} FC85{ BC86{ BC16 BC10 BC2 vd v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 Fi[2] FC72 FC25 FC87{ BC61 v225 v226 v227 Fp[3]} FC88{ BC61 v228} FC73 FC60 FC89{ BC16 vd v229 v230 FC90{ BC91{ BC92{ m Fp FC63 FC63 Fi[3] Fc[2] Fi Fp} FC53 FC93{ m Fp} FC53 FC12 FC12 FC53 FC93 FC53 FC12 FC12 FC12 Fc Fi Fp} FC12} Fi} FC65 FC94{ BC88 v231} FC65 Fp FC93 Fp[2] Fi Fc[3] Fi FL[2]} vd v196 v197 v198 v199 v200 v201 FC95{ m Fp} FC96{ m Fp FC93 Fp[5] FC97{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC98{ m FC99{ m Fi[2]} FC99} FC99 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC25 Fc[2] Fi FC100{ m Fc[5]} FC101{ m FC63 FC63 FC63 FC53 Fi Fc[2] Fi} FC63 FC63 FC63 Fp FC102{ BC16 vd FC103{ m Fp[3] FC51 FC12 FL[2] Fc} FC25} Fc[2] FL Fc[2] Fi FC93 FC104{ m FC5 Fi} Fc Fi} vd v94 v95 Fc} FC73 FC73 Fp Fc Fp Fi} FC105{ BC2 BC16 vd v232 Fp[6] FC106{ BC16 BC10 BC2 vd v233 v234 v235 v236 v237 v238 v239 v240 FC25 Fp FC60 FC79 FC53 FC107{ vd v241 v242 FC108{ m Fp Fi[2] FC109{ m}} FC35[3] Fp[2] Fi Fc} FC110{ BC2 vd v243 Fp[2] FC111{ m Fp Fi FC109 FC112{ m}} FC113{ BC16 vd v244 v245 v246 v247 FC114{ m Fp[2] FC12 FC108 Fi[2]}}} FC84 FC115{ BC116{ BC117{ BC16 vd v257 v258 v259 v260 v261 v262 v263 v264 v265 v266 v267 v268 v269 v270 v271 v272 v273 v274 v275 v276 Fp[2] FC93 Fc[2] Fp FC118{ m FC63 FC63 FC119{ m FC78} FC119 FC63 FC63} FC11 Fp[4] FC25} vd v277 v278 v279 v280 v281 v282 v283 v284 v285 v286 v287 v288 v289 v290 v291 v292 v293 v294 v295 FC120{ vd m Fi[2] FC12 FC12 FC12 FC12 FC121{ m Fp[2]} FL[2]} Fp} vd v248 v249 v250 v251 v252 v253 v254 v255 v256 Fi[3]} FC122{ BC117 vd v296 v297 v298 v299 v300 v301 v302 v303 v304 v305 v306 v307 v308 v309 v310 v311 v312 v313 v314 FC120 Fp} FC123{ BC116 vd v315 v316} FC123 FC124{ BC117 vd v317 v318 v319 v320 v321 v322 v323 v324 v325 v326 v327 v328 Fi[2] FL Fi}[9] FC125{ BC116 vd v329 v330 v331} FC125 FC126{ BC116 vd v332 v333} FC127{ BC16 BC2 BC10 vd v334 v335 v336 v337 Fp FC110 FC84 FC60 FC65 Fp FL FC12} Fp Fi FC128{ m FL Fc FL[2] FC95} FC86 FC129{ BC16 BC10 BC2 vd v338 v339 v340 v341 v342 v343 Fi FC72 FC25 FC87 FC88 FC73 FC60 FC93 Fp[2] Fi} FC104 FC73 FC74 FC65 FC60 Fp FC130{ m Fp Fi[2] FC112} Fi FC131{ m FC25 FC132{ Fi FC133{ Fi[2] FL Fc}[9] Fi} FC12} Fp[2] Fi} FC67 FC134{ BC16 BC10 BC2 BC68 vd v344 v345 v346 v347 v348 v349 v350 v351 Fp[2] FC53 Fi[2] FC135{ BC136{ BC16 vd v357 v358 v359 v360 v361 Fp FC53 Fp[4] Fi} vd v352 v353 v354 v355 v356 Fp[2] Fi[4] FC53 FC137{ m Fi[2]} FC137 Fc[2] FC53 FC119 Fi} Fp FC138{ BC16 BC10 vd v362 v363 v364 v365 v366 Fp FC139{ m FC130 Fi} Fi Fp Fc} Fc FC25 Fc[2]} FC140{ BC16 vd Fp} FC141{ BC16 BC10 vd v367 v368 v369 v370} FC73 Fp Fi Fp Fi} FC73 FC73 FC142{ BC143{ vd v379 v380 v381 v382 v383 v384 v385 v386} vd v371 v372 v373 v374 v375 v376 v377 v378 Fp[2]} FC12 FC144{ vd m Fi} Fi FC25 Fi FC145{ m Fp Fi} FC145 FC145}


 S10180C1 ::~S10180C1(){ note_dtor("S10180C1", this);}
void  S10180C1 ::v1(){vfunc_called(this, "_ZN8S10180C12v1Ev");}
void  S10180C1 ::v2(){vfunc_called(this, "_ZN8S10180C12v2Ev");}
void  S10180C1 ::v3(){vfunc_called(this, "_ZN8S10180C12v3Ev");}
void  S10180C1 ::v4(){vfunc_called(this, "_ZN8S10180C12v4Ev");}
void  S10180C1 ::v5(){vfunc_called(this, "_ZN8S10180C12v5Ev");}
void  S10180C1 ::v6(){vfunc_called(this, "_ZN8S10180C12v6Ev");}
S10180C1 ::S10180C1(){ note_ctor("S10180C1", this);} // tgen

static void Test_S10180C1()
{
  extern Class_Descriptor cd_S10180C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5557,8804)];
    init_test(&cd_S10180C1, buf);
    S10180C1 *dp, &lv = *(dp=new (buf) S10180C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(44448,35212), "sizeof(S10180C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10180C1)");
    check_base_class_offset(lv, (S10180C2*), 0, "S10180C1");
    check_base_class_offset(lv, (S10180C3*), ABISELECT(8,4), "S10180C1");
    check_field_offset(lv, s10180c1f0, ABISELECT(24,12), "S10180C1.s10180c1f0");
    check_field_offset(lv, s10180c1f1, ABISELECT(48,28), "S10180C1.s10180c1f1");
    check_field_offset(lv, s10180c1f2, ABISELECT(88,56), "S10180C1.s10180c1f2");
    check_field_offset(lv, s10180c1f3, ABISELECT(112,68), "S10180C1.s10180c1f3");
    check_field_offset(lv, s10180c1f4, ABISELECT(240,152), "S10180C1.s10180c1f4");
    check_field_offset(lv, s10180c1f5, ABISELECT(23576,20608), "S10180C1.s10180c1f5");
    check_field_offset(lv, s10180c1f6, ABISELECT(43824,34796), "S10180C1.s10180c1f6");
    check_field_offset(lv, s10180c1f7, ABISELECT(44056,34960), "S10180C1.s10180c1f7");
    check_field_offset(lv, s10180c1f8, ABISELECT(44288,35124), "S10180C1.s10180c1f8");
    check_field_offset(lv, s10180c1f9, ABISELECT(44312,35136), "S10180C1.s10180c1f9");
    check_field_offset(lv, s10180c1f10, ABISELECT(44328,35148), "S10180C1.s10180c1f10");
    check_field_offset(lv, s10180c1f11, ABISELECT(44344,35156), "S10180C1.s10180c1f11");
    check_field_offset(lv, s10180c1f12, ABISELECT(44352,35160), "S10180C1.s10180c1f12");
    check_field_offset(lv, s10180c1f13, ABISELECT(44392,35184), "S10180C1.s10180c1f13");
    check_field_offset(lv, s10180c1f14, ABISELECT(44400,35188), "S10180C1.s10180c1f14");
    check_field_offset(lv, s10180c1f15, ABISELECT(44416,35196), "S10180C1.s10180c1f15");
    check_field_offset(lv, s10180c1f16, ABISELECT(44432,35204), "S10180C1.s10180c1f16");
    test_class_info(&lv, &cd_S10180C1);
    dp->~S10180C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10180C1(Test_S10180C1, "S10180C1", ABISELECT(44448,35212));

#else // __cplusplus

extern void _ZN8S10180C1C1Ev();
extern void _ZN8S10180C1D1Ev();
Name_Map name_map_S10180C1[] = {
  NSPAIR(_ZN8S10180C1C1Ev),
  NSPAIR(_ZN8S10180C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C2;
extern VTBL_ENTRY _ZTI8S10180C2[];
extern  VTBL_ENTRY _ZTV8S10180C2[];
extern Class_Descriptor cd_S10180C3;
extern VTBL_ENTRY _ZTI8S10180C3[];
extern  VTBL_ENTRY _ZTV8S10180C3[];
static Base_Class bases_S10180C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C3,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI8S10180C1[];
extern void _ZN8S10180C1D1Ev();
extern void _ZN8S10180C1D0Ev();
extern void _ZN8S10180C22v7Ev();
extern void _ZN8S10180C12v1Ev();
extern void _ZN8S10180C12v2Ev();
extern void _ZN8S10180C12v3Ev();
extern void _ZN8S10180C12v4Ev();
extern void _ZN8S10180C12v5Ev();
extern void _ZN8S10180C12v6Ev();
extern void ABISELECT(_ZThn8_N8S10180C1D1Ev,_ZThn4_N8S10180C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S10180C1D0Ev,_ZThn4_N8S10180C1D0Ev)();
extern void _ZN8S10180C32v8Ev();
extern void _ZN8S10180C32v9Ev();
extern void _ZN8S10180C33v10Ev();
extern void _ZN8S10180C33v11Ev();
extern void _ZN8S10180C33v12Ev();
static  VTBL_ENTRY vtc_S10180C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10180C1[0]),
  (VTBL_ENTRY)&_ZN8S10180C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10180C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10180C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10180C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10180C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10180C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10180C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10180C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10180C12v6Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S10180C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S10180C1D1Ev,_ZThn4_N8S10180C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S10180C1D0Ev,_ZThn4_N8S10180C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10180C32v8Ev,
  (VTBL_ENTRY)&_ZN8S10180C32v9Ev,
  (VTBL_ENTRY)&_ZN8S10180C33v10Ev,
  (VTBL_ENTRY)&_ZN8S10180C33v11Ev,
  (VTBL_ENTRY)&_ZN8S10180C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S10180C1[];
extern  VTBL_ENTRY _ZTV8S10180C1[];
Class_Descriptor cd_S10180C1 = {  "S10180C1", // class name
  bases_S10180C1, 2,
  &(vtc_S10180C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(44448,35212), // object size
  NSPAIRA(_ZTI8S10180C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10180C1),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  S10179C2  {
  virtual  ~S10179C2(); // _ZN8S10179C2D1Ev
  virtual void  v7(); // _ZN8S10179C22v7Ev
  S10179C2(); // tgen
};
//SIG(-1 S10179C2) C1{ vd v1}


 S10179C2 ::~S10179C2(){ note_dtor("S10179C2", this);}
void  S10179C2 ::v7(){vfunc_called(this, "_ZN8S10179C22v7Ev");}
S10179C2 ::S10179C2(){ note_ctor("S10179C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10179C2C1Ev();
extern void _ZN8S10179C2D1Ev();
Name_Map name_map_S10179C2[] = {
  NSPAIR(_ZN8S10179C2C1Ev),
  NSPAIR(_ZN8S10179C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10179C2[];
extern void _ZN8S10179C2D1Ev();
extern void _ZN8S10179C2D0Ev();
extern void _ZN8S10179C22v7Ev();
static  VTBL_ENTRY vtc_S10179C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10179C2[0]),
  (VTBL_ENTRY)&_ZN8S10179C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10179C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10179C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S10179C2[];
extern  VTBL_ENTRY _ZTV8S10179C2[];
Class_Descriptor cd_S10179C2 = {  "S10179C2", // class name
  0,0,//no base classes
  &(vtc_S10179C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10179C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10179C2),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  S10179C3  {
  void *s10179c3f0;
  virtual  ~S10179C3(); // _ZN8S10179C3D1Ev
  virtual void  v8(); // _ZN8S10179C32v8Ev
  virtual void  v9(); // _ZN8S10179C32v9Ev
  virtual void  v10(); // _ZN8S10179C33v10Ev
  virtual void  v11(); // _ZN8S10179C33v11Ev
  virtual void  v12(); // _ZN8S10179C33v12Ev
  S10179C3(); // tgen
};
//SIG(-1 S10179C3) C1{ vd v1 v2 v3 v4 v5 Fp}


 S10179C3 ::~S10179C3(){ note_dtor("S10179C3", this);}
void  S10179C3 ::v8(){vfunc_called(this, "_ZN8S10179C32v8Ev");}
void  S10179C3 ::v9(){vfunc_called(this, "_ZN8S10179C32v9Ev");}
void  S10179C3 ::v10(){vfunc_called(this, "_ZN8S10179C33v10Ev");}
void  S10179C3 ::v11(){vfunc_called(this, "_ZN8S10179C33v11Ev");}
void  S10179C3 ::v12(){vfunc_called(this, "_ZN8S10179C33v12Ev");}
S10179C3 ::S10179C3(){ note_ctor("S10179C3", this);} // tgen

static void Test_S10179C3()
{
  extern Class_Descriptor cd_S10179C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10179C3, buf);
    S10179C3 *dp, &lv = *(dp=new (buf) S10179C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10179C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C3)");
    check_field_offset(lv, s10179c3f0, ABISELECT(8,4), "S10179C3.s10179c3f0");
    test_class_info(&lv, &cd_S10179C3);
    dp->~S10179C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C3(Test_S10179C3, "S10179C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10179C3C1Ev();
extern void _ZN8S10179C3D1Ev();
Name_Map name_map_S10179C3[] = {
  NSPAIR(_ZN8S10179C3C1Ev),
  NSPAIR(_ZN8S10179C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10179C3[];
extern void _ZN8S10179C3D1Ev();
extern void _ZN8S10179C3D0Ev();
extern void _ZN8S10179C32v8Ev();
extern void _ZN8S10179C32v9Ev();
extern void _ZN8S10179C33v10Ev();
extern void _ZN8S10179C33v11Ev();
extern void _ZN8S10179C33v12Ev();
static  VTBL_ENTRY vtc_S10179C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10179C3[0]),
  (VTBL_ENTRY)&_ZN8S10179C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10179C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10179C32v8Ev,
  (VTBL_ENTRY)&_ZN8S10179C32v9Ev,
  (VTBL_ENTRY)&_ZN8S10179C33v10Ev,
  (VTBL_ENTRY)&_ZN8S10179C33v11Ev,
  (VTBL_ENTRY)&_ZN8S10179C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S10179C3[];
extern  VTBL_ENTRY _ZTV8S10179C3[];
Class_Descriptor cd_S10179C3 = {  "S10179C3", // class name
  0,0,//no base classes
  &(vtc_S10179C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10179C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10179C3),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  S10179C24  {
  virtual  ~S10179C24(); // _ZN9S10179C24D1Ev
  virtual void  v41(); // _ZN9S10179C243v41Ev
  S10179C24(); // tgen
};
//SIG(-1 S10179C24) C1{ vd v1}


 S10179C24 ::~S10179C24(){ note_dtor("S10179C24", this);}
void  S10179C24 ::v41(){vfunc_called(this, "_ZN9S10179C243v41Ev");}
S10179C24 ::S10179C24(){ note_ctor("S10179C24", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10179C24C1Ev();
extern void _ZN9S10179C24D1Ev();
Name_Map name_map_S10179C24[] = {
  NSPAIR(_ZN9S10179C24C1Ev),
  NSPAIR(_ZN9S10179C24D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10179C24[];
extern void _ZN9S10179C24D1Ev();
extern void _ZN9S10179C24D0Ev();
extern void _ZN9S10179C243v41Ev();
static  VTBL_ENTRY vtc_S10179C24[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C24[0]),
  (VTBL_ENTRY)&_ZN9S10179C24D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C24D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C243v41Ev,
};
extern VTBL_ENTRY _ZTI9S10179C24[];
extern  VTBL_ENTRY _ZTV9S10179C24[];
Class_Descriptor cd_S10179C24 = {  "S10179C24", // class name
  0,0,//no base classes
  &(vtc_S10179C24[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10179C24),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10179C24),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  S10179C11  {
  void *s10179c11f0;
  ::S10180C12 s10179c11f1;
  ::S10180C15 s10179c11f2;
  virtual  ~S10179C11(); // _ZN9S10179C11D1Ev
  virtual void  v15(); // _ZN9S10179C113v15Ev
  virtual void  v16(); // _ZN9S10179C113v16Ev
  virtual void  v17(); // _ZN9S10179C113v17Ev
  virtual void  v18(); // _ZN9S10179C113v18Ev
  virtual void  v19(); // _ZN9S10179C113v19Ev
  virtual void  v20(); // _ZN9S10179C113v20Ev
  virtual void  v21(); // _ZN9S10179C113v21Ev
  virtual void  v22(); // _ZN9S10179C113v22Ev
  virtual void  v23(); // _ZN9S10179C113v23Ev
  virtual void  v24(); // _ZN9S10179C113v24Ev
  virtual void  v25(); // _ZN9S10179C113v25Ev
  virtual void  v26(); // _ZN9S10179C113v26Ev
  virtual void  v27(); // _ZN9S10179C113v27Ev
  virtual void  v28(); // _ZN9S10179C113v28Ev
  virtual void  v29(); // _ZN9S10179C113v29Ev
  virtual void  v30(); // _ZN9S10179C113v30Ev
  virtual void  v31(); // _ZN9S10179C113v31Ev
  virtual void  v32(); // _ZN9S10179C113v32Ev
  virtual void  v33(); // _ZN9S10179C113v33Ev
  virtual void  v34(); // _ZN9S10179C113v34Ev
  virtual void  v35(); // _ZN9S10179C113v35Ev
  virtual void  v36(); // _ZN9S10179C113v36Ev
  virtual void  v37(); // _ZN9S10179C113v37Ev
  virtual void  v38(); // _ZN9S10179C113v38Ev
  S10179C11(); // tgen
};
//SIG(-1 S10179C11) 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 Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S10179C11 ::~S10179C11(){ note_dtor("S10179C11", this);}
void  S10179C11 ::v15(){vfunc_called(this, "_ZN9S10179C113v15Ev");}
void  S10179C11 ::v16(){vfunc_called(this, "_ZN9S10179C113v16Ev");}
void  S10179C11 ::v17(){vfunc_called(this, "_ZN9S10179C113v17Ev");}
void  S10179C11 ::v18(){vfunc_called(this, "_ZN9S10179C113v18Ev");}
void  S10179C11 ::v19(){vfunc_called(this, "_ZN9S10179C113v19Ev");}
void  S10179C11 ::v20(){vfunc_called(this, "_ZN9S10179C113v20Ev");}
void  S10179C11 ::v21(){vfunc_called(this, "_ZN9S10179C113v21Ev");}
void  S10179C11 ::v22(){vfunc_called(this, "_ZN9S10179C113v22Ev");}
void  S10179C11 ::v23(){vfunc_called(this, "_ZN9S10179C113v23Ev");}
void  S10179C11 ::v24(){vfunc_called(this, "_ZN9S10179C113v24Ev");}
void  S10179C11 ::v25(){vfunc_called(this, "_ZN9S10179C113v25Ev");}
void  S10179C11 ::v26(){vfunc_called(this, "_ZN9S10179C113v26Ev");}
void  S10179C11 ::v27(){vfunc_called(this, "_ZN9S10179C113v27Ev");}
void  S10179C11 ::v28(){vfunc_called(this, "_ZN9S10179C113v28Ev");}
void  S10179C11 ::v29(){vfunc_called(this, "_ZN9S10179C113v29Ev");}
void  S10179C11 ::v30(){vfunc_called(this, "_ZN9S10179C113v30Ev");}
void  S10179C11 ::v31(){vfunc_called(this, "_ZN9S10179C113v31Ev");}
void  S10179C11 ::v32(){vfunc_called(this, "_ZN9S10179C113v32Ev");}
void  S10179C11 ::v33(){vfunc_called(this, "_ZN9S10179C113v33Ev");}
void  S10179C11 ::v34(){vfunc_called(this, "_ZN9S10179C113v34Ev");}
void  S10179C11 ::v35(){vfunc_called(this, "_ZN9S10179C113v35Ev");}
void  S10179C11 ::v36(){vfunc_called(this, "_ZN9S10179C113v36Ev");}
void  S10179C11 ::v37(){vfunc_called(this, "_ZN9S10179C113v37Ev");}
void  S10179C11 ::v38(){vfunc_called(this, "_ZN9S10179C113v38Ev");}
S10179C11 ::S10179C11(){ note_ctor("S10179C11", this);} // tgen

static void Test_S10179C11()
{
  extern Class_Descriptor cd_S10179C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S10179C11, buf);
    S10179C11 *dp, &lv = *(dp=new (buf) S10179C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S10179C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C11)");
    check_field_offset(lv, s10179c11f0, ABISELECT(8,4), "S10179C11.s10179c11f0");
    check_field_offset(lv, s10179c11f1, ABISELECT(16,8), "S10179C11.s10179c11f1");
    check_field_offset(lv, s10179c11f2, ABISELECT(40,24), "S10179C11.s10179c11f2");
    test_class_info(&lv, &cd_S10179C11);
    dp->~S10179C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C11(Test_S10179C11, "S10179C11", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN9S10179C11C1Ev();
extern void _ZN9S10179C11D1Ev();
Name_Map name_map_S10179C11[] = {
  NSPAIR(_ZN9S10179C11C1Ev),
  NSPAIR(_ZN9S10179C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10179C11[];
extern void _ZN9S10179C11D1Ev();
extern void _ZN9S10179C11D0Ev();
extern void _ZN9S10179C113v15Ev();
extern void _ZN9S10179C113v16Ev();
extern void _ZN9S10179C113v17Ev();
extern void _ZN9S10179C113v18Ev();
extern void _ZN9S10179C113v19Ev();
extern void _ZN9S10179C113v20Ev();
extern void _ZN9S10179C113v21Ev();
extern void _ZN9S10179C113v22Ev();
extern void _ZN9S10179C113v23Ev();
extern void _ZN9S10179C113v24Ev();
extern void _ZN9S10179C113v25Ev();
extern void _ZN9S10179C113v26Ev();
extern void _ZN9S10179C113v27Ev();
extern void _ZN9S10179C113v28Ev();
extern void _ZN9S10179C113v29Ev();
extern void _ZN9S10179C113v30Ev();
extern void _ZN9S10179C113v31Ev();
extern void _ZN9S10179C113v32Ev();
extern void _ZN9S10179C113v33Ev();
extern void _ZN9S10179C113v34Ev();
extern void _ZN9S10179C113v35Ev();
extern void _ZN9S10179C113v36Ev();
extern void _ZN9S10179C113v37Ev();
extern void _ZN9S10179C113v38Ev();
static  VTBL_ENTRY vtc_S10179C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C11[0]),
  (VTBL_ENTRY)&_ZN9S10179C11D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C11D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v38Ev,
};
extern VTBL_ENTRY _ZTI9S10179C11[];
extern  VTBL_ENTRY _ZTV9S10179C11[];
Class_Descriptor cd_S10179C11 = {  "S10179C11", // class name
  0,0,//no base classes
  &(vtc_S10179C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI9S10179C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10179C11),28, //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  S10179C26  {
  virtual  ~S10179C26(); // _ZN9S10179C26D1Ev
  virtual void  v64(); // _ZN9S10179C263v64Ev
  S10179C26(); // tgen
};
//SIG(-1 S10179C26) C1{ vd v1}


 S10179C26 ::~S10179C26(){ note_dtor("S10179C26", this);}
void  S10179C26 ::v64(){vfunc_called(this, "_ZN9S10179C263v64Ev");}
S10179C26 ::S10179C26(){ note_ctor("S10179C26", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10179C26C1Ev();
extern void _ZN9S10179C26D1Ev();
Name_Map name_map_S10179C26[] = {
  NSPAIR(_ZN9S10179C26C1Ev),
  NSPAIR(_ZN9S10179C26D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10179C26[];
extern void _ZN9S10179C26D1Ev();
extern void _ZN9S10179C26D0Ev();
extern void _ZN9S10179C263v64Ev();
static  VTBL_ENTRY vtc_S10179C26[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C26[0]),
  (VTBL_ENTRY)&_ZN9S10179C26D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C26D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C263v64Ev,
};
extern VTBL_ENTRY _ZTI9S10179C26[];
extern  VTBL_ENTRY _ZTV9S10179C26[];
Class_Descriptor cd_S10179C26 = {  "S10179C26", // class name
  0,0,//no base classes
  &(vtc_S10179C26[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10179C26),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10179C26),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  S10179C27  {
  virtual  ~S10179C27(); // _ZN9S10179C27D1Ev
  virtual void  v65(); // _ZN9S10179C273v65Ev
  virtual void  v66(); // _ZN9S10179C273v66Ev
  S10179C27(); // tgen
};
//SIG(-1 S10179C27) C1{ vd v1 v2}


 S10179C27 ::~S10179C27(){ note_dtor("S10179C27", this);}
void  S10179C27 ::v65(){vfunc_called(this, "_ZN9S10179C273v65Ev");}
void  S10179C27 ::v66(){vfunc_called(this, "_ZN9S10179C273v66Ev");}
S10179C27 ::S10179C27(){ note_ctor("S10179C27", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10179C27C1Ev();
extern void _ZN9S10179C27D1Ev();
Name_Map name_map_S10179C27[] = {
  NSPAIR(_ZN9S10179C27C1Ev),
  NSPAIR(_ZN9S10179C27D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10179C27[];
extern void _ZN9S10179C27D1Ev();
extern void _ZN9S10179C27D0Ev();
extern void _ZN9S10179C273v65Ev();
extern void _ZN9S10179C273v66Ev();
static  VTBL_ENTRY vtc_S10179C27[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C27[0]),
  (VTBL_ENTRY)&_ZN9S10179C27D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C27D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C273v65Ev,
  (VTBL_ENTRY)&_ZN9S10179C273v66Ev,
};
extern VTBL_ENTRY _ZTI9S10179C27[];
extern  VTBL_ENTRY _ZTV9S10179C27[];
Class_Descriptor cd_S10179C27 = {  "S10179C27", // class name
  0,0,//no base classes
  &(vtc_S10179C27[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10179C27),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10179C27),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  S10179C38  {
  long s10179c38f0[4];
};
//SIG(-1 S10179C38) C1{ Fl[4]}



static void Test_S10179C38()
{
  {
    init_simple_test("S10179C38");
    S10179C38 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10179C38)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C38)");
    check_field_offset(lv, s10179c38f0, 0, "S10179C38.s10179c38f0");
  }
}
static Arrange_To_Call_Me vS10179C38(Test_S10179C38, "S10179C38", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C37  {
  ::S10179C38 s10179c37f0;
  void  mf10179c37(); // _ZN9S10179C3710mf10179c37Ev
};
//SIG(-1 S10179C37) C1{ m FC2{ Fl[4]}}


void  S10179C37 ::mf10179c37(){}

static void Test_S10179C37()
{
  {
    init_simple_test("S10179C37");
    S10179C37 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10179C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C37)");
    check_field_offset(lv, s10179c37f0, 0, "S10179C37.s10179c37f0");
  }
}
static Arrange_To_Call_Me vS10179C37(Test_S10179C37, "S10179C37", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C36  {
  char s10179c36f0[2];
  void *s10179c36f1[3];
  int s10179c36f2[4];
  ::S10179C37 s10179c36f3;
  void  mf10179c36(); // _ZN9S10179C3610mf10179c36Ev
};
//SIG(-1 S10179C36) C1{ m Fc[2] Fp[3] Fi[4] FC2{ m FC3{ Fl[4]}}}


void  S10179C36 ::mf10179c36(){}

static void Test_S10179C36()
{
  {
    init_simple_test("S10179C36");
    S10179C36 lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S10179C36)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C36)");
    check_field_offset(lv, s10179c36f0, 0, "S10179C36.s10179c36f0");
    check_field_offset(lv, s10179c36f1, ABISELECT(8,4), "S10179C36.s10179c36f1");
    check_field_offset(lv, s10179c36f2, ABISELECT(32,16), "S10179C36.s10179c36f2");
    check_field_offset(lv, s10179c36f3, ABISELECT(48,32), "S10179C36.s10179c36f3");
  }
}
static Arrange_To_Call_Me vS10179C36(Test_S10179C36, "S10179C36", ABISELECT(80,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C35  {
  int s10179c35f0;
  void *s10179c35f1[3];
  ::S10179C36 s10179c35f2;
  void  mf10179c35(); // _ZN9S10179C3510mf10179c35Ev
  virtual  ~S10179C35(); // _ZN9S10179C35D1Ev
  S10179C35(); // tgen
};
//SIG(-1 S10179C35) C1{ vd m Fi Fp[3] FC2{ m Fc[2] Fp[3] Fi[4] FC3{ m FC4{ Fl[4]}}}}


void  S10179C35 ::mf10179c35(){}
 S10179C35 ::~S10179C35(){ note_dtor("S10179C35", this);}
S10179C35 ::S10179C35(){ note_ctor("S10179C35", this);} // tgen

static void Test_S10179C35()
{
  extern Class_Descriptor cd_S10179C35;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,18)];
    init_test(&cd_S10179C35, buf);
    S10179C35 *dp, &lv = *(dp=new (buf) S10179C35());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S10179C35)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C35)");
    check_field_offset(lv, s10179c35f0, ABISELECT(8,4), "S10179C35.s10179c35f0");
    check_field_offset(lv, s10179c35f1, ABISELECT(16,8), "S10179C35.s10179c35f1");
    check_field_offset(lv, s10179c35f2, ABISELECT(40,20), "S10179C35.s10179c35f2");
    test_class_info(&lv, &cd_S10179C35);
    dp->~S10179C35();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C35(Test_S10179C35, "S10179C35", ABISELECT(120,68));

#else // __cplusplus

extern void _ZN9S10179C35C1Ev();
extern void _ZN9S10179C35D1Ev();
Name_Map name_map_S10179C35[] = {
  NSPAIR(_ZN9S10179C35C1Ev),
  NSPAIR(_ZN9S10179C35D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10179C35[];
extern void _ZN9S10179C35D1Ev();
extern void _ZN9S10179C35D0Ev();
static  VTBL_ENTRY vtc_S10179C35[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C35[0]),
  (VTBL_ENTRY)&_ZN9S10179C35D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C35D0Ev,
};
extern VTBL_ENTRY _ZTI9S10179C35[];
extern  VTBL_ENTRY _ZTV9S10179C35[];
Class_Descriptor cd_S10179C35 = {  "S10179C35", // class name
  0,0,//no base classes
  &(vtc_S10179C35[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,68), // object size
  NSPAIRA(_ZTI9S10179C35),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10179C35),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  S10179C39  {
  ::S10179C37 s10179c39f0;
  int s10179c39f1[2];
  ::S10180C41 s10179c39f2;
  __tsi64 s10179c39f3;
  ::S10180C42 s10179c39f4;
  ::S10180C31 s10179c39f5;
  char s10179c39f6[2];
  int s10179c39f7[2];
  void *s10179c39f8[2];
  __tsi64 s10179c39f9;
  int s10179c39f10[3];
  void  mf10179c39(); // _ZN9S10179C3910mf10179c39Ev
  virtual  ~S10179C39(); // _ZN9S10179C39D1Ev
  S10179C39(); // tgen
};
//SIG(-1 S10179C39) C1{ vd m FC2{ m FC3{ Fl[4]}} Fi[2] FC4{ m FL[3] Fi[3] FL} FL FC5{ m Fi FC6{ m Fi[4]}} FC7{ m FC8{ m Fp Fi[2] FC9{ m}} Fp[2]} Fc[2] Fi[2] Fp[2] FL Fi[3]}


void  S10179C39 ::mf10179c39(){}
 S10179C39 ::~S10179C39(){ note_dtor("S10179C39", this);}
S10179C39 ::S10179C39(){ note_ctor("S10179C39", this);} // tgen

static void Test_S10179C39()
{
  extern Class_Descriptor cd_S10179C39;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,42)];
    init_test(&cd_S10179C39, buf);
    S10179C39 *dp, &lv = *(dp=new (buf) S10179C39());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,164), "sizeof(S10179C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C39)");
    check_field_offset(lv, s10179c39f0, ABISELECT(8,4), "S10179C39.s10179c39f0");
    check_field_offset(lv, s10179c39f1, ABISELECT(40,20), "S10179C39.s10179c39f1");
    check_field_offset(lv, s10179c39f2, ABISELECT(48,28), "S10179C39.s10179c39f2");
    check_field_offset(lv, s10179c39f3, ABISELECT(96,72), "S10179C39.s10179c39f3");
    check_field_offset(lv, s10179c39f4, ABISELECT(104,80), "S10179C39.s10179c39f4");
    check_field_offset(lv, s10179c39f5, ABISELECT(128,100), "S10179C39.s10179c39f5");
    check_field_offset(lv, s10179c39f6, ABISELECT(168,124), "S10179C39.s10179c39f6");
    check_field_offset(lv, s10179c39f7, ABISELECT(172,128), "S10179C39.s10179c39f7");
    check_field_offset(lv, s10179c39f8, ABISELECT(184,136), "S10179C39.s10179c39f8");
    check_field_offset(lv, s10179c39f9, ABISELECT(200,144), "S10179C39.s10179c39f9");
    check_field_offset(lv, s10179c39f10, ABISELECT(208,152), "S10179C39.s10179c39f10");
    test_class_info(&lv, &cd_S10179C39);
    dp->~S10179C39();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C39(Test_S10179C39, "S10179C39", ABISELECT(224,164));

#else // __cplusplus

extern void _ZN9S10179C39C1Ev();
extern void _ZN9S10179C39D1Ev();
Name_Map name_map_S10179C39[] = {
  NSPAIR(_ZN9S10179C39C1Ev),
  NSPAIR(_ZN9S10179C39D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10179C39[];
extern void _ZN9S10179C39D1Ev();
extern void _ZN9S10179C39D0Ev();
static  VTBL_ENTRY vtc_S10179C39[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C39[0]),
  (VTBL_ENTRY)&_ZN9S10179C39D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C39D0Ev,
};
extern VTBL_ENTRY _ZTI9S10179C39[];
extern  VTBL_ENTRY _ZTV9S10179C39[];
Class_Descriptor cd_S10179C39 = {  "S10179C39", // class name
  0,0,//no base classes
  &(vtc_S10179C39[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,164), // object size
  NSPAIRA(_ZTI9S10179C39),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10179C39),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  S10179C53  {
  int s10179c53f0;
  char s10179c53f1[3];
  virtual  ~S10179C53(); // _ZN9S10179C53D1Ev
  virtual void  v84(); // _ZN9S10179C533v84Ev
  S10179C53(); // tgen
};
//SIG(-1 S10179C53) C1{ vd v1 Fi Fc[3]}


 S10179C53 ::~S10179C53(){ note_dtor("S10179C53", this);}
void  S10179C53 ::v84(){vfunc_called(this, "_ZN9S10179C533v84Ev");}
S10179C53 ::S10179C53(){ note_ctor("S10179C53", this);} // tgen

static void Test_S10179C53()
{
  extern Class_Descriptor cd_S10179C53;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S10179C53, buf);
    S10179C53 *dp, &lv = *(dp=new (buf) S10179C53());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10179C53)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C53)");
    check_field_offset(lv, s10179c53f0, ABISELECT(8,4), "S10179C53.s10179c53f0");
    check_field_offset(lv, s10179c53f1, ABISELECT(12,8), "S10179C53.s10179c53f1");
    test_class_info(&lv, &cd_S10179C53);
    dp->~S10179C53();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C53(Test_S10179C53, "S10179C53", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S10179C53C1Ev();
extern void _ZN9S10179C53D1Ev();
Name_Map name_map_S10179C53[] = {
  NSPAIR(_ZN9S10179C53C1Ev),
  NSPAIR(_ZN9S10179C53D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10179C53[];
extern void _ZN9S10179C53D1Ev();
extern void _ZN9S10179C53D0Ev();
extern void _ZN9S10179C533v84Ev();
static  VTBL_ENTRY vtc_S10179C53[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C53[0]),
  (VTBL_ENTRY)&_ZN9S10179C53D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C53D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C533v84Ev,
};
extern VTBL_ENTRY _ZTI9S10179C53[];
extern  VTBL_ENTRY _ZTV9S10179C53[];
Class_Descriptor cd_S10179C53 = {  "S10179C53", // class name
  0,0,//no base classes
  &(vtc_S10179C53[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S10179C53),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10179C53),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  S10179C57  {
  ::S10179C37 s10179c57f0;
  ::S10180C54 s10179c57f1;
  void *s10179c57f2;
  int s10179c57f3[5];
  void  mf10179c57(); // _ZN9S10179C5710mf10179c57Ev
};
//SIG(-1 S10179C57) C1{ m FC2{ m FC3{ Fl[4]}} FC4{ m Fp FC5{ Fi[4]}} Fp Fi[5]}


void  S10179C57 ::mf10179c57(){}

static void Test_S10179C57()
{
  {
    init_simple_test("S10179C57");
    S10179C57 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S10179C57)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C57)");
    check_field_offset(lv, s10179c57f0, 0, "S10179C57.s10179c57f0");
    check_field_offset(lv, s10179c57f1, ABISELECT(32,16), "S10179C57.s10179c57f1");
    check_field_offset(lv, s10179c57f2, ABISELECT(56,36), "S10179C57.s10179c57f2");
    check_field_offset(lv, s10179c57f3, ABISELECT(64,40), "S10179C57.s10179c57f3");
  }
}
static Arrange_To_Call_Me vS10179C57(Test_S10179C57, "S10179C57", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C56  : S10179C53 {
  ::S10179C37 s10179c56f0;
  int s10179c56f1;
  void *s10179c56f2[2];
  ::S10179C57 s10179c56f3;
  short s10179c56f4[3585];
  char s10179c56f5[4096];
  int s10179c56f6;
  virtual  ~S10179C56(); // _ZN9S10179C56D1Ev
  virtual void  v85(); // _ZN9S10179C563v85Ev
  S10179C56(); // tgen
};
//SIG(-1 S10179C56) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 FC3{ m FC4{ Fl[4]}} Fi Fp[2] FC5{ m FC3 FC6{ m Fp FC7{ Fi[4]}} Fp Fi[5]} Fs[3585] Fc[4096] Fi}


 S10179C56 ::~S10179C56(){ note_dtor("S10179C56", this);}
void  S10179C56 ::v85(){vfunc_called(this, "_ZN9S10179C563v85Ev");}
S10179C56 ::S10179C56(){ note_ctor("S10179C56", this);} // tgen

static void Test_S10179C56()
{
  extern Class_Descriptor cd_S10179C56;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1430,2844)];
    init_test(&cd_S10179C56, buf);
    S10179C56 *dp, &lv = *(dp=new (buf) S10179C56());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11432,11372), "sizeof(S10179C56)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C56)");
    check_base_class_offset(lv, (S10179C53*), 0, "S10179C56");
    check_field_offset(lv, s10179c56f0, ABISELECT(16,12), "S10179C56.s10179c56f0");
    check_field_offset(lv, s10179c56f1, ABISELECT(48,28), "S10179C56.s10179c56f1");
    check_field_offset(lv, s10179c56f2, ABISELECT(56,32), "S10179C56.s10179c56f2");
    check_field_offset(lv, s10179c56f3, ABISELECT(72,40), "S10179C56.s10179c56f3");
    check_field_offset(lv, s10179c56f4, ABISELECT(160,100), "S10179C56.s10179c56f4");
    check_field_offset(lv, s10179c56f5, ABISELECT(7330,7270), "S10179C56.s10179c56f5");
    check_field_offset(lv, s10179c56f6, ABISELECT(11428,11368), "S10179C56.s10179c56f6");
    test_class_info(&lv, &cd_S10179C56);
    dp->~S10179C56();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C56(Test_S10179C56, "S10179C56", ABISELECT(11432,11372));

#else // __cplusplus

extern void _ZN9S10179C56C1Ev();
extern void _ZN9S10179C56D1Ev();
Name_Map name_map_S10179C56[] = {
  NSPAIR(_ZN9S10179C56C1Ev),
  NSPAIR(_ZN9S10179C56D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10179C53;
extern VTBL_ENTRY _ZTI9S10179C53[];
extern  VTBL_ENTRY _ZTV9S10179C53[];
static Base_Class bases_S10179C56[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10179C53,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10179C56[];
extern void _ZN9S10179C56D1Ev();
extern void _ZN9S10179C56D0Ev();
extern void _ZN9S10179C533v84Ev();
extern void _ZN9S10179C563v85Ev();
static  VTBL_ENTRY vtc_S10179C56[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C56[0]),
  (VTBL_ENTRY)&_ZN9S10179C56D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C56D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C533v84Ev,
  (VTBL_ENTRY)&_ZN9S10179C563v85Ev,
};
extern VTBL_ENTRY _ZTI9S10179C56[];
extern  VTBL_ENTRY _ZTV9S10179C56[];
Class_Descriptor cd_S10179C56 = {  "S10179C56", // class name
  bases_S10179C56, 1,
  &(vtc_S10179C56[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(11432,11372), // object size
  NSPAIRA(_ZTI9S10179C56),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10179C56),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  S10179C52  : S10179C53 {
  void *s10179c52f0[4];
  __tsi64 s10179c52f1;
  int s10179c52f2;
  ::S10179C37 s10179c52f3;
  ::S10180C54 s10179c52f4;
  short s10179c52f5[1024];
  int s10179c52f6[4];
  __tsi64 s10179c52f7[2];
  int s10179c52f8;
  ::S10179C56 s10179c52f9;
  virtual  ~S10179C52(); // _ZN9S10179C52D1Ev
  virtual void  v83(); // _ZN9S10179C523v83Ev
  S10179C52(); // tgen
};
//SIG(-1 S10179C52) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 Fp[4] FL Fi FC3{ m FC4{ Fl[4]}} FC5{ m Fp FC6{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC7{ BC2 vd v3 FC3 Fi Fp[2] FC8{ m FC3 FC5 Fp Fi[5]} Fs[3585] Fc[4096] Fi}}


 S10179C52 ::~S10179C52(){ note_dtor("S10179C52", this);}
void  S10179C52 ::v83(){vfunc_called(this, "_ZN9S10179C523v83Ev");}
S10179C52 ::S10179C52(){ note_ctor("S10179C52", this);} // tgen

static void Test_S10179C52()
{
  extern Class_Descriptor cd_S10179C52;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1706,3384)];
    init_test(&cd_S10179C52, buf);
    S10179C52 *dp, &lv = *(dp=new (buf) S10179C52());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13640,13532), "sizeof(S10179C52)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C52)");
    check_base_class_offset(lv, (S10179C53*), 0, "S10179C52");
    check_field_offset(lv, s10179c52f0, ABISELECT(16,12), "S10179C52.s10179c52f0");
    check_field_offset(lv, s10179c52f1, ABISELECT(48,28), "S10179C52.s10179c52f1");
    check_field_offset(lv, s10179c52f2, ABISELECT(56,36), "S10179C52.s10179c52f2");
    check_field_offset(lv, s10179c52f3, ABISELECT(64,40), "S10179C52.s10179c52f3");
    check_field_offset(lv, s10179c52f4, ABISELECT(96,56), "S10179C52.s10179c52f4");
    check_field_offset(lv, s10179c52f5, ABISELECT(120,76), "S10179C52.s10179c52f5");
    check_field_offset(lv, s10179c52f6, ABISELECT(2168,2124), "S10179C52.s10179c52f6");
    check_field_offset(lv, s10179c52f7, ABISELECT(2184,2140), "S10179C52.s10179c52f7");
    check_field_offset(lv, s10179c52f8, ABISELECT(2200,2156), "S10179C52.s10179c52f8");
    check_field_offset(lv, s10179c52f9, ABISELECT(2208,2160), "S10179C52.s10179c52f9");
    test_class_info(&lv, &cd_S10179C52);
    dp->~S10179C52();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C52(Test_S10179C52, "S10179C52", ABISELECT(13640,13532));

#else // __cplusplus

extern void _ZN9S10179C52C1Ev();
extern void _ZN9S10179C52D1Ev();
Name_Map name_map_S10179C52[] = {
  NSPAIR(_ZN9S10179C52C1Ev),
  NSPAIR(_ZN9S10179C52D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10179C53;
extern VTBL_ENTRY _ZTI9S10179C53[];
extern  VTBL_ENTRY _ZTV9S10179C53[];
static Base_Class bases_S10179C52[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10179C53,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10179C52[];
extern void _ZN9S10179C52D1Ev();
extern void _ZN9S10179C52D0Ev();
extern void _ZN9S10179C533v84Ev();
extern void _ZN9S10179C523v83Ev();
static  VTBL_ENTRY vtc_S10179C52[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C52[0]),
  (VTBL_ENTRY)&_ZN9S10179C52D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C52D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C533v84Ev,
  (VTBL_ENTRY)&_ZN9S10179C523v83Ev,
};
extern VTBL_ENTRY _ZTI9S10179C52[];
extern  VTBL_ENTRY _ZTV9S10179C52[];
Class_Descriptor cd_S10179C52 = {  "S10179C52", // class name
  bases_S10179C52, 1,
  &(vtc_S10179C52[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13640,13532), // object size
  NSPAIRA(_ZTI9S10179C52),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10179C52),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  S10179C60  {
  ::S10179C37 s10179c60f0;
  ::S10180C54 s10179c60f1;
  void *s10179c60f2;
  int s10179c60f3[4];
  void  mf10179c60(); // _ZN9S10179C6010mf10179c60Ev
};
//SIG(-1 S10179C60) C1{ m FC2{ m FC3{ Fl[4]}} FC4{ m Fp FC5{ Fi[4]}} Fp Fi[4]}


void  S10179C60 ::mf10179c60(){}

static void Test_S10179C60()
{
  {
    init_simple_test("S10179C60");
    S10179C60 lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S10179C60)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C60)");
    check_field_offset(lv, s10179c60f0, 0, "S10179C60.s10179c60f0");
    check_field_offset(lv, s10179c60f1, ABISELECT(32,16), "S10179C60.s10179c60f1");
    check_field_offset(lv, s10179c60f2, ABISELECT(56,36), "S10179C60.s10179c60f2");
    check_field_offset(lv, s10179c60f3, ABISELECT(64,40), "S10179C60.s10179c60f3");
  }
}
static Arrange_To_Call_Me vS10179C60(Test_S10179C60, "S10179C60", ABISELECT(80,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C58  : S10179C53 {
  void *s10179c58f0[2];
  __tsi64 s10179c58f1;
  int s10179c58f2[4];
  ::S10180C118 s10179c58f3;
  ::S10179C37 s10179c58f4;
  ::S10179C60 s10179c58f5;
  ::S10180C114 s10179c58f6;
  virtual  ~S10179C58(); // _ZN9S10179C58D1Ev
  virtual void  v86(); // _ZN9S10179C583v86Ev
  S10179C58(); // tgen
};
//SIG(-1 S10179C58) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 Fp[2] FL Fi[4] FC3{ m Fi[2]} FC4{ m FC5{ Fl[4]}} FC6{ m FC4 FC7{ m Fp FC8{ Fi[4]}} Fp Fi[4]} FC9{ m Fp}}


 S10179C58 ::~S10179C58(){ note_dtor("S10179C58", this);}
void  S10179C58 ::v86(){vfunc_called(this, "_ZN9S10179C583v86Ev");}
S10179C58 ::S10179C58(){ note_ctor("S10179C58", this);} // tgen

static void Test_S10179C58()
{
  extern Class_Descriptor cd_S10179C58;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,33)];
    init_test(&cd_S10179C58, buf);
    S10179C58 *dp, &lv = *(dp=new (buf) S10179C58());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,128), "sizeof(S10179C58)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C58)");
    check_base_class_offset(lv, (S10179C53*), 0, "S10179C58");
    check_field_offset(lv, s10179c58f0, ABISELECT(16,12), "S10179C58.s10179c58f0");
    check_field_offset(lv, s10179c58f1, ABISELECT(32,20), "S10179C58.s10179c58f1");
    check_field_offset(lv, s10179c58f2, ABISELECT(40,28), "S10179C58.s10179c58f2");
    check_field_offset(lv, s10179c58f3, ABISELECT(56,44), "S10179C58.s10179c58f3");
    check_field_offset(lv, s10179c58f4, ABISELECT(64,52), "S10179C58.s10179c58f4");
    check_field_offset(lv, s10179c58f5, ABISELECT(96,68), "S10179C58.s10179c58f5");
    check_field_offset(lv, s10179c58f6, ABISELECT(176,124), "S10179C58.s10179c58f6");
    test_class_info(&lv, &cd_S10179C58);
    dp->~S10179C58();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C58(Test_S10179C58, "S10179C58", ABISELECT(184,128));

#else // __cplusplus

extern void _ZN9S10179C58C1Ev();
extern void _ZN9S10179C58D1Ev();
Name_Map name_map_S10179C58[] = {
  NSPAIR(_ZN9S10179C58C1Ev),
  NSPAIR(_ZN9S10179C58D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10179C53;
extern VTBL_ENTRY _ZTI9S10179C53[];
extern  VTBL_ENTRY _ZTV9S10179C53[];
static Base_Class bases_S10179C58[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10179C53,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10179C58[];
extern void _ZN9S10179C58D1Ev();
extern void _ZN9S10179C58D0Ev();
extern void _ZN9S10179C533v84Ev();
extern void _ZN9S10179C583v86Ev();
static  VTBL_ENTRY vtc_S10179C58[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C58[0]),
  (VTBL_ENTRY)&_ZN9S10179C58D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C58D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C533v84Ev,
  (VTBL_ENTRY)&_ZN9S10179C583v86Ev,
};
extern VTBL_ENTRY _ZTI9S10179C58[];
extern  VTBL_ENTRY _ZTV9S10179C58[];
Class_Descriptor cd_S10179C58 = {  "S10179C58", // class name
  bases_S10179C58, 1,
  &(vtc_S10179C58[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,128), // object size
  NSPAIRA(_ZTI9S10179C58),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10179C58),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  S10179C47  {
  ::S10180C48 s10179c47f0;
  ::S10180C50 s10179c47f1;
  ::S10179C52 s10179c47f2;
  ::S10179C58 s10179c47f3;
  ::S10179C37 s10179c47f4;
  ::S10179C37 s10179c47f5;
  __tsi64 s10179c47f6;
  int s10179c47f7[5];
  void  mf10179c47(); // _ZN9S10179C4710mf10179c47Ev
  virtual  ~S10179C47(); // _ZN9S10179C47D1Ev
  S10179C47(); // tgen
};
//SIG(-1 S10179C47) C1{ vd m FC2{ vd m FC3{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC4{ BC5{ vd v7 v8 v9 v10 v11 v12 Fi Fp Fc} vd v1 v2 v3 v4 v5 v6 Fp} FC6{ BC7{ vd v14 Fi Fc[3]} vd v13 Fp[4] FL Fi FC8{ m FC9{ Fl[4]}} FC10{ m Fp FC11{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC12{ BC7 vd v15 FC8 Fi Fp[2] FC13{ m FC8 FC10 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC14{ BC7 vd v16 Fp[2] FL Fi[4] FC15{ m Fi[2]} FC8 FC16{ m FC8 FC10 Fp Fi[4]} FC17{ m Fp}} FC8 FC8 FL Fi[5]}


void  S10179C47 ::mf10179c47(){}
 S10179C47 ::~S10179C47(){ note_dtor("S10179C47", this);}
S10179C47 ::S10179C47(){ note_ctor("S10179C47", this);} // tgen

static void Test_S10179C47()
{
  extern Class_Descriptor cd_S10179C47;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1763,3459)];
    init_test(&cd_S10179C47, buf);
    S10179C47 *dp, &lv = *(dp=new (buf) S10179C47());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14096,13832), "sizeof(S10179C47)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C47)");
    check_field_offset(lv, s10179c47f0, ABISELECT(8,4), "S10179C47.s10179c47f0");
    check_field_offset(lv, s10179c47f1, ABISELECT(136,92), "S10179C47.s10179c47f1");
    check_field_offset(lv, s10179c47f2, ABISELECT(176,112), "S10179C47.s10179c47f2");
    check_field_offset(lv, s10179c47f3, ABISELECT(13816,13644), "S10179C47.s10179c47f3");
    check_field_offset(lv, s10179c47f4, ABISELECT(14000,13772), "S10179C47.s10179c47f4");
    check_field_offset(lv, s10179c47f5, ABISELECT(14032,13788), "S10179C47.s10179c47f5");
    check_field_offset(lv, s10179c47f6, ABISELECT(14064,13804), "S10179C47.s10179c47f6");
    check_field_offset(lv, s10179c47f7, ABISELECT(14072,13812), "S10179C47.s10179c47f7");
    test_class_info(&lv, &cd_S10179C47);
    dp->~S10179C47();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C47(Test_S10179C47, "S10179C47", ABISELECT(14096,13832));

#else // __cplusplus

extern void _ZN9S10179C47C1Ev();
extern void _ZN9S10179C47D1Ev();
Name_Map name_map_S10179C47[] = {
  NSPAIR(_ZN9S10179C47C1Ev),
  NSPAIR(_ZN9S10179C47D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10179C47[];
extern void _ZN9S10179C47D1Ev();
extern void _ZN9S10179C47D0Ev();
static  VTBL_ENTRY vtc_S10179C47[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C47[0]),
  (VTBL_ENTRY)&_ZN9S10179C47D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C47D0Ev,
};
extern VTBL_ENTRY _ZTI9S10179C47[];
extern  VTBL_ENTRY _ZTV9S10179C47[];
Class_Descriptor cd_S10179C47 = {  "S10179C47", // class name
  0,0,//no base classes
  &(vtc_S10179C47[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(14096,13832), // object size
  NSPAIRA(_ZTI9S10179C47),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10179C47),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  S10179C44  : S10180C17 , S10179C24 {
  int s10179c44f0;
  ::S10180C45 s10179c44f1;
  ::S10180C46 s10179c44f2;
  void *s10179c44f3;
  ::S10179C47 s10179c44f4;
  __tsi64 s10179c44f5;
  ::S10180C62 s10179c44f6;
  char s10179c44f7[128];
  ::S10180C169 s10179c44f8;
  ::S10180C31 s10179c44f9;
  virtual  ~S10179C44(); // _ZN9S10179C44D1Ev
  virtual void  v70(); // _ZN9S10179C443v70Ev
  S10179C44(); // tgen
};
//SIG(-1 S10179C44) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v2} vd v1 Fi FC7{ m Fc[2]} FC8{ Fp[2]} Fp FC9{ vd m FC10{ vd m FC11{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC12{ BC13{ vd v9 v10 v11 v12 v13 v14 Fi Fp Fc} vd v3 v4 v5 v6 v7 v8 Fp} FC14{ BC15{ vd v16 Fi Fc[3]} vd v15 Fp[4] FL Fi FC16{ m FC17{ Fl[4]}} FC18{ m Fp FC19{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC20{ BC15 vd v17 FC16 Fi Fp[2] FC21{ m FC16 FC18 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC22{ BC15 vd v18 Fp[2] FL Fi[4] FC23{ m Fi[2]} FC16 FC24{ m FC16 FC18 Fp Fi[4]} FC25{ m Fp}} FC16 FC16 FL Fi[5]} FL FC26{ m FC27{ m FL[3] Fi[3] FL} FC28{ m Fi} Fi} Fc[128] FC29{ m Fi[2]} FC30{ m FC31{ m Fp Fi[2] FC5} Fp[2]}}


 S10179C44 ::~S10179C44(){ note_dtor("S10179C44", this);}
void  S10179C44 ::v70(){vfunc_called(this, "_ZN9S10179C443v70Ev");}
S10179C44 ::S10179C44(){ note_ctor("S10179C44", this);} // tgen

static void Test_S10179C44()
{
  extern Class_Descriptor cd_S10179C44;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1804,3528)];
    init_test(&cd_S10179C44, buf);
    S10179C44 *dp, &lv = *(dp=new (buf) S10179C44());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14424,14108), "sizeof(S10179C44)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C44)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10179C44");
    check_base_class_offset(lv, (S10179C24*), ABISELECT(48,32), "S10179C44");
    check_field_offset(lv, s10179c44f0, ABISELECT(56,36), "S10179C44.s10179c44f0");
    check_field_offset(lv, s10179c44f1, ABISELECT(60,40), "S10179C44.s10179c44f1");
    check_field_offset(lv, s10179c44f2, ABISELECT(64,44), "S10179C44.s10179c44f2");
    check_field_offset(lv, s10179c44f3, ABISELECT(80,52), "S10179C44.s10179c44f3");
    check_field_offset(lv, s10179c44f4, ABISELECT(88,56), "S10179C44.s10179c44f4");
    check_field_offset(lv, s10179c44f5, ABISELECT(14184,13888), "S10179C44.s10179c44f5");
    check_field_offset(lv, s10179c44f6, ABISELECT(14192,13896), "S10179C44.s10179c44f6");
    check_field_offset(lv, s10179c44f7, ABISELECT(14248,13948), "S10179C44.s10179c44f7");
    check_field_offset(lv, s10179c44f8, ABISELECT(14376,14076), "S10179C44.s10179c44f8");
    check_field_offset(lv, s10179c44f9, ABISELECT(14384,14084), "S10179C44.s10179c44f9");
    test_class_info(&lv, &cd_S10179C44);
    dp->~S10179C44();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C44(Test_S10179C44, "S10179C44", ABISELECT(14424,14108));

#else // __cplusplus

extern void _ZN9S10179C44C1Ev();
extern void _ZN9S10179C44D1Ev();
Name_Map name_map_S10179C44[] = {
  NSPAIR(_ZN9S10179C44C1Ev),
  NSPAIR(_ZN9S10179C44D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C24;
extern VTBL_ENTRY _ZTI9S10179C24[];
extern  VTBL_ENTRY _ZTV9S10179C24[];
static Base_Class bases_S10179C44[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C24,    ABISELECT(48,32), //bcp->offset
    5, //bcp->virtual_function_table_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 _ZTI9S10179C44[];
extern void _ZN9S10179C44D1Ev();
extern void _ZN9S10179C44D0Ev();
extern void _ZN9S10179C443v70Ev();
extern void ABISELECT(_ZThn48_N9S10179C44D1Ev,_ZThn32_N9S10179C44D1Ev)();
extern void ABISELECT(_ZThn48_N9S10179C44D0Ev,_ZThn32_N9S10179C44D0Ev)();
extern void _ZN9S10179C243v41Ev();
static  VTBL_ENTRY vtc_S10179C44[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C44[0]),
  (VTBL_ENTRY)&_ZN9S10179C44D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C44D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C443v70Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10179C44[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10179C44D1Ev,_ZThn32_N9S10179C44D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10179C44D0Ev,_ZThn32_N9S10179C44D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C243v41Ev,
};
extern VTBL_ENTRY _ZTI9S10179C44[];
extern  VTBL_ENTRY _ZTV9S10179C44[];
Class_Descriptor cd_S10179C44 = {  "S10179C44", // class name
  bases_S10179C44, 2,
  &(vtc_S10179C44[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(14424,14108), // object size
  NSPAIRA(_ZTI9S10179C44),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10179C44),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  S10179C25  : S10180C17 , S10179C2 , S10179C11 , S10179C26 , S10179C27 {
  int s10179c25f0;
  ::S10180C169 s10179c25f1;
  ::S10180C169 s10179c25f2;
  ::S10180C169 s10179c25f3;
  ::S10180C29 s10179c25f4;
  ::S10180C34 s10179c25f5;
  ::S10179C35 s10179c25f6;
  ::S10179C39 s10179c25f7;
  int s10179c25f8;
  void *s10179c25f9;
  ::S10179C44 s10179c25f10;
  int s10179c25f11[3];
  ::S10180C64 s10179c25f12;
  ::S10180C65 s10179c25f13;
  ::S10180C66 s10179c25f14;
  ::S10180C87 s10179c25f15;
  __tsi64 s10179c25f16;
  ::S10180C106 s10179c25f17;
  ::S10180C86 s10179c25f18;
  ::S10180C68 s10179c25f19;
  ::S10180C31 s10179c25f20;
  char s10179c25f21;
  virtual  ~S10179C25(); // _ZN9S10179C25D1Ev
  virtual void  v42(); // _ZN9S10179C253v42Ev
  virtual void  v43(); // _ZN9S10179C253v43Ev
  virtual void  v44(); // _ZN9S10179C253v44Ev
  virtual void  v45(); // _ZN9S10179C253v45Ev
  virtual void  v46(); // _ZN9S10179C253v46Ev
  virtual void  v47(); // _ZN9S10179C253v47Ev
  virtual void  v48(); // _ZN9S10179C253v48Ev
  virtual void  v49(); // _ZN9S10179C253v49Ev
  virtual void  v50(); // _ZN9S10179C253v50Ev
  virtual void  v51(); // _ZN9S10179C253v51Ev
  virtual void  v52(); // _ZN9S10179C253v52Ev
  virtual void  v53(); // _ZN9S10179C253v53Ev
  virtual void  v54(); // _ZN9S10179C253v54Ev
  virtual void  v55(); // _ZN9S10179C253v55Ev
  virtual void  v56(); // _ZN9S10179C253v56Ev
  virtual void  v57(); // _ZN9S10179C253v57Ev
  virtual void  v58(); // _ZN9S10179C253v58Ev
  virtual void  v59(); // _ZN9S10179C253v59Ev
  virtual void  v60(); // _ZN9S10179C253v60Ev
  virtual void  v61(); // _ZN9S10179C253v61Ev
  virtual void  v62(); // _ZN9S10179C253v62Ev
  virtual void  v63(); // _ZN9S10179C253v63Ev
  S10179C25(); // tgen
};
//SIG(-1 S10179C25) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v23} BC7{ vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 Fp FC8{ m FC9{ m Fp Fi FC4} Fi} FC10{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC11{ vd v48} BC12{ vd v49 v50} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi FC13{ m Fi[2]} FC13 FC13 FC14{ BC2 vd Fi Fp FC8 FL FC15{ m Fi[2]} Fi Fc Fi FC16{ m FC17{ m Fp Fi[2] FC5} Fp[2]}} FC18{ BC19{ vd 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 FC8 FC10} vd v51 v52 v53} FC20{ vd m Fi Fp[3] FC21{ m Fc[2] Fp[3] Fi[4] FC22{ m FC23{ Fl[4]}}}} FC24{ vd m FC22 Fi[2] FC25{ m FL[3] Fi[3] FL} FL FC26{ m Fi FC27{ m Fi[4]}} FC16 Fc[2] Fi[2] Fp[2] FL Fi[3]} Fi Fp FC28{ BC2 BC29{ vd v79} vd v78 Fi FC30{ m Fc[2]} FC31{ Fp[2]} Fp FC32{ vd m FC33{ vd m FC34{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC35{ BC36{ vd v86 v87 v88 v89 v90 v91 Fi Fp Fc} vd v80 v81 v82 v83 v84 v85 Fp} FC37{ BC38{ vd v93 Fi Fc[3]} vd v92 Fp[4] FL Fi FC22 FC39{ m Fp FC40{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC41{ BC38 vd v94 FC22 Fi Fp[2] FC42{ m FC22 FC39 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC43{ BC38 vd v95 Fp[2] FL Fi[4] FC44{ m Fi[2]} FC22 FC45{ m FC22 FC39 Fp Fi[4]} FC46{ m Fp}} FC22 FC22 FL Fi[5]} FL FC47{ m FC25 FC48{ m Fi} Fi} Fc[128] FC13 FC16} Fi[3] FC49{ m Fp Fi[2]} FC50{ m Fc[11] Fi[2]} FC51{ BC52{} FL Fi} FC53{ BC54{ BC2 vd v98 v99 v100 v101 FC55{ m Fp FC8 FC9 FC9 Fi[3] FC56{ m FC57{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v96 v97} FL FC58{ BC54 v102} FC59{ BC54 v103} FC60{ BC54 v104 v105} FC16 Fc}


 S10179C25 ::~S10179C25(){ note_dtor("S10179C25", this);}
void  S10179C25 ::v42(){vfunc_called(this, "_ZN9S10179C253v42Ev");}
void  S10179C25 ::v43(){vfunc_called(this, "_ZN9S10179C253v43Ev");}
void  S10179C25 ::v44(){vfunc_called(this, "_ZN9S10179C253v44Ev");}
void  S10179C25 ::v45(){vfunc_called(this, "_ZN9S10179C253v45Ev");}
void  S10179C25 ::v46(){vfunc_called(this, "_ZN9S10179C253v46Ev");}
void  S10179C25 ::v47(){vfunc_called(this, "_ZN9S10179C253v47Ev");}
void  S10179C25 ::v48(){vfunc_called(this, "_ZN9S10179C253v48Ev");}
void  S10179C25 ::v49(){vfunc_called(this, "_ZN9S10179C253v49Ev");}
void  S10179C25 ::v50(){vfunc_called(this, "_ZN9S10179C253v50Ev");}
void  S10179C25 ::v51(){vfunc_called(this, "_ZN9S10179C253v51Ev");}
void  S10179C25 ::v52(){vfunc_called(this, "_ZN9S10179C253v52Ev");}
void  S10179C25 ::v53(){vfunc_called(this, "_ZN9S10179C253v53Ev");}
void  S10179C25 ::v54(){vfunc_called(this, "_ZN9S10179C253v54Ev");}
void  S10179C25 ::v55(){vfunc_called(this, "_ZN9S10179C253v55Ev");}
void  S10179C25 ::v56(){vfunc_called(this, "_ZN9S10179C253v56Ev");}
void  S10179C25 ::v57(){vfunc_called(this, "_ZN9S10179C253v57Ev");}
void  S10179C25 ::v58(){vfunc_called(this, "_ZN9S10179C253v58Ev");}
void  S10179C25 ::v59(){vfunc_called(this, "_ZN9S10179C253v59Ev");}
void  S10179C25 ::v60(){vfunc_called(this, "_ZN9S10179C253v60Ev");}
void  S10179C25 ::v61(){vfunc_called(this, "_ZN9S10179C253v61Ev");}
void  S10179C25 ::v62(){vfunc_called(this, "_ZN9S10179C253v62Ev");}
void  S10179C25 ::v63(){vfunc_called(this, "_ZN9S10179C253v63Ev");}
S10179C25 ::S10179C25(){ note_ctor("S10179C25", this);} // tgen

static void Test_S10179C25()
{
  extern Class_Descriptor cd_S10179C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2037,3852)];
    init_test(&cd_S10179C25, buf);
    S10179C25 *dp, &lv = *(dp=new (buf) S10179C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16288,15404), "sizeof(S10179C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C25)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10179C25");
    check_base_class_offset(lv, (S10179C2*), ABISELECT(48,32), "S10179C25");
    check_base_class_offset(lv, (S10179C11*), ABISELECT(56,36), "S10179C25");
    check_base_class_offset(lv, (S10179C26*), ABISELECT(152,100), "S10179C25");
    check_base_class_offset(lv, (S10179C27*), ABISELECT(160,104), "S10179C25");
    check_field_offset(lv, s10179c25f0, ABISELECT(168,108), "S10179C25.s10179c25f0");
    check_field_offset(lv, s10179c25f1, ABISELECT(172,112), "S10179C25.s10179c25f1");
    check_field_offset(lv, s10179c25f2, ABISELECT(180,120), "S10179C25.s10179c25f2");
    check_field_offset(lv, s10179c25f3, ABISELECT(188,128), "S10179C25.s10179c25f3");
    check_field_offset(lv, s10179c25f4, ABISELECT(200,136), "S10179C25.s10179c25f4");
    check_field_offset(lv, s10179c25f5, ABISELECT(352,244), "S10179C25.s10179c25f5");
    check_field_offset(lv, s10179c25f6, ABISELECT(448,308), "S10179C25.s10179c25f6");
    check_field_offset(lv, s10179c25f7, ABISELECT(568,376), "S10179C25.s10179c25f7");
    check_field_offset(lv, s10179c25f8, ABISELECT(792,540), "S10179C25.s10179c25f8");
    check_field_offset(lv, s10179c25f9, ABISELECT(800,544), "S10179C25.s10179c25f9");
    check_field_offset(lv, s10179c25f10, ABISELECT(808,548), "S10179C25.s10179c25f10");
    check_field_offset(lv, s10179c25f11, ABISELECT(15232,14656), "S10179C25.s10179c25f11");
    check_field_offset(lv, s10179c25f12, ABISELECT(15248,14668), "S10179C25.s10179c25f12");
    check_field_offset(lv, s10179c25f13, ABISELECT(15264,14680), "S10179C25.s10179c25f13");
    check_field_offset(lv, s10179c25f14, ABISELECT(15288,14700), "S10179C25.s10179c25f14");
    check_field_offset(lv, s10179c25f15, ABISELECT(15304,14712), "S10179C25.s10179c25f15");
    check_field_offset(lv, s10179c25f16, ABISELECT(15536,14876), "S10179C25.s10179c25f16");
    check_field_offset(lv, s10179c25f17, ABISELECT(15544,14884), "S10179C25.s10179c25f17");
    check_field_offset(lv, s10179c25f18, ABISELECT(15776,15048), "S10179C25.s10179c25f18");
    check_field_offset(lv, s10179c25f19, ABISELECT(16008,15212), "S10179C25.s10179c25f19");
    check_field_offset(lv, s10179c25f20, ABISELECT(16240,15376), "S10179C25.s10179c25f20");
    check_field_offset(lv, s10179c25f21, ABISELECT(16280,15400), "S10179C25.s10179c25f21");
    test_class_info(&lv, &cd_S10179C25);
    dp->~S10179C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C25(Test_S10179C25, "S10179C25", ABISELECT(16288,15404));

#else // __cplusplus

extern void _ZN9S10179C25C1Ev();
extern void _ZN9S10179C25D1Ev();
Name_Map name_map_S10179C25[] = {
  NSPAIR(_ZN9S10179C25C1Ev),
  NSPAIR(_ZN9S10179C25D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C2;
extern VTBL_ENTRY _ZTI8S10179C2[];
extern  VTBL_ENTRY _ZTV8S10179C2[];
extern Class_Descriptor cd_S10179C11;
extern VTBL_ENTRY _ZTI9S10179C11[];
extern  VTBL_ENTRY _ZTV9S10179C11[];
extern Class_Descriptor cd_S10179C26;
extern VTBL_ENTRY _ZTI9S10179C26[];
extern  VTBL_ENTRY _ZTV9S10179C26[];
extern Class_Descriptor cd_S10179C27;
extern VTBL_ENTRY _ZTI9S10179C27[];
extern  VTBL_ENTRY _ZTV9S10179C27[];
static Base_Class bases_S10179C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C2,    ABISELECT(48,32), //bcp->offset
    26, //bcp->virtual_function_table_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},
  {&cd_S10179C11,    ABISELECT(56,36), //bcp->offset
    31, //bcp->virtual_function_table_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},
  {&cd_S10179C26,    ABISELECT(152,100), //bcp->offset
    59, //bcp->virtual_function_table_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},
  {&cd_S10179C27,    ABISELECT(160,104), //bcp->offset
    64, //bcp->virtual_function_table_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 _ZTI9S10179C25[];
extern void _ZN9S10179C25D1Ev();
extern void _ZN9S10179C25D0Ev();
extern void _ZN9S10179C253v42Ev();
extern void _ZN9S10179C253v43Ev();
extern void _ZN9S10179C253v44Ev();
extern void _ZN9S10179C253v45Ev();
extern void _ZN9S10179C253v46Ev();
extern void _ZN9S10179C253v47Ev();
extern void _ZN9S10179C253v48Ev();
extern void _ZN9S10179C253v49Ev();
extern void _ZN9S10179C253v50Ev();
extern void _ZN9S10179C253v51Ev();
extern void _ZN9S10179C253v52Ev();
extern void _ZN9S10179C253v53Ev();
extern void _ZN9S10179C253v54Ev();
extern void _ZN9S10179C253v55Ev();
extern void _ZN9S10179C253v56Ev();
extern void _ZN9S10179C253v57Ev();
extern void _ZN9S10179C253v58Ev();
extern void _ZN9S10179C253v59Ev();
extern void _ZN9S10179C253v60Ev();
extern void _ZN9S10179C253v61Ev();
extern void _ZN9S10179C253v62Ev();
extern void _ZN9S10179C253v63Ev();
extern void ABISELECT(_ZThn48_N9S10179C25D1Ev,_ZThn32_N9S10179C25D1Ev)();
extern void ABISELECT(_ZThn48_N9S10179C25D0Ev,_ZThn32_N9S10179C25D0Ev)();
extern void _ZN8S10179C22v7Ev();
extern void ABISELECT(_ZThn56_N9S10179C25D1Ev,_ZThn36_N9S10179C25D1Ev)();
extern void ABISELECT(_ZThn56_N9S10179C25D0Ev,_ZThn36_N9S10179C25D0Ev)();
extern void _ZN9S10179C113v15Ev();
extern void _ZN9S10179C113v16Ev();
extern void _ZN9S10179C113v17Ev();
extern void _ZN9S10179C113v18Ev();
extern void _ZN9S10179C113v19Ev();
extern void _ZN9S10179C113v20Ev();
extern void _ZN9S10179C113v21Ev();
extern void _ZN9S10179C113v22Ev();
extern void _ZN9S10179C113v23Ev();
extern void _ZN9S10179C113v24Ev();
extern void _ZN9S10179C113v25Ev();
extern void _ZN9S10179C113v26Ev();
extern void _ZN9S10179C113v27Ev();
extern void _ZN9S10179C113v28Ev();
extern void _ZN9S10179C113v29Ev();
extern void _ZN9S10179C113v30Ev();
extern void _ZN9S10179C113v31Ev();
extern void _ZN9S10179C113v32Ev();
extern void _ZN9S10179C113v33Ev();
extern void _ZN9S10179C113v34Ev();
extern void _ZN9S10179C113v35Ev();
extern void _ZN9S10179C113v36Ev();
extern void _ZN9S10179C113v37Ev();
extern void _ZN9S10179C113v38Ev();
extern void ABISELECT(_ZThn152_N9S10179C25D1Ev,_ZThn100_N9S10179C25D1Ev)();
extern void ABISELECT(_ZThn152_N9S10179C25D0Ev,_ZThn100_N9S10179C25D0Ev)();
extern void _ZN9S10179C263v64Ev();
extern void ABISELECT(_ZThn160_N9S10179C25D1Ev,_ZThn104_N9S10179C25D1Ev)();
extern void ABISELECT(_ZThn160_N9S10179C25D0Ev,_ZThn104_N9S10179C25D0Ev)();
extern void _ZN9S10179C273v65Ev();
extern void _ZN9S10179C273v66Ev();
static  VTBL_ENTRY vtc_S10179C25[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C25[0]),
  (VTBL_ENTRY)&_ZN9S10179C25D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C25D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v42Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v43Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v44Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v45Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v46Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v47Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v48Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v49Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v50Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v51Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v52Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v53Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v54Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v55Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v56Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v57Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v58Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v59Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v60Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v61Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v62Ev,
  (VTBL_ENTRY)&_ZN9S10179C253v63Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10179C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10179C25D1Ev,_ZThn32_N9S10179C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10179C25D0Ev,_ZThn32_N9S10179C25D0Ev),
  (VTBL_ENTRY)&_ZN8S10179C22v7Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S10179C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10179C25D1Ev,_ZThn36_N9S10179C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10179C25D0Ev,_ZThn36_N9S10179C25D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v38Ev,
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S10179C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10179C25D1Ev,_ZThn100_N9S10179C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10179C25D0Ev,_ZThn100_N9S10179C25D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C263v64Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S10179C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10179C25D1Ev,_ZThn104_N9S10179C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10179C25D0Ev,_ZThn104_N9S10179C25D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C273v65Ev,
  (VTBL_ENTRY)&_ZN9S10179C273v66Ev,
};
extern VTBL_ENTRY _ZTI9S10179C25[];
extern  VTBL_ENTRY _ZTV9S10179C25[];
Class_Descriptor cd_S10179C25 = {  "S10179C25", // class name
  bases_S10179C25, 5,
  &(vtc_S10179C25[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16288,15404), // object size
  NSPAIRA(_ZTI9S10179C25),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S10179C25),70, //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  S10179C81  {
  virtual  ~S10179C81(); // _ZN9S10179C81D1Ev
  virtual void  v99(); // _ZN9S10179C813v99Ev
  virtual void  v100(); // _ZN9S10179C814v100Ev
  virtual void  v101(); // _ZN9S10179C814v101Ev
  virtual void  v102(); // _ZN9S10179C814v102Ev
  virtual void  v103(); // _ZN9S10179C814v103Ev
  virtual void  v104(); // _ZN9S10179C814v104Ev
  virtual void  v105(); // _ZN9S10179C814v105Ev
  virtual void  v106(); // _ZN9S10179C814v106Ev
  virtual void  v107(); // _ZN9S10179C814v107Ev
  virtual void  v108(); // _ZN9S10179C814v108Ev
  virtual void  v109(); // _ZN9S10179C814v109Ev
  virtual void  v110(); // _ZN9S10179C814v110Ev
  virtual void  v111(); // _ZN9S10179C814v111Ev
  virtual void  v112(); // _ZN9S10179C814v112Ev
  virtual void  v113(); // _ZN9S10179C814v113Ev
  S10179C81(); // tgen
};
//SIG(-1 S10179C81) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15}


 S10179C81 ::~S10179C81(){ note_dtor("S10179C81", this);}
void  S10179C81 ::v99(){vfunc_called(this, "_ZN9S10179C813v99Ev");}
void  S10179C81 ::v100(){vfunc_called(this, "_ZN9S10179C814v100Ev");}
void  S10179C81 ::v101(){vfunc_called(this, "_ZN9S10179C814v101Ev");}
void  S10179C81 ::v102(){vfunc_called(this, "_ZN9S10179C814v102Ev");}
void  S10179C81 ::v103(){vfunc_called(this, "_ZN9S10179C814v103Ev");}
void  S10179C81 ::v104(){vfunc_called(this, "_ZN9S10179C814v104Ev");}
void  S10179C81 ::v105(){vfunc_called(this, "_ZN9S10179C814v105Ev");}
void  S10179C81 ::v106(){vfunc_called(this, "_ZN9S10179C814v106Ev");}
void  S10179C81 ::v107(){vfunc_called(this, "_ZN9S10179C814v107Ev");}
void  S10179C81 ::v108(){vfunc_called(this, "_ZN9S10179C814v108Ev");}
void  S10179C81 ::v109(){vfunc_called(this, "_ZN9S10179C814v109Ev");}
void  S10179C81 ::v110(){vfunc_called(this, "_ZN9S10179C814v110Ev");}
void  S10179C81 ::v111(){vfunc_called(this, "_ZN9S10179C814v111Ev");}
void  S10179C81 ::v112(){vfunc_called(this, "_ZN9S10179C814v112Ev");}
void  S10179C81 ::v113(){vfunc_called(this, "_ZN9S10179C814v113Ev");}
S10179C81 ::S10179C81(){ note_ctor("S10179C81", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10179C81C1Ev();
extern void _ZN9S10179C81D1Ev();
Name_Map name_map_S10179C81[] = {
  NSPAIR(_ZN9S10179C81C1Ev),
  NSPAIR(_ZN9S10179C81D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10179C81[];
extern void _ZN9S10179C81D1Ev();
extern void _ZN9S10179C81D0Ev();
extern void _ZN9S10179C813v99Ev();
extern void _ZN9S10179C814v100Ev();
extern void _ZN9S10179C814v101Ev();
extern void _ZN9S10179C814v102Ev();
extern void _ZN9S10179C814v103Ev();
extern void _ZN9S10179C814v104Ev();
extern void _ZN9S10179C814v105Ev();
extern void _ZN9S10179C814v106Ev();
extern void _ZN9S10179C814v107Ev();
extern void _ZN9S10179C814v108Ev();
extern void _ZN9S10179C814v109Ev();
extern void _ZN9S10179C814v110Ev();
extern void _ZN9S10179C814v111Ev();
extern void _ZN9S10179C814v112Ev();
extern void _ZN9S10179C814v113Ev();
static  VTBL_ENTRY vtc_S10179C81[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C81[0]),
  (VTBL_ENTRY)&_ZN9S10179C81D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C81D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C813v99Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v100Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v101Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v102Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v103Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v104Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v105Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v106Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v107Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v108Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v109Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v110Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v111Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v112Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v113Ev,
};
extern VTBL_ENTRY _ZTI9S10179C81[];
extern  VTBL_ENTRY _ZTV9S10179C81[];
Class_Descriptor cd_S10179C81 = {  "S10179C81", // class name
  0,0,//no base classes
  &(vtc_S10179C81[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10179C81),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10179C81),19, //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  S10179C80  : S10179C81 , S10180C82 {
  ~S10179C80(); // tgen
  S10179C80(); // tgen
};
//SIG(-1 S10179C80) C1{ BC2{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15} BC3{ vd m Fp}}


S10179C80 ::~S10179C80(){ note_dtor("S10179C80", this);} // tgen
S10179C80 ::S10179C80(){ note_ctor("S10179C80", this);} // tgen

static void Test_S10179C80()
{
  extern Class_Descriptor cd_S10179C80;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10179C80, buf);
    S10179C80 *dp, &lv = *(dp=new (buf) S10179C80());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10179C80)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C80)");
    check_base_class_offset(lv, (S10179C81*), 0, "S10179C80");
    check_base_class_offset(lv, (S10180C82*), ABISELECT(8,4), "S10179C80");
    test_class_info(&lv, &cd_S10179C80);
    dp->~S10179C80();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C80(Test_S10179C80, "S10179C80", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S10179C80C1Ev();
extern void _ZN9S10179C80D1Ev();
Name_Map name_map_S10179C80[] = {
  NSPAIR(_ZN9S10179C80C1Ev),
  NSPAIR(_ZN9S10179C80D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10179C81;
extern VTBL_ENTRY _ZTI9S10179C81[];
extern  VTBL_ENTRY _ZTV9S10179C81[];
extern Class_Descriptor cd_S10180C82;
extern VTBL_ENTRY _ZTI9S10180C82[];
extern  VTBL_ENTRY _ZTV9S10180C82[];
static Base_Class bases_S10179C80[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10179C81,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C82,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI9S10179C80[];
extern void _ZN9S10179C80D1Ev();
extern void _ZN9S10179C80D0Ev();
extern void _ZN9S10179C813v99Ev();
extern void _ZN9S10179C814v100Ev();
extern void _ZN9S10179C814v101Ev();
extern void _ZN9S10179C814v102Ev();
extern void _ZN9S10179C814v103Ev();
extern void _ZN9S10179C814v104Ev();
extern void _ZN9S10179C814v105Ev();
extern void _ZN9S10179C814v106Ev();
extern void _ZN9S10179C814v107Ev();
extern void _ZN9S10179C814v108Ev();
extern void _ZN9S10179C814v109Ev();
extern void _ZN9S10179C814v110Ev();
extern void _ZN9S10179C814v111Ev();
extern void _ZN9S10179C814v112Ev();
extern void _ZN9S10179C814v113Ev();
extern void ABISELECT(_ZThn8_N9S10179C80D1Ev,_ZThn4_N9S10179C80D1Ev)();
extern void ABISELECT(_ZThn8_N9S10179C80D0Ev,_ZThn4_N9S10179C80D0Ev)();
static  VTBL_ENTRY vtc_S10179C80[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C80[0]),
  (VTBL_ENTRY)&_ZN9S10179C80D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C80D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C813v99Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v100Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v101Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v102Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v103Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v104Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v105Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v106Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v107Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v108Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v109Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v110Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v111Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v112Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v113Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S10179C80[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S10179C80D1Ev,_ZThn4_N9S10179C80D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S10179C80D0Ev,_ZThn4_N9S10179C80D0Ev),
};
extern VTBL_ENTRY _ZTI9S10179C80[];
extern  VTBL_ENTRY _ZTV9S10179C80[];
Class_Descriptor cd_S10179C80 = {  "S10179C80", // class name
  bases_S10179C80, 2,
  &(vtc_S10179C80[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S10179C80),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10179C80),23, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C83  {
  virtual  ~S10179C83(); // _ZN9S10179C83D1Ev
  virtual void  v114(); // _ZN9S10179C834v114Ev
  virtual void  v115(); // _ZN9S10179C834v115Ev
  S10179C83(); // tgen
};
//SIG(-1 S10179C83) C1{ vd v1 v2}


 S10179C83 ::~S10179C83(){ note_dtor("S10179C83", this);}
void  S10179C83 ::v114(){vfunc_called(this, "_ZN9S10179C834v114Ev");}
void  S10179C83 ::v115(){vfunc_called(this, "_ZN9S10179C834v115Ev");}
S10179C83 ::S10179C83(){ note_ctor("S10179C83", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10179C83C1Ev();
extern void _ZN9S10179C83D1Ev();
Name_Map name_map_S10179C83[] = {
  NSPAIR(_ZN9S10179C83C1Ev),
  NSPAIR(_ZN9S10179C83D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10179C83[];
extern void _ZN9S10179C83D1Ev();
extern void _ZN9S10179C83D0Ev();
extern void _ZN9S10179C834v114Ev();
extern void _ZN9S10179C834v115Ev();
static  VTBL_ENTRY vtc_S10179C83[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C83[0]),
  (VTBL_ENTRY)&_ZN9S10179C83D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C83D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C834v114Ev,
  (VTBL_ENTRY)&_ZN9S10179C834v115Ev,
};
extern VTBL_ENTRY _ZTI9S10179C83[];
extern  VTBL_ENTRY _ZTV9S10179C83[];
Class_Descriptor cd_S10179C83 = {  "S10179C83", // class name
  0,0,//no base classes
  &(vtc_S10179C83[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10179C83),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10179C83),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  S10179C69  : S10180C17 {
  ::S10180C70 s10179c69f0;
  void *s10179c69f1;
  char s10179c69f2;
  int s10179c69f3;
  virtual  ~S10179C69(); // _ZN9S10179C69D1Ev
  virtual void  v89(); // _ZN9S10179C693v89Ev
  virtual void  v90(); // _ZN9S10179C693v90Ev
  virtual void  v91(); // _ZN9S10179C693v91Ev
  virtual void  v92(); // _ZN9S10179C693v92Ev
  S10179C69(); // tgen
};
//SIG(-1 S10179C69) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 v2 v3 v4 FC6{ m Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC8 FC8 Fi[3] FC9{ m FC10{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi}


 S10179C69 ::~S10179C69(){ note_dtor("S10179C69", this);}
void  S10179C69 ::v89(){vfunc_called(this, "_ZN9S10179C693v89Ev");}
void  S10179C69 ::v90(){vfunc_called(this, "_ZN9S10179C693v90Ev");}
void  S10179C69 ::v91(){vfunc_called(this, "_ZN9S10179C693v91Ev");}
void  S10179C69 ::v92(){vfunc_called(this, "_ZN9S10179C693v92Ev");}
S10179C69 ::S10179C69(){ note_ctor("S10179C69", this);} // tgen

static void Test_S10179C69()
{
  extern Class_Descriptor cd_S10179C69;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10179C69, buf);
    S10179C69 *dp, &lv = *(dp=new (buf) S10179C69());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10179C69)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C69)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10179C69");
    check_field_offset(lv, s10179c69f0, ABISELECT(48,32), "S10179C69.s10179c69f0");
    check_field_offset(lv, s10179c69f1, ABISELECT(216,152), "S10179C69.s10179c69f1");
    check_field_offset(lv, s10179c69f2, ABISELECT(224,156), "S10179C69.s10179c69f2");
    check_field_offset(lv, s10179c69f3, ABISELECT(228,160), "S10179C69.s10179c69f3");
    test_class_info(&lv, &cd_S10179C69);
    dp->~S10179C69();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C69(Test_S10179C69, "S10179C69", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN9S10179C69C1Ev();
extern void _ZN9S10179C69D1Ev();
Name_Map name_map_S10179C69[] = {
  NSPAIR(_ZN9S10179C69C1Ev),
  NSPAIR(_ZN9S10179C69D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10179C69[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10179C69[];
extern void _ZN9S10179C69D1Ev();
extern void _ZN9S10179C69D0Ev();
extern void _ZN9S10179C693v89Ev();
extern void _ZN9S10179C693v90Ev();
extern void _ZN9S10179C693v91Ev();
extern void _ZN9S10179C693v92Ev();
static  VTBL_ENTRY vtc_S10179C69[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C69[0]),
  (VTBL_ENTRY)&_ZN9S10179C69D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C69D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v92Ev,
};
extern VTBL_ENTRY _ZTI9S10179C69[];
extern  VTBL_ENTRY _ZTV9S10179C69[];
Class_Descriptor cd_S10179C69 = {  "S10179C69", // class name
  bases_S10179C69, 1,
  &(vtc_S10179C69[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI9S10179C69),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10179C69),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  S10179C87  : S10179C69 {
  virtual void  v151(); // _ZN9S10179C874v151Ev
  virtual void  v152(); // _ZN9S10179C874v152Ev
  ~S10179C87(); // tgen
  S10179C87(); // tgen
};
//SIG(-1 S10179C87) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v3 v4 v5 v6 FC7{ m Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC9 FC9 Fi[3] FC10{ m FC11{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v1 v2}


void  S10179C87 ::v151(){vfunc_called(this, "_ZN9S10179C874v151Ev");}
void  S10179C87 ::v152(){vfunc_called(this, "_ZN9S10179C874v152Ev");}
S10179C87 ::~S10179C87(){ note_dtor("S10179C87", this);} // tgen
S10179C87 ::S10179C87(){ note_ctor("S10179C87", this);} // tgen

static void Test_S10179C87()
{
  extern Class_Descriptor cd_S10179C87;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10179C87, buf);
    S10179C87 *dp, &lv = *(dp=new (buf) S10179C87());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10179C87)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C87)");
    check_base_class_offset(lv, (S10180C17*)(S10179C69*), 0, "S10179C87");
    check_base_class_offset(lv, (S10179C69*), 0, "S10179C87");
    test_class_info(&lv, &cd_S10179C87);
    dp->~S10179C87();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C87(Test_S10179C87, "S10179C87", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN9S10179C87C1Ev();
extern void _ZN9S10179C87D1Ev();
Name_Map name_map_S10179C87[] = {
  NSPAIR(_ZN9S10179C87C1Ev),
  NSPAIR(_ZN9S10179C87D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C69;
extern VTBL_ENTRY _ZTI9S10179C69[];
extern  VTBL_ENTRY _ZTV9S10179C69[];
static Base_Class bases_S10179C87[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C69,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10179C87[];
extern void _ZN9S10179C87D1Ev();
extern void _ZN9S10179C87D0Ev();
extern void _ZN9S10179C693v89Ev();
extern void _ZN9S10179C693v90Ev();
extern void _ZN9S10179C693v91Ev();
extern void _ZN9S10179C693v92Ev();
extern void _ZN9S10179C874v151Ev();
extern void _ZN9S10179C874v152Ev();
static  VTBL_ENTRY vtc_S10179C87[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C87[0]),
  (VTBL_ENTRY)&_ZN9S10179C87D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C87D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v92Ev,
  (VTBL_ENTRY)&_ZN9S10179C874v151Ev,
  (VTBL_ENTRY)&_ZN9S10179C874v152Ev,
};
extern VTBL_ENTRY _ZTI9S10179C87[];
extern  VTBL_ENTRY _ZTV9S10179C87[];
Class_Descriptor cd_S10179C87 = {  "S10179C87", // class name
  bases_S10179C87, 2,
  &(vtc_S10179C87[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI9S10179C87),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10179C87),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  S10179C93  {
  long s10179c93f0;
  void  mf10179c93(); // _ZN9S10179C9310mf10179c93Ev
};
//SIG(-1 S10179C93) C1{ m Fl}


void  S10179C93 ::mf10179c93(){}

static void Test_S10179C93()
{
  {
    init_simple_test("S10179C93");
    S10179C93 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10179C93)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C93)");
    check_field_offset(lv, s10179c93f0, 0, "S10179C93.s10179c93f0");
  }
}
static Arrange_To_Call_Me vS10179C93(Test_S10179C93, "S10179C93", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C91  : S10180C17 , S10179C11 {
  ::S10180C92 s10179c91f0;
  int s10179c91f1[2];
  char s10179c91f2[2];
  int s10179c91f3;
  __tsi64 s10179c91f4[2];
  ::S10179C93 s10179c91f5;
  int s10179c91f6;
  virtual  ~S10179C91(); // _ZN9S10179C91D1Ev
  virtual void  v156(); // _ZN9S10179C914v156Ev
  virtual void  v157(); // _ZN9S10179C914v157Ev
  virtual void  v158(); // _ZN9S10179C914v158Ev
  virtual void  v159(); // _ZN9S10179C914v159Ev
  virtual void  v160(); // _ZN9S10179C914v160Ev
  virtual void  v161(); // _ZN9S10179C914v161Ev
  virtual void  v162(); // _ZN9S10179C914v162Ev
  virtual void  v163(); // _ZN9S10179C914v163Ev
  S10179C91(); // tgen
};
//SIG(-1 S10179C91) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 FC10{ m FC8 Fi[2] FC8} Fi[2] Fc[2] Fi FL[2] FC11{ m Fl} Fi}


 S10179C91 ::~S10179C91(){ note_dtor("S10179C91", this);}
void  S10179C91 ::v156(){vfunc_called(this, "_ZN9S10179C914v156Ev");}
void  S10179C91 ::v157(){vfunc_called(this, "_ZN9S10179C914v157Ev");}
void  S10179C91 ::v158(){vfunc_called(this, "_ZN9S10179C914v158Ev");}
void  S10179C91 ::v159(){vfunc_called(this, "_ZN9S10179C914v159Ev");}
void  S10179C91 ::v160(){vfunc_called(this, "_ZN9S10179C914v160Ev");}
void  S10179C91 ::v161(){vfunc_called(this, "_ZN9S10179C914v161Ev");}
void  S10179C91 ::v162(){vfunc_called(this, "_ZN9S10179C914v162Ev");}
void  S10179C91 ::v163(){vfunc_called(this, "_ZN9S10179C914v163Ev");}
S10179C91 ::S10179C91(){ note_ctor("S10179C91", this);} // tgen

static void Test_S10179C91()
{
  extern Class_Descriptor cd_S10179C91;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,43)];
    init_test(&cd_S10179C91, buf);
    S10179C91 *dp, &lv = *(dp=new (buf) S10179C91());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,168), "sizeof(S10179C91)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C91)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10179C91");
    check_base_class_offset(lv, (S10179C11*), ABISELECT(48,32), "S10179C91");
    check_field_offset(lv, s10179c91f0, ABISELECT(144,96), "S10179C91.s10179c91f0");
    check_field_offset(lv, s10179c91f1, ABISELECT(184,128), "S10179C91.s10179c91f1");
    check_field_offset(lv, s10179c91f2, ABISELECT(192,136), "S10179C91.s10179c91f2");
    check_field_offset(lv, s10179c91f3, ABISELECT(196,140), "S10179C91.s10179c91f3");
    check_field_offset(lv, s10179c91f4, ABISELECT(200,144), "S10179C91.s10179c91f4");
    check_field_offset(lv, s10179c91f5, ABISELECT(216,160), "S10179C91.s10179c91f5");
    check_field_offset(lv, s10179c91f6, ABISELECT(224,164), "S10179C91.s10179c91f6");
    test_class_info(&lv, &cd_S10179C91);
    dp->~S10179C91();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C91(Test_S10179C91, "S10179C91", ABISELECT(232,168));

#else // __cplusplus

extern void _ZN9S10179C91C1Ev();
extern void _ZN9S10179C91D1Ev();
Name_Map name_map_S10179C91[] = {
  NSPAIR(_ZN9S10179C91C1Ev),
  NSPAIR(_ZN9S10179C91D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C11;
extern VTBL_ENTRY _ZTI9S10179C11[];
extern  VTBL_ENTRY _ZTV9S10179C11[];
static Base_Class bases_S10179C91[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C11,    ABISELECT(48,32), //bcp->offset
    12, //bcp->virtual_function_table_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 _ZTI9S10179C91[];
extern void _ZN9S10179C91D1Ev();
extern void _ZN9S10179C91D0Ev();
extern void _ZN9S10179C914v156Ev();
extern void _ZN9S10179C914v157Ev();
extern void _ZN9S10179C914v158Ev();
extern void _ZN9S10179C914v159Ev();
extern void _ZN9S10179C914v160Ev();
extern void _ZN9S10179C914v161Ev();
extern void _ZN9S10179C914v162Ev();
extern void _ZN9S10179C914v163Ev();
extern void ABISELECT(_ZThn48_N9S10179C91D1Ev,_ZThn32_N9S10179C91D1Ev)();
extern void ABISELECT(_ZThn48_N9S10179C91D0Ev,_ZThn32_N9S10179C91D0Ev)();
extern void _ZN9S10179C113v15Ev();
extern void _ZN9S10179C113v16Ev();
extern void _ZN9S10179C113v17Ev();
extern void _ZN9S10179C113v18Ev();
extern void _ZN9S10179C113v19Ev();
extern void _ZN9S10179C113v20Ev();
extern void _ZN9S10179C113v21Ev();
extern void _ZN9S10179C113v22Ev();
extern void _ZN9S10179C113v23Ev();
extern void _ZN9S10179C113v24Ev();
extern void _ZN9S10179C113v25Ev();
extern void _ZN9S10179C113v26Ev();
extern void _ZN9S10179C113v27Ev();
extern void _ZN9S10179C113v28Ev();
extern void _ZN9S10179C113v29Ev();
extern void _ZN9S10179C113v30Ev();
extern void _ZN9S10179C113v31Ev();
extern void _ZN9S10179C113v32Ev();
extern void _ZN9S10179C113v33Ev();
extern void _ZN9S10179C113v34Ev();
extern void _ZN9S10179C113v35Ev();
extern void _ZN9S10179C113v36Ev();
extern void _ZN9S10179C113v37Ev();
extern void _ZN9S10179C113v38Ev();
static  VTBL_ENTRY vtc_S10179C91[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C91[0]),
  (VTBL_ENTRY)&_ZN9S10179C91D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C91D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C914v156Ev,
  (VTBL_ENTRY)&_ZN9S10179C914v157Ev,
  (VTBL_ENTRY)&_ZN9S10179C914v158Ev,
  (VTBL_ENTRY)&_ZN9S10179C914v159Ev,
  (VTBL_ENTRY)&_ZN9S10179C914v160Ev,
  (VTBL_ENTRY)&_ZN9S10179C914v161Ev,
  (VTBL_ENTRY)&_ZN9S10179C914v162Ev,
  (VTBL_ENTRY)&_ZN9S10179C914v163Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10179C91[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10179C91D1Ev,_ZThn32_N9S10179C91D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10179C91D0Ev,_ZThn32_N9S10179C91D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v38Ev,
};
extern VTBL_ENTRY _ZTI9S10179C91[];
extern  VTBL_ENTRY _ZTV9S10179C91[];
Class_Descriptor cd_S10179C91 = {  "S10179C91", // class name
  bases_S10179C91, 2,
  &(vtc_S10179C91[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,168), // object size
  NSPAIRA(_ZTI9S10179C91),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10179C91),40, //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  S10179C79  : S10180C17 , S10179C11 , S10179C2 , S10179C80 , S10179C83 , S10179C26 {
  void *s10179c79f0[5];
  int s10179c79f1;
  void *s10179c79f2;
  ::S10180C59 s10179c79f3;
  ::S10180C111 s10179c79f4;
  ::S10180C75 s10179c79f5;
  ::S10180C87 s10179c79f6;
  ::S10180C86 s10179c79f7;
  ::S10179C87 s10179c79f8;
  ::S10180C88 s10179c79f9;
  ::S10179C91 s10179c79f10;
  ::S10180C94 s10179c79f11;
  ::S10180C99 s10179c79f12;
  ::S10180C100 s10179c79f13;
  ::S10180C103 s10179c79f14;
  void *s10179c79f15;
  ::S10180C31 s10179c79f16;
  char s10179c79f17[2];
  int s10179c79f18;
  ::S10180C120 s10179c79f19;
  ::S10180C121 s10179c79f20;
  ::S10180C73 s10179c79f21;
  ::S10180C73 s10179c79f22;
  ::S10180C73 s10179c79f23;
  void *s10179c79f24;
  ::S10180C122 s10179c79f25;
  char s10179c79f26[2];
  __tsi64 s10179c79f27;
  char s10179c79f28[2];
  int s10179c79f29;
  ::S10180C61 s10179c79f30;
  ::S10180C124 s10179c79f31;
  char s10179c79f32;
  int s10179c79f33;
  virtual  ~S10179C79(); // _ZN9S10179C79D1Ev
  virtual void  v116(); // _ZN9S10179C794v116Ev
  virtual void  v117(); // _ZN9S10179C794v117Ev
  virtual void  v118(); // _ZN9S10179C794v118Ev
  virtual void  v119(); // _ZN9S10179C794v119Ev
  virtual void  v120(); // _ZN9S10179C794v120Ev
  virtual void  v121(); // _ZN9S10179C794v121Ev
  virtual void  v122(); // _ZN9S10179C794v122Ev
  virtual void  v123(); // _ZN9S10179C794v123Ev
  virtual void  v124(); // _ZN9S10179C794v124Ev
  virtual void  v125(); // _ZN9S10179C794v125Ev
  virtual void  v126(); // _ZN9S10179C794v126Ev
  virtual void  v127(); // _ZN9S10179C794v127Ev
  virtual void  v128(); // _ZN9S10179C794v128Ev
  virtual void  v129(); // _ZN9S10179C794v129Ev
  virtual void  v130(); // _ZN9S10179C794v130Ev
  virtual void  v131(); // _ZN9S10179C794v131Ev
  virtual void  v132(); // _ZN9S10179C794v132Ev
  virtual void  v133(); // _ZN9S10179C794v133Ev
  virtual void  v134(); // _ZN9S10179C794v134Ev
  virtual void  v135(); // _ZN9S10179C794v135Ev
  virtual void  v136(); // _ZN9S10179C794v136Ev
  virtual void  v137(); // _ZN9S10179C794v137Ev
  virtual void  v138(); // _ZN9S10179C794v138Ev
  virtual void  v139(); // _ZN9S10179C794v139Ev
  virtual void  v140(); // _ZN9S10179C794v140Ev
  virtual void  v141(); // _ZN9S10179C794v141Ev
  virtual void  v142(); // _ZN9S10179C794v142Ev
  virtual void  v143(); // _ZN9S10179C794v143Ev
  virtual void  v144(); // _ZN9S10179C794v144Ev
  virtual void  v145(); // _ZN9S10179C794v145Ev
  virtual void  v146(); // _ZN9S10179C794v146Ev
  virtual void  v147(); // _ZN9S10179C794v147Ev
  virtual void  v148(); // _ZN9S10179C794v148Ev
  virtual void  v149(); // _ZN9S10179C794v149Ev
  S10179C79(); // tgen
};
//SIG(-1 S10179C79) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC10{ vd v59} BC11{ BC12{ vd v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74} BC13{ vd m Fp}} BC14{ vd v75 v76} BC15{ vd v77} 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 Fp[5] Fi Fp FC16{ m Fi[2]} FC17{ m Fp} FC18{ BC19{ BC2 vd v79 v80 v81 v82 FC20{ m Fp FC7 FC8 FC8 Fi[3] FC21{ m FC22{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi} v78} FC23{ BC19 v83 v84} FC24{ BC19 v85} FC25{ BC26{ BC2 vd v88 v89 v90 v91 FC20 Fp Fc Fi} v86 v87} FC27{ BC19 v92 v93 v94 FC28{ Fp[3]} FC29{ Fi[4]}[3]} FC30{ BC2 BC6 vd v95 v96 v97 v98 v99 v100 v101 v102 FC31{ m FC8 Fi[2] FC8} Fi[2] Fc[2] Fi FL[2] FC32{ m Fl} Fi} FC33{ BC34{ BC2 BC35{ vd v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp FC7 FC9} vd v132 v133 v134 v135 v136 v137} BC36{ vd v138} vd v103 v104 v105 v106 v107 FC37{ m Fi Fp Fi FC21} FC38{ m Fp Fi[2] FC5}} FC39{ BC2 BC35 vd v139 v140 v141 v142 FC40{ m FC38 Fp[2]} Fp[2] FC8 Fi} FC41{ BC2 BC35 BC36 BC42{ BC43{ vd v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176} BC13} BC44{ vd v177 v178} BC45{ vd v179} vd v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 FC40 Fp[2] Fi[2] FC46{ BC2 vd v180 Fp FC7 FC7 Fp Fi FC21} FC47{ BC19 v181 v182} FC23 FC23 FC21 FC21 FC21 Fi} FC48{ BC49{ BC2 BC35 BC36 vd v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 Fi[2] FC24 FC40 FC50{ BC19 v212 v213 v214 Fp[3]} FC51{ BC19 v215} FC23 FC47 FC52{ BC2 vd v216 v217 FC53{ BC54{ BC55{ m Fp FC21 FC21 Fi[3] Fc[2] Fi Fp} FC56{ m Fp} FC17 FC56 FC8 FC8 FC56 FC17 FC56 FC8 FC8 FC8 Fc Fi Fp} FC8} Fi} FC18 FC57{ BC51 v218} FC18 Fp FC17 Fp[2] Fi Fc[3] Fi FL[2]} vd v183 v184 v185 v186 v187 v188 FC58{ m Fp} FC59{ m Fp FC17 Fp[5] FC60{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC61{ m FC62{ m Fi[2]} FC62} FC62 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC40 Fc[2] Fi FC63{ m Fc[5]} FC64{ m FC21 FC21 FC21 FC56 Fi Fc[2] Fi} FC21 FC21 FC21 Fp FC65{ BC2 vd FC66{ m Fp[3] FC16 FC8 FL[2] Fc} FC40} Fc[2] FL Fc[2] Fi FC56 FC67{ m FC68{ BC69{ m Fp Fi FC70{ m} FC70}} Fi} Fc Fi}


 S10179C79 ::~S10179C79(){ note_dtor("S10179C79", this);}
void  S10179C79 ::v116(){vfunc_called(this, "_ZN9S10179C794v116Ev");}
void  S10179C79 ::v117(){vfunc_called(this, "_ZN9S10179C794v117Ev");}
void  S10179C79 ::v118(){vfunc_called(this, "_ZN9S10179C794v118Ev");}
void  S10179C79 ::v119(){vfunc_called(this, "_ZN9S10179C794v119Ev");}
void  S10179C79 ::v120(){vfunc_called(this, "_ZN9S10179C794v120Ev");}
void  S10179C79 ::v121(){vfunc_called(this, "_ZN9S10179C794v121Ev");}
void  S10179C79 ::v122(){vfunc_called(this, "_ZN9S10179C794v122Ev");}
void  S10179C79 ::v123(){vfunc_called(this, "_ZN9S10179C794v123Ev");}
void  S10179C79 ::v124(){vfunc_called(this, "_ZN9S10179C794v124Ev");}
void  S10179C79 ::v125(){vfunc_called(this, "_ZN9S10179C794v125Ev");}
void  S10179C79 ::v126(){vfunc_called(this, "_ZN9S10179C794v126Ev");}
void  S10179C79 ::v127(){vfunc_called(this, "_ZN9S10179C794v127Ev");}
void  S10179C79 ::v128(){vfunc_called(this, "_ZN9S10179C794v128Ev");}
void  S10179C79 ::v129(){vfunc_called(this, "_ZN9S10179C794v129Ev");}
void  S10179C79 ::v130(){vfunc_called(this, "_ZN9S10179C794v130Ev");}
void  S10179C79 ::v131(){vfunc_called(this, "_ZN9S10179C794v131Ev");}
void  S10179C79 ::v132(){vfunc_called(this, "_ZN9S10179C794v132Ev");}
void  S10179C79 ::v133(){vfunc_called(this, "_ZN9S10179C794v133Ev");}
void  S10179C79 ::v134(){vfunc_called(this, "_ZN9S10179C794v134Ev");}
void  S10179C79 ::v135(){vfunc_called(this, "_ZN9S10179C794v135Ev");}
void  S10179C79 ::v136(){vfunc_called(this, "_ZN9S10179C794v136Ev");}
void  S10179C79 ::v137(){vfunc_called(this, "_ZN9S10179C794v137Ev");}
void  S10179C79 ::v138(){vfunc_called(this, "_ZN9S10179C794v138Ev");}
void  S10179C79 ::v139(){vfunc_called(this, "_ZN9S10179C794v139Ev");}
void  S10179C79 ::v140(){vfunc_called(this, "_ZN9S10179C794v140Ev");}
void  S10179C79 ::v141(){vfunc_called(this, "_ZN9S10179C794v141Ev");}
void  S10179C79 ::v142(){vfunc_called(this, "_ZN9S10179C794v142Ev");}
void  S10179C79 ::v143(){vfunc_called(this, "_ZN9S10179C794v143Ev");}
void  S10179C79 ::v144(){vfunc_called(this, "_ZN9S10179C794v144Ev");}
void  S10179C79 ::v145(){vfunc_called(this, "_ZN9S10179C794v145Ev");}
void  S10179C79 ::v146(){vfunc_called(this, "_ZN9S10179C794v146Ev");}
void  S10179C79 ::v147(){vfunc_called(this, "_ZN9S10179C794v147Ev");}
void  S10179C79 ::v148(){vfunc_called(this, "_ZN9S10179C794v148Ev");}
void  S10179C79 ::v149(){vfunc_called(this, "_ZN9S10179C794v149Ev");}
S10179C79 ::S10179C79(){ note_ctor("S10179C79", this);} // tgen

static void Test_S10179C79()
{
  extern Class_Descriptor cd_S10179C79;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(806,1125)];
    init_test(&cd_S10179C79, buf);
    S10179C79 *dp, &lv = *(dp=new (buf) S10179C79());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6440,4496), "sizeof(S10179C79)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C79)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10179C79");
    check_base_class_offset(lv, (S10179C11*), ABISELECT(48,32), "S10179C79");
    check_base_class_offset(lv, (S10179C2*), ABISELECT(144,96), "S10179C79");
    check_base_class_offset(lv, (S10179C81*)(S10179C80*), ABISELECT(152,100), "S10179C79");
    check_base_class_offset(lv, (S10180C82*)(S10179C80*), ABISELECT(160,104), "S10179C79");
    check_base_class_offset(lv, (S10179C80*), ABISELECT(152,100), "S10179C79");
    check_base_class_offset(lv, (S10179C83*), ABISELECT(176,112), "S10179C79");
    check_base_class_offset(lv, (S10179C26*), ABISELECT(184,116), "S10179C79");
    check_field_offset(lv, s10179c79f0, ABISELECT(192,120), "S10179C79.s10179c79f0");
    check_field_offset(lv, s10179c79f1, ABISELECT(232,140), "S10179C79.s10179c79f1");
    check_field_offset(lv, s10179c79f2, ABISELECT(240,144), "S10179C79.s10179c79f2");
    check_field_offset(lv, s10179c79f3, ABISELECT(248,148), "S10179C79.s10179c79f3");
    check_field_offset(lv, s10179c79f4, ABISELECT(256,156), "S10179C79.s10179c79f4");
    check_field_offset(lv, s10179c79f5, ABISELECT(264,160), "S10179C79.s10179c79f5");
    check_field_offset(lv, s10179c79f6, ABISELECT(496,324), "S10179C79.s10179c79f6");
    check_field_offset(lv, s10179c79f7, ABISELECT(728,488), "S10179C79.s10179c79f7");
    check_field_offset(lv, s10179c79f8, ABISELECT(960,652), "S10179C79.s10179c79f8");
    check_field_offset(lv, s10179c79f9, ABISELECT(1192,816), "S10179C79.s10179c79f9");
    check_field_offset(lv, s10179c79f10, ABISELECT(1496,1040), "S10179C79.s10179c79f10");
    check_field_offset(lv, s10179c79f11, ABISELECT(1728,1208), "S10179C79.s10179c79f11");
    check_field_offset(lv, s10179c79f12, ABISELECT(1944,1352), "S10179C79.s10179c79f12");
    check_field_offset(lv, s10179c79f13, ABISELECT(2168,1496), "S10179C79.s10179c79f13");
    check_field_offset(lv, s10179c79f14, ABISELECT(3312,2292), "S10179C79.s10179c79f14");
    check_field_offset(lv, s10179c79f15, ABISELECT(6024,4180), "S10179C79.s10179c79f15");
    check_field_offset(lv, s10179c79f16, ABISELECT(6032,4184), "S10179C79.s10179c79f16");
    check_field_offset(lv, s10179c79f17, ABISELECT(6072,4208), "S10179C79.s10179c79f17");
    check_field_offset(lv, s10179c79f18, ABISELECT(6076,4212), "S10179C79.s10179c79f18");
    check_field_offset(lv, s10179c79f19, ABISELECT(6080,4216), "S10179C79.s10179c79f19");
    check_field_offset(lv, s10179c79f20, ABISELECT(6088,4224), "S10179C79.s10179c79f20");
    check_field_offset(lv, s10179c79f21, ABISELECT(6160,4288), "S10179C79.s10179c79f21");
    check_field_offset(lv, s10179c79f22, ABISELECT(6176,4304), "S10179C79.s10179c79f22");
    check_field_offset(lv, s10179c79f23, ABISELECT(6192,4320), "S10179C79.s10179c79f23");
    check_field_offset(lv, s10179c79f24, ABISELECT(6208,4336), "S10179C79.s10179c79f24");
    check_field_offset(lv, s10179c79f25, ABISELECT(6216,4340), "S10179C79.s10179c79f25");
    check_field_offset(lv, s10179c79f26, ABISELECT(6376,4448), "S10179C79.s10179c79f26");
    check_field_offset(lv, s10179c79f27, ABISELECT(6384,4452), "S10179C79.s10179c79f27");
    check_field_offset(lv, s10179c79f28, ABISELECT(6392,4460), "S10179C79.s10179c79f28");
    check_field_offset(lv, s10179c79f29, ABISELECT(6396,4464), "S10179C79.s10179c79f29");
    check_field_offset(lv, s10179c79f30, ABISELECT(6400,4468), "S10179C79.s10179c79f30");
    check_field_offset(lv, s10179c79f31, ABISELECT(6408,4472), "S10179C79.s10179c79f31");
    check_field_offset(lv, s10179c79f32, ABISELECT(6432,4488), "S10179C79.s10179c79f32");
    check_field_offset(lv, s10179c79f33, ABISELECT(6436,4492), "S10179C79.s10179c79f33");
    test_class_info(&lv, &cd_S10179C79);
    dp->~S10179C79();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C79(Test_S10179C79, "S10179C79", ABISELECT(6440,4496));

#else // __cplusplus

extern void _ZN9S10179C79C1Ev();
extern void _ZN9S10179C79D1Ev();
Name_Map name_map_S10179C79[] = {
  NSPAIR(_ZN9S10179C79C1Ev),
  NSPAIR(_ZN9S10179C79D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C11;
extern VTBL_ENTRY _ZTI9S10179C11[];
extern  VTBL_ENTRY _ZTV9S10179C11[];
extern Class_Descriptor cd_S10179C2;
extern VTBL_ENTRY _ZTI8S10179C2[];
extern  VTBL_ENTRY _ZTV8S10179C2[];
extern Class_Descriptor cd_S10179C81;
extern VTBL_ENTRY _ZTI9S10179C81[];
extern  VTBL_ENTRY _ZTV9S10179C81[];
extern Class_Descriptor cd_S10180C82;
extern VTBL_ENTRY _ZTI9S10180C82[];
extern  VTBL_ENTRY _ZTV9S10180C82[];
extern Class_Descriptor cd_S10179C80;
extern VTBL_ENTRY _ZTI9S10179C80[];
extern  VTBL_ENTRY _ZTV9S10179C80[];
extern Class_Descriptor cd_S10179C83;
extern VTBL_ENTRY _ZTI9S10179C83[];
extern  VTBL_ENTRY _ZTV9S10179C83[];
extern Class_Descriptor cd_S10179C26;
extern VTBL_ENTRY _ZTI9S10179C26[];
extern  VTBL_ENTRY _ZTV9S10179C26[];
static Base_Class bases_S10179C79[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C11,    ABISELECT(48,32), //bcp->offset
    38, //bcp->virtual_function_table_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},
  {&cd_S10179C2,    ABISELECT(144,96), //bcp->offset
    66, //bcp->virtual_function_table_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},
  {&cd_S10179C81,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S10180C82,    ABISELECT(160,104), //bcp->offset
    90, //bcp->virtual_function_table_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_S10179C80,    ABISELECT(152,100), //bcp->offset
    71, //bcp->virtual_function_table_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},
  {&cd_S10179C83,    ABISELECT(176,112), //bcp->offset
    94, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10179C26,    ABISELECT(184,116), //bcp->offset
    100, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S10179C79[];
extern void _ZN9S10179C79D1Ev();
extern void _ZN9S10179C79D0Ev();
extern void _ZN9S10179C794v116Ev();
extern void _ZN9S10179C794v117Ev();
extern void _ZN9S10179C794v118Ev();
extern void _ZN9S10179C794v119Ev();
extern void _ZN9S10179C794v120Ev();
extern void _ZN9S10179C794v121Ev();
extern void _ZN9S10179C794v122Ev();
extern void _ZN9S10179C794v123Ev();
extern void _ZN9S10179C794v124Ev();
extern void _ZN9S10179C794v125Ev();
extern void _ZN9S10179C794v126Ev();
extern void _ZN9S10179C794v127Ev();
extern void _ZN9S10179C794v128Ev();
extern void _ZN9S10179C794v129Ev();
extern void _ZN9S10179C794v130Ev();
extern void _ZN9S10179C794v131Ev();
extern void _ZN9S10179C794v132Ev();
extern void _ZN9S10179C794v133Ev();
extern void _ZN9S10179C794v134Ev();
extern void _ZN9S10179C794v135Ev();
extern void _ZN9S10179C794v136Ev();
extern void _ZN9S10179C794v137Ev();
extern void _ZN9S10179C794v138Ev();
extern void _ZN9S10179C794v139Ev();
extern void _ZN9S10179C794v140Ev();
extern void _ZN9S10179C794v141Ev();
extern void _ZN9S10179C794v142Ev();
extern void _ZN9S10179C794v143Ev();
extern void _ZN9S10179C794v144Ev();
extern void _ZN9S10179C794v145Ev();
extern void _ZN9S10179C794v146Ev();
extern void _ZN9S10179C794v147Ev();
extern void _ZN9S10179C794v148Ev();
extern void _ZN9S10179C794v149Ev();
extern void ABISELECT(_ZThn48_N9S10179C79D1Ev,_ZThn32_N9S10179C79D1Ev)();
extern void ABISELECT(_ZThn48_N9S10179C79D0Ev,_ZThn32_N9S10179C79D0Ev)();
extern void _ZN9S10179C113v15Ev();
extern void _ZN9S10179C113v16Ev();
extern void _ZN9S10179C113v17Ev();
extern void _ZN9S10179C113v18Ev();
extern void _ZN9S10179C113v19Ev();
extern void _ZN9S10179C113v20Ev();
extern void _ZN9S10179C113v21Ev();
extern void _ZN9S10179C113v22Ev();
extern void _ZN9S10179C113v23Ev();
extern void _ZN9S10179C113v24Ev();
extern void _ZN9S10179C113v25Ev();
extern void _ZN9S10179C113v26Ev();
extern void _ZN9S10179C113v27Ev();
extern void _ZN9S10179C113v28Ev();
extern void _ZN9S10179C113v29Ev();
extern void _ZN9S10179C113v30Ev();
extern void _ZN9S10179C113v31Ev();
extern void _ZN9S10179C113v32Ev();
extern void _ZN9S10179C113v33Ev();
extern void _ZN9S10179C113v34Ev();
extern void _ZN9S10179C113v35Ev();
extern void _ZN9S10179C113v36Ev();
extern void _ZN9S10179C113v37Ev();
extern void _ZN9S10179C113v38Ev();
extern void ABISELECT(_ZThn144_N9S10179C79D1Ev,_ZThn96_N9S10179C79D1Ev)();
extern void ABISELECT(_ZThn144_N9S10179C79D0Ev,_ZThn96_N9S10179C79D0Ev)();
extern void _ZN8S10179C22v7Ev();
extern void ABISELECT(_ZThn152_N9S10179C79D1Ev,_ZThn100_N9S10179C79D1Ev)();
extern void ABISELECT(_ZThn152_N9S10179C79D0Ev,_ZThn100_N9S10179C79D0Ev)();
extern void _ZN9S10179C813v99Ev();
extern void _ZN9S10179C814v100Ev();
extern void _ZN9S10179C814v101Ev();
extern void _ZN9S10179C814v102Ev();
extern void _ZN9S10179C814v103Ev();
extern void _ZN9S10179C814v104Ev();
extern void _ZN9S10179C814v105Ev();
extern void _ZN9S10179C814v106Ev();
extern void _ZN9S10179C814v107Ev();
extern void _ZN9S10179C814v108Ev();
extern void _ZN9S10179C814v109Ev();
extern void _ZN9S10179C814v110Ev();
extern void _ZN9S10179C814v111Ev();
extern void _ZN9S10179C814v112Ev();
extern void _ZN9S10179C814v113Ev();
extern void ABISELECT(_ZThn160_N9S10179C79D1Ev,_ZThn104_N9S10179C79D1Ev)();
extern void ABISELECT(_ZThn160_N9S10179C79D0Ev,_ZThn104_N9S10179C79D0Ev)();
extern void ABISELECT(_ZThn176_N9S10179C79D1Ev,_ZThn112_N9S10179C79D1Ev)();
extern void ABISELECT(_ZThn176_N9S10179C79D0Ev,_ZThn112_N9S10179C79D0Ev)();
extern void _ZN9S10179C834v114Ev();
extern void _ZN9S10179C834v115Ev();
extern void ABISELECT(_ZThn184_N9S10179C79D1Ev,_ZThn116_N9S10179C79D1Ev)();
extern void ABISELECT(_ZThn184_N9S10179C79D0Ev,_ZThn116_N9S10179C79D0Ev)();
extern void _ZN9S10179C263v64Ev();
static  VTBL_ENTRY vtc_S10179C79[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C79[0]),
  (VTBL_ENTRY)&_ZN9S10179C79D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C79D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v116Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v117Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v118Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v119Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v120Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v121Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v122Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v123Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v124Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v125Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v126Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v127Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v128Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v129Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v130Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v131Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v132Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v133Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v134Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v135Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v136Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v137Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v138Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v139Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v140Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v141Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v142Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v143Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v144Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v145Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v146Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v147Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v148Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v149Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10179C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10179C79D1Ev,_ZThn32_N9S10179C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10179C79D0Ev,_ZThn32_N9S10179C79D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S10179C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S10179C79D1Ev,_ZThn96_N9S10179C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S10179C79D0Ev,_ZThn96_N9S10179C79D0Ev),
  (VTBL_ENTRY)&_ZN8S10179C22v7Ev,
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S10179C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10179C79D1Ev,_ZThn100_N9S10179C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10179C79D0Ev,_ZThn100_N9S10179C79D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C813v99Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v100Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v101Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v102Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v103Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v104Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v105Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v106Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v107Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v108Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v109Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v110Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v111Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v112Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v113Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S10179C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10179C79D1Ev,_ZThn104_N9S10179C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10179C79D0Ev,_ZThn104_N9S10179C79D0Ev),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI9S10179C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N9S10179C79D1Ev,_ZThn112_N9S10179C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N9S10179C79D0Ev,_ZThn112_N9S10179C79D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C834v114Ev,
  (VTBL_ENTRY)&_ZN9S10179C834v115Ev,
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI9S10179C79[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S10179C79D1Ev,_ZThn116_N9S10179C79D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S10179C79D0Ev,_ZThn116_N9S10179C79D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C263v64Ev,
};
extern VTBL_ENTRY _ZTI9S10179C79[];
extern  VTBL_ENTRY _ZTV9S10179C79[];
Class_Descriptor cd_S10179C79 = {  "S10179C79", // class name
  bases_S10179C79, 8,
  &(vtc_S10179C79[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(6440,4496), // object size
  NSPAIRA(_ZTI9S10179C79),ABISELECT(120,64), //typeinfo_var
  NSPAIRA(_ZTV9S10179C79),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C78  : S10179C79 {
  char s10179c78f0;
  virtual  ~S10179C78(); // _ZN9S10179C78D1Ev
  virtual void  v97(); // _ZN9S10179C783v97Ev
  virtual void  v98(); // _ZN9S10179C783v98Ev
  S10179C78(); // tgen
};
//SIG(-1 S10179C78) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} BC7{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC10{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC11{ vd v27} BC12{ BC13{ vd v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42} BC14{ vd m Fp}} BC15{ vd v43 v44} BC16{ vd v45} vd 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 Fp[5] Fi Fp FC17{ m Fi[2]} FC18{ m Fp} FC19{ BC20{ BC3 vd v81 v82 v83 v84 FC21{ m Fp FC8 FC9 FC9 Fi[3] FC22{ m FC23{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v80} FC24{ BC20 v85 v86} FC25{ BC20 v87} FC26{ BC27{ BC3 vd v90 v91 v92 v93 FC21 Fp Fc Fi} v88 v89} FC28{ BC20 v94 v95 v96 FC29{ Fp[3]} FC30{ Fi[4]}[3]} FC31{ BC3 BC7 vd v97 v98 v99 v100 v101 v102 v103 v104 FC32{ m FC9 Fi[2] FC9} Fi[2] Fc[2] Fi FL[2] FC33{ m Fl} Fi} FC34{ BC35{ BC3 BC36{ vd v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp FC8 FC10} vd v134 v135 v136 v137 v138 v139} BC37{ vd v140} vd v105 v106 v107 v108 v109 FC38{ m Fi Fp Fi FC22} FC39{ m Fp Fi[2] FC6}} FC40{ BC3 BC36 vd v141 v142 v143 v144 FC41{ m FC39 Fp[2]} Fp[2] FC9 Fi} FC42{ BC3 BC36 BC37 BC43{ BC44{ vd v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178} BC14} BC45{ vd v179 v180} BC46{ vd v181} vd v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 FC41 Fp[2] Fi[2] FC47{ BC3 vd v182 Fp FC8 FC8 Fp Fi FC22} FC48{ BC20 v183 v184} FC24 FC24 FC22 FC22 FC22 Fi} FC49{ BC50{ BC3 BC36 BC37 vd v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 Fi[2] FC25 FC41 FC51{ BC20 v214 v215 v216 Fp[3]} FC52{ BC20 v217} FC24 FC48 FC53{ BC3 vd v218 v219 FC54{ BC55{ BC56{ m Fp FC22 FC22 Fi[3] Fc[2] Fi Fp} FC57{ m Fp} FC18 FC57 FC9 FC9 FC57 FC18 FC57 FC9 FC9 FC9 Fc Fi Fp} FC9} Fi} FC19 FC58{ BC52 v220} FC19 Fp FC18 Fp[2] Fi Fc[3] Fi FL[2]} vd v185 v186 v187 v188 v189 v190 FC59{ m Fp} FC60{ m Fp FC18 Fp[5] FC61{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC62{ m FC63{ m Fi[2]} FC63} FC63 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC41 Fc[2] Fi FC64{ m Fc[5]} FC65{ m FC22 FC22 FC22 FC57 Fi Fc[2] Fi} FC22 FC22 FC22 Fp FC66{ BC3 vd FC67{ m Fp[3] FC17 FC9 FL[2] Fc} FC41} Fc[2] FL Fc[2] Fi FC57 FC68{ m FC69{ BC70{ m Fp Fi FC71{ m} FC71}} Fi} Fc Fi} vd v1 v2 Fc}


 S10179C78 ::~S10179C78(){ note_dtor("S10179C78", this);}
void  S10179C78 ::v97(){vfunc_called(this, "_ZN9S10179C783v97Ev");}
void  S10179C78 ::v98(){vfunc_called(this, "_ZN9S10179C783v98Ev");}
S10179C78 ::S10179C78(){ note_ctor("S10179C78", this);} // tgen

static void Test_S10179C78()
{
  extern Class_Descriptor cd_S10179C78;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(807,1126)];
    init_test(&cd_S10179C78, buf);
    S10179C78 *dp, &lv = *(dp=new (buf) S10179C78());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6448,4500), "sizeof(S10179C78)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C78)");
    check_base_class_offset(lv, (S10180C17*)(S10179C79*), 0, "S10179C78");
    check_base_class_offset(lv, (S10179C11*)(S10179C79*), ABISELECT(48,32), "S10179C78");
    check_base_class_offset(lv, (S10179C2*)(S10179C79*), ABISELECT(144,96), "S10179C78");
    check_base_class_offset(lv, (S10179C81*)(S10179C80*)(S10179C79*), ABISELECT(152,100), "S10179C78");
    check_base_class_offset(lv, (S10180C82*)(S10179C80*)(S10179C79*), ABISELECT(160,104), "S10179C78");
    check_base_class_offset(lv, (S10179C80*)(S10179C79*), ABISELECT(152,100), "S10179C78");
    check_base_class_offset(lv, (S10179C83*)(S10179C79*), ABISELECT(176,112), "S10179C78");
    check_base_class_offset(lv, (S10179C26*)(S10179C79*), ABISELECT(184,116), "S10179C78");
    check_base_class_offset(lv, (S10179C79*), 0, "S10179C78");
    check_field_offset(lv, s10179c78f0, ABISELECT(6440,4496), "S10179C78.s10179c78f0");
    test_class_info(&lv, &cd_S10179C78);
    dp->~S10179C78();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C78(Test_S10179C78, "S10179C78", ABISELECT(6448,4500));

#else // __cplusplus

extern void _ZN9S10179C78C1Ev();
extern void _ZN9S10179C78D1Ev();
Name_Map name_map_S10179C78[] = {
  NSPAIR(_ZN9S10179C78C1Ev),
  NSPAIR(_ZN9S10179C78D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C11;
extern VTBL_ENTRY _ZTI9S10179C11[];
extern  VTBL_ENTRY _ZTV9S10179C11[];
extern Class_Descriptor cd_S10179C2;
extern VTBL_ENTRY _ZTI8S10179C2[];
extern  VTBL_ENTRY _ZTV8S10179C2[];
extern Class_Descriptor cd_S10179C81;
extern VTBL_ENTRY _ZTI9S10179C81[];
extern  VTBL_ENTRY _ZTV9S10179C81[];
extern Class_Descriptor cd_S10180C82;
extern VTBL_ENTRY _ZTI9S10180C82[];
extern  VTBL_ENTRY _ZTV9S10180C82[];
extern Class_Descriptor cd_S10179C80;
extern VTBL_ENTRY _ZTI9S10179C80[];
extern  VTBL_ENTRY _ZTV9S10179C80[];
extern Class_Descriptor cd_S10179C83;
extern VTBL_ENTRY _ZTI9S10179C83[];
extern  VTBL_ENTRY _ZTV9S10179C83[];
extern Class_Descriptor cd_S10179C26;
extern VTBL_ENTRY _ZTI9S10179C26[];
extern  VTBL_ENTRY _ZTV9S10179C26[];
extern Class_Descriptor cd_S10179C79;
extern VTBL_ENTRY _ZTI9S10179C79[];
extern  VTBL_ENTRY _ZTV9S10179C79[];
static Base_Class bases_S10179C78[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S10179C11,    ABISELECT(48,32), //bcp->offset
    40, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S10179C2,    ABISELECT(144,96), //bcp->offset
    68, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S10179C81,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S10180C82,    ABISELECT(160,104), //bcp->offset
    92, //bcp->virtual_function_table_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_S10179C80,    ABISELECT(152,100), //bcp->offset
    73, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S10179C83,    ABISELECT(176,112), //bcp->offset
    96, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S10179C26,    ABISELECT(184,116), //bcp->offset
    102, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S10179C79,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S10179C78[];
extern void _ZN9S10179C78D1Ev();
extern void _ZN9S10179C78D0Ev();
extern void _ZN9S10179C794v116Ev();
extern void _ZN9S10179C794v117Ev();
extern void _ZN9S10179C794v118Ev();
extern void _ZN9S10179C794v119Ev();
extern void _ZN9S10179C794v120Ev();
extern void _ZN9S10179C794v121Ev();
extern void _ZN9S10179C794v122Ev();
extern void _ZN9S10179C794v123Ev();
extern void _ZN9S10179C794v124Ev();
extern void _ZN9S10179C794v125Ev();
extern void _ZN9S10179C794v126Ev();
extern void _ZN9S10179C794v127Ev();
extern void _ZN9S10179C794v128Ev();
extern void _ZN9S10179C794v129Ev();
extern void _ZN9S10179C794v130Ev();
extern void _ZN9S10179C794v131Ev();
extern void _ZN9S10179C794v132Ev();
extern void _ZN9S10179C794v133Ev();
extern void _ZN9S10179C794v134Ev();
extern void _ZN9S10179C794v135Ev();
extern void _ZN9S10179C794v136Ev();
extern void _ZN9S10179C794v137Ev();
extern void _ZN9S10179C794v138Ev();
extern void _ZN9S10179C794v139Ev();
extern void _ZN9S10179C794v140Ev();
extern void _ZN9S10179C794v141Ev();
extern void _ZN9S10179C794v142Ev();
extern void _ZN9S10179C794v143Ev();
extern void _ZN9S10179C794v144Ev();
extern void _ZN9S10179C794v145Ev();
extern void _ZN9S10179C794v146Ev();
extern void _ZN9S10179C794v147Ev();
extern void _ZN9S10179C794v148Ev();
extern void _ZN9S10179C794v149Ev();
extern void _ZN9S10179C783v97Ev();
extern void _ZN9S10179C783v98Ev();
extern void ABISELECT(_ZThn48_N9S10179C78D1Ev,_ZThn32_N9S10179C78D1Ev)();
extern void ABISELECT(_ZThn48_N9S10179C78D0Ev,_ZThn32_N9S10179C78D0Ev)();
extern void _ZN9S10179C113v15Ev();
extern void _ZN9S10179C113v16Ev();
extern void _ZN9S10179C113v17Ev();
extern void _ZN9S10179C113v18Ev();
extern void _ZN9S10179C113v19Ev();
extern void _ZN9S10179C113v20Ev();
extern void _ZN9S10179C113v21Ev();
extern void _ZN9S10179C113v22Ev();
extern void _ZN9S10179C113v23Ev();
extern void _ZN9S10179C113v24Ev();
extern void _ZN9S10179C113v25Ev();
extern void _ZN9S10179C113v26Ev();
extern void _ZN9S10179C113v27Ev();
extern void _ZN9S10179C113v28Ev();
extern void _ZN9S10179C113v29Ev();
extern void _ZN9S10179C113v30Ev();
extern void _ZN9S10179C113v31Ev();
extern void _ZN9S10179C113v32Ev();
extern void _ZN9S10179C113v33Ev();
extern void _ZN9S10179C113v34Ev();
extern void _ZN9S10179C113v35Ev();
extern void _ZN9S10179C113v36Ev();
extern void _ZN9S10179C113v37Ev();
extern void _ZN9S10179C113v38Ev();
extern void ABISELECT(_ZThn144_N9S10179C78D1Ev,_ZThn96_N9S10179C78D1Ev)();
extern void ABISELECT(_ZThn144_N9S10179C78D0Ev,_ZThn96_N9S10179C78D0Ev)();
extern void _ZN8S10179C22v7Ev();
extern void ABISELECT(_ZThn152_N9S10179C78D1Ev,_ZThn100_N9S10179C78D1Ev)();
extern void ABISELECT(_ZThn152_N9S10179C78D0Ev,_ZThn100_N9S10179C78D0Ev)();
extern void _ZN9S10179C813v99Ev();
extern void _ZN9S10179C814v100Ev();
extern void _ZN9S10179C814v101Ev();
extern void _ZN9S10179C814v102Ev();
extern void _ZN9S10179C814v103Ev();
extern void _ZN9S10179C814v104Ev();
extern void _ZN9S10179C814v105Ev();
extern void _ZN9S10179C814v106Ev();
extern void _ZN9S10179C814v107Ev();
extern void _ZN9S10179C814v108Ev();
extern void _ZN9S10179C814v109Ev();
extern void _ZN9S10179C814v110Ev();
extern void _ZN9S10179C814v111Ev();
extern void _ZN9S10179C814v112Ev();
extern void _ZN9S10179C814v113Ev();
extern void ABISELECT(_ZThn160_N9S10179C78D1Ev,_ZThn104_N9S10179C78D1Ev)();
extern void ABISELECT(_ZThn160_N9S10179C78D0Ev,_ZThn104_N9S10179C78D0Ev)();
extern void ABISELECT(_ZThn176_N9S10179C78D1Ev,_ZThn112_N9S10179C78D1Ev)();
extern void ABISELECT(_ZThn176_N9S10179C78D0Ev,_ZThn112_N9S10179C78D0Ev)();
extern void _ZN9S10179C834v114Ev();
extern void _ZN9S10179C834v115Ev();
extern void ABISELECT(_ZThn184_N9S10179C78D1Ev,_ZThn116_N9S10179C78D1Ev)();
extern void ABISELECT(_ZThn184_N9S10179C78D0Ev,_ZThn116_N9S10179C78D0Ev)();
extern void _ZN9S10179C263v64Ev();
static  VTBL_ENTRY vtc_S10179C78[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C78[0]),
  (VTBL_ENTRY)&_ZN9S10179C78D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C78D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v116Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v117Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v118Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v119Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v120Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v121Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v122Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v123Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v124Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v125Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v126Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v127Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v128Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v129Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v130Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v131Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v132Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v133Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v134Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v135Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v136Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v137Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v138Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v139Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v140Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v141Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v142Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v143Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v144Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v145Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v146Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v147Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v148Ev,
  (VTBL_ENTRY)&_ZN9S10179C794v149Ev,
  (VTBL_ENTRY)&_ZN9S10179C783v97Ev,
  (VTBL_ENTRY)&_ZN9S10179C783v98Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10179C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10179C78D1Ev,_ZThn32_N9S10179C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10179C78D0Ev,_ZThn32_N9S10179C78D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S10179C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S10179C78D1Ev,_ZThn96_N9S10179C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S10179C78D0Ev,_ZThn96_N9S10179C78D0Ev),
  (VTBL_ENTRY)&_ZN8S10179C22v7Ev,
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S10179C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10179C78D1Ev,_ZThn100_N9S10179C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10179C78D0Ev,_ZThn100_N9S10179C78D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C813v99Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v100Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v101Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v102Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v103Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v104Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v105Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v106Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v107Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v108Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v109Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v110Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v111Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v112Ev,
  (VTBL_ENTRY)&_ZN9S10179C814v113Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S10179C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10179C78D1Ev,_ZThn104_N9S10179C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10179C78D0Ev,_ZThn104_N9S10179C78D0Ev),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI9S10179C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N9S10179C78D1Ev,_ZThn112_N9S10179C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N9S10179C78D0Ev,_ZThn112_N9S10179C78D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C834v114Ev,
  (VTBL_ENTRY)&_ZN9S10179C834v115Ev,
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI9S10179C78[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S10179C78D1Ev,_ZThn116_N9S10179C78D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S10179C78D0Ev,_ZThn116_N9S10179C78D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C263v64Ev,
};
extern VTBL_ENTRY _ZTI9S10179C78[];
extern  VTBL_ENTRY _ZTV9S10179C78[];
Class_Descriptor cd_S10179C78 = {  "S10179C78", // class name
  bases_S10179C78, 9,
  &(vtc_S10179C78[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(6448,4500), // object size
  NSPAIRA(_ZTI9S10179C78),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10179C78),107, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  9, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C16  : S10179C2 , S10180C17 , S10179C24 {
  void *s10179c16f0[5];
  ::S10179C25 s10179c16f1;
  ::S10179C78 s10179c16f2;
  ::S10179C87 s10179c16f3;
  ::S10179C87 s10179c16f4;
  void *s10179c16f5;
  char s10179c16f6;
  void *s10179c16f7;
  int s10179c16f8;
  virtual  ~S10179C16(); // _ZN9S10179C16D1Ev
  virtual void  v39(); // _ZN9S10179C163v39Ev
  virtual void  v40(); // _ZN9S10179C163v40Ev
  S10179C16(); // tgen
};
//SIG(-1 S10179C16) C1{ BC2{ vd v3} BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} BC7{ vd v4} vd v1 v2 Fp[5] FC8{ BC3 BC2 BC9{ vd v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 Fp FC10{ m FC11{ m Fp Fi FC5} Fi} FC12{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC13{ vd v51} BC14{ vd v52 v53} vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fi FC15{ m Fi[2]} FC15 FC15 FC16{ BC3 vd Fi Fp FC10 FL FC17{ m Fi[2]} Fi Fc Fi FC18{ m FC19{ m Fp Fi[2] FC6} Fp[2]}} FC20{ BC21{ vd v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC10 FC12} vd v54 v55 v56} FC22{ vd m Fi Fp[3] FC23{ m Fc[2] Fp[3] Fi[4] FC24{ m FC25{ Fl[4]}}}} FC26{ vd m FC24 Fi[2] FC27{ m FL[3] Fi[3] FL} FL FC28{ m Fi FC29{ m Fi[4]}} FC18 Fc[2] Fi[2] Fp[2] FL Fi[3]} Fi Fp FC30{ BC3 BC7 vd v81 Fi FC31{ m Fc[2]} FC32{ Fp[2]} Fp FC33{ vd m FC34{ vd m FC35{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC36{ BC37{ vd v88 v89 v90 v91 v92 v93 Fi Fp Fc} vd v82 v83 v84 v85 v86 v87 Fp} FC38{ BC39{ vd v95 Fi Fc[3]} vd v94 Fp[4] FL Fi FC24 FC40{ m Fp FC41{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC42{ BC39 vd v96 FC24 Fi Fp[2] FC43{ m FC24 FC40 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC44{ BC39 vd v97 Fp[2] FL Fi[4] FC45{ m Fi[2]} FC24 FC46{ m FC24 FC40 Fp Fi[4]} FC47{ m Fp}} FC24 FC24 FL Fi[5]} FL FC48{ m FC27 FC49{ m Fi} Fi} Fc[128] FC15 FC18} Fi[3] FC50{ m Fp Fi[2]} FC51{ m Fc[11] Fi[2]} FC52{ BC53{} FL Fi} FC54{ BC55{ BC3 vd v100 v101 v102 v103 FC56{ m Fp FC10 FC11 FC11 Fi[3] FC57{ m FC58{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC10 FC10 Fc} Fp Fc Fi} v98 v99} FL FC59{ BC55 v104} FC60{ BC55 v105} FC61{ BC55 v106 v107} FC18 Fc} FC62{ BC63{ BC3 BC9 BC2 BC64{ BC65{ vd v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124} BC66{ vd m Fp}} BC67{ vd v125 v126} BC13 vd v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 Fp[5] Fi Fp FC68{ m Fi[2]} FC69{ m Fp} FC70{ BC55 v161} FC54 FC60 FC71{ BC72{ BC3 vd v164 v165 v166 v167 FC56 Fp Fc Fi} v162 v163} FC73{ BC55 v168 v169 v170 FC74{ Fp[3]} FC41[3]} FC75{ BC3 BC9 vd v171 v172 v173 v174 v175 v176 v177 v178 FC76{ m FC11 Fi[2] FC11} Fi[2] Fc[2] Fi FL[2] FC77{ m Fl} Fi} FC78{ BC79{ BC3 BC21 vd v184 v185 v186 v187 v188 v189} BC80{ vd v190} vd v179 v180 v181 v182 v183 FC81{ m Fi Fp Fi FC57} FC19} FC82{ BC3 BC21 vd v191 v192 v193 v194 FC18 Fp[2] FC11 Fi} FC83{ BC3 BC21 BC80 BC84{ BC85{ vd v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228} BC66} BC86{ vd v229 v230} BC87{ vd v231} vd v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 FC18 Fp[2] Fi[2] FC88{ BC3 vd v232 Fp FC10 FC10 Fp Fi FC57} FC61 FC54 FC54 FC57 FC57 FC57 Fi} FC89{ BC90{ BC3 BC21 BC80 vd v239 v240 v241 v242 v243 v244 v245 v246 v247 v248 v249 v250 v251 v252 v253 v254 v255 v256 v257 v258 v259 v260 v261 Fi[2] FC60 FC18 FC91{ BC55 v262 v263 v264 Fp[3]} FC59 FC54 FC61 FC92{ BC3 vd v265 v266 FC93{ BC94{ BC95{ m Fp FC57 FC57 Fi[3] Fc[2] Fi Fp} FC96{ m Fp} FC69 FC96 FC11 FC11 FC96 FC69 FC96 FC11 FC11 FC11 Fc Fi Fp} FC11} Fi} FC70 FC97{ BC59 v267} FC70 Fp FC69 Fp[2] Fi Fc[3] Fi FL[2]} vd v233 v234 v235 v236 v237 v238 FC47 FC98{ m Fp FC69 Fp[5] FC99{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC100{ m FC45 FC45} FC45 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC18 Fc[2] Fi FC101{ m Fc[5]} FC102{ m FC57 FC57 FC57 FC96 Fi Fc[2] Fi} FC57 FC57 FC57 Fp FC103{ BC3 vd FC104{ m Fp[3] FC68 FC11 FL[2] Fc} FC18} Fc[2] FL Fc[2] Fi FC96 FC105{ m FC106{ BC107{ m Fp Fi FC108{ m} FC108}} Fi} Fc Fi} vd v108 v109 Fc} FC71 FC71 Fp Fc Fp Fi}


 S10179C16 ::~S10179C16(){ note_dtor("S10179C16", this);}
void  S10179C16 ::v39(){vfunc_called(this, "_ZN9S10179C163v39Ev");}
void  S10179C16 ::v40(){vfunc_called(this, "_ZN9S10179C163v40Ev");}
S10179C16 ::S10179C16(){ note_ctor("S10179C16", this);} // tgen

static void Test_S10179C16()
{
  extern Class_Descriptor cd_S10179C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2918,5078)];
    init_test(&cd_S10179C16, buf);
    S10179C16 *dp, &lv = *(dp=new (buf) S10179C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(23336,20308), "sizeof(S10179C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C16)");
    check_base_class_offset(lv, (S10179C2*), 0, "S10179C16");
    check_base_class_offset(lv, (S10180C17*), ABISELECT(8,4), "S10179C16");
    check_base_class_offset(lv, (S10179C24*), ABISELECT(56,36), "S10179C16");
    check_field_offset(lv, s10179c16f0, ABISELECT(64,40), "S10179C16.s10179c16f0");
    check_field_offset(lv, s10179c16f1, ABISELECT(104,60), "S10179C16.s10179c16f1");
    check_field_offset(lv, s10179c16f2, ABISELECT(16392,15464), "S10179C16.s10179c16f2");
    check_field_offset(lv, s10179c16f3, ABISELECT(22840,19964), "S10179C16.s10179c16f3");
    check_field_offset(lv, s10179c16f4, ABISELECT(23072,20128), "S10179C16.s10179c16f4");
    check_field_offset(lv, s10179c16f5, ABISELECT(23304,20292), "S10179C16.s10179c16f5");
    check_field_offset(lv, s10179c16f6, ABISELECT(23312,20296), "S10179C16.s10179c16f6");
    check_field_offset(lv, s10179c16f7, ABISELECT(23320,20300), "S10179C16.s10179c16f7");
    check_field_offset(lv, s10179c16f8, ABISELECT(23328,20304), "S10179C16.s10179c16f8");
    test_class_info(&lv, &cd_S10179C16);
    dp->~S10179C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C16(Test_S10179C16, "S10179C16", ABISELECT(23336,20308));

#else // __cplusplus

extern void _ZN9S10179C16C1Ev();
extern void _ZN9S10179C16D1Ev();
Name_Map name_map_S10179C16[] = {
  NSPAIR(_ZN9S10179C16C1Ev),
  NSPAIR(_ZN9S10179C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10179C2;
extern VTBL_ENTRY _ZTI8S10179C2[];
extern  VTBL_ENTRY _ZTV8S10179C2[];
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C24;
extern VTBL_ENTRY _ZTI9S10179C24[];
extern  VTBL_ENTRY _ZTV9S10179C24[];
static Base_Class bases_S10179C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10179C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C17,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_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},
  {&cd_S10179C24,    ABISELECT(56,36), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI9S10179C16[];
extern void _ZN9S10179C16D1Ev();
extern void _ZN9S10179C16D0Ev();
extern void _ZN8S10179C22v7Ev();
extern void _ZN9S10179C163v39Ev();
extern void _ZN9S10179C163v40Ev();
extern void ABISELECT(_ZThn8_N9S10179C16D1Ev,_ZThn4_N9S10179C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S10179C16D0Ev,_ZThn4_N9S10179C16D0Ev)();
extern void ABISELECT(_ZThn56_N9S10179C16D1Ev,_ZThn36_N9S10179C16D1Ev)();
extern void ABISELECT(_ZThn56_N9S10179C16D0Ev,_ZThn36_N9S10179C16D0Ev)();
extern void _ZN9S10179C243v41Ev();
static  VTBL_ENTRY vtc_S10179C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10179C16[0]),
  (VTBL_ENTRY)&_ZN9S10179C16D1Ev,
  (VTBL_ENTRY)&_ZN9S10179C16D0Ev,
  (VTBL_ENTRY)&_ZN8S10179C22v7Ev,
  (VTBL_ENTRY)&_ZN9S10179C163v39Ev,
  (VTBL_ENTRY)&_ZN9S10179C163v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S10179C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S10179C16D1Ev,_ZThn4_N9S10179C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S10179C16D0Ev,_ZThn4_N9S10179C16D0Ev),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S10179C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10179C16D1Ev,_ZThn36_N9S10179C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10179C16D0Ev,_ZThn36_N9S10179C16D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C243v41Ev,
};
extern VTBL_ENTRY _ZTI9S10179C16[];
extern  VTBL_ENTRY _ZTV9S10179C16[];
Class_Descriptor cd_S10179C16 = {  "S10179C16", // class name
  bases_S10179C16, 3,
  &(vtc_S10179C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(23336,20308), // object size
  NSPAIRA(_ZTI9S10179C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S10179C16),16, //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  S10179C145  : S10180C17 {
  void *s10179c145f0[2];
  ::S10180C61 s10179c145f1;
  char s10179c145f2[2];
  void *s10179c145f3;
  ::S10180C146 s10179c145f4;
  ::S10180C12 s10179c145f5;
  void *s10179c145f6[4];
  ::S10180C31 s10179c145f7;
  virtual  ~S10179C145(); // _ZN10S10179C145D1Ev
  virtual void  v262(); // _ZN10S10179C1454v262Ev
  virtual void  v263(); // _ZN10S10179C1454v263Ev
  virtual void  v264(); // _ZN10S10179C1454v264Ev
  virtual void  v265(); // _ZN10S10179C1454v265Ev
  virtual void  v266(); // _ZN10S10179C1454v266Ev
  virtual void  v267(); // _ZN10S10179C1454v267Ev
  virtual void  v268(); // _ZN10S10179C1454v268Ev
  virtual void  v269(); // _ZN10S10179C1454v269Ev
  virtual void  v270(); // _ZN10S10179C1454v270Ev
  virtual void  v271(); // _ZN10S10179C1454v271Ev
  virtual void  v272(); // _ZN10S10179C1454v272Ev
  virtual void  v273(); // _ZN10S10179C1454v273Ev
  virtual void  v274(); // _ZN10S10179C1454v274Ev
  virtual void  v275(); // _ZN10S10179C1454v275Ev
  virtual void  v276(); // _ZN10S10179C1454v276Ev
  virtual void  v277(); // _ZN10S10179C1454v277Ev
  virtual void  v278(); // _ZN10S10179C1454v278Ev
  virtual void  v279(); // _ZN10S10179C1454v279Ev
  virtual void  v280(); // _ZN10S10179C1454v280Ev
  virtual void  v281(); // _ZN10S10179C1454v281Ev
  S10179C145(); // tgen
};
//SIG(-1 S10179C145) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp[2] FC6{ m Fp} Fc[2] Fp FC7{ m FC8{ m FC9{ m FL[2]}} FC8 FC10{ m FC11{ m FL}} FC10 FC8 FC8} FC12{ m FC13{ m Fp Fi FC4} Fi} Fp[4] FC14{ m FC15{ m Fp Fi[2] FC5} Fp[2]}}


 S10179C145 ::~S10179C145(){ note_dtor("S10179C145", this);}
void  S10179C145 ::v262(){vfunc_called(this, "_ZN10S10179C1454v262Ev");}
void  S10179C145 ::v263(){vfunc_called(this, "_ZN10S10179C1454v263Ev");}
void  S10179C145 ::v264(){vfunc_called(this, "_ZN10S10179C1454v264Ev");}
void  S10179C145 ::v265(){vfunc_called(this, "_ZN10S10179C1454v265Ev");}
void  S10179C145 ::v266(){vfunc_called(this, "_ZN10S10179C1454v266Ev");}
void  S10179C145 ::v267(){vfunc_called(this, "_ZN10S10179C1454v267Ev");}
void  S10179C145 ::v268(){vfunc_called(this, "_ZN10S10179C1454v268Ev");}
void  S10179C145 ::v269(){vfunc_called(this, "_ZN10S10179C1454v269Ev");}
void  S10179C145 ::v270(){vfunc_called(this, "_ZN10S10179C1454v270Ev");}
void  S10179C145 ::v271(){vfunc_called(this, "_ZN10S10179C1454v271Ev");}
void  S10179C145 ::v272(){vfunc_called(this, "_ZN10S10179C1454v272Ev");}
void  S10179C145 ::v273(){vfunc_called(this, "_ZN10S10179C1454v273Ev");}
void  S10179C145 ::v274(){vfunc_called(this, "_ZN10S10179C1454v274Ev");}
void  S10179C145 ::v275(){vfunc_called(this, "_ZN10S10179C1454v275Ev");}
void  S10179C145 ::v276(){vfunc_called(this, "_ZN10S10179C1454v276Ev");}
void  S10179C145 ::v277(){vfunc_called(this, "_ZN10S10179C1454v277Ev");}
void  S10179C145 ::v278(){vfunc_called(this, "_ZN10S10179C1454v278Ev");}
void  S10179C145 ::v279(){vfunc_called(this, "_ZN10S10179C1454v279Ev");}
void  S10179C145 ::v280(){vfunc_called(this, "_ZN10S10179C1454v280Ev");}
void  S10179C145 ::v281(){vfunc_called(this, "_ZN10S10179C1454v281Ev");}
S10179C145 ::S10179C145(){ note_ctor("S10179C145", this);} // tgen

static void Test_S10179C145()
{
  extern Class_Descriptor cd_S10179C145;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,48)];
    init_test(&cd_S10179C145, buf);
    S10179C145 *dp, &lv = *(dp=new (buf) S10179C145());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,188), "sizeof(S10179C145)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C145)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10179C145");
    check_field_offset(lv, s10179c145f0, ABISELECT(48,32), "S10179C145.s10179c145f0");
    check_field_offset(lv, s10179c145f1, ABISELECT(64,40), "S10179C145.s10179c145f1");
    check_field_offset(lv, s10179c145f2, ABISELECT(72,44), "S10179C145.s10179c145f2");
    check_field_offset(lv, s10179c145f3, ABISELECT(80,48), "S10179C145.s10179c145f3");
    check_field_offset(lv, s10179c145f4, ABISELECT(88,52), "S10179C145.s10179c145f4");
    check_field_offset(lv, s10179c145f5, ABISELECT(168,132), "S10179C145.s10179c145f5");
    check_field_offset(lv, s10179c145f6, ABISELECT(192,148), "S10179C145.s10179c145f6");
    check_field_offset(lv, s10179c145f7, ABISELECT(224,164), "S10179C145.s10179c145f7");
    test_class_info(&lv, &cd_S10179C145);
    dp->~S10179C145();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C145(Test_S10179C145, "S10179C145", ABISELECT(264,188));

#else // __cplusplus

extern void _ZN10S10179C145C1Ev();
extern void _ZN10S10179C145D1Ev();
Name_Map name_map_S10179C145[] = {
  NSPAIR(_ZN10S10179C145C1Ev),
  NSPAIR(_ZN10S10179C145D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10179C145[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10179C145[];
extern void _ZN10S10179C145D1Ev();
extern void _ZN10S10179C145D0Ev();
extern void _ZN10S10179C1454v262Ev();
extern void _ZN10S10179C1454v263Ev();
extern void _ZN10S10179C1454v264Ev();
extern void _ZN10S10179C1454v265Ev();
extern void _ZN10S10179C1454v266Ev();
extern void _ZN10S10179C1454v267Ev();
extern void _ZN10S10179C1454v268Ev();
extern void _ZN10S10179C1454v269Ev();
extern void _ZN10S10179C1454v270Ev();
extern void _ZN10S10179C1454v271Ev();
extern void _ZN10S10179C1454v272Ev();
extern void _ZN10S10179C1454v273Ev();
extern void _ZN10S10179C1454v274Ev();
extern void _ZN10S10179C1454v275Ev();
extern void _ZN10S10179C1454v276Ev();
extern void _ZN10S10179C1454v277Ev();
extern void _ZN10S10179C1454v278Ev();
extern void _ZN10S10179C1454v279Ev();
extern void _ZN10S10179C1454v280Ev();
extern void _ZN10S10179C1454v281Ev();
static  VTBL_ENTRY vtc_S10179C145[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10179C145[0]),
  (VTBL_ENTRY)&_ZN10S10179C145D1Ev,
  (VTBL_ENTRY)&_ZN10S10179C145D0Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v281Ev,
};
extern VTBL_ENTRY _ZTI10S10179C145[];
extern  VTBL_ENTRY _ZTV10S10179C145[];
Class_Descriptor cd_S10179C145 = {  "S10179C145", // class name
  bases_S10179C145, 1,
  &(vtc_S10179C145[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,188), // object size
  NSPAIRA(_ZTI10S10179C145),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10179C145),24, //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  S10179C151  : S10179C145 {
  ::S10180C149 s10179c151f0;
  void *s10179c151f1;
  virtual  ~S10179C151(); // _ZN10S10179C151D1Ev
  virtual void  v301(); // _ZN10S10179C1514v301Ev
  virtual void  v302(); // _ZN10S10179C1514v302Ev
  virtual void  v303(); // _ZN10S10179C1514v303Ev
  virtual void  v304(); // _ZN10S10179C1514v304Ev
  virtual void  v305(); // _ZN10S10179C1514v305Ev
  virtual void  v306(); // _ZN10S10179C1514v306Ev
  virtual void  v307(); // _ZN10S10179C1514v307Ev
  virtual void  v308(); // _ZN10S10179C1514v308Ev
  virtual void  v309(); // _ZN10S10179C1514v309Ev
  virtual void  v310(); // _ZN10S10179C1514v310Ev
  virtual void  v311(); // _ZN10S10179C1514v311Ev
  virtual void  v312(); // _ZN10S10179C1514v312Ev
  virtual void  v313(); // _ZN10S10179C1514v313Ev
  virtual void  v314(); // _ZN10S10179C1514v314Ev
  virtual void  v315(); // _ZN10S10179C1514v315Ev
  virtual void  v316(); // _ZN10S10179C1514v316Ev
  virtual void  v317(); // _ZN10S10179C1514v317Ev
  virtual void  v318(); // _ZN10S10179C1514v318Ev
  virtual void  v319(); // _ZN10S10179C1514v319Ev
  S10179C151(); // tgen
};
//SIG(-1 S10179C151) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 Fp[2] FC7{ m Fp} Fc[2] Fp FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC11{ m FC12{ m FL}} FC11 FC9 FC9} FC13{ m FC14{ m Fp Fi FC5} Fi} Fp[4] FC15{ m FC16{ m Fp Fi[2] FC6} Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC17{ vd m Fi[2] FC14 FC14 FC14 FC14 FC18{ m Fp[2]} FL[2]} Fp}


 S10179C151 ::~S10179C151(){ note_dtor("S10179C151", this);}
void  S10179C151 ::v301(){vfunc_called(this, "_ZN10S10179C1514v301Ev");}
void  S10179C151 ::v302(){vfunc_called(this, "_ZN10S10179C1514v302Ev");}
void  S10179C151 ::v303(){vfunc_called(this, "_ZN10S10179C1514v303Ev");}
void  S10179C151 ::v304(){vfunc_called(this, "_ZN10S10179C1514v304Ev");}
void  S10179C151 ::v305(){vfunc_called(this, "_ZN10S10179C1514v305Ev");}
void  S10179C151 ::v306(){vfunc_called(this, "_ZN10S10179C1514v306Ev");}
void  S10179C151 ::v307(){vfunc_called(this, "_ZN10S10179C1514v307Ev");}
void  S10179C151 ::v308(){vfunc_called(this, "_ZN10S10179C1514v308Ev");}
void  S10179C151 ::v309(){vfunc_called(this, "_ZN10S10179C1514v309Ev");}
void  S10179C151 ::v310(){vfunc_called(this, "_ZN10S10179C1514v310Ev");}
void  S10179C151 ::v311(){vfunc_called(this, "_ZN10S10179C1514v311Ev");}
void  S10179C151 ::v312(){vfunc_called(this, "_ZN10S10179C1514v312Ev");}
void  S10179C151 ::v313(){vfunc_called(this, "_ZN10S10179C1514v313Ev");}
void  S10179C151 ::v314(){vfunc_called(this, "_ZN10S10179C1514v314Ev");}
void  S10179C151 ::v315(){vfunc_called(this, "_ZN10S10179C1514v315Ev");}
void  S10179C151 ::v316(){vfunc_called(this, "_ZN10S10179C1514v316Ev");}
void  S10179C151 ::v317(){vfunc_called(this, "_ZN10S10179C1514v317Ev");}
void  S10179C151 ::v318(){vfunc_called(this, "_ZN10S10179C1514v318Ev");}
void  S10179C151 ::v319(){vfunc_called(this, "_ZN10S10179C1514v319Ev");}
S10179C151 ::S10179C151(){ note_ctor("S10179C151", this);} // tgen

static void Test_S10179C151()
{
  extern Class_Descriptor cd_S10179C151;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,70)];
    init_test(&cd_S10179C151, buf);
    S10179C151 *dp, &lv = *(dp=new (buf) S10179C151());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S10179C151)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C151)");
    check_base_class_offset(lv, (S10180C17*)(S10179C145*), 0, "S10179C151");
    check_base_class_offset(lv, (S10179C145*), 0, "S10179C151");
    check_field_offset(lv, s10179c151f0, ABISELECT(264,188), "S10179C151.s10179c151f0");
    check_field_offset(lv, s10179c151f1, ABISELECT(376,272), "S10179C151.s10179c151f1");
    test_class_info(&lv, &cd_S10179C151);
    dp->~S10179C151();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C151(Test_S10179C151, "S10179C151", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN10S10179C151C1Ev();
extern void _ZN10S10179C151D1Ev();
Name_Map name_map_S10179C151[] = {
  NSPAIR(_ZN10S10179C151C1Ev),
  NSPAIR(_ZN10S10179C151D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C145;
extern VTBL_ENTRY _ZTI10S10179C145[];
extern  VTBL_ENTRY _ZTV10S10179C145[];
static Base_Class bases_S10179C151[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10179C151[];
extern void _ZN10S10179C151D1Ev();
extern void _ZN10S10179C151D0Ev();
extern void _ZN10S10179C1454v262Ev();
extern void _ZN10S10179C1454v263Ev();
extern void _ZN10S10179C1454v264Ev();
extern void _ZN10S10179C1454v265Ev();
extern void _ZN10S10179C1454v266Ev();
extern void _ZN10S10179C1454v267Ev();
extern void _ZN10S10179C1454v268Ev();
extern void _ZN10S10179C1454v269Ev();
extern void _ZN10S10179C1454v270Ev();
extern void _ZN10S10179C1454v271Ev();
extern void _ZN10S10179C1454v272Ev();
extern void _ZN10S10179C1454v273Ev();
extern void _ZN10S10179C1454v274Ev();
extern void _ZN10S10179C1454v275Ev();
extern void _ZN10S10179C1454v276Ev();
extern void _ZN10S10179C1454v277Ev();
extern void _ZN10S10179C1454v278Ev();
extern void _ZN10S10179C1454v279Ev();
extern void _ZN10S10179C1454v280Ev();
extern void _ZN10S10179C1454v281Ev();
extern void _ZN10S10179C1514v301Ev();
extern void _ZN10S10179C1514v302Ev();
extern void _ZN10S10179C1514v303Ev();
extern void _ZN10S10179C1514v304Ev();
extern void _ZN10S10179C1514v305Ev();
extern void _ZN10S10179C1514v306Ev();
extern void _ZN10S10179C1514v307Ev();
extern void _ZN10S10179C1514v308Ev();
extern void _ZN10S10179C1514v309Ev();
extern void _ZN10S10179C1514v310Ev();
extern void _ZN10S10179C1514v311Ev();
extern void _ZN10S10179C1514v312Ev();
extern void _ZN10S10179C1514v313Ev();
extern void _ZN10S10179C1514v314Ev();
extern void _ZN10S10179C1514v315Ev();
extern void _ZN10S10179C1514v316Ev();
extern void _ZN10S10179C1514v317Ev();
extern void _ZN10S10179C1514v318Ev();
extern void _ZN10S10179C1514v319Ev();
static  VTBL_ENTRY vtc_S10179C151[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10179C151[0]),
  (VTBL_ENTRY)&_ZN10S10179C151D1Ev,
  (VTBL_ENTRY)&_ZN10S10179C151D0Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v301Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v302Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v303Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v304Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v305Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v306Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v307Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v308Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v309Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v310Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v311Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v312Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v313Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v314Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v315Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v316Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v317Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v318Ev,
  (VTBL_ENTRY)&_ZN10S10179C1514v319Ev,
};
extern VTBL_ENTRY _ZTI10S10179C151[];
extern  VTBL_ENTRY _ZTV10S10179C151[];
Class_Descriptor cd_S10179C151 = {  "S10179C151", // class name
  bases_S10179C151, 2,
  &(vtc_S10179C151[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI10S10179C151),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10179C151),43, //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  S10179C144  : S10179C145 {
  ::S10180C149 s10179c144f0;
  void *s10179c144f1;
  virtual  ~S10179C144(); // _ZN10S10179C144D1Ev
  virtual void  v282(); // _ZN10S10179C1444v282Ev
  virtual void  v283(); // _ZN10S10179C1444v283Ev
  virtual void  v284(); // _ZN10S10179C1444v284Ev
  virtual void  v285(); // _ZN10S10179C1444v285Ev
  virtual void  v286(); // _ZN10S10179C1444v286Ev
  virtual void  v287(); // _ZN10S10179C1444v287Ev
  virtual void  v288(); // _ZN10S10179C1444v288Ev
  virtual void  v289(); // _ZN10S10179C1444v289Ev
  virtual void  v290(); // _ZN10S10179C1444v290Ev
  virtual void  v291(); // _ZN10S10179C1444v291Ev
  virtual void  v292(); // _ZN10S10179C1444v292Ev
  virtual void  v293(); // _ZN10S10179C1444v293Ev
  virtual void  v294(); // _ZN10S10179C1444v294Ev
  virtual void  v295(); // _ZN10S10179C1444v295Ev
  virtual void  v296(); // _ZN10S10179C1444v296Ev
  virtual void  v297(); // _ZN10S10179C1444v297Ev
  virtual void  v298(); // _ZN10S10179C1444v298Ev
  virtual void  v299(); // _ZN10S10179C1444v299Ev
  virtual void  v300(); // _ZN10S10179C1444v300Ev
  S10179C144(); // tgen
};
//SIG(-1 S10179C144) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 Fp[2] FC7{ m Fp} Fc[2] Fp FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC11{ m FC12{ m FL}} FC11 FC9 FC9} FC13{ m FC14{ m Fp Fi FC5} Fi} Fp[4] FC15{ m FC16{ m Fp Fi[2] FC6} Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC17{ vd m Fi[2] FC14 FC14 FC14 FC14 FC18{ m Fp[2]} FL[2]} Fp}


 S10179C144 ::~S10179C144(){ note_dtor("S10179C144", this);}
void  S10179C144 ::v282(){vfunc_called(this, "_ZN10S10179C1444v282Ev");}
void  S10179C144 ::v283(){vfunc_called(this, "_ZN10S10179C1444v283Ev");}
void  S10179C144 ::v284(){vfunc_called(this, "_ZN10S10179C1444v284Ev");}
void  S10179C144 ::v285(){vfunc_called(this, "_ZN10S10179C1444v285Ev");}
void  S10179C144 ::v286(){vfunc_called(this, "_ZN10S10179C1444v286Ev");}
void  S10179C144 ::v287(){vfunc_called(this, "_ZN10S10179C1444v287Ev");}
void  S10179C144 ::v288(){vfunc_called(this, "_ZN10S10179C1444v288Ev");}
void  S10179C144 ::v289(){vfunc_called(this, "_ZN10S10179C1444v289Ev");}
void  S10179C144 ::v290(){vfunc_called(this, "_ZN10S10179C1444v290Ev");}
void  S10179C144 ::v291(){vfunc_called(this, "_ZN10S10179C1444v291Ev");}
void  S10179C144 ::v292(){vfunc_called(this, "_ZN10S10179C1444v292Ev");}
void  S10179C144 ::v293(){vfunc_called(this, "_ZN10S10179C1444v293Ev");}
void  S10179C144 ::v294(){vfunc_called(this, "_ZN10S10179C1444v294Ev");}
void  S10179C144 ::v295(){vfunc_called(this, "_ZN10S10179C1444v295Ev");}
void  S10179C144 ::v296(){vfunc_called(this, "_ZN10S10179C1444v296Ev");}
void  S10179C144 ::v297(){vfunc_called(this, "_ZN10S10179C1444v297Ev");}
void  S10179C144 ::v298(){vfunc_called(this, "_ZN10S10179C1444v298Ev");}
void  S10179C144 ::v299(){vfunc_called(this, "_ZN10S10179C1444v299Ev");}
void  S10179C144 ::v300(){vfunc_called(this, "_ZN10S10179C1444v300Ev");}
S10179C144 ::S10179C144(){ note_ctor("S10179C144", this);} // tgen

static void Test_S10179C144()
{
  extern Class_Descriptor cd_S10179C144;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,70)];
    init_test(&cd_S10179C144, buf);
    S10179C144 *dp, &lv = *(dp=new (buf) S10179C144());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S10179C144)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C144)");
    check_base_class_offset(lv, (S10180C17*)(S10179C145*), 0, "S10179C144");
    check_base_class_offset(lv, (S10179C145*), 0, "S10179C144");
    check_field_offset(lv, s10179c144f0, ABISELECT(264,188), "S10179C144.s10179c144f0");
    check_field_offset(lv, s10179c144f1, ABISELECT(376,272), "S10179C144.s10179c144f1");
    test_class_info(&lv, &cd_S10179C144);
    dp->~S10179C144();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C144(Test_S10179C144, "S10179C144", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN10S10179C144C1Ev();
extern void _ZN10S10179C144D1Ev();
Name_Map name_map_S10179C144[] = {
  NSPAIR(_ZN10S10179C144C1Ev),
  NSPAIR(_ZN10S10179C144D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C145;
extern VTBL_ENTRY _ZTI10S10179C145[];
extern  VTBL_ENTRY _ZTV10S10179C145[];
static Base_Class bases_S10179C144[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10179C144[];
extern void _ZN10S10179C144D1Ev();
extern void _ZN10S10179C144D0Ev();
extern void _ZN10S10179C1454v262Ev();
extern void _ZN10S10179C1454v263Ev();
extern void _ZN10S10179C1454v264Ev();
extern void _ZN10S10179C1454v265Ev();
extern void _ZN10S10179C1454v266Ev();
extern void _ZN10S10179C1454v267Ev();
extern void _ZN10S10179C1454v268Ev();
extern void _ZN10S10179C1454v269Ev();
extern void _ZN10S10179C1454v270Ev();
extern void _ZN10S10179C1454v271Ev();
extern void _ZN10S10179C1454v272Ev();
extern void _ZN10S10179C1454v273Ev();
extern void _ZN10S10179C1454v274Ev();
extern void _ZN10S10179C1454v275Ev();
extern void _ZN10S10179C1454v276Ev();
extern void _ZN10S10179C1454v277Ev();
extern void _ZN10S10179C1454v278Ev();
extern void _ZN10S10179C1454v279Ev();
extern void _ZN10S10179C1454v280Ev();
extern void _ZN10S10179C1454v281Ev();
extern void _ZN10S10179C1444v282Ev();
extern void _ZN10S10179C1444v283Ev();
extern void _ZN10S10179C1444v284Ev();
extern void _ZN10S10179C1444v285Ev();
extern void _ZN10S10179C1444v286Ev();
extern void _ZN10S10179C1444v287Ev();
extern void _ZN10S10179C1444v288Ev();
extern void _ZN10S10179C1444v289Ev();
extern void _ZN10S10179C1444v290Ev();
extern void _ZN10S10179C1444v291Ev();
extern void _ZN10S10179C1444v292Ev();
extern void _ZN10S10179C1444v293Ev();
extern void _ZN10S10179C1444v294Ev();
extern void _ZN10S10179C1444v295Ev();
extern void _ZN10S10179C1444v296Ev();
extern void _ZN10S10179C1444v297Ev();
extern void _ZN10S10179C1444v298Ev();
extern void _ZN10S10179C1444v299Ev();
extern void _ZN10S10179C1444v300Ev();
static  VTBL_ENTRY vtc_S10179C144[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10179C144[0]),
  (VTBL_ENTRY)&_ZN10S10179C144D1Ev,
  (VTBL_ENTRY)&_ZN10S10179C144D0Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v282Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v283Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v284Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v285Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v286Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v287Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v288Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v289Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v290Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v291Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v292Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v293Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v294Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v295Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v296Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v297Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v298Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v299Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v300Ev,
};
extern VTBL_ENTRY _ZTI10S10179C144[];
extern  VTBL_ENTRY _ZTV10S10179C144[];
Class_Descriptor cd_S10179C144 = {  "S10179C144", // class name
  bases_S10179C144, 2,
  &(vtc_S10179C144[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI10S10179C144),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10179C144),43, //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  S10179C156  : S10179C144 {
  virtual  ~S10179C156(); // _ZN10S10179C156D1Ev
  virtual void  v339(); // _ZN10S10179C1564v339Ev
  virtual void  v340(); // _ZN10S10179C1564v340Ev
  virtual void  v341(); // _ZN10S10179C1564v341Ev
  S10179C156(); // tgen
};
//SIG(-1 S10179C156) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 Fc} vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp[2] FC8{ m Fp} Fc[2] Fp FC9{ m FC10{ m FC11{ m FL[2]}} FC10 FC12{ m FC13{ m FL}} FC12 FC10 FC10} FC14{ m FC15{ m Fp Fi FC6} Fi} Fp[4] FC16{ m FC17{ m Fp Fi[2] FC7} Fp[2]}} vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 FC18{ vd m Fi[2] FC15 FC15 FC15 FC15 FC19{ m Fp[2]} FL[2]} Fp} vd v1 v2 v3}


 S10179C156 ::~S10179C156(){ note_dtor("S10179C156", this);}
void  S10179C156 ::v339(){vfunc_called(this, "_ZN10S10179C1564v339Ev");}
void  S10179C156 ::v340(){vfunc_called(this, "_ZN10S10179C1564v340Ev");}
void  S10179C156 ::v341(){vfunc_called(this, "_ZN10S10179C1564v341Ev");}
S10179C156 ::S10179C156(){ note_ctor("S10179C156", this);} // tgen

static void Test_S10179C156()
{
  extern Class_Descriptor cd_S10179C156;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,70)];
    init_test(&cd_S10179C156, buf);
    S10179C156 *dp, &lv = *(dp=new (buf) S10179C156());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S10179C156)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C156)");
    check_base_class_offset(lv, (S10180C17*)(S10179C145*)(S10179C144*), 0, "S10179C156");
    check_base_class_offset(lv, (S10179C145*)(S10179C144*), 0, "S10179C156");
    check_base_class_offset(lv, (S10179C144*), 0, "S10179C156");
    test_class_info(&lv, &cd_S10179C156);
    dp->~S10179C156();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C156(Test_S10179C156, "S10179C156", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN10S10179C156C1Ev();
extern void _ZN10S10179C156D1Ev();
Name_Map name_map_S10179C156[] = {
  NSPAIR(_ZN10S10179C156C1Ev),
  NSPAIR(_ZN10S10179C156D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C145;
extern VTBL_ENTRY _ZTI10S10179C145[];
extern  VTBL_ENTRY _ZTV10S10179C145[];
extern Class_Descriptor cd_S10179C144;
extern VTBL_ENTRY _ZTI10S10179C144[];
extern  VTBL_ENTRY _ZTV10S10179C144[];
static Base_Class bases_S10179C156[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C144,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10179C156[];
extern void _ZN10S10179C156D1Ev();
extern void _ZN10S10179C156D0Ev();
extern void _ZN10S10179C1454v262Ev();
extern void _ZN10S10179C1454v263Ev();
extern void _ZN10S10179C1454v264Ev();
extern void _ZN10S10179C1454v265Ev();
extern void _ZN10S10179C1454v266Ev();
extern void _ZN10S10179C1454v267Ev();
extern void _ZN10S10179C1454v268Ev();
extern void _ZN10S10179C1454v269Ev();
extern void _ZN10S10179C1454v270Ev();
extern void _ZN10S10179C1454v271Ev();
extern void _ZN10S10179C1454v272Ev();
extern void _ZN10S10179C1454v273Ev();
extern void _ZN10S10179C1454v274Ev();
extern void _ZN10S10179C1454v275Ev();
extern void _ZN10S10179C1454v276Ev();
extern void _ZN10S10179C1454v277Ev();
extern void _ZN10S10179C1454v278Ev();
extern void _ZN10S10179C1454v279Ev();
extern void _ZN10S10179C1454v280Ev();
extern void _ZN10S10179C1454v281Ev();
extern void _ZN10S10179C1444v282Ev();
extern void _ZN10S10179C1444v283Ev();
extern void _ZN10S10179C1444v284Ev();
extern void _ZN10S10179C1444v285Ev();
extern void _ZN10S10179C1444v286Ev();
extern void _ZN10S10179C1444v287Ev();
extern void _ZN10S10179C1444v288Ev();
extern void _ZN10S10179C1444v289Ev();
extern void _ZN10S10179C1444v290Ev();
extern void _ZN10S10179C1444v291Ev();
extern void _ZN10S10179C1444v292Ev();
extern void _ZN10S10179C1444v293Ev();
extern void _ZN10S10179C1444v294Ev();
extern void _ZN10S10179C1444v295Ev();
extern void _ZN10S10179C1444v296Ev();
extern void _ZN10S10179C1444v297Ev();
extern void _ZN10S10179C1444v298Ev();
extern void _ZN10S10179C1444v299Ev();
extern void _ZN10S10179C1444v300Ev();
extern void _ZN10S10179C1564v339Ev();
extern void _ZN10S10179C1564v340Ev();
extern void _ZN10S10179C1564v341Ev();
static  VTBL_ENTRY vtc_S10179C156[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10179C156[0]),
  (VTBL_ENTRY)&_ZN10S10179C156D1Ev,
  (VTBL_ENTRY)&_ZN10S10179C156D0Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v282Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v283Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v284Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v285Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v286Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v287Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v288Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v289Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v290Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v291Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v292Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v293Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v294Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v295Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v296Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v297Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v298Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v299Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v300Ev,
  (VTBL_ENTRY)&_ZN10S10179C1564v339Ev,
  (VTBL_ENTRY)&_ZN10S10179C1564v340Ev,
  (VTBL_ENTRY)&_ZN10S10179C1564v341Ev,
};
extern VTBL_ENTRY _ZTI10S10179C156[];
extern  VTBL_ENTRY _ZTV10S10179C156[];
Class_Descriptor cd_S10179C156 = {  "S10179C156", // class name
  bases_S10179C156, 3,
  &(vtc_S10179C156[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI10S10179C156),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10179C156),46, //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  S10179C157  : S10179C144 {
  virtual  ~S10179C157(); // _ZN10S10179C157D1Ev
  virtual void  v342(); // _ZN10S10179C1574v342Ev
  virtual void  v343(); // _ZN10S10179C1574v343Ev
  S10179C157(); // tgen
};
//SIG(-1 S10179C157) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 Fc} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[2] FC8{ m Fp} Fc[2] Fp FC9{ m FC10{ m FC11{ m FL[2]}} FC10 FC12{ m FC13{ m FL}} FC12 FC10 FC10} FC14{ m FC15{ m Fp Fi FC6} Fi} Fp[4] FC16{ m FC17{ m Fp Fi[2] FC7} Fp[2]}} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 FC18{ vd m Fi[2] FC15 FC15 FC15 FC15 FC19{ m Fp[2]} FL[2]} Fp} vd v1 v2}


 S10179C157 ::~S10179C157(){ note_dtor("S10179C157", this);}
void  S10179C157 ::v342(){vfunc_called(this, "_ZN10S10179C1574v342Ev");}
void  S10179C157 ::v343(){vfunc_called(this, "_ZN10S10179C1574v343Ev");}
S10179C157 ::S10179C157(){ note_ctor("S10179C157", this);} // tgen

static void Test_S10179C157()
{
  extern Class_Descriptor cd_S10179C157;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,70)];
    init_test(&cd_S10179C157, buf);
    S10179C157 *dp, &lv = *(dp=new (buf) S10179C157());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S10179C157)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C157)");
    check_base_class_offset(lv, (S10180C17*)(S10179C145*)(S10179C144*), 0, "S10179C157");
    check_base_class_offset(lv, (S10179C145*)(S10179C144*), 0, "S10179C157");
    check_base_class_offset(lv, (S10179C144*), 0, "S10179C157");
    test_class_info(&lv, &cd_S10179C157);
    dp->~S10179C157();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C157(Test_S10179C157, "S10179C157", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN10S10179C157C1Ev();
extern void _ZN10S10179C157D1Ev();
Name_Map name_map_S10179C157[] = {
  NSPAIR(_ZN10S10179C157C1Ev),
  NSPAIR(_ZN10S10179C157D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C145;
extern VTBL_ENTRY _ZTI10S10179C145[];
extern  VTBL_ENTRY _ZTV10S10179C145[];
extern Class_Descriptor cd_S10179C144;
extern VTBL_ENTRY _ZTI10S10179C144[];
extern  VTBL_ENTRY _ZTV10S10179C144[];
static Base_Class bases_S10179C157[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C145,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C144,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10179C157[];
extern void _ZN10S10179C157D1Ev();
extern void _ZN10S10179C157D0Ev();
extern void _ZN10S10179C1454v262Ev();
extern void _ZN10S10179C1454v263Ev();
extern void _ZN10S10179C1454v264Ev();
extern void _ZN10S10179C1454v265Ev();
extern void _ZN10S10179C1454v266Ev();
extern void _ZN10S10179C1454v267Ev();
extern void _ZN10S10179C1454v268Ev();
extern void _ZN10S10179C1454v269Ev();
extern void _ZN10S10179C1454v270Ev();
extern void _ZN10S10179C1454v271Ev();
extern void _ZN10S10179C1454v272Ev();
extern void _ZN10S10179C1454v273Ev();
extern void _ZN10S10179C1454v274Ev();
extern void _ZN10S10179C1454v275Ev();
extern void _ZN10S10179C1454v276Ev();
extern void _ZN10S10179C1454v277Ev();
extern void _ZN10S10179C1454v278Ev();
extern void _ZN10S10179C1454v279Ev();
extern void _ZN10S10179C1454v280Ev();
extern void _ZN10S10179C1454v281Ev();
extern void _ZN10S10179C1444v282Ev();
extern void _ZN10S10179C1444v283Ev();
extern void _ZN10S10179C1444v284Ev();
extern void _ZN10S10179C1444v285Ev();
extern void _ZN10S10179C1444v286Ev();
extern void _ZN10S10179C1444v287Ev();
extern void _ZN10S10179C1444v288Ev();
extern void _ZN10S10179C1444v289Ev();
extern void _ZN10S10179C1444v290Ev();
extern void _ZN10S10179C1444v291Ev();
extern void _ZN10S10179C1444v292Ev();
extern void _ZN10S10179C1444v293Ev();
extern void _ZN10S10179C1444v294Ev();
extern void _ZN10S10179C1444v295Ev();
extern void _ZN10S10179C1444v296Ev();
extern void _ZN10S10179C1444v297Ev();
extern void _ZN10S10179C1444v298Ev();
extern void _ZN10S10179C1444v299Ev();
extern void _ZN10S10179C1444v300Ev();
extern void _ZN10S10179C1574v342Ev();
extern void _ZN10S10179C1574v343Ev();
static  VTBL_ENTRY vtc_S10179C157[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10179C157[0]),
  (VTBL_ENTRY)&_ZN10S10179C157D1Ev,
  (VTBL_ENTRY)&_ZN10S10179C157D0Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v262Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v263Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v264Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v265Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v266Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v267Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v268Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v269Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v270Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v271Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v272Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v273Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v274Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v275Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v276Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v277Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v278Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v279Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v280Ev,
  (VTBL_ENTRY)&_ZN10S10179C1454v281Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v282Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v283Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v284Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v285Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v286Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v287Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v288Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v289Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v290Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v291Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v292Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v293Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v294Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v295Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v296Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v297Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v298Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v299Ev,
  (VTBL_ENTRY)&_ZN10S10179C1444v300Ev,
  (VTBL_ENTRY)&_ZN10S10179C1574v342Ev,
  (VTBL_ENTRY)&_ZN10S10179C1574v343Ev,
};
extern VTBL_ENTRY _ZTI10S10179C157[];
extern  VTBL_ENTRY _ZTV10S10179C157[];
Class_Descriptor cd_S10179C157 = {  "S10179C157", // class name
  bases_S10179C157, 3,
  &(vtc_S10179C157[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI10S10179C157),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10179C157),45, //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  S10179C114  {
  void *s10179c114f0;
  void  mf10179c114(); // _ZN10S10179C11411mf10179c114Ev
};
//SIG(-1 S10179C114) C1{ m Fp}


void  S10179C114 ::mf10179c114(){}

static void Test_S10179C114()
{
  {
    init_simple_test("S10179C114");
    S10179C114 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10179C114)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C114)");
    check_field_offset(lv, s10179c114f0, 0, "S10179C114.s10179c114f0");
  }
}
static Arrange_To_Call_Me vS10179C114(Test_S10179C114, "S10179C114", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C159  {
  long s10179c159f0;
  char s10179c159f1;
  __tsi64 s10179c159f2[2];
  ::S10179C114 s10179c159f3;
  void  mf10179c159(); // _ZN10S10179C15911mf10179c159Ev
};
//SIG(-1 S10179C159) C1{ m Fl Fc FL[2] FC2{ m Fp}}


void  S10179C159 ::mf10179c159(){}

static void Test_S10179C159()
{
  {
    init_simple_test("S10179C159");
    S10179C159 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S10179C159)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C159)");
    check_field_offset(lv, s10179c159f0, 0, "S10179C159.s10179c159f0");
    check_field_offset(lv, s10179c159f1, ABISELECT(8,4), "S10179C159.s10179c159f1");
    check_field_offset(lv, s10179c159f2, ABISELECT(16,8), "S10179C159.s10179c159f2");
    check_field_offset(lv, s10179c159f3, ABISELECT(32,24), "S10179C159.s10179c159f3");
  }
}
static Arrange_To_Call_Me vS10179C159(Test_S10179C159, "S10179C159", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10179C106  : S10179C69 {
  virtual void  v233(); // _ZN10S10179C1064v233Ev
  ~S10179C106(); // tgen
  S10179C106(); // tgen
};
//SIG(-1 S10179C106) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v2 v3 v4 v5 FC7{ m Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC9 FC9 Fi[3] FC10{ m FC11{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v1}


void  S10179C106 ::v233(){vfunc_called(this, "_ZN10S10179C1064v233Ev");}
S10179C106 ::~S10179C106(){ note_dtor("S10179C106", this);} // tgen
S10179C106 ::S10179C106(){ note_ctor("S10179C106", this);} // tgen

static void Test_S10179C106()
{
  extern Class_Descriptor cd_S10179C106;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10179C106, buf);
    S10179C106 *dp, &lv = *(dp=new (buf) S10179C106());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10179C106)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C106)");
    check_base_class_offset(lv, (S10180C17*)(S10179C69*), 0, "S10179C106");
    check_base_class_offset(lv, (S10179C69*), 0, "S10179C106");
    test_class_info(&lv, &cd_S10179C106);
    dp->~S10179C106();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C106(Test_S10179C106, "S10179C106", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN10S10179C106C1Ev();
extern void _ZN10S10179C106D1Ev();
Name_Map name_map_S10179C106[] = {
  NSPAIR(_ZN10S10179C106C1Ev),
  NSPAIR(_ZN10S10179C106D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C69;
extern VTBL_ENTRY _ZTI9S10179C69[];
extern  VTBL_ENTRY _ZTV9S10179C69[];
static Base_Class bases_S10179C106[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C69,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10179C106[];
extern void _ZN10S10179C106D1Ev();
extern void _ZN10S10179C106D0Ev();
extern void _ZN9S10179C693v89Ev();
extern void _ZN9S10179C693v90Ev();
extern void _ZN9S10179C693v91Ev();
extern void _ZN9S10179C693v92Ev();
extern void _ZN10S10179C1064v233Ev();
static  VTBL_ENTRY vtc_S10179C106[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10179C106[0]),
  (VTBL_ENTRY)&_ZN10S10179C106D1Ev,
  (VTBL_ENTRY)&_ZN10S10179C106D0Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v89Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v90Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v91Ev,
  (VTBL_ENTRY)&_ZN9S10179C693v92Ev,
  (VTBL_ENTRY)&_ZN10S10179C1064v233Ev,
};
extern VTBL_ENTRY _ZTI10S10179C106[];
extern  VTBL_ENTRY _ZTV10S10179C106[];
Class_Descriptor cd_S10179C106 = {  "S10179C106", // class name
  bases_S10179C106, 2,
  &(vtc_S10179C106[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI10S10179C106),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10179C106),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  S10179C104  : S10180C17 , S10179C11 , S10179C2 {
  int s10179c104f0[2];
  ::S10180C75 s10179c104f1;
  ::S10180C31 s10179c104f2;
  ::S10180C105 s10179c104f3;
  ::S10179C106 s10179c104f4;
  ::S10179C87 s10179c104f5;
  ::S10180C87 s10179c104f6;
  ::S10180C107 s10179c104f7;
  ::S10180C106 s10179c104f8;
  ::S10180C112 s10179c104f9;
  ::S10180C86 s10179c104f10;
  void *s10179c104f11;
  ::S10180C61 s10179c104f12;
  void *s10179c104f13[2];
  int s10179c104f14;
  char s10179c104f15[3];
  int s10179c104f16;
  __tsi64 s10179c104f17[2];
  virtual  ~S10179C104(); // _ZN10S10179C104D1Ev
  virtual void  v207(); // _ZN10S10179C1044v207Ev
  virtual void  v208(); // _ZN10S10179C1044v208Ev
  virtual void  v209(); // _ZN10S10179C1044v209Ev
  virtual void  v210(); // _ZN10S10179C1044v210Ev
  virtual void  v211(); // _ZN10S10179C1044v211Ev
  virtual void  v212(); // _ZN10S10179C1044v212Ev
  virtual void  v213(); // _ZN10S10179C1044v213Ev
  virtual void  v214(); // _ZN10S10179C1044v214Ev
  virtual void  v215(); // _ZN10S10179C1044v215Ev
  virtual void  v216(); // _ZN10S10179C1044v216Ev
  virtual void  v217(); // _ZN10S10179C1044v217Ev
  virtual void  v218(); // _ZN10S10179C1044v218Ev
  virtual void  v219(); // _ZN10S10179C1044v219Ev
  virtual void  v220(); // _ZN10S10179C1044v220Ev
  virtual void  v221(); // _ZN10S10179C1044v221Ev
  virtual void  v222(); // _ZN10S10179C1044v222Ev
  virtual void  v223(); // _ZN10S10179C1044v223Ev
  virtual void  v224(); // _ZN10S10179C1044v224Ev
  virtual void  v225(); // _ZN10S10179C1044v225Ev
  virtual void  v226(); // _ZN10S10179C1044v226Ev
  virtual void  v227(); // _ZN10S10179C1044v227Ev
  virtual void  v228(); // _ZN10S10179C1044v228Ev
  virtual void  v229(); // _ZN10S10179C1044v229Ev
  S10179C104(); // tgen
};
//SIG(-1 S10179C104) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC10{ vd v48} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fi[2] FC11{ BC12{ BC2 vd v50 v51 v52 v53 FC13{ m Fp FC7 FC8 FC8 Fi[3] FC14{ m FC15{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi} v49} FC16{ m FC17{ m Fp Fi[2] FC5} Fp[2]} FC18{ BC12 v54 v55 v56 Fp[3]} FC19{ BC20{ BC2 vd v58 v59 v60 v61 FC13 Fp Fc Fi} v57} FC21{ BC20 v62 v63} FC22{ BC12 v64 v65} FC23{ BC2 vd v66 v67 FC24{ BC25{ BC26{ m Fp FC14 FC14 Fi[3] Fc[2] Fi Fp} FC27{ m Fp} FC28{ m Fp} FC27 FC8 FC8 FC27 FC28 FC27 FC8 FC8 FC8 Fc Fi Fp} FC8} Fi} FC29{ BC12 v68} FC30{ BC29 v69} FC31{ BC12 v70} Fp FC27 Fp[2] Fi Fc[3] Fi FL[2]}


 S10179C104 ::~S10179C104(){ note_dtor("S10179C104", this);}
void  S10179C104 ::v207(){vfunc_called(this, "_ZN10S10179C1044v207Ev");}
void  S10179C104 ::v208(){vfunc_called(this, "_ZN10S10179C1044v208Ev");}
void  S10179C104 ::v209(){vfunc_called(this, "_ZN10S10179C1044v209Ev");}
void  S10179C104 ::v210(){vfunc_called(this, "_ZN10S10179C1044v210Ev");}
void  S10179C104 ::v211(){vfunc_called(this, "_ZN10S10179C1044v211Ev");}
void  S10179C104 ::v212(){vfunc_called(this, "_ZN10S10179C1044v212Ev");}
void  S10179C104 ::v213(){vfunc_called(this, "_ZN10S10179C1044v213Ev");}
void  S10179C104 ::v214(){vfunc_called(this, "_ZN10S10179C1044v214Ev");}
void  S10179C104 ::v215(){vfunc_called(this, "_ZN10S10179C1044v215Ev");}
void  S10179C104 ::v216(){vfunc_called(this, "_ZN10S10179C1044v216Ev");}
void  S10179C104 ::v217(){vfunc_called(this, "_ZN10S10179C1044v217Ev");}
void  S10179C104 ::v218(){vfunc_called(this, "_ZN10S10179C1044v218Ev");}
void  S10179C104 ::v219(){vfunc_called(this, "_ZN10S10179C1044v219Ev");}
void  S10179C104 ::v220(){vfunc_called(this, "_ZN10S10179C1044v220Ev");}
void  S10179C104 ::v221(){vfunc_called(this, "_ZN10S10179C1044v221Ev");}
void  S10179C104 ::v222(){vfunc_called(this, "_ZN10S10179C1044v222Ev");}
void  S10179C104 ::v223(){vfunc_called(this, "_ZN10S10179C1044v223Ev");}
void  S10179C104 ::v224(){vfunc_called(this, "_ZN10S10179C1044v224Ev");}
void  S10179C104 ::v225(){vfunc_called(this, "_ZN10S10179C1044v225Ev");}
void  S10179C104 ::v226(){vfunc_called(this, "_ZN10S10179C1044v226Ev");}
void  S10179C104 ::v227(){vfunc_called(this, "_ZN10S10179C1044v227Ev");}
void  S10179C104 ::v228(){vfunc_called(this, "_ZN10S10179C1044v228Ev");}
void  S10179C104 ::v229(){vfunc_called(this, "_ZN10S10179C1044v229Ev");}
S10179C104 ::S10179C104(){ note_ctor("S10179C104", this);} // tgen

static void Test_S10179C104()
{
  extern Class_Descriptor cd_S10179C104;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(305,427)];
    init_test(&cd_S10179C104, buf);
    S10179C104 *dp, &lv = *(dp=new (buf) S10179C104());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2432,1704), "sizeof(S10179C104)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C104)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10179C104");
    check_base_class_offset(lv, (S10179C11*), ABISELECT(48,32), "S10179C104");
    check_base_class_offset(lv, (S10179C2*), ABISELECT(144,96), "S10179C104");
    check_field_offset(lv, s10179c104f0, ABISELECT(152,100), "S10179C104.s10179c104f0");
    check_field_offset(lv, s10179c104f1, ABISELECT(160,108), "S10179C104.s10179c104f1");
    check_field_offset(lv, s10179c104f2, ABISELECT(392,272), "S10179C104.s10179c104f2");
    check_field_offset(lv, s10179c104f3, ABISELECT(432,296), "S10179C104.s10179c104f3");
    check_field_offset(lv, s10179c104f4, ABISELECT(688,472), "S10179C104.s10179c104f4");
    check_field_offset(lv, s10179c104f5, ABISELECT(920,636), "S10179C104.s10179c104f5");
    check_field_offset(lv, s10179c104f6, ABISELECT(1152,800), "S10179C104.s10179c104f6");
    check_field_offset(lv, s10179c104f7, ABISELECT(1384,964), "S10179C104.s10179c104f7");
    check_field_offset(lv, s10179c104f8, ABISELECT(1672,1168), "S10179C104.s10179c104f8");
    check_field_offset(lv, s10179c104f9, ABISELECT(1904,1332), "S10179C104.s10179c104f9");
    check_field_offset(lv, s10179c104f10, ABISELECT(2136,1496), "S10179C104.s10179c104f10");
    check_field_offset(lv, s10179c104f11, ABISELECT(2368,1660), "S10179C104.s10179c104f11");
    check_field_offset(lv, s10179c104f12, ABISELECT(2376,1664), "S10179C104.s10179c104f12");
    check_field_offset(lv, s10179c104f13, ABISELECT(2384,1668), "S10179C104.s10179c104f13");
    check_field_offset(lv, s10179c104f14, ABISELECT(2400,1676), "S10179C104.s10179c104f14");
    check_field_offset(lv, s10179c104f15, ABISELECT(2404,1680), "S10179C104.s10179c104f15");
    check_field_offset(lv, s10179c104f16, ABISELECT(2408,1684), "S10179C104.s10179c104f16");
    check_field_offset(lv, s10179c104f17, ABISELECT(2416,1688), "S10179C104.s10179c104f17");
    test_class_info(&lv, &cd_S10179C104);
    dp->~S10179C104();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C104(Test_S10179C104, "S10179C104", ABISELECT(2432,1704));

#else // __cplusplus

extern void _ZN10S10179C104C1Ev();
extern void _ZN10S10179C104D1Ev();
Name_Map name_map_S10179C104[] = {
  NSPAIR(_ZN10S10179C104C1Ev),
  NSPAIR(_ZN10S10179C104D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C11;
extern VTBL_ENTRY _ZTI9S10179C11[];
extern  VTBL_ENTRY _ZTV9S10179C11[];
extern Class_Descriptor cd_S10179C2;
extern VTBL_ENTRY _ZTI8S10179C2[];
extern  VTBL_ENTRY _ZTV8S10179C2[];
static Base_Class bases_S10179C104[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C11,    ABISELECT(48,32), //bcp->offset
    27, //bcp->virtual_function_table_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},
  {&cd_S10179C2,    ABISELECT(144,96), //bcp->offset
    55, //bcp->virtual_function_table_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 _ZTI10S10179C104[];
extern void _ZN10S10179C104D1Ev();
extern void _ZN10S10179C104D0Ev();
extern void _ZN10S10179C1044v207Ev();
extern void _ZN10S10179C1044v208Ev();
extern void _ZN10S10179C1044v209Ev();
extern void _ZN10S10179C1044v210Ev();
extern void _ZN10S10179C1044v211Ev();
extern void _ZN10S10179C1044v212Ev();
extern void _ZN10S10179C1044v213Ev();
extern void _ZN10S10179C1044v214Ev();
extern void _ZN10S10179C1044v215Ev();
extern void _ZN10S10179C1044v216Ev();
extern void _ZN10S10179C1044v217Ev();
extern void _ZN10S10179C1044v218Ev();
extern void _ZN10S10179C1044v219Ev();
extern void _ZN10S10179C1044v220Ev();
extern void _ZN10S10179C1044v221Ev();
extern void _ZN10S10179C1044v222Ev();
extern void _ZN10S10179C1044v223Ev();
extern void _ZN10S10179C1044v224Ev();
extern void _ZN10S10179C1044v225Ev();
extern void _ZN10S10179C1044v226Ev();
extern void _ZN10S10179C1044v227Ev();
extern void _ZN10S10179C1044v228Ev();
extern void _ZN10S10179C1044v229Ev();
extern void ABISELECT(_ZThn48_N10S10179C104D1Ev,_ZThn32_N10S10179C104D1Ev)();
extern void ABISELECT(_ZThn48_N10S10179C104D0Ev,_ZThn32_N10S10179C104D0Ev)();
extern void _ZN9S10179C113v15Ev();
extern void _ZN9S10179C113v16Ev();
extern void _ZN9S10179C113v17Ev();
extern void _ZN9S10179C113v18Ev();
extern void _ZN9S10179C113v19Ev();
extern void _ZN9S10179C113v20Ev();
extern void _ZN9S10179C113v21Ev();
extern void _ZN9S10179C113v22Ev();
extern void _ZN9S10179C113v23Ev();
extern void _ZN9S10179C113v24Ev();
extern void _ZN9S10179C113v25Ev();
extern void _ZN9S10179C113v26Ev();
extern void _ZN9S10179C113v27Ev();
extern void _ZN9S10179C113v28Ev();
extern void _ZN9S10179C113v29Ev();
extern void _ZN9S10179C113v30Ev();
extern void _ZN9S10179C113v31Ev();
extern void _ZN9S10179C113v32Ev();
extern void _ZN9S10179C113v33Ev();
extern void _ZN9S10179C113v34Ev();
extern void _ZN9S10179C113v35Ev();
extern void _ZN9S10179C113v36Ev();
extern void _ZN9S10179C113v37Ev();
extern void _ZN9S10179C113v38Ev();
extern void ABISELECT(_ZThn144_N10S10179C104D1Ev,_ZThn96_N10S10179C104D1Ev)();
extern void ABISELECT(_ZThn144_N10S10179C104D0Ev,_ZThn96_N10S10179C104D0Ev)();
extern void _ZN8S10179C22v7Ev();
static  VTBL_ENTRY vtc_S10179C104[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10179C104[0]),
  (VTBL_ENTRY)&_ZN10S10179C104D1Ev,
  (VTBL_ENTRY)&_ZN10S10179C104D0Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v207Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v208Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v209Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v210Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v211Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v212Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v213Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v214Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v215Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v216Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v217Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v218Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v219Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v220Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v221Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v222Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v223Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v224Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v225Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v226Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v227Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v228Ev,
  (VTBL_ENTRY)&_ZN10S10179C1044v229Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10179C104[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10179C104D1Ev,_ZThn32_N10S10179C104D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10179C104D0Ev,_ZThn32_N10S10179C104D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI10S10179C104[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10179C104D1Ev,_ZThn96_N10S10179C104D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10179C104D0Ev,_ZThn96_N10S10179C104D0Ev),
  (VTBL_ENTRY)&_ZN8S10179C22v7Ev,
};
extern VTBL_ENTRY _ZTI10S10179C104[];
extern  VTBL_ENTRY _ZTV10S10179C104[];
Class_Descriptor cd_S10179C104 = {  "S10179C104", // class name
  bases_S10179C104, 3,
  &(vtc_S10179C104[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2432,1704), // object size
  NSPAIRA(_ZTI10S10179C104),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV10S10179C104),60, //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  S10179C130  : S10180C17 , S10179C11 , S10179C2 {
  ::S10180C31 s10179c130f0;
  void *s10179c130f1;
  ::S10180C87 s10179c130f2;
  ::S10180C94 s10179c130f3;
  ::S10180C111 s10179c130f4;
  ::S10180C131 s10179c130f5;
  ::S10180C135 s10179c130f6;
  ::S10180C101 s10179c130f7;
  ::S10180C143 s10179c130f8;
  ::S10179C151 s10179c130f9;
  ::S10180C157 s10179c130f10;
  ::S10180C152 s10179c130f11;
  ::S10180C154 s10179c130f12[9];
  ::S10180C155 s10179c130f13;
  ::S10179C156 s10179c130f14;
  ::S10179C157 s10179c130f15;
  ::S10180C158 s10179c130f16;
  void *s10179c130f17;
  int s10179c130f18;
  ::S10179C159 s10179c130f19;
  ::S10179C104 s10179c130f20;
  ::S10180C160 s10179c130f21;
  ::S10180C124 s10179c130f22;
  ::S10179C87 s10179c130f23;
  ::S10180C88 s10179c130f24;
  ::S10180C106 s10179c130f25;
  ::S10180C87 s10179c130f26;
  void *s10179c130f27;
  ::S10180C161 s10179c130f28;
  int s10179c130f29;
  ::S10180C163 s10179c130f30;
  void *s10179c130f31[2];
  int s10179c130f32;
  virtual  ~S10179C130(); // _ZN10S10179C130D1Ev
  virtual void  v238(); // _ZN10S10179C1304v238Ev
  virtual void  v239(); // _ZN10S10179C1304v239Ev
  virtual void  v240(); // _ZN10S10179C1304v240Ev
  virtual void  v241(); // _ZN10S10179C1304v241Ev
  virtual void  v242(); // _ZN10S10179C1304v242Ev
  virtual void  v243(); // _ZN10S10179C1304v243Ev
  virtual void  v244(); // _ZN10S10179C1304v244Ev
  virtual void  v245(); // _ZN10S10179C1304v245Ev
  S10179C130(); // tgen
};
//SIG(-1 S10179C130) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ 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 Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC10{ vd v33} vd v1 v2 v3 v4 v5 v6 v7 v8 FC11{ m FC12{ m Fp Fi[2] FC5} Fp[2]} Fp FC13{ BC14{ BC2 vd v36 v37 v38 v39 FC15{ m Fp FC7 FC8 FC8 Fi[3] FC16{ m FC17{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi} v34 v35} FC18{ BC19{ BC2 BC20{ vd v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fp FC7 FC9} vd v69 v70 v71 v72 v73 v74} BC21{ vd v75} vd v40 v41 v42 v43 v44 FC22{ m Fi Fp Fi FC16} FC12} FC23{ m Fp} FC24{ vd v76 v77 FC25{ m Fp Fi[2] FC26{ m}} FC27{ m Fi[4]}[3] Fp[2] Fi Fc} FC28{ BC21 vd v78 Fp[2] FC29{ m Fp Fi FC26 FC30{ m}} FC31{ BC2 vd v79 v80 v81 v82 FC32{ m Fp[2] FC8 FC25 Fi[2]}}} FC33{ BC2 vd v83 Fp FC7 FC7 Fp Fi FC16} FC34{ BC35{ BC36{ BC2 vd v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 Fp[2] FC23 Fc[2] Fp FC37{ m FC16 FC16 FC38{ m FC39{ m FL}} FC38 FC16 FC16} FC7 Fp[4] FC11} vd v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 FC40{ vd m Fi[2] FC8 FC8 FC8 FC8 FC41{ m Fp[2]} FL[2]} Fp} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi[3]} FC42{ BC43{ BC2 vd v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 Fp[2] FC44{ m Fp} Fc[2] Fp FC37 FC7 Fp[4] FC11} vd v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 FC40 Fp} FC45{ BC35 vd v171 v172} FC46{ BC35 vd v173 v174} FC47{ BC36 vd v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 Fi[2] FL Fi}[9] FC48{ BC35 vd v187 v188 v189} FC49{ BC50{ BC43 vd v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 FC40 Fp} vd v190 v191 v192} FC51{ BC50 vd v212 v213} FC52{ BC2 BC21 BC20 vd v214 v215 v216 v217 Fp FC28 FC33 FC53{ BC14 v218 v219} FC54{ BC14 v220} Fp FL FC8} Fp Fi FC55{ m Fl Fc FL[2] FC56{ m Fp}} FC57{ BC2 BC6 BC10 vd v221 v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 Fi[2] FC54 FC11 FC58{ BC14 v244 v245 v246 Fp[3]} FC59{ BC60{ BC2 vd v248 v249 v250 v251 FC15 Fp Fc Fi} v247} FC61{ BC60 v252 v253} FC13 FC62{ BC2 vd v254 v255 FC63{ BC64{ BC65{ m Fp FC16 FC16 Fi[3] Fc[2] Fi Fp} FC44 FC23 FC44 FC8 FC8 FC44 FC23 FC44 FC8 FC8 FC8 Fc Fi Fp} FC8} Fi} FC66{ BC14 v256} FC67{ BC66 v257} FC68{ BC14 v258} Fp FC44 Fp[2] Fi Fc[3] Fi FL[2]} FC69{ BC2 BC20 BC21 vd v259 v260 v261 v262 v263 v264 Fi FC68 FC11 FC58 FC66 FC13 FC53 FC23 Fp[2] Fi} FC70{ m FC71{ BC72{ m Fp Fi FC73{ m} FC73}} Fi} FC61 FC74{ BC14 v265 v266 v267 FC75{ Fp[3]} FC76{ Fi[4]}[3]} FC66 FC13 Fp FC77{ m Fp Fi[2] FC30} Fi FC78{ m FC11 FC79{ Fi FC80{ Fi[2] FL Fc}[9] Fi} FC8} Fp[2] Fi}


 S10179C130 ::~S10179C130(){ note_dtor("S10179C130", this);}
void  S10179C130 ::v238(){vfunc_called(this, "_ZN10S10179C1304v238Ev");}
void  S10179C130 ::v239(){vfunc_called(this, "_ZN10S10179C1304v239Ev");}
void  S10179C130 ::v240(){vfunc_called(this, "_ZN10S10179C1304v240Ev");}
void  S10179C130 ::v241(){vfunc_called(this, "_ZN10S10179C1304v241Ev");}
void  S10179C130 ::v242(){vfunc_called(this, "_ZN10S10179C1304v242Ev");}
void  S10179C130 ::v243(){vfunc_called(this, "_ZN10S10179C1304v243Ev");}
void  S10179C130 ::v244(){vfunc_called(this, "_ZN10S10179C1304v244Ev");}
void  S10179C130 ::v245(){vfunc_called(this, "_ZN10S10179C1304v245Ev");}
S10179C130 ::S10179C130(){ note_ctor("S10179C130", this);} // tgen

static void Test_S10179C130()
{
  extern Class_Descriptor cd_S10179C130;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1572,2223)];
    init_test(&cd_S10179C130, buf);
    S10179C130 *dp, &lv = *(dp=new (buf) S10179C130());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12568,8888), "sizeof(S10179C130)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C130)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10179C130");
    check_base_class_offset(lv, (S10179C11*), ABISELECT(48,32), "S10179C130");
    check_base_class_offset(lv, (S10179C2*), ABISELECT(144,96), "S10179C130");
    check_field_offset(lv, s10179c130f0, ABISELECT(152,100), "S10179C130.s10179c130f0");
    check_field_offset(lv, s10179c130f1, ABISELECT(192,124), "S10179C130.s10179c130f1");
    check_field_offset(lv, s10179c130f2, ABISELECT(200,128), "S10179C130.s10179c130f2");
    check_field_offset(lv, s10179c130f3, ABISELECT(432,292), "S10179C130.s10179c130f3");
    check_field_offset(lv, s10179c130f4, ABISELECT(648,436), "S10179C130.s10179c130f4");
    check_field_offset(lv, s10179c130f5, ABISELECT(656,440), "S10179C130.s10179c130f5");
    check_field_offset(lv, s10179c130f6, ABISELECT(760,524), "S10179C130.s10179c130f6");
    check_field_offset(lv, s10179c130f7, ABISELECT(912,624), "S10179C130.s10179c130f7");
    check_field_offset(lv, s10179c130f8, ABISELECT(1048,716), "S10179C130.s10179c130f8");
    check_field_offset(lv, s10179c130f9, ABISELECT(1448,1004), "S10179C130.s10179c130f9");
    check_field_offset(lv, s10179c130f10, ABISELECT(1832,1280), "S10179C130.s10179c130f10");
    check_field_offset(lv, s10179c130f11, ABISELECT(2216,1556), "S10179C130.s10179c130f11");
    check_field_offset(lv, s10179c130f12, ABISELECT(2600,1832), "S10179C130.s10179c130f12");
    check_field_offset(lv, s10179c130f13, ABISELECT(5192,3704), "S10179C130.s10179c130f13");
    check_field_offset(lv, s10179c130f14, ABISELECT(5576,3980), "S10179C130.s10179c130f14");
    check_field_offset(lv, s10179c130f15, ABISELECT(5960,4256), "S10179C130.s10179c130f15");
    check_field_offset(lv, s10179c130f16, ABISELECT(6344,4532), "S10179C130.s10179c130f16");
    check_field_offset(lv, s10179c130f17, ABISELECT(7288,5180), "S10179C130.s10179c130f17");
    check_field_offset(lv, s10179c130f18, ABISELECT(7296,5184), "S10179C130.s10179c130f18");
    check_field_offset(lv, s10179c130f19, ABISELECT(7304,5188), "S10179C130.s10179c130f19");
    check_field_offset(lv, s10179c130f20, ABISELECT(7344,5216), "S10179C130.s10179c130f20");
    check_field_offset(lv, s10179c130f21, ABISELECT(9776,6920), "S10179C130.s10179c130f21");
    check_field_offset(lv, s10179c130f22, ABISELECT(11192,7896), "S10179C130.s10179c130f22");
    check_field_offset(lv, s10179c130f23, ABISELECT(11216,7912), "S10179C130.s10179c130f23");
    check_field_offset(lv, s10179c130f24, ABISELECT(11448,8076), "S10179C130.s10179c130f24");
    check_field_offset(lv, s10179c130f25, ABISELECT(11752,8300), "S10179C130.s10179c130f25");
    check_field_offset(lv, s10179c130f26, ABISELECT(11984,8464), "S10179C130.s10179c130f26");
    check_field_offset(lv, s10179c130f27, ABISELECT(12216,8628), "S10179C130.s10179c130f27");
    check_field_offset(lv, s10179c130f28, ABISELECT(12224,8632), "S10179C130.s10179c130f28");
    check_field_offset(lv, s10179c130f29, ABISELECT(12248,8648), "S10179C130.s10179c130f29");
    check_field_offset(lv, s10179c130f30, ABISELECT(12256,8652), "S10179C130.s10179c130f30");
    check_field_offset(lv, s10179c130f31, ABISELECT(12544,8876), "S10179C130.s10179c130f31");
    check_field_offset(lv, s10179c130f32, ABISELECT(12560,8884), "S10179C130.s10179c130f32");
    test_class_info(&lv, &cd_S10179C130);
    dp->~S10179C130();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C130(Test_S10179C130, "S10179C130", ABISELECT(12568,8888));

#else // __cplusplus

extern void _ZN10S10179C130C1Ev();
extern void _ZN10S10179C130D1Ev();
Name_Map name_map_S10179C130[] = {
  NSPAIR(_ZN10S10179C130C1Ev),
  NSPAIR(_ZN10S10179C130D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10179C11;
extern VTBL_ENTRY _ZTI9S10179C11[];
extern  VTBL_ENTRY _ZTV9S10179C11[];
extern Class_Descriptor cd_S10179C2;
extern VTBL_ENTRY _ZTI8S10179C2[];
extern  VTBL_ENTRY _ZTV8S10179C2[];
static Base_Class bases_S10179C130[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C11,    ABISELECT(48,32), //bcp->offset
    12, //bcp->virtual_function_table_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},
  {&cd_S10179C2,    ABISELECT(144,96), //bcp->offset
    40, //bcp->virtual_function_table_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 _ZTI10S10179C130[];
extern void _ZN10S10179C130D1Ev();
extern void _ZN10S10179C130D0Ev();
extern void _ZN10S10179C1304v238Ev();
extern void _ZN10S10179C1304v239Ev();
extern void _ZN10S10179C1304v240Ev();
extern void _ZN10S10179C1304v241Ev();
extern void _ZN10S10179C1304v242Ev();
extern void _ZN10S10179C1304v243Ev();
extern void _ZN10S10179C1304v244Ev();
extern void _ZN10S10179C1304v245Ev();
extern void ABISELECT(_ZThn48_N10S10179C130D1Ev,_ZThn32_N10S10179C130D1Ev)();
extern void ABISELECT(_ZThn48_N10S10179C130D0Ev,_ZThn32_N10S10179C130D0Ev)();
extern void _ZN9S10179C113v15Ev();
extern void _ZN9S10179C113v16Ev();
extern void _ZN9S10179C113v17Ev();
extern void _ZN9S10179C113v18Ev();
extern void _ZN9S10179C113v19Ev();
extern void _ZN9S10179C113v20Ev();
extern void _ZN9S10179C113v21Ev();
extern void _ZN9S10179C113v22Ev();
extern void _ZN9S10179C113v23Ev();
extern void _ZN9S10179C113v24Ev();
extern void _ZN9S10179C113v25Ev();
extern void _ZN9S10179C113v26Ev();
extern void _ZN9S10179C113v27Ev();
extern void _ZN9S10179C113v28Ev();
extern void _ZN9S10179C113v29Ev();
extern void _ZN9S10179C113v30Ev();
extern void _ZN9S10179C113v31Ev();
extern void _ZN9S10179C113v32Ev();
extern void _ZN9S10179C113v33Ev();
extern void _ZN9S10179C113v34Ev();
extern void _ZN9S10179C113v35Ev();
extern void _ZN9S10179C113v36Ev();
extern void _ZN9S10179C113v37Ev();
extern void _ZN9S10179C113v38Ev();
extern void ABISELECT(_ZThn144_N10S10179C130D1Ev,_ZThn96_N10S10179C130D1Ev)();
extern void ABISELECT(_ZThn144_N10S10179C130D0Ev,_ZThn96_N10S10179C130D0Ev)();
extern void _ZN8S10179C22v7Ev();
static  VTBL_ENTRY vtc_S10179C130[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10179C130[0]),
  (VTBL_ENTRY)&_ZN10S10179C130D1Ev,
  (VTBL_ENTRY)&_ZN10S10179C130D0Ev,
  (VTBL_ENTRY)&_ZN10S10179C1304v238Ev,
  (VTBL_ENTRY)&_ZN10S10179C1304v239Ev,
  (VTBL_ENTRY)&_ZN10S10179C1304v240Ev,
  (VTBL_ENTRY)&_ZN10S10179C1304v241Ev,
  (VTBL_ENTRY)&_ZN10S10179C1304v242Ev,
  (VTBL_ENTRY)&_ZN10S10179C1304v243Ev,
  (VTBL_ENTRY)&_ZN10S10179C1304v244Ev,
  (VTBL_ENTRY)&_ZN10S10179C1304v245Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI10S10179C130[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10179C130D1Ev,_ZThn32_N10S10179C130D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N10S10179C130D0Ev,_ZThn32_N10S10179C130D0Ev),
  (VTBL_ENTRY)&_ZN9S10179C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10179C113v38Ev,
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI10S10179C130[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10179C130D1Ev,_ZThn96_N10S10179C130D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N10S10179C130D0Ev,_ZThn96_N10S10179C130D0Ev),
  (VTBL_ENTRY)&_ZN8S10179C22v7Ev,
};
extern VTBL_ENTRY _ZTI10S10179C130[];
extern  VTBL_ENTRY _ZTV10S10179C130[];
Class_Descriptor cd_S10179C130 = {  "S10179C130", // class name
  bases_S10179C130, 3,
  &(vtc_S10179C130[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(12568,8888), // object size
  NSPAIRA(_ZTI10S10179C130),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV10S10179C130),45, //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  S10179C129  : S10179C2 , S10180C17 {
  void *s10179c129f0[6];
  ::S10179C130 s10179c129f1;
  ::S10179C79 s10179c129f2;
  ::S10180C166 s10179c129f3;
  ::S10180C174 s10179c129f4;
  ::S10180C175 s10179c129f5;
  ::S10179C87 s10179c129f6;
  void *s10179c129f7;
  int s10179c129f8;
  void *s10179c129f9;
  int s10179c129f10;
  virtual  ~S10179C129(); // _ZN10S10179C129D1Ev
  virtual void  v237(); // _ZN10S10179C1294v237Ev
  S10179C129(); // tgen
};
//SIG(-1 S10179C129) C1{ BC2{ vd v2} BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v1 Fp[6] FC7{ BC3 BC8{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fp FC9{ m FC10{ m Fp Fi FC5} Fi} FC11{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC2 vd v3 v4 v5 v6 v7 v8 v9 v10 FC12{ m FC13{ m Fp Fi[2] FC6} Fp[2]} Fp FC14{ BC15{ BC3 vd v37 v38 v39 v40 FC16{ m Fp FC9 FC10 FC10 Fi[3] FC17{ m FC18{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC9 FC9 Fc} Fp Fc Fi} v35 v36} FC19{ BC20{ BC3 BC21{ vd v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fp FC9 FC11} vd v70 v71 v72 v73 v74 v75} BC22{ vd v76} vd v41 v42 v43 v44 v45 FC23{ m Fi Fp Fi FC17} FC13} FC24{ m Fp} FC25{ vd v77 v78 FC26{ m Fp Fi[2] FC27{ m}} FC28{ m Fi[4]}[3] Fp[2] Fi Fc} FC29{ BC22 vd v79 Fp[2] FC30{ m Fp Fi FC27 FC31{ m}} FC32{ BC3 vd v80 v81 v82 v83 FC33{ m Fp[2] FC10 FC26 Fi[2]}}} FC34{ BC3 vd v84 Fp FC9 FC9 Fp Fi FC17} FC35{ BC36{ BC37{ BC3 vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fp[2] FC24 Fc[2] Fp FC38{ m FC17 FC17 FC39{ m FC40{ m FL}} FC39 FC17 FC17} FC9 Fp[4] FC12} vd v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 FC41{ vd m Fi[2] FC10 FC10 FC10 FC10 FC42{ m Fp[2]} FL[2]} Fp} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[3]} FC43{ BC44{ BC3 vd v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 Fp[2] FC45{ m Fp} Fc[2] Fp FC38 FC9 Fp[4] FC12} vd v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 FC41 Fp} FC46{ BC36 vd v172 v173} FC47{ BC36 vd v174 v175} FC48{ BC37 vd v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 Fi[2] FL Fi}[9] FC49{ BC36 vd v188 v189 v190} FC50{ BC51{ BC44 vd v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 FC41 Fp} vd v191 v192 v193} FC52{ BC51 vd v213 v214} FC53{ BC3 BC22 BC21 vd v215 v216 v217 v218 Fp FC29 FC34 FC54{ BC15 v219 v220} FC55{ BC15 v221} Fp FL FC10} Fp Fi FC56{ m Fl Fc FL[2] FC57{ m Fp}} FC58{ BC3 BC8 BC2 vd v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 Fi[2] FC55 FC12 FC59{ BC15 v245 v246 v247 Fp[3]} FC60{ BC61{ BC3 vd v249 v250 v251 v252 FC16 Fp Fc Fi} v248} FC62{ BC61 v253 v254} FC14 FC63{ BC3 vd v255 v256 FC64{ BC65{ BC66{ m Fp FC17 FC17 Fi[3] Fc[2] Fi Fp} FC45 FC24 FC45 FC10 FC10 FC45 FC24 FC45 FC10 FC10 FC10 Fc Fi Fp} FC10} Fi} FC67{ BC15 v257} FC68{ BC67 v258} FC69{ BC15 v259} Fp FC45 Fp[2] Fi Fc[3] Fi FL[2]} FC70{ BC3 BC21 BC22 vd v260 v261 v262 v263 v264 v265 Fi FC69 FC12 FC59 FC67 FC14 FC54 FC24 Fp[2] Fi} FC71{ m FC72{ BC73{ m Fp Fi FC74{ m} FC74}} Fi} FC62 FC75{ BC15 v266 v267 v268 FC76{ Fp[3]} FC77{ Fi[4]}[3]} FC67 FC14 Fp FC78{ m Fp Fi[2] FC31} Fi FC79{ m FC12 FC80{ Fi FC81{ Fi[2] FL Fc}[9] Fi} FC10} Fp[2] Fi} FC82{ BC3 BC8 BC2 BC83{ BC84{ vd v303 v304 v305 v306 v307 v308 v309 v310 v311 v312 v313 v314 v315 v316 v317} BC85{ vd m Fp}} BC86{ vd v318 v319} BC87{ vd v320} vd v269 v270 v271 v272 v273 v274 v275 v276 v277 v278 v279 v280 v281 v282 v283 v284 v285 v286 v287 v288 v289 v290 v291 v292 v293 v294 v295 v296 v297 v298 v299 v300 v301 v302 Fp[5] Fi Fp FC88{ m Fi[2]} FC24 FC55 FC14 FC69 FC62 FC75 FC89{ BC3 BC8 vd v321 v322 v323 v324 v325 v326 v327 v328 FC90{ m FC10 Fi[2] FC10} Fi[2] Fc[2] Fi FL[2] FC91{ m Fl} Fi} FC19 FC92{ BC3 BC21 vd v329 v330 v331 v332 FC12 Fp[2] FC10 Fi} FC93{ BC3 BC21 BC22 BC94{ BC95{ vd v352 v353 v354 v355 v356 v357 v358 v359 v360 v361 v362 v363 v364 v365 v366} BC85} BC96{ vd v367 v368} BC97{ vd v369} vd v333 v334 v335 v336 v337 v338 v339 v340 v341 v342 v343 v344 v345 v346 v347 v348 v349 v350 v351 FC12 Fp[2] Fi[2] FC34 FC54 FC14 FC14 FC17 FC17 FC17 Fi} FC98{ BC99{ BC3 BC21 BC22 vd v376 v377 v378 v379 v380 v381 v382 v383 v384 v385 v386 v387 v388 v389 v390 v391 v392 v393 v394 v395 v396 v397 v398 Fi[2] FC69 FC12 FC59 FC67 FC14 FC54 FC63 FC55 FC68 FC55 Fp FC24 Fp[2] Fi Fc[3] Fi FL[2]} vd v370 v371 v372 v373 v374 v375 FC100{ m Fp} FC101{ m Fp FC24 Fp[5] FC102{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC103{ m FC104{ m Fi[2]} FC104} FC104 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC12 Fc[2] Fi FC105{ m Fc[5]} FC106{ m FC17 FC17 FC17 FC45 Fi Fc[2] Fi} FC17 FC17 FC17 Fp FC107{ BC3 vd FC108{ m Fp[3] FC88 FC10 FL[2] Fc} FC12} Fc[2] FL Fc[2] Fi FC45 FC71 Fc Fi} FC109{ BC3 BC21 BC22 BC94 vd v399 v400 v401 v402 v403 v404 v405 v406 Fp[2] FC45 Fi[2] FC110{ BC111{ BC3 vd v412 v413 v414 v415 v416 Fp FC45 Fp[4] Fi} vd v407 v408 v409 v410 v411 Fp[2] Fi[4] FC45 FC112{ m Fi[2]} FC112 Fc[2] FC45 FC39 Fi} Fp FC113{ BC3 BC21 vd v417 v418 v419 v420 v421 Fp FC114{ m FC78 Fi} Fi Fp Fc} Fc FC12 Fc[2]} FC115{ BC3 vd Fp} FC116{ BC3 BC21 vd v422 v423 v424 v425} FC62 Fp Fi Fp Fi}


 S10179C129 ::~S10179C129(){ note_dtor("S10179C129", this);}
void  S10179C129 ::v237(){vfunc_called(this, "_ZN10S10179C1294v237Ev");}
S10179C129 ::S10179C129(){ note_ctor("S10179C129", this);} // tgen

static void Test_S10179C129()
{
  extern Class_Descriptor cd_S10179C129;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2532,3546)];
    init_test(&cd_S10179C129, buf);
    S10179C129 *dp, &lv = *(dp=new (buf) S10179C129());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20248,14180), "sizeof(S10179C129)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C129)");
    check_base_class_offset(lv, (S10179C2*), 0, "S10179C129");
    check_base_class_offset(lv, (S10180C17*), ABISELECT(8,4), "S10179C129");
    check_field_offset(lv, s10179c129f0, ABISELECT(56,36), "S10179C129.s10179c129f0");
    check_field_offset(lv, s10179c129f1, ABISELECT(104,60), "S10179C129.s10179c129f1");
    check_field_offset(lv, s10179c129f2, ABISELECT(12672,8948), "S10179C129.s10179c129f2");
    check_field_offset(lv, s10179c129f3, ABISELECT(19112,13444), "S10179C129.s10179c129f3");
    check_field_offset(lv, s10179c129f4, ABISELECT(19784,13868), "S10179C129.s10179c129f4");
    check_field_offset(lv, s10179c129f5, ABISELECT(19840,13904), "S10179C129.s10179c129f5");
    check_field_offset(lv, s10179c129f6, ABISELECT(19984,14000), "S10179C129.s10179c129f6");
    check_field_offset(lv, s10179c129f7, ABISELECT(20216,14164), "S10179C129.s10179c129f7");
    check_field_offset(lv, s10179c129f8, ABISELECT(20224,14168), "S10179C129.s10179c129f8");
    check_field_offset(lv, s10179c129f9, ABISELECT(20232,14172), "S10179C129.s10179c129f9");
    check_field_offset(lv, s10179c129f10, ABISELECT(20240,14176), "S10179C129.s10179c129f10");
    test_class_info(&lv, &cd_S10179C129);
    dp->~S10179C129();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C129(Test_S10179C129, "S10179C129", ABISELECT(20248,14180));

#else // __cplusplus

extern void _ZN10S10179C129C1Ev();
extern void _ZN10S10179C129D1Ev();
Name_Map name_map_S10179C129[] = {
  NSPAIR(_ZN10S10179C129C1Ev),
  NSPAIR(_ZN10S10179C129D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10179C2;
extern VTBL_ENTRY _ZTI8S10179C2[];
extern  VTBL_ENTRY _ZTV8S10179C2[];
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10179C129[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10179C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C17,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_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 _ZTI10S10179C129[];
extern void _ZN10S10179C129D1Ev();
extern void _ZN10S10179C129D0Ev();
extern void _ZN8S10179C22v7Ev();
extern void _ZN10S10179C1294v237Ev();
extern void ABISELECT(_ZThn8_N10S10179C129D1Ev,_ZThn4_N10S10179C129D1Ev)();
extern void ABISELECT(_ZThn8_N10S10179C129D0Ev,_ZThn4_N10S10179C129D0Ev)();
static  VTBL_ENTRY vtc_S10179C129[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10179C129[0]),
  (VTBL_ENTRY)&_ZN10S10179C129D1Ev,
  (VTBL_ENTRY)&_ZN10S10179C129D0Ev,
  (VTBL_ENTRY)&_ZN8S10179C22v7Ev,
  (VTBL_ENTRY)&_ZN10S10179C1294v237Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI10S10179C129[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N10S10179C129D1Ev,_ZThn4_N10S10179C129D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N10S10179C129D0Ev,_ZThn4_N10S10179C129D0Ev),
};
extern VTBL_ENTRY _ZTI10S10179C129[];
extern  VTBL_ENTRY _ZTV10S10179C129[];
Class_Descriptor cd_S10179C129 = {  "S10179C129", // class name
  bases_S10179C129, 2,
  &(vtc_S10179C129[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(20248,14180), // object size
  NSPAIRA(_ZTI10S10179C129),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S10179C129),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  S10179C1  : S10179C2 , S10179C3 {
  ::S10180C4 s10179c1f0;
  ::S10180C9 s10179c1f1;
  void *s10179c1f2[3];
  ::S10180C10 s10179c1f3;
  ::S10179C16 s10179c1f4;
  ::S10179C129 s10179c1f5;
  ::S10179C87 s10179c1f6;
  ::S10179C87 s10179c1f7;
  ::S10180C176 s10179c1f8;
  ::S10180C13 s10179c1f9;
  ::S10180C178 s10179c1f10;
  int s10179c1f11;
  ::S10180C31 s10179c1f12;
  int s10179c1f13;
  ::S10180C179 s10179c1f14;
  ::S10180C179 s10179c1f15;
  ::S10180C179 s10179c1f16;
  virtual  ~S10179C1(); // _ZN8S10179C1D1Ev
  virtual void  v1(); // _ZN8S10179C12v1Ev
  virtual void  v2(); // _ZN8S10179C12v2Ev
  virtual void  v3(); // _ZN8S10179C12v3Ev
  virtual void  v4(); // _ZN8S10179C12v4Ev
  virtual void  v5(); // _ZN8S10179C12v5Ev
  virtual void  v6(); // _ZN8S10179C12v6Ev
  S10179C1(); // tgen
};
//SIG(1 S10179C1) C1{ BC2{ vd v7} BC3{ vd v8 v9 v10 v11 v12 Fp} vd v1 v2 v3 v4 v5 v6 FC4{ m Fp FC5{ BC6{ m Fp Fi FC7{ m} FC7}}} FC8{ m Fi Fp Fi[4] Fp} Fp[3] FC9{ BC10{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 Fp FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} FC14{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v13 v14 FC11 Fp} FC15{ BC2 BC16{ vd m FC17{ m Fp Fi FC13 FC18{ m}} FC17 Fc} BC19{ vd v41} vd v39 v40 Fp[5] FC20{ BC16 BC2 BC21{ vd v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fp FC11 FC14} BC22{ vd v88} BC23{ vd v89 v90} vd v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 Fi FC24{ m Fi[2]} FC24 FC24 FC25{ BC16 vd Fi Fp FC11 FL FC26{ m Fi[2]} Fi Fc Fi FC27{ m FC28{ m Fp Fi[2] FC18} Fp[2]}} FC29{ BC10 vd v91 v92 v93} FC30{ vd m Fi Fp[3] FC31{ m Fc[2] Fp[3] Fi[4] FC32{ m FC33{ Fl[4]}}}} FC34{ vd m FC32 Fi[2] FC35{ m FL[3] Fi[3] FL} FL FC36{ m Fi FC37{ m Fi[4]}} FC27 Fc[2] Fi[2] Fp[2] FL Fi[3]} Fi Fp FC38{ BC16 BC19 vd v94 Fi FC39{ m Fc[2]} FC40{ Fp[2]} Fp FC41{ vd m FC42{ vd m FC43{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC44{ BC45{ vd v101 v102 v103 v104 v105 v106 Fi Fp Fc} vd v95 v96 v97 v98 v99 v100 Fp} FC46{ BC47{ vd v108 Fi Fc[3]} vd v107 Fp[4] FL Fi FC32 FC48{ m Fp FC49{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC50{ BC47 vd v109 FC32 Fi Fp[2] FC51{ m FC32 FC48 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC52{ BC47 vd v110 Fp[2] FL Fi[4] FC53{ m Fi[2]} FC32 FC54{ m FC32 FC48 Fp Fi[4]} FC55{ m Fp}} FC32 FC32 FL Fi[5]} FL FC56{ m FC35 FC57{ m Fi} Fi} Fc[128] FC24 FC27} Fi[3] FC58{ m Fp Fi[2]} FC59{ m Fc[11] Fi[2]} FC60{ BC61{} FL Fi} FC62{ BC63{ BC16 vd v113 v114 v115 v116 FC64{ m Fp FC11 FC12 FC12 Fi[3] FC65{ m FC66{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC11 FC11 Fc} Fp Fc Fi} v111 v112} FL FC67{ BC63 v117} FC68{ BC63 v118} FC69{ BC63 v119 v120} FC27 Fc} FC70{ BC71{ BC16 BC21 BC2 BC72{ BC73{ vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137} BC74{ vd m Fp}} BC75{ vd v138 v139} BC22 vd v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 Fp[5] Fi Fp FC76{ m Fi[2]} FC77{ m Fp} FC78{ BC63 v174} FC62 FC68 FC79{ BC80{ BC16 vd v177 v178 v179 v180 FC64 Fp Fc Fi} v175 v176} FC81{ BC63 v181 v182 v183 FC82{ Fp[3]} FC49[3]} FC83{ BC16 BC21 vd v184 v185 v186 v187 v188 v189 v190 v191 FC84{ m FC12 Fi[2] FC12} Fi[2] Fc[2] Fi FL[2] FC85{ m Fl} Fi} FC86{ BC87{ BC16 BC10 vd v197 v198 v199 v200 v201 v202} BC88{ vd v203} vd v192 v193 v194 v195 v196 FC89{ m Fi Fp Fi FC65} FC28} FC90{ BC16 BC10 vd v204 v205 v206 v207 FC27 Fp[2] FC12 Fi} FC91{ BC16 BC10 BC88 BC92{ BC93{ vd v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241} BC74} BC94{ vd v242 v243} BC95{ vd v244} vd v208 v209 v210 v211 v212 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 FC27 Fp[2] Fi[2] FC96{ BC16 vd v245 Fp FC11 FC11 Fp Fi FC65} FC69 FC62 FC62 FC65 FC65 FC65 Fi} FC97{ BC98{ BC16 BC10 BC88 vd v252 v253 v254 v255 v256 v257 v258 v259 v260 v261 v262 v263 v264 v265 v266 v267 v268 v269 v270 v271 v272 v273 v274 Fi[2] FC68 FC27 FC99{ BC63 v275 v276 v277 Fp[3]} FC67 FC62 FC69 FC100{ BC16 vd v278 v279 FC101{ BC102{ BC103{ m Fp FC65 FC65 Fi[3] Fc[2] Fi Fp} FC104{ m Fp} FC77 FC104 FC12 FC12 FC104 FC77 FC104 FC12 FC12 FC12 Fc Fi Fp} FC12} Fi} FC78 FC105{ BC67 v280} FC78 Fp FC77 Fp[2] Fi Fc[3] Fi FL[2]} vd v246 v247 v248 v249 v250 v251 FC55 FC106{ m Fp FC77 Fp[5] FC107{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC108{ m FC53 FC53} FC53 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC27 Fc[2] Fi FC109{ m Fc[5]} FC110{ m FC65 FC65 FC65 FC104 Fi Fc[2] Fi} FC65 FC65 FC65 Fp FC111{ BC16 vd FC112{ m Fp[3] FC76 FC12 FL[2] Fc} FC27} Fc[2] FL Fc[2] Fi FC104 FC113{ m FC5 Fi} Fc Fi} vd v121 v122 Fc} FC79 FC79 Fp Fc Fp Fi} FC114{ BC2 BC16 vd v281 Fp[6] FC115{ BC16 BC21 BC2 vd v282 v283 v284 v285 v286 v287 v288 v289 FC27 Fp FC62 FC86 FC77 FC116{ vd v290 v291 FC117{ m Fp Fi[2] FC118{ m}} FC37[3] Fp[2] Fi Fc} FC119{ BC88 vd v292 Fp[2] FC120{ m Fp Fi FC118 FC121{ m}} FC122{ BC16 vd v293 v294 v295 v296 FC123{ m Fp[2] FC12 FC117 Fi[2]}}} FC96 FC124{ BC125{ BC126{ BC16 vd v306 v307 v308 v309 v310 v311 v312 v313 v314 v315 v316 v317 v318 v319 v320 v321 v322 v323 v324 v325 Fp[2] FC77 Fc[2] Fp FC127{ m FC65 FC65 FC128{ m FC129{ m FL}} FC128 FC65 FC65} FC11 Fp[4] FC27} vd v326 v327 v328 v329 v330 v331 v332 v333 v334 v335 v336 v337 v338 v339 v340 v341 v342 v343 v344 FC130{ vd m Fi[2] FC12 FC12 FC12 FC12 FC131{ m Fp[2]} FL[2]} Fp} vd v297 v298 v299 v300 v301 v302 v303 v304 v305 Fi[3]} FC132{ BC133{ BC16 vd v364 v365 v366 v367 v368 v369 v370 v371 v372 v373 v374 v375 v376 v377 v378 v379 v380 v381 v382 v383 Fp[2] FC104 Fc[2] Fp FC127 FC11 Fp[4] FC27} vd v345 v346 v347 v348 v349 v350 v351 v352 v353 v354 v355 v356 v357 v358 v359 v360 v361 v362 v363 FC130 Fp} FC134{ BC125 vd v384 v385} FC135{ BC125 vd v386 v387} FC136{ BC126 vd v388 v389 v390 v391 v392 v393 v394 v395 v396 v397 v398 v399 Fi[2] FL Fi}[9] FC137{ BC125 vd v400 v401 v402} FC138{ BC139{ BC133 vd v406 v407 v408 v409 v410 v411 v412 v413 v414 v415 v416 v417 v418 v419 v420 v421 v422 v423 v424 FC130 Fp} vd v403 v404 v405} FC140{ BC139 vd v425 v426} FC141{ BC16 BC88 BC10 vd v427 v428 v429 v430 Fp FC119 FC96 FC69 FC78 Fp FL FC12} Fp Fi FC142{ m Fl Fc FL[2] FC143{ m Fp}} FC144{ BC16 BC21 BC2 vd v431 v432 v433 v434 v435 v436 v437 v438 v439 v440 v441 v442 v443 v444 v445 v446 v447 v448 v449 v450 v451 v452 v453 Fi[2] FC78 FC27 FC99 FC145{ BC80 v454} FC79 FC62 FC100 FC67 FC105 FC68 Fp FC104 Fp[2] Fi Fc[3] Fi FL[2]} FC146{ BC16 BC10 BC88 vd v455 v456 v457 v458 v459 v460 Fi FC68 FC27 FC99 FC67 FC62 FC69 FC77 Fp[2] Fi} FC113 FC79 FC81 FC67 FC62 Fp FC147{ m Fp Fi[2] FC121} Fi FC148{ m FC27 FC149{ Fi FC150{ Fi[2] FL Fc}[9] Fi} FC12} Fp[2] Fi} FC71 FC151{ BC16 BC10 BC88 BC92 vd v461 v462 v463 v464 v465 v466 v467 v468 Fp[2] FC104 Fi[2] FC152{ BC153{ BC16 vd v474 v475 v476 v477 v478 Fp FC104 Fp[4] Fi} vd v469 v470 v471 v472 v473 Fp[2] Fi[4] FC104 FC24 FC24 Fc[2] FC104 FC128 Fi} Fp FC154{ BC16 BC10 vd v479 v480 v481 v482 v483 Fp FC155{ m FC147 Fi} Fi Fp Fc} Fc FC27 Fc[2]} FC156{ BC16 vd Fp} FC157{ BC16 BC10 vd v484 v485 v486 v487} FC79 Fp Fi Fp Fi} FC79 FC79 FC158{ BC159{ vd v496 v497 v498 v499 v500 v501 v502 v503} vd v488 v489 v490 v491 v492 v493 v494 v495 Fp[2]} FC12 FC160{ vd m Fi} Fi FC27 Fi FC161{ m Fp Fi} FC161 FC161}


 S10179C1 ::~S10179C1(){ note_dtor("S10179C1", this);}
void  S10179C1 ::v1(){vfunc_called(this, "_ZN8S10179C12v1Ev");}
void  S10179C1 ::v2(){vfunc_called(this, "_ZN8S10179C12v2Ev");}
void  S10179C1 ::v3(){vfunc_called(this, "_ZN8S10179C12v3Ev");}
void  S10179C1 ::v4(){vfunc_called(this, "_ZN8S10179C12v4Ev");}
void  S10179C1 ::v5(){vfunc_called(this, "_ZN8S10179C12v5Ev");}
void  S10179C1 ::v6(){vfunc_called(this, "_ZN8S10179C12v6Ev");}
S10179C1 ::S10179C1(){ note_ctor("S10179C1", this);} // tgen

static void Test_S10179C1()
{
  extern Class_Descriptor cd_S10179C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5557,8765)];
    init_test(&cd_S10179C1, buf);
    S10179C1 *dp, &lv = *(dp=new (buf) S10179C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(44448,35056), "sizeof(S10179C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10179C1)");
    check_base_class_offset(lv, (S10179C2*), 0, "S10179C1");
    check_base_class_offset(lv, (S10179C3*), ABISELECT(8,4), "S10179C1");
    check_field_offset(lv, s10179c1f0, ABISELECT(24,12), "S10179C1.s10179c1f0");
    check_field_offset(lv, s10179c1f1, ABISELECT(48,28), "S10179C1.s10179c1f1");
    check_field_offset(lv, s10179c1f2, ABISELECT(88,56), "S10179C1.s10179c1f2");
    check_field_offset(lv, s10179c1f3, ABISELECT(112,68), "S10179C1.s10179c1f3");
    check_field_offset(lv, s10179c1f4, ABISELECT(240,152), "S10179C1.s10179c1f4");
    check_field_offset(lv, s10179c1f5, ABISELECT(23576,20460), "S10179C1.s10179c1f5");
    check_field_offset(lv, s10179c1f6, ABISELECT(43824,34640), "S10179C1.s10179c1f6");
    check_field_offset(lv, s10179c1f7, ABISELECT(44056,34804), "S10179C1.s10179c1f7");
    check_field_offset(lv, s10179c1f8, ABISELECT(44288,34968), "S10179C1.s10179c1f8");
    check_field_offset(lv, s10179c1f9, ABISELECT(44312,34980), "S10179C1.s10179c1f9");
    check_field_offset(lv, s10179c1f10, ABISELECT(44328,34992), "S10179C1.s10179c1f10");
    check_field_offset(lv, s10179c1f11, ABISELECT(44344,35000), "S10179C1.s10179c1f11");
    check_field_offset(lv, s10179c1f12, ABISELECT(44352,35004), "S10179C1.s10179c1f12");
    check_field_offset(lv, s10179c1f13, ABISELECT(44392,35028), "S10179C1.s10179c1f13");
    check_field_offset(lv, s10179c1f14, ABISELECT(44400,35032), "S10179C1.s10179c1f14");
    check_field_offset(lv, s10179c1f15, ABISELECT(44416,35040), "S10179C1.s10179c1f15");
    check_field_offset(lv, s10179c1f16, ABISELECT(44432,35048), "S10179C1.s10179c1f16");
    test_class_info(&lv, &cd_S10179C1);
    dp->~S10179C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10179C1(Test_S10179C1, "S10179C1", ABISELECT(44448,35056));

#else // __cplusplus

extern void _ZN8S10179C1C1Ev();
extern void _ZN8S10179C1D1Ev();
Name_Map name_map_S10179C1[] = {
  NSPAIR(_ZN8S10179C1C1Ev),
  NSPAIR(_ZN8S10179C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10179C2;
extern VTBL_ENTRY _ZTI8S10179C2[];
extern  VTBL_ENTRY _ZTV8S10179C2[];
extern Class_Descriptor cd_S10179C3;
extern VTBL_ENTRY _ZTI8S10179C3[];
extern  VTBL_ENTRY _ZTV8S10179C3[];
static Base_Class bases_S10179C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10179C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10179C3,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI8S10179C1[];
extern void _ZN8S10179C1D1Ev();
extern void _ZN8S10179C1D0Ev();
extern void _ZN8S10179C22v7Ev();
extern void _ZN8S10179C12v1Ev();
extern void _ZN8S10179C12v2Ev();
extern void _ZN8S10179C12v3Ev();
extern void _ZN8S10179C12v4Ev();
extern void _ZN8S10179C12v5Ev();
extern void _ZN8S10179C12v6Ev();
extern void ABISELECT(_ZThn8_N8S10179C1D1Ev,_ZThn4_N8S10179C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S10179C1D0Ev,_ZThn4_N8S10179C1D0Ev)();
extern void _ZN8S10179C32v8Ev();
extern void _ZN8S10179C32v9Ev();
extern void _ZN8S10179C33v10Ev();
extern void _ZN8S10179C33v11Ev();
extern void _ZN8S10179C33v12Ev();
static  VTBL_ENTRY vtc_S10179C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10179C1[0]),
  (VTBL_ENTRY)&_ZN8S10179C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10179C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10179C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10179C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10179C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10179C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10179C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10179C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10179C12v6Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S10179C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S10179C1D1Ev,_ZThn4_N8S10179C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S10179C1D0Ev,_ZThn4_N8S10179C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10179C32v8Ev,
  (VTBL_ENTRY)&_ZN8S10179C32v9Ev,
  (VTBL_ENTRY)&_ZN8S10179C33v10Ev,
  (VTBL_ENTRY)&_ZN8S10179C33v11Ev,
  (VTBL_ENTRY)&_ZN8S10179C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S10179C1[];
extern  VTBL_ENTRY _ZTV8S10179C1[];
Class_Descriptor cd_S10179C1 = {  "S10179C1", // class name
  bases_S10179C1, 2,
  &(vtc_S10179C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(44448,35056), // object size
  NSPAIRA(_ZTI8S10179C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10179C1),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  S10181C2  {
  virtual  ~S10181C2(); // _ZN8S10181C2D1Ev
  virtual void  v7(); // _ZN8S10181C22v7Ev
  S10181C2(); // tgen
};
//SIG(-1 S10181C2) C1{ vd v1}


 S10181C2 ::~S10181C2(){ note_dtor("S10181C2", this);}
void  S10181C2 ::v7(){vfunc_called(this, "_ZN8S10181C22v7Ev");}
S10181C2 ::S10181C2(){ note_ctor("S10181C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10181C2C1Ev();
extern void _ZN8S10181C2D1Ev();
Name_Map name_map_S10181C2[] = {
  NSPAIR(_ZN8S10181C2C1Ev),
  NSPAIR(_ZN8S10181C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10181C2[];
extern void _ZN8S10181C2D1Ev();
extern void _ZN8S10181C2D0Ev();
extern void _ZN8S10181C22v7Ev();
static  VTBL_ENTRY vtc_S10181C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10181C2[0]),
  (VTBL_ENTRY)&_ZN8S10181C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10181C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10181C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S10181C2[];
extern  VTBL_ENTRY _ZTV8S10181C2[];
Class_Descriptor cd_S10181C2 = {  "S10181C2", // class name
  0,0,//no base classes
  &(vtc_S10181C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10181C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10181C2),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  S10181C3  {
  void *s10181c3f0;
  virtual  ~S10181C3(); // _ZN8S10181C3D1Ev
  virtual void  v8(); // _ZN8S10181C32v8Ev
  virtual void  v9(); // _ZN8S10181C32v9Ev
  virtual void  v10(); // _ZN8S10181C33v10Ev
  virtual void  v11(); // _ZN8S10181C33v11Ev
  virtual void  v12(); // _ZN8S10181C33v12Ev
  S10181C3(); // tgen
};
//SIG(-1 S10181C3) C1{ vd v1 v2 v3 v4 v5 Fp}


 S10181C3 ::~S10181C3(){ note_dtor("S10181C3", this);}
void  S10181C3 ::v8(){vfunc_called(this, "_ZN8S10181C32v8Ev");}
void  S10181C3 ::v9(){vfunc_called(this, "_ZN8S10181C32v9Ev");}
void  S10181C3 ::v10(){vfunc_called(this, "_ZN8S10181C33v10Ev");}
void  S10181C3 ::v11(){vfunc_called(this, "_ZN8S10181C33v11Ev");}
void  S10181C3 ::v12(){vfunc_called(this, "_ZN8S10181C33v12Ev");}
S10181C3 ::S10181C3(){ note_ctor("S10181C3", this);} // tgen

static void Test_S10181C3()
{
  extern Class_Descriptor cd_S10181C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10181C3, buf);
    S10181C3 *dp, &lv = *(dp=new (buf) S10181C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10181C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C3)");
    check_field_offset(lv, s10181c3f0, ABISELECT(8,4), "S10181C3.s10181c3f0");
    test_class_info(&lv, &cd_S10181C3);
    dp->~S10181C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C3(Test_S10181C3, "S10181C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10181C3C1Ev();
extern void _ZN8S10181C3D1Ev();
Name_Map name_map_S10181C3[] = {
  NSPAIR(_ZN8S10181C3C1Ev),
  NSPAIR(_ZN8S10181C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10181C3[];
extern void _ZN8S10181C3D1Ev();
extern void _ZN8S10181C3D0Ev();
extern void _ZN8S10181C32v8Ev();
extern void _ZN8S10181C32v9Ev();
extern void _ZN8S10181C33v10Ev();
extern void _ZN8S10181C33v11Ev();
extern void _ZN8S10181C33v12Ev();
static  VTBL_ENTRY vtc_S10181C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10181C3[0]),
  (VTBL_ENTRY)&_ZN8S10181C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10181C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10181C32v8Ev,
  (VTBL_ENTRY)&_ZN8S10181C32v9Ev,
  (VTBL_ENTRY)&_ZN8S10181C33v10Ev,
  (VTBL_ENTRY)&_ZN8S10181C33v11Ev,
  (VTBL_ENTRY)&_ZN8S10181C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S10181C3[];
extern  VTBL_ENTRY _ZTV8S10181C3[];
Class_Descriptor cd_S10181C3 = {  "S10181C3", // class name
  0,0,//no base classes
  &(vtc_S10181C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10181C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10181C3),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  S10181C24  {
  virtual  ~S10181C24(); // _ZN9S10181C24D1Ev
  virtual void  v41(); // _ZN9S10181C243v41Ev
  S10181C24(); // tgen
};
//SIG(-1 S10181C24) C1{ vd v1}


 S10181C24 ::~S10181C24(){ note_dtor("S10181C24", this);}
void  S10181C24 ::v41(){vfunc_called(this, "_ZN9S10181C243v41Ev");}
S10181C24 ::S10181C24(){ note_ctor("S10181C24", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10181C24C1Ev();
extern void _ZN9S10181C24D1Ev();
Name_Map name_map_S10181C24[] = {
  NSPAIR(_ZN9S10181C24C1Ev),
  NSPAIR(_ZN9S10181C24D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10181C24[];
extern void _ZN9S10181C24D1Ev();
extern void _ZN9S10181C24D0Ev();
extern void _ZN9S10181C243v41Ev();
static  VTBL_ENTRY vtc_S10181C24[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C24[0]),
  (VTBL_ENTRY)&_ZN9S10181C24D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C24D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C243v41Ev,
};
extern VTBL_ENTRY _ZTI9S10181C24[];
extern  VTBL_ENTRY _ZTV9S10181C24[];
Class_Descriptor cd_S10181C24 = {  "S10181C24", // class name
  0,0,//no base classes
  &(vtc_S10181C24[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10181C24),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10181C24),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  S10181C11  {
  void *s10181c11f0;
  ::S10180C12 s10181c11f1;
  ::S10180C15 s10181c11f2;
  virtual  ~S10181C11(); // _ZN9S10181C11D1Ev
  virtual void  v15(); // _ZN9S10181C113v15Ev
  virtual void  v16(); // _ZN9S10181C113v16Ev
  virtual void  v17(); // _ZN9S10181C113v17Ev
  virtual void  v18(); // _ZN9S10181C113v18Ev
  virtual void  v19(); // _ZN9S10181C113v19Ev
  virtual void  v20(); // _ZN9S10181C113v20Ev
  virtual void  v21(); // _ZN9S10181C113v21Ev
  virtual void  v22(); // _ZN9S10181C113v22Ev
  virtual void  v23(); // _ZN9S10181C113v23Ev
  virtual void  v24(); // _ZN9S10181C113v24Ev
  virtual void  v25(); // _ZN9S10181C113v25Ev
  virtual void  v26(); // _ZN9S10181C113v26Ev
  virtual void  v27(); // _ZN9S10181C113v27Ev
  virtual void  v28(); // _ZN9S10181C113v28Ev
  virtual void  v29(); // _ZN9S10181C113v29Ev
  virtual void  v30(); // _ZN9S10181C113v30Ev
  virtual void  v31(); // _ZN9S10181C113v31Ev
  virtual void  v32(); // _ZN9S10181C113v32Ev
  virtual void  v33(); // _ZN9S10181C113v33Ev
  virtual void  v34(); // _ZN9S10181C113v34Ev
  virtual void  v35(); // _ZN9S10181C113v35Ev
  virtual void  v36(); // _ZN9S10181C113v36Ev
  virtual void  v37(); // _ZN9S10181C113v37Ev
  virtual void  v38(); // _ZN9S10181C113v38Ev
  S10181C11(); // tgen
};
//SIG(-1 S10181C11) 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 Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S10181C11 ::~S10181C11(){ note_dtor("S10181C11", this);}
void  S10181C11 ::v15(){vfunc_called(this, "_ZN9S10181C113v15Ev");}
void  S10181C11 ::v16(){vfunc_called(this, "_ZN9S10181C113v16Ev");}
void  S10181C11 ::v17(){vfunc_called(this, "_ZN9S10181C113v17Ev");}
void  S10181C11 ::v18(){vfunc_called(this, "_ZN9S10181C113v18Ev");}
void  S10181C11 ::v19(){vfunc_called(this, "_ZN9S10181C113v19Ev");}
void  S10181C11 ::v20(){vfunc_called(this, "_ZN9S10181C113v20Ev");}
void  S10181C11 ::v21(){vfunc_called(this, "_ZN9S10181C113v21Ev");}
void  S10181C11 ::v22(){vfunc_called(this, "_ZN9S10181C113v22Ev");}
void  S10181C11 ::v23(){vfunc_called(this, "_ZN9S10181C113v23Ev");}
void  S10181C11 ::v24(){vfunc_called(this, "_ZN9S10181C113v24Ev");}
void  S10181C11 ::v25(){vfunc_called(this, "_ZN9S10181C113v25Ev");}
void  S10181C11 ::v26(){vfunc_called(this, "_ZN9S10181C113v26Ev");}
void  S10181C11 ::v27(){vfunc_called(this, "_ZN9S10181C113v27Ev");}
void  S10181C11 ::v28(){vfunc_called(this, "_ZN9S10181C113v28Ev");}
void  S10181C11 ::v29(){vfunc_called(this, "_ZN9S10181C113v29Ev");}
void  S10181C11 ::v30(){vfunc_called(this, "_ZN9S10181C113v30Ev");}
void  S10181C11 ::v31(){vfunc_called(this, "_ZN9S10181C113v31Ev");}
void  S10181C11 ::v32(){vfunc_called(this, "_ZN9S10181C113v32Ev");}
void  S10181C11 ::v33(){vfunc_called(this, "_ZN9S10181C113v33Ev");}
void  S10181C11 ::v34(){vfunc_called(this, "_ZN9S10181C113v34Ev");}
void  S10181C11 ::v35(){vfunc_called(this, "_ZN9S10181C113v35Ev");}
void  S10181C11 ::v36(){vfunc_called(this, "_ZN9S10181C113v36Ev");}
void  S10181C11 ::v37(){vfunc_called(this, "_ZN9S10181C113v37Ev");}
void  S10181C11 ::v38(){vfunc_called(this, "_ZN9S10181C113v38Ev");}
S10181C11 ::S10181C11(){ note_ctor("S10181C11", this);} // tgen

static void Test_S10181C11()
{
  extern Class_Descriptor cd_S10181C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S10181C11, buf);
    S10181C11 *dp, &lv = *(dp=new (buf) S10181C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S10181C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C11)");
    check_field_offset(lv, s10181c11f0, ABISELECT(8,4), "S10181C11.s10181c11f0");
    check_field_offset(lv, s10181c11f1, ABISELECT(16,8), "S10181C11.s10181c11f1");
    check_field_offset(lv, s10181c11f2, ABISELECT(40,24), "S10181C11.s10181c11f2");
    test_class_info(&lv, &cd_S10181C11);
    dp->~S10181C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C11(Test_S10181C11, "S10181C11", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN9S10181C11C1Ev();
extern void _ZN9S10181C11D1Ev();
Name_Map name_map_S10181C11[] = {
  NSPAIR(_ZN9S10181C11C1Ev),
  NSPAIR(_ZN9S10181C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10181C11[];
extern void _ZN9S10181C11D1Ev();
extern void _ZN9S10181C11D0Ev();
extern void _ZN9S10181C113v15Ev();
extern void _ZN9S10181C113v16Ev();
extern void _ZN9S10181C113v17Ev();
extern void _ZN9S10181C113v18Ev();
extern void _ZN9S10181C113v19Ev();
extern void _ZN9S10181C113v20Ev();
extern void _ZN9S10181C113v21Ev();
extern void _ZN9S10181C113v22Ev();
extern void _ZN9S10181C113v23Ev();
extern void _ZN9S10181C113v24Ev();
extern void _ZN9S10181C113v25Ev();
extern void _ZN9S10181C113v26Ev();
extern void _ZN9S10181C113v27Ev();
extern void _ZN9S10181C113v28Ev();
extern void _ZN9S10181C113v29Ev();
extern void _ZN9S10181C113v30Ev();
extern void _ZN9S10181C113v31Ev();
extern void _ZN9S10181C113v32Ev();
extern void _ZN9S10181C113v33Ev();
extern void _ZN9S10181C113v34Ev();
extern void _ZN9S10181C113v35Ev();
extern void _ZN9S10181C113v36Ev();
extern void _ZN9S10181C113v37Ev();
extern void _ZN9S10181C113v38Ev();
static  VTBL_ENTRY vtc_S10181C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C11[0]),
  (VTBL_ENTRY)&_ZN9S10181C11D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C11D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v38Ev,
};
extern VTBL_ENTRY _ZTI9S10181C11[];
extern  VTBL_ENTRY _ZTV9S10181C11[];
Class_Descriptor cd_S10181C11 = {  "S10181C11", // class name
  0,0,//no base classes
  &(vtc_S10181C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI9S10181C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10181C11),28, //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  S10181C26  {
  virtual  ~S10181C26(); // _ZN9S10181C26D1Ev
  virtual void  v64(); // _ZN9S10181C263v64Ev
  S10181C26(); // tgen
};
//SIG(-1 S10181C26) C1{ vd v1}


 S10181C26 ::~S10181C26(){ note_dtor("S10181C26", this);}
void  S10181C26 ::v64(){vfunc_called(this, "_ZN9S10181C263v64Ev");}
S10181C26 ::S10181C26(){ note_ctor("S10181C26", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10181C26C1Ev();
extern void _ZN9S10181C26D1Ev();
Name_Map name_map_S10181C26[] = {
  NSPAIR(_ZN9S10181C26C1Ev),
  NSPAIR(_ZN9S10181C26D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10181C26[];
extern void _ZN9S10181C26D1Ev();
extern void _ZN9S10181C26D0Ev();
extern void _ZN9S10181C263v64Ev();
static  VTBL_ENTRY vtc_S10181C26[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C26[0]),
  (VTBL_ENTRY)&_ZN9S10181C26D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C26D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C263v64Ev,
};
extern VTBL_ENTRY _ZTI9S10181C26[];
extern  VTBL_ENTRY _ZTV9S10181C26[];
Class_Descriptor cd_S10181C26 = {  "S10181C26", // class name
  0,0,//no base classes
  &(vtc_S10181C26[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10181C26),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10181C26),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  S10181C27  {
  virtual  ~S10181C27(); // _ZN9S10181C27D1Ev
  virtual void  v65(); // _ZN9S10181C273v65Ev
  virtual void  v66(); // _ZN9S10181C273v66Ev
  S10181C27(); // tgen
};
//SIG(-1 S10181C27) C1{ vd v1 v2}


 S10181C27 ::~S10181C27(){ note_dtor("S10181C27", this);}
void  S10181C27 ::v65(){vfunc_called(this, "_ZN9S10181C273v65Ev");}
void  S10181C27 ::v66(){vfunc_called(this, "_ZN9S10181C273v66Ev");}
S10181C27 ::S10181C27(){ note_ctor("S10181C27", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S10181C27C1Ev();
extern void _ZN9S10181C27D1Ev();
Name_Map name_map_S10181C27[] = {
  NSPAIR(_ZN9S10181C27C1Ev),
  NSPAIR(_ZN9S10181C27D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10181C27[];
extern void _ZN9S10181C27D1Ev();
extern void _ZN9S10181C27D0Ev();
extern void _ZN9S10181C273v65Ev();
extern void _ZN9S10181C273v66Ev();
static  VTBL_ENTRY vtc_S10181C27[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C27[0]),
  (VTBL_ENTRY)&_ZN9S10181C27D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C27D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C273v65Ev,
  (VTBL_ENTRY)&_ZN9S10181C273v66Ev,
};
extern VTBL_ENTRY _ZTI9S10181C27[];
extern  VTBL_ENTRY _ZTV9S10181C27[];
Class_Descriptor cd_S10181C27 = {  "S10181C27", // class name
  0,0,//no base classes
  &(vtc_S10181C27[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S10181C27),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10181C27),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  S10181C37  {
  __tsi64 s10181c37f0[4];
  void  mf10181c37(); // _ZN9S10181C3710mf10181c37Ev
};
//SIG(-1 S10181C37) C1{ m FL[4]}


void  S10181C37 ::mf10181c37(){}

static void Test_S10181C37()
{
  {
    init_simple_test("S10181C37");
    S10181C37 lv;
    check2(sizeof(lv), 32, "sizeof(S10181C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C37)");
    check_field_offset(lv, s10181c37f0, 0, "S10181C37.s10181c37f0");
  }
}
static Arrange_To_Call_Me vS10181C37(Test_S10181C37, "S10181C37", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10181C36  {
  char s10181c36f0[2];
  void *s10181c36f1[3];
  int s10181c36f2[4];
  ::S10181C37 s10181c36f3;
  void  mf10181c36(); // _ZN9S10181C3610mf10181c36Ev
};
//SIG(-1 S10181C36) C1{ m Fc[2] Fp[3] Fi[4] FC2{ m FL[4]}}


void  S10181C36 ::mf10181c36(){}

static void Test_S10181C36()
{
  {
    init_simple_test("S10181C36");
    S10181C36 lv;
    check2(sizeof(lv), ABISELECT(80,64), "sizeof(S10181C36)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C36)");
    check_field_offset(lv, s10181c36f0, 0, "S10181C36.s10181c36f0");
    check_field_offset(lv, s10181c36f1, ABISELECT(8,4), "S10181C36.s10181c36f1");
    check_field_offset(lv, s10181c36f2, ABISELECT(32,16), "S10181C36.s10181c36f2");
    check_field_offset(lv, s10181c36f3, ABISELECT(48,32), "S10181C36.s10181c36f3");
  }
}
static Arrange_To_Call_Me vS10181C36(Test_S10181C36, "S10181C36", ABISELECT(80,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10181C35  {
  int s10181c35f0;
  void *s10181c35f1[3];
  ::S10181C36 s10181c35f2;
  void  mf10181c35(); // _ZN9S10181C3510mf10181c35Ev
  virtual  ~S10181C35(); // _ZN9S10181C35D1Ev
  S10181C35(); // tgen
};
//SIG(-1 S10181C35) C1{ vd m Fi Fp[3] FC2{ m Fc[2] Fp[3] Fi[4] FC3{ m FL[4]}}}


void  S10181C35 ::mf10181c35(){}
 S10181C35 ::~S10181C35(){ note_dtor("S10181C35", this);}
S10181C35 ::S10181C35(){ note_ctor("S10181C35", this);} // tgen

static void Test_S10181C35()
{
  extern Class_Descriptor cd_S10181C35;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S10181C35, buf);
    S10181C35 *dp, &lv = *(dp=new (buf) S10181C35());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S10181C35)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C35)");
    check_field_offset(lv, s10181c35f0, ABISELECT(8,4), "S10181C35.s10181c35f0");
    check_field_offset(lv, s10181c35f1, ABISELECT(16,8), "S10181C35.s10181c35f1");
    check_field_offset(lv, s10181c35f2, ABISELECT(40,20), "S10181C35.s10181c35f2");
    test_class_info(&lv, &cd_S10181C35);
    dp->~S10181C35();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C35(Test_S10181C35, "S10181C35", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN9S10181C35C1Ev();
extern void _ZN9S10181C35D1Ev();
Name_Map name_map_S10181C35[] = {
  NSPAIR(_ZN9S10181C35C1Ev),
  NSPAIR(_ZN9S10181C35D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10181C35[];
extern void _ZN9S10181C35D1Ev();
extern void _ZN9S10181C35D0Ev();
static  VTBL_ENTRY vtc_S10181C35[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C35[0]),
  (VTBL_ENTRY)&_ZN9S10181C35D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C35D0Ev,
};
extern VTBL_ENTRY _ZTI9S10181C35[];
extern  VTBL_ENTRY _ZTV9S10181C35[];
Class_Descriptor cd_S10181C35 = {  "S10181C35", // class name
  0,0,//no base classes
  &(vtc_S10181C35[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI9S10181C35),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10181C35),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  S10181C38  {
  ::S10181C37 s10181c38f0;
  int s10181c38f1[2];
  ::S10180C41 s10181c38f2;
  __tsi64 s10181c38f3;
  ::S10180C42 s10181c38f4;
  ::S10180C31 s10181c38f5;
  char s10181c38f6[2];
  int s10181c38f7[2];
  void *s10181c38f8[2];
  __tsi64 s10181c38f9;
  int s10181c38f10[3];
  void  mf10181c38(); // _ZN9S10181C3810mf10181c38Ev
  virtual  ~S10181C38(); // _ZN9S10181C38D1Ev
  S10181C38(); // tgen
};
//SIG(-1 S10181C38) C1{ vd m FC2{ m FL[4]} Fi[2] FC3{ m FL[3] Fi[3] FL} FL FC4{ m Fi FC5{ m Fi[4]}} FC6{ m FC7{ m Fp Fi[2] FC8{ m}} Fp[2]} Fc[2] Fi[2] Fp[2] FL Fi[3]}


void  S10181C38 ::mf10181c38(){}
 S10181C38 ::~S10181C38(){ note_dtor("S10181C38", this);}
S10181C38 ::S10181C38(){ note_ctor("S10181C38", this);} // tgen

static void Test_S10181C38()
{
  extern Class_Descriptor cd_S10181C38;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,46)];
    init_test(&cd_S10181C38, buf);
    S10181C38 *dp, &lv = *(dp=new (buf) S10181C38());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,180), "sizeof(S10181C38)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C38)");
    check_field_offset(lv, s10181c38f0, ABISELECT(8,4), "S10181C38.s10181c38f0");
    check_field_offset(lv, s10181c38f1, ABISELECT(40,36), "S10181C38.s10181c38f1");
    check_field_offset(lv, s10181c38f2, ABISELECT(48,44), "S10181C38.s10181c38f2");
    check_field_offset(lv, s10181c38f3, ABISELECT(96,88), "S10181C38.s10181c38f3");
    check_field_offset(lv, s10181c38f4, ABISELECT(104,96), "S10181C38.s10181c38f4");
    check_field_offset(lv, s10181c38f5, ABISELECT(128,116), "S10181C38.s10181c38f5");
    check_field_offset(lv, s10181c38f6, ABISELECT(168,140), "S10181C38.s10181c38f6");
    check_field_offset(lv, s10181c38f7, ABISELECT(172,144), "S10181C38.s10181c38f7");
    check_field_offset(lv, s10181c38f8, ABISELECT(184,152), "S10181C38.s10181c38f8");
    check_field_offset(lv, s10181c38f9, ABISELECT(200,160), "S10181C38.s10181c38f9");
    check_field_offset(lv, s10181c38f10, ABISELECT(208,168), "S10181C38.s10181c38f10");
    test_class_info(&lv, &cd_S10181C38);
    dp->~S10181C38();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C38(Test_S10181C38, "S10181C38", ABISELECT(224,180));

#else // __cplusplus

extern void _ZN9S10181C38C1Ev();
extern void _ZN9S10181C38D1Ev();
Name_Map name_map_S10181C38[] = {
  NSPAIR(_ZN9S10181C38C1Ev),
  NSPAIR(_ZN9S10181C38D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10181C38[];
extern void _ZN9S10181C38D1Ev();
extern void _ZN9S10181C38D0Ev();
static  VTBL_ENTRY vtc_S10181C38[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C38[0]),
  (VTBL_ENTRY)&_ZN9S10181C38D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C38D0Ev,
};
extern VTBL_ENTRY _ZTI9S10181C38[];
extern  VTBL_ENTRY _ZTV9S10181C38[];
Class_Descriptor cd_S10181C38 = {  "S10181C38", // class name
  0,0,//no base classes
  &(vtc_S10181C38[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,180), // object size
  NSPAIRA(_ZTI9S10181C38),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10181C38),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  S10181C52  {
  int s10181c52f0;
  char s10181c52f1[3];
  virtual  ~S10181C52(); // _ZN9S10181C52D1Ev
  virtual void  v84(); // _ZN9S10181C523v84Ev
  S10181C52(); // tgen
};
//SIG(-1 S10181C52) C1{ vd v1 Fi Fc[3]}


 S10181C52 ::~S10181C52(){ note_dtor("S10181C52", this);}
void  S10181C52 ::v84(){vfunc_called(this, "_ZN9S10181C523v84Ev");}
S10181C52 ::S10181C52(){ note_ctor("S10181C52", this);} // tgen

static void Test_S10181C52()
{
  extern Class_Descriptor cd_S10181C52;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S10181C52, buf);
    S10181C52 *dp, &lv = *(dp=new (buf) S10181C52());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S10181C52)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C52)");
    check_field_offset(lv, s10181c52f0, ABISELECT(8,4), "S10181C52.s10181c52f0");
    check_field_offset(lv, s10181c52f1, ABISELECT(12,8), "S10181C52.s10181c52f1");
    test_class_info(&lv, &cd_S10181C52);
    dp->~S10181C52();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C52(Test_S10181C52, "S10181C52", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S10181C52C1Ev();
extern void _ZN9S10181C52D1Ev();
Name_Map name_map_S10181C52[] = {
  NSPAIR(_ZN9S10181C52C1Ev),
  NSPAIR(_ZN9S10181C52D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10181C52[];
extern void _ZN9S10181C52D1Ev();
extern void _ZN9S10181C52D0Ev();
extern void _ZN9S10181C523v84Ev();
static  VTBL_ENTRY vtc_S10181C52[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C52[0]),
  (VTBL_ENTRY)&_ZN9S10181C52D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C52D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C523v84Ev,
};
extern VTBL_ENTRY _ZTI9S10181C52[];
extern  VTBL_ENTRY _ZTV9S10181C52[];
Class_Descriptor cd_S10181C52 = {  "S10181C52", // class name
  0,0,//no base classes
  &(vtc_S10181C52[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S10181C52),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10181C52),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  S10181C56  {
  ::S10181C37 s10181c56f0;
  ::S10180C54 s10181c56f1;
  void *s10181c56f2;
  int s10181c56f3[5];
  void  mf10181c56(); // _ZN9S10181C5610mf10181c56Ev
};
//SIG(-1 S10181C56) C1{ m FC2{ m FL[4]} FC3{ m Fp FC4{ Fi[4]}} Fp Fi[5]}


void  S10181C56 ::mf10181c56(){}

static void Test_S10181C56()
{
  {
    init_simple_test("S10181C56");
    S10181C56 lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S10181C56)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C56)");
    check_field_offset(lv, s10181c56f0, 0, "S10181C56.s10181c56f0");
    check_field_offset(lv, s10181c56f1, 32, "S10181C56.s10181c56f1");
    check_field_offset(lv, s10181c56f2, ABISELECT(56,52), "S10181C56.s10181c56f2");
    check_field_offset(lv, s10181c56f3, ABISELECT(64,56), "S10181C56.s10181c56f3");
  }
}
static Arrange_To_Call_Me vS10181C56(Test_S10181C56, "S10181C56", ABISELECT(88,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10181C55  : S10181C52 {
  ::S10181C37 s10181c55f0;
  int s10181c55f1;
  void *s10181c55f2[2];
  ::S10181C56 s10181c55f3;
  short s10181c55f4[3585];
  char s10181c55f5[4096];
  int s10181c55f6;
  virtual  ~S10181C55(); // _ZN9S10181C55D1Ev
  virtual void  v85(); // _ZN9S10181C553v85Ev
  S10181C55(); // tgen
};
//SIG(-1 S10181C55) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 FC3{ m FL[4]} Fi Fp[2] FC4{ m FC3 FC5{ m Fp FC6{ Fi[4]}} Fp Fi[5]} Fs[3585] Fc[4096] Fi}


 S10181C55 ::~S10181C55(){ note_dtor("S10181C55", this);}
void  S10181C55 ::v85(){vfunc_called(this, "_ZN9S10181C553v85Ev");}
S10181C55 ::S10181C55(){ note_ctor("S10181C55", this);} // tgen

static void Test_S10181C55()
{
  extern Class_Descriptor cd_S10181C55;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1430,2852)];
    init_test(&cd_S10181C55, buf);
    S10181C55 *dp, &lv = *(dp=new (buf) S10181C55());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11432,11404), "sizeof(S10181C55)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C55)");
    check_base_class_offset(lv, (S10181C52*), 0, "S10181C55");
    check_field_offset(lv, s10181c55f0, ABISELECT(16,12), "S10181C55.s10181c55f0");
    check_field_offset(lv, s10181c55f1, ABISELECT(48,44), "S10181C55.s10181c55f1");
    check_field_offset(lv, s10181c55f2, ABISELECT(56,48), "S10181C55.s10181c55f2");
    check_field_offset(lv, s10181c55f3, ABISELECT(72,56), "S10181C55.s10181c55f3");
    check_field_offset(lv, s10181c55f4, ABISELECT(160,132), "S10181C55.s10181c55f4");
    check_field_offset(lv, s10181c55f5, ABISELECT(7330,7302), "S10181C55.s10181c55f5");
    check_field_offset(lv, s10181c55f6, ABISELECT(11428,11400), "S10181C55.s10181c55f6");
    test_class_info(&lv, &cd_S10181C55);
    dp->~S10181C55();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C55(Test_S10181C55, "S10181C55", ABISELECT(11432,11404));

#else // __cplusplus

extern void _ZN9S10181C55C1Ev();
extern void _ZN9S10181C55D1Ev();
Name_Map name_map_S10181C55[] = {
  NSPAIR(_ZN9S10181C55C1Ev),
  NSPAIR(_ZN9S10181C55D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10181C52;
extern VTBL_ENTRY _ZTI9S10181C52[];
extern  VTBL_ENTRY _ZTV9S10181C52[];
static Base_Class bases_S10181C55[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10181C52,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10181C55[];
extern void _ZN9S10181C55D1Ev();
extern void _ZN9S10181C55D0Ev();
extern void _ZN9S10181C523v84Ev();
extern void _ZN9S10181C553v85Ev();
static  VTBL_ENTRY vtc_S10181C55[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C55[0]),
  (VTBL_ENTRY)&_ZN9S10181C55D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C55D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C523v84Ev,
  (VTBL_ENTRY)&_ZN9S10181C553v85Ev,
};
extern VTBL_ENTRY _ZTI9S10181C55[];
extern  VTBL_ENTRY _ZTV9S10181C55[];
Class_Descriptor cd_S10181C55 = {  "S10181C55", // class name
  bases_S10181C55, 1,
  &(vtc_S10181C55[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(11432,11404), // object size
  NSPAIRA(_ZTI9S10181C55),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10181C55),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  S10181C51  : S10181C52 {
  void *s10181c51f0[4];
  __tsi64 s10181c51f1;
  int s10181c51f2;
  ::S10181C37 s10181c51f3;
  ::S10180C54 s10181c51f4;
  short s10181c51f5[1024];
  int s10181c51f6[4];
  __tsi64 s10181c51f7[2];
  int s10181c51f8;
  ::S10181C55 s10181c51f9;
  virtual  ~S10181C51(); // _ZN9S10181C51D1Ev
  virtual void  v83(); // _ZN9S10181C513v83Ev
  S10181C51(); // tgen
};
//SIG(-1 S10181C51) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 Fp[4] FL Fi FC3{ m FL[4]} FC4{ m Fp FC5{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC6{ BC2 vd v3 FC3 Fi Fp[2] FC7{ m FC3 FC4 Fp Fi[5]} Fs[3585] Fc[4096] Fi}}


 S10181C51 ::~S10181C51(){ note_dtor("S10181C51", this);}
void  S10181C51 ::v83(){vfunc_called(this, "_ZN9S10181C513v83Ev");}
S10181C51 ::S10181C51(){ note_ctor("S10181C51", this);} // tgen

static void Test_S10181C51()
{
  extern Class_Descriptor cd_S10181C51;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1706,3396)];
    init_test(&cd_S10181C51, buf);
    S10181C51 *dp, &lv = *(dp=new (buf) S10181C51());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13640,13580), "sizeof(S10181C51)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C51)");
    check_base_class_offset(lv, (S10181C52*), 0, "S10181C51");
    check_field_offset(lv, s10181c51f0, ABISELECT(16,12), "S10181C51.s10181c51f0");
    check_field_offset(lv, s10181c51f1, ABISELECT(48,28), "S10181C51.s10181c51f1");
    check_field_offset(lv, s10181c51f2, ABISELECT(56,36), "S10181C51.s10181c51f2");
    check_field_offset(lv, s10181c51f3, ABISELECT(64,40), "S10181C51.s10181c51f3");
    check_field_offset(lv, s10181c51f4, ABISELECT(96,72), "S10181C51.s10181c51f4");
    check_field_offset(lv, s10181c51f5, ABISELECT(120,92), "S10181C51.s10181c51f5");
    check_field_offset(lv, s10181c51f6, ABISELECT(2168,2140), "S10181C51.s10181c51f6");
    check_field_offset(lv, s10181c51f7, ABISELECT(2184,2156), "S10181C51.s10181c51f7");
    check_field_offset(lv, s10181c51f8, ABISELECT(2200,2172), "S10181C51.s10181c51f8");
    check_field_offset(lv, s10181c51f9, ABISELECT(2208,2176), "S10181C51.s10181c51f9");
    test_class_info(&lv, &cd_S10181C51);
    dp->~S10181C51();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C51(Test_S10181C51, "S10181C51", ABISELECT(13640,13580));

#else // __cplusplus

extern void _ZN9S10181C51C1Ev();
extern void _ZN9S10181C51D1Ev();
Name_Map name_map_S10181C51[] = {
  NSPAIR(_ZN9S10181C51C1Ev),
  NSPAIR(_ZN9S10181C51D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10181C52;
extern VTBL_ENTRY _ZTI9S10181C52[];
extern  VTBL_ENTRY _ZTV9S10181C52[];
static Base_Class bases_S10181C51[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10181C52,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10181C51[];
extern void _ZN9S10181C51D1Ev();
extern void _ZN9S10181C51D0Ev();
extern void _ZN9S10181C523v84Ev();
extern void _ZN9S10181C513v83Ev();
static  VTBL_ENTRY vtc_S10181C51[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C51[0]),
  (VTBL_ENTRY)&_ZN9S10181C51D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C51D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C523v84Ev,
  (VTBL_ENTRY)&_ZN9S10181C513v83Ev,
};
extern VTBL_ENTRY _ZTI9S10181C51[];
extern  VTBL_ENTRY _ZTV9S10181C51[];
Class_Descriptor cd_S10181C51 = {  "S10181C51", // class name
  bases_S10181C51, 1,
  &(vtc_S10181C51[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13640,13580), // object size
  NSPAIRA(_ZTI9S10181C51),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10181C51),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  S10181C59  {
  ::S10181C37 s10181c59f0;
  ::S10180C54 s10181c59f1;
  void *s10181c59f2;
  int s10181c59f3[4];
  void  mf10181c59(); // _ZN9S10181C5910mf10181c59Ev
};
//SIG(-1 S10181C59) C1{ m FC2{ m FL[4]} FC3{ m Fp FC4{ Fi[4]}} Fp Fi[4]}


void  S10181C59 ::mf10181c59(){}

static void Test_S10181C59()
{
  {
    init_simple_test("S10181C59");
    S10181C59 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S10181C59)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C59)");
    check_field_offset(lv, s10181c59f0, 0, "S10181C59.s10181c59f0");
    check_field_offset(lv, s10181c59f1, 32, "S10181C59.s10181c59f1");
    check_field_offset(lv, s10181c59f2, ABISELECT(56,52), "S10181C59.s10181c59f2");
    check_field_offset(lv, s10181c59f3, ABISELECT(64,56), "S10181C59.s10181c59f3");
  }
}
static Arrange_To_Call_Me vS10181C59(Test_S10181C59, "S10181C59", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10181C57  : S10181C52 {
  void *s10181c57f0[2];
  __tsi64 s10181c57f1;
  int s10181c57f2[4];
  ::S10180C118 s10181c57f3;
  ::S10181C37 s10181c57f4;
  ::S10181C59 s10181c57f5;
  ::S10180C114 s10181c57f6;
  virtual  ~S10181C57(); // _ZN9S10181C57D1Ev
  virtual void  v86(); // _ZN9S10181C573v86Ev
  S10181C57(); // tgen
};
//SIG(-1 S10181C57) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 Fp[2] FL Fi[4] FC3{ m Fi[2]} FC4{ m FL[4]} FC5{ m FC4 FC6{ m Fp FC7{ Fi[4]}} Fp Fi[4]} FC8{ m Fp}}


 S10181C57 ::~S10181C57(){ note_dtor("S10181C57", this);}
void  S10181C57 ::v86(){vfunc_called(this, "_ZN9S10181C573v86Ev");}
S10181C57 ::S10181C57(){ note_ctor("S10181C57", this);} // tgen

static void Test_S10181C57()
{
  extern Class_Descriptor cd_S10181C57;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,41)];
    init_test(&cd_S10181C57, buf);
    S10181C57 *dp, &lv = *(dp=new (buf) S10181C57());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,160), "sizeof(S10181C57)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C57)");
    check_base_class_offset(lv, (S10181C52*), 0, "S10181C57");
    check_field_offset(lv, s10181c57f0, ABISELECT(16,12), "S10181C57.s10181c57f0");
    check_field_offset(lv, s10181c57f1, ABISELECT(32,20), "S10181C57.s10181c57f1");
    check_field_offset(lv, s10181c57f2, ABISELECT(40,28), "S10181C57.s10181c57f2");
    check_field_offset(lv, s10181c57f3, ABISELECT(56,44), "S10181C57.s10181c57f3");
    check_field_offset(lv, s10181c57f4, ABISELECT(64,52), "S10181C57.s10181c57f4");
    check_field_offset(lv, s10181c57f5, ABISELECT(96,84), "S10181C57.s10181c57f5");
    check_field_offset(lv, s10181c57f6, ABISELECT(176,156), "S10181C57.s10181c57f6");
    test_class_info(&lv, &cd_S10181C57);
    dp->~S10181C57();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C57(Test_S10181C57, "S10181C57", ABISELECT(184,160));

#else // __cplusplus

extern void _ZN9S10181C57C1Ev();
extern void _ZN9S10181C57D1Ev();
Name_Map name_map_S10181C57[] = {
  NSPAIR(_ZN9S10181C57C1Ev),
  NSPAIR(_ZN9S10181C57D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10181C52;
extern VTBL_ENTRY _ZTI9S10181C52[];
extern  VTBL_ENTRY _ZTV9S10181C52[];
static Base_Class bases_S10181C57[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10181C52,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10181C57[];
extern void _ZN9S10181C57D1Ev();
extern void _ZN9S10181C57D0Ev();
extern void _ZN9S10181C523v84Ev();
extern void _ZN9S10181C573v86Ev();
static  VTBL_ENTRY vtc_S10181C57[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C57[0]),
  (VTBL_ENTRY)&_ZN9S10181C57D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C57D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C523v84Ev,
  (VTBL_ENTRY)&_ZN9S10181C573v86Ev,
};
extern VTBL_ENTRY _ZTI9S10181C57[];
extern  VTBL_ENTRY _ZTV9S10181C57[];
Class_Descriptor cd_S10181C57 = {  "S10181C57", // class name
  bases_S10181C57, 1,
  &(vtc_S10181C57[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,160), // object size
  NSPAIRA(_ZTI9S10181C57),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10181C57),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  S10181C46  {
  ::S10180C48 s10181c46f0;
  ::S10180C50 s10181c46f1;
  ::S10181C51 s10181c46f2;
  ::S10181C57 s10181c46f3;
  ::S10181C37 s10181c46f4;
  ::S10181C37 s10181c46f5;
  __tsi64 s10181c46f6;
  int s10181c46f7[5];
  void  mf10181c46(); // _ZN9S10181C4610mf10181c46Ev
  virtual  ~S10181C46(); // _ZN9S10181C46D1Ev
  S10181C46(); // tgen
};
//SIG(-1 S10181C46) C1{ vd m FC2{ vd m FC3{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC4{ BC5{ vd v7 v8 v9 v10 v11 v12 Fi Fp Fc} vd v1 v2 v3 v4 v5 v6 Fp} FC6{ BC7{ vd v14 Fi Fc[3]} vd v13 Fp[4] FL Fi FC8{ m FL[4]} FC9{ m Fp FC10{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC11{ BC7 vd v15 FC8 Fi Fp[2] FC12{ m FC8 FC9 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC13{ BC7 vd v16 Fp[2] FL Fi[4] FC14{ m Fi[2]} FC8 FC15{ m FC8 FC9 Fp Fi[4]} FC16{ m Fp}} FC8 FC8 FL Fi[5]}


void  S10181C46 ::mf10181c46(){}
 S10181C46 ::~S10181C46(){ note_dtor("S10181C46", this);}
S10181C46 ::S10181C46(){ note_ctor("S10181C46", this);} // tgen

static void Test_S10181C46()
{
  extern Class_Descriptor cd_S10181C46;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1763,3487)];
    init_test(&cd_S10181C46, buf);
    S10181C46 *dp, &lv = *(dp=new (buf) S10181C46());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14096,13944), "sizeof(S10181C46)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C46)");
    check_field_offset(lv, s10181c46f0, ABISELECT(8,4), "S10181C46.s10181c46f0");
    check_field_offset(lv, s10181c46f1, ABISELECT(136,92), "S10181C46.s10181c46f1");
    check_field_offset(lv, s10181c46f2, ABISELECT(176,112), "S10181C46.s10181c46f2");
    check_field_offset(lv, s10181c46f3, ABISELECT(13816,13692), "S10181C46.s10181c46f3");
    check_field_offset(lv, s10181c46f4, ABISELECT(14000,13852), "S10181C46.s10181c46f4");
    check_field_offset(lv, s10181c46f5, ABISELECT(14032,13884), "S10181C46.s10181c46f5");
    check_field_offset(lv, s10181c46f6, ABISELECT(14064,13916), "S10181C46.s10181c46f6");
    check_field_offset(lv, s10181c46f7, ABISELECT(14072,13924), "S10181C46.s10181c46f7");
    test_class_info(&lv, &cd_S10181C46);
    dp->~S10181C46();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C46(Test_S10181C46, "S10181C46", ABISELECT(14096,13944));

#else // __cplusplus

extern void _ZN9S10181C46C1Ev();
extern void _ZN9S10181C46D1Ev();
Name_Map name_map_S10181C46[] = {
  NSPAIR(_ZN9S10181C46C1Ev),
  NSPAIR(_ZN9S10181C46D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10181C46[];
extern void _ZN9S10181C46D1Ev();
extern void _ZN9S10181C46D0Ev();
static  VTBL_ENTRY vtc_S10181C46[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C46[0]),
  (VTBL_ENTRY)&_ZN9S10181C46D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C46D0Ev,
};
extern VTBL_ENTRY _ZTI9S10181C46[];
extern  VTBL_ENTRY _ZTV9S10181C46[];
Class_Descriptor cd_S10181C46 = {  "S10181C46", // class name
  0,0,//no base classes
  &(vtc_S10181C46[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(14096,13944), // object size
  NSPAIRA(_ZTI9S10181C46),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10181C46),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  S10181C43  : S10180C17 , S10181C24 {
  int s10181c43f0;
  ::S10180C45 s10181c43f1;
  ::S10180C46 s10181c43f2;
  void *s10181c43f3;
  ::S10181C46 s10181c43f4;
  __tsi64 s10181c43f5;
  ::S10180C62 s10181c43f6;
  char s10181c43f7[128];
  ::S10180C169 s10181c43f8;
  ::S10180C31 s10181c43f9;
  virtual  ~S10181C43(); // _ZN9S10181C43D1Ev
  virtual void  v70(); // _ZN9S10181C433v70Ev
  S10181C43(); // tgen
};
//SIG(-1 S10181C43) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v2} vd v1 Fi FC7{ m Fc[2]} FC8{ Fp[2]} Fp FC9{ vd m FC10{ vd m FC11{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC12{ BC13{ vd v9 v10 v11 v12 v13 v14 Fi Fp Fc} vd v3 v4 v5 v6 v7 v8 Fp} FC14{ BC15{ vd v16 Fi Fc[3]} vd v15 Fp[4] FL Fi FC16{ m FL[4]} FC17{ m Fp FC18{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC19{ BC15 vd v17 FC16 Fi Fp[2] FC20{ m FC16 FC17 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC21{ BC15 vd v18 Fp[2] FL Fi[4] FC22{ m Fi[2]} FC16 FC23{ m FC16 FC17 Fp Fi[4]} FC24{ m Fp}} FC16 FC16 FL Fi[5]} FL FC25{ m FC26{ m FL[3] Fi[3] FL} FC27{ m Fi} Fi} Fc[128] FC28{ m Fi[2]} FC29{ m FC30{ m Fp Fi[2] FC5} Fp[2]}}


 S10181C43 ::~S10181C43(){ note_dtor("S10181C43", this);}
void  S10181C43 ::v70(){vfunc_called(this, "_ZN9S10181C433v70Ev");}
S10181C43 ::S10181C43(){ note_ctor("S10181C43", this);} // tgen

static void Test_S10181C43()
{
  extern Class_Descriptor cd_S10181C43;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1804,3556)];
    init_test(&cd_S10181C43, buf);
    S10181C43 *dp, &lv = *(dp=new (buf) S10181C43());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14424,14220), "sizeof(S10181C43)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C43)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10181C43");
    check_base_class_offset(lv, (S10181C24*), ABISELECT(48,32), "S10181C43");
    check_field_offset(lv, s10181c43f0, ABISELECT(56,36), "S10181C43.s10181c43f0");
    check_field_offset(lv, s10181c43f1, ABISELECT(60,40), "S10181C43.s10181c43f1");
    check_field_offset(lv, s10181c43f2, ABISELECT(64,44), "S10181C43.s10181c43f2");
    check_field_offset(lv, s10181c43f3, ABISELECT(80,52), "S10181C43.s10181c43f3");
    check_field_offset(lv, s10181c43f4, ABISELECT(88,56), "S10181C43.s10181c43f4");
    check_field_offset(lv, s10181c43f5, ABISELECT(14184,14000), "S10181C43.s10181c43f5");
    check_field_offset(lv, s10181c43f6, ABISELECT(14192,14008), "S10181C43.s10181c43f6");
    check_field_offset(lv, s10181c43f7, ABISELECT(14248,14060), "S10181C43.s10181c43f7");
    check_field_offset(lv, s10181c43f8, ABISELECT(14376,14188), "S10181C43.s10181c43f8");
    check_field_offset(lv, s10181c43f9, ABISELECT(14384,14196), "S10181C43.s10181c43f9");
    test_class_info(&lv, &cd_S10181C43);
    dp->~S10181C43();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C43(Test_S10181C43, "S10181C43", ABISELECT(14424,14220));

#else // __cplusplus

extern void _ZN9S10181C43C1Ev();
extern void _ZN9S10181C43D1Ev();
Name_Map name_map_S10181C43[] = {
  NSPAIR(_ZN9S10181C43C1Ev),
  NSPAIR(_ZN9S10181C43D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10181C24;
extern VTBL_ENTRY _ZTI9S10181C24[];
extern  VTBL_ENTRY _ZTV9S10181C24[];
static Base_Class bases_S10181C43[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10181C24,    ABISELECT(48,32), //bcp->offset
    5, //bcp->virtual_function_table_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 _ZTI9S10181C43[];
extern void _ZN9S10181C43D1Ev();
extern void _ZN9S10181C43D0Ev();
extern void _ZN9S10181C433v70Ev();
extern void ABISELECT(_ZThn48_N9S10181C43D1Ev,_ZThn32_N9S10181C43D1Ev)();
extern void ABISELECT(_ZThn48_N9S10181C43D0Ev,_ZThn32_N9S10181C43D0Ev)();
extern void _ZN9S10181C243v41Ev();
static  VTBL_ENTRY vtc_S10181C43[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C43[0]),
  (VTBL_ENTRY)&_ZN9S10181C43D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C43D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C433v70Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10181C43[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10181C43D1Ev,_ZThn32_N9S10181C43D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10181C43D0Ev,_ZThn32_N9S10181C43D0Ev),
  (VTBL_ENTRY)&_ZN9S10181C243v41Ev,
};
extern VTBL_ENTRY _ZTI9S10181C43[];
extern  VTBL_ENTRY _ZTV9S10181C43[];
Class_Descriptor cd_S10181C43 = {  "S10181C43", // class name
  bases_S10181C43, 2,
  &(vtc_S10181C43[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(14424,14220), // object size
  NSPAIRA(_ZTI9S10181C43),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10181C43),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  S10181C25  : S10180C17 , S10181C2 , S10181C11 , S10181C26 , S10181C27 {
  int s10181c25f0;
  ::S10180C169 s10181c25f1;
  ::S10180C169 s10181c25f2;
  ::S10180C169 s10181c25f3;
  ::S10180C29 s10181c25f4;
  ::S10180C34 s10181c25f5;
  ::S10181C35 s10181c25f6;
  ::S10181C38 s10181c25f7;
  int s10181c25f8;
  void *s10181c25f9;
  ::S10181C43 s10181c25f10;
  int s10181c25f11[3];
  ::S10180C64 s10181c25f12;
  ::S10180C65 s10181c25f13;
  ::S10180C66 s10181c25f14;
  ::S10180C87 s10181c25f15;
  __tsi64 s10181c25f16;
  ::S10180C106 s10181c25f17;
  ::S10180C86 s10181c25f18;
  ::S10180C68 s10181c25f19;
  ::S10180C31 s10181c25f20;
  char s10181c25f21;
  virtual  ~S10181C25(); // _ZN9S10181C25D1Ev
  virtual void  v42(); // _ZN9S10181C253v42Ev
  virtual void  v43(); // _ZN9S10181C253v43Ev
  virtual void  v44(); // _ZN9S10181C253v44Ev
  virtual void  v45(); // _ZN9S10181C253v45Ev
  virtual void  v46(); // _ZN9S10181C253v46Ev
  virtual void  v47(); // _ZN9S10181C253v47Ev
  virtual void  v48(); // _ZN9S10181C253v48Ev
  virtual void  v49(); // _ZN9S10181C253v49Ev
  virtual void  v50(); // _ZN9S10181C253v50Ev
  virtual void  v51(); // _ZN9S10181C253v51Ev
  virtual void  v52(); // _ZN9S10181C253v52Ev
  virtual void  v53(); // _ZN9S10181C253v53Ev
  virtual void  v54(); // _ZN9S10181C253v54Ev
  virtual void  v55(); // _ZN9S10181C253v55Ev
  virtual void  v56(); // _ZN9S10181C253v56Ev
  virtual void  v57(); // _ZN9S10181C253v57Ev
  virtual void  v58(); // _ZN9S10181C253v58Ev
  virtual void  v59(); // _ZN9S10181C253v59Ev
  virtual void  v60(); // _ZN9S10181C253v60Ev
  virtual void  v61(); // _ZN9S10181C253v61Ev
  virtual void  v62(); // _ZN9S10181C253v62Ev
  virtual void  v63(); // _ZN9S10181C253v63Ev
  S10181C25(); // tgen
};
//SIG(-1 S10181C25) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v23} BC7{ vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 Fp FC8{ m FC9{ m Fp Fi FC4} Fi} FC10{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC11{ vd v48} BC12{ vd v49 v50} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi FC13{ m Fi[2]} FC13 FC13 FC14{ BC2 vd Fi Fp FC8 FL FC15{ m Fi[2]} Fi Fc Fi FC16{ m FC17{ m Fp Fi[2] FC5} Fp[2]}} FC18{ BC19{ vd 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 FC8 FC10} vd v51 v52 v53} FC20{ vd m Fi Fp[3] FC21{ m Fc[2] Fp[3] Fi[4] FC22{ m FL[4]}}} FC23{ vd m FC22 Fi[2] FC24{ m FL[3] Fi[3] FL} FL FC25{ m Fi FC26{ m Fi[4]}} FC16 Fc[2] Fi[2] Fp[2] FL Fi[3]} Fi Fp FC27{ BC2 BC28{ vd v79} vd v78 Fi FC29{ m Fc[2]} FC30{ Fp[2]} Fp FC31{ vd m FC32{ vd m FC33{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC34{ BC35{ vd v86 v87 v88 v89 v90 v91 Fi Fp Fc} vd v80 v81 v82 v83 v84 v85 Fp} FC36{ BC37{ vd v93 Fi Fc[3]} vd v92 Fp[4] FL Fi FC22 FC38{ m Fp FC39{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC40{ BC37 vd v94 FC22 Fi Fp[2] FC41{ m FC22 FC38 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC42{ BC37 vd v95 Fp[2] FL Fi[4] FC43{ m Fi[2]} FC22 FC44{ m FC22 FC38 Fp Fi[4]} FC45{ m Fp}} FC22 FC22 FL Fi[5]} FL FC46{ m FC24 FC47{ m Fi} Fi} Fc[128] FC13 FC16} Fi[3] FC48{ m Fp Fi[2]} FC49{ m Fc[11] Fi[2]} FC50{ BC51{} FL Fi} FC52{ BC53{ BC2 vd v98 v99 v100 v101 FC54{ m Fp FC8 FC9 FC9 Fi[3] FC55{ m FC56{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v96 v97} FL FC57{ BC53 v102} FC58{ BC53 v103} FC59{ BC53 v104 v105} FC16 Fc}


 S10181C25 ::~S10181C25(){ note_dtor("S10181C25", this);}
void  S10181C25 ::v42(){vfunc_called(this, "_ZN9S10181C253v42Ev");}
void  S10181C25 ::v43(){vfunc_called(this, "_ZN9S10181C253v43Ev");}
void  S10181C25 ::v44(){vfunc_called(this, "_ZN9S10181C253v44Ev");}
void  S10181C25 ::v45(){vfunc_called(this, "_ZN9S10181C253v45Ev");}
void  S10181C25 ::v46(){vfunc_called(this, "_ZN9S10181C253v46Ev");}
void  S10181C25 ::v47(){vfunc_called(this, "_ZN9S10181C253v47Ev");}
void  S10181C25 ::v48(){vfunc_called(this, "_ZN9S10181C253v48Ev");}
void  S10181C25 ::v49(){vfunc_called(this, "_ZN9S10181C253v49Ev");}
void  S10181C25 ::v50(){vfunc_called(this, "_ZN9S10181C253v50Ev");}
void  S10181C25 ::v51(){vfunc_called(this, "_ZN9S10181C253v51Ev");}
void  S10181C25 ::v52(){vfunc_called(this, "_ZN9S10181C253v52Ev");}
void  S10181C25 ::v53(){vfunc_called(this, "_ZN9S10181C253v53Ev");}
void  S10181C25 ::v54(){vfunc_called(this, "_ZN9S10181C253v54Ev");}
void  S10181C25 ::v55(){vfunc_called(this, "_ZN9S10181C253v55Ev");}
void  S10181C25 ::v56(){vfunc_called(this, "_ZN9S10181C253v56Ev");}
void  S10181C25 ::v57(){vfunc_called(this, "_ZN9S10181C253v57Ev");}
void  S10181C25 ::v58(){vfunc_called(this, "_ZN9S10181C253v58Ev");}
void  S10181C25 ::v59(){vfunc_called(this, "_ZN9S10181C253v59Ev");}
void  S10181C25 ::v60(){vfunc_called(this, "_ZN9S10181C253v60Ev");}
void  S10181C25 ::v61(){vfunc_called(this, "_ZN9S10181C253v61Ev");}
void  S10181C25 ::v62(){vfunc_called(this, "_ZN9S10181C253v62Ev");}
void  S10181C25 ::v63(){vfunc_called(this, "_ZN9S10181C253v63Ev");}
S10181C25 ::S10181C25(){ note_ctor("S10181C25", this);} // tgen

static void Test_S10181C25()
{
  extern Class_Descriptor cd_S10181C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2037,3888)];
    init_test(&cd_S10181C25, buf);
    S10181C25 *dp, &lv = *(dp=new (buf) S10181C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16288,15548), "sizeof(S10181C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C25)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10181C25");
    check_base_class_offset(lv, (S10181C2*), ABISELECT(48,32), "S10181C25");
    check_base_class_offset(lv, (S10181C11*), ABISELECT(56,36), "S10181C25");
    check_base_class_offset(lv, (S10181C26*), ABISELECT(152,100), "S10181C25");
    check_base_class_offset(lv, (S10181C27*), ABISELECT(160,104), "S10181C25");
    check_field_offset(lv, s10181c25f0, ABISELECT(168,108), "S10181C25.s10181c25f0");
    check_field_offset(lv, s10181c25f1, ABISELECT(172,112), "S10181C25.s10181c25f1");
    check_field_offset(lv, s10181c25f2, ABISELECT(180,120), "S10181C25.s10181c25f2");
    check_field_offset(lv, s10181c25f3, ABISELECT(188,128), "S10181C25.s10181c25f3");
    check_field_offset(lv, s10181c25f4, ABISELECT(200,136), "S10181C25.s10181c25f4");
    check_field_offset(lv, s10181c25f5, ABISELECT(352,244), "S10181C25.s10181c25f5");
    check_field_offset(lv, s10181c25f6, ABISELECT(448,308), "S10181C25.s10181c25f6");
    check_field_offset(lv, s10181c25f7, ABISELECT(568,392), "S10181C25.s10181c25f7");
    check_field_offset(lv, s10181c25f8, ABISELECT(792,572), "S10181C25.s10181c25f8");
    check_field_offset(lv, s10181c25f9, ABISELECT(800,576), "S10181C25.s10181c25f9");
    check_field_offset(lv, s10181c25f10, ABISELECT(808,580), "S10181C25.s10181c25f10");
    check_field_offset(lv, s10181c25f11, ABISELECT(15232,14800), "S10181C25.s10181c25f11");
    check_field_offset(lv, s10181c25f12, ABISELECT(15248,14812), "S10181C25.s10181c25f12");
    check_field_offset(lv, s10181c25f13, ABISELECT(15264,14824), "S10181C25.s10181c25f13");
    check_field_offset(lv, s10181c25f14, ABISELECT(15288,14844), "S10181C25.s10181c25f14");
    check_field_offset(lv, s10181c25f15, ABISELECT(15304,14856), "S10181C25.s10181c25f15");
    check_field_offset(lv, s10181c25f16, ABISELECT(15536,15020), "S10181C25.s10181c25f16");
    check_field_offset(lv, s10181c25f17, ABISELECT(15544,15028), "S10181C25.s10181c25f17");
    check_field_offset(lv, s10181c25f18, ABISELECT(15776,15192), "S10181C25.s10181c25f18");
    check_field_offset(lv, s10181c25f19, ABISELECT(16008,15356), "S10181C25.s10181c25f19");
    check_field_offset(lv, s10181c25f20, ABISELECT(16240,15520), "S10181C25.s10181c25f20");
    check_field_offset(lv, s10181c25f21, ABISELECT(16280,15544), "S10181C25.s10181c25f21");
    test_class_info(&lv, &cd_S10181C25);
    dp->~S10181C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C25(Test_S10181C25, "S10181C25", ABISELECT(16288,15548));

#else // __cplusplus

extern void _ZN9S10181C25C1Ev();
extern void _ZN9S10181C25D1Ev();
Name_Map name_map_S10181C25[] = {
  NSPAIR(_ZN9S10181C25C1Ev),
  NSPAIR(_ZN9S10181C25D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10181C2;
extern VTBL_ENTRY _ZTI8S10181C2[];
extern  VTBL_ENTRY _ZTV8S10181C2[];
extern Class_Descriptor cd_S10181C11;
extern VTBL_ENTRY _ZTI9S10181C11[];
extern  VTBL_ENTRY _ZTV9S10181C11[];
extern Class_Descriptor cd_S10181C26;
extern VTBL_ENTRY _ZTI9S10181C26[];
extern  VTBL_ENTRY _ZTV9S10181C26[];
extern Class_Descriptor cd_S10181C27;
extern VTBL_ENTRY _ZTI9S10181C27[];
extern  VTBL_ENTRY _ZTV9S10181C27[];
static Base_Class bases_S10181C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10181C2,    ABISELECT(48,32), //bcp->offset
    26, //bcp->virtual_function_table_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},
  {&cd_S10181C11,    ABISELECT(56,36), //bcp->offset
    31, //bcp->virtual_function_table_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},
  {&cd_S10181C26,    ABISELECT(152,100), //bcp->offset
    59, //bcp->virtual_function_table_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},
  {&cd_S10181C27,    ABISELECT(160,104), //bcp->offset
    64, //bcp->virtual_function_table_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 _ZTI9S10181C25[];
extern void _ZN9S10181C25D1Ev();
extern void _ZN9S10181C25D0Ev();
extern void _ZN9S10181C253v42Ev();
extern void _ZN9S10181C253v43Ev();
extern void _ZN9S10181C253v44Ev();
extern void _ZN9S10181C253v45Ev();
extern void _ZN9S10181C253v46Ev();
extern void _ZN9S10181C253v47Ev();
extern void _ZN9S10181C253v48Ev();
extern void _ZN9S10181C253v49Ev();
extern void _ZN9S10181C253v50Ev();
extern void _ZN9S10181C253v51Ev();
extern void _ZN9S10181C253v52Ev();
extern void _ZN9S10181C253v53Ev();
extern void _ZN9S10181C253v54Ev();
extern void _ZN9S10181C253v55Ev();
extern void _ZN9S10181C253v56Ev();
extern void _ZN9S10181C253v57Ev();
extern void _ZN9S10181C253v58Ev();
extern void _ZN9S10181C253v59Ev();
extern void _ZN9S10181C253v60Ev();
extern void _ZN9S10181C253v61Ev();
extern void _ZN9S10181C253v62Ev();
extern void _ZN9S10181C253v63Ev();
extern void ABISELECT(_ZThn48_N9S10181C25D1Ev,_ZThn32_N9S10181C25D1Ev)();
extern void ABISELECT(_ZThn48_N9S10181C25D0Ev,_ZThn32_N9S10181C25D0Ev)();
extern void _ZN8S10181C22v7Ev();
extern void ABISELECT(_ZThn56_N9S10181C25D1Ev,_ZThn36_N9S10181C25D1Ev)();
extern void ABISELECT(_ZThn56_N9S10181C25D0Ev,_ZThn36_N9S10181C25D0Ev)();
extern void _ZN9S10181C113v15Ev();
extern void _ZN9S10181C113v16Ev();
extern void _ZN9S10181C113v17Ev();
extern void _ZN9S10181C113v18Ev();
extern void _ZN9S10181C113v19Ev();
extern void _ZN9S10181C113v20Ev();
extern void _ZN9S10181C113v21Ev();
extern void _ZN9S10181C113v22Ev();
extern void _ZN9S10181C113v23Ev();
extern void _ZN9S10181C113v24Ev();
extern void _ZN9S10181C113v25Ev();
extern void _ZN9S10181C113v26Ev();
extern void _ZN9S10181C113v27Ev();
extern void _ZN9S10181C113v28Ev();
extern void _ZN9S10181C113v29Ev();
extern void _ZN9S10181C113v30Ev();
extern void _ZN9S10181C113v31Ev();
extern void _ZN9S10181C113v32Ev();
extern void _ZN9S10181C113v33Ev();
extern void _ZN9S10181C113v34Ev();
extern void _ZN9S10181C113v35Ev();
extern void _ZN9S10181C113v36Ev();
extern void _ZN9S10181C113v37Ev();
extern void _ZN9S10181C113v38Ev();
extern void ABISELECT(_ZThn152_N9S10181C25D1Ev,_ZThn100_N9S10181C25D1Ev)();
extern void ABISELECT(_ZThn152_N9S10181C25D0Ev,_ZThn100_N9S10181C25D0Ev)();
extern void _ZN9S10181C263v64Ev();
extern void ABISELECT(_ZThn160_N9S10181C25D1Ev,_ZThn104_N9S10181C25D1Ev)();
extern void ABISELECT(_ZThn160_N9S10181C25D0Ev,_ZThn104_N9S10181C25D0Ev)();
extern void _ZN9S10181C273v65Ev();
extern void _ZN9S10181C273v66Ev();
static  VTBL_ENTRY vtc_S10181C25[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C25[0]),
  (VTBL_ENTRY)&_ZN9S10181C25D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C25D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v42Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v43Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v44Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v45Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v46Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v47Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v48Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v49Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v50Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v51Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v52Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v53Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v54Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v55Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v56Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v57Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v58Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v59Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v60Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v61Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v62Ev,
  (VTBL_ENTRY)&_ZN9S10181C253v63Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S10181C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10181C25D1Ev,_ZThn32_N9S10181C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S10181C25D0Ev,_ZThn32_N9S10181C25D0Ev),
  (VTBL_ENTRY)&_ZN8S10181C22v7Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S10181C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10181C25D1Ev,_ZThn36_N9S10181C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10181C25D0Ev,_ZThn36_N9S10181C25D0Ev),
  (VTBL_ENTRY)&_ZN9S10181C113v15Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v16Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v17Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v18Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v19Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v20Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v21Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v22Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v23Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v24Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v25Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v26Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v27Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v28Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v29Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v30Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v31Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v32Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v33Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v34Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v35Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v36Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v37Ev,
  (VTBL_ENTRY)&_ZN9S10181C113v38Ev,
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S10181C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10181C25D1Ev,_ZThn100_N9S10181C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N9S10181C25D0Ev,_ZThn100_N9S10181C25D0Ev),
  (VTBL_ENTRY)&_ZN9S10181C263v64Ev,
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S10181C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10181C25D1Ev,_ZThn104_N9S10181C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N9S10181C25D0Ev,_ZThn104_N9S10181C25D0Ev),
  (VTBL_ENTRY)&_ZN9S10181C273v65Ev,
  (VTBL_ENTRY)&_ZN9S10181C273v66Ev,
};
extern VTBL_ENTRY _ZTI9S10181C25[];
extern  VTBL_ENTRY _ZTV9S10181C25[];
Class_Descriptor cd_S10181C25 = {  "S10181C25", // class name
  bases_S10181C25, 5,
  &(vtc_S10181C25[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16288,15548), // object size
  NSPAIRA(_ZTI9S10181C25),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S10181C25),70, //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  S10181C68  : S10180C17 {
  ::S10180C70 s10181c68f0;
  void *s10181c68f1;
  char s10181c68f2;
  int s10181c68f3;
  virtual  ~S10181C68(); // _ZN9S10181C68D1Ev
  virtual void  v89(); // _ZN9S10181C683v89Ev
  virtual void  v90(); // _ZN9S10181C683v90Ev
  virtual void  v91(); // _ZN9S10181C683v91Ev
  virtual void  v92(); // _ZN9S10181C683v92Ev
  S10181C68(); // tgen
};
//SIG(-1 S10181C68) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 v2 v3 v4 FC6{ m Fp FC7{ m FC8{ m Fp Fi FC4} Fi} FC8 FC8 Fi[3] FC9{ m FC10{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC7 FC7 Fc} Fp Fc Fi}


 S10181C68 ::~S10181C68(){ note_dtor("S10181C68", this);}
void  S10181C68 ::v89(){vfunc_called(this, "_ZN9S10181C683v89Ev");}
void  S10181C68 ::v90(){vfunc_called(this, "_ZN9S10181C683v90Ev");}
void  S10181C68 ::v91(){vfunc_called(this, "_ZN9S10181C683v91Ev");}
void  S10181C68 ::v92(){vfunc_called(this, "_ZN9S10181C683v92Ev");}
S10181C68 ::S10181C68(){ note_ctor("S10181C68", this);} // tgen

static void Test_S10181C68()
{
  extern Class_Descriptor cd_S10181C68;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10181C68, buf);
    S10181C68 *dp, &lv = *(dp=new (buf) S10181C68());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10181C68)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C68)");
    check_base_class_offset(lv, (S10180C17*), 0, "S10181C68");
    check_field_offset(lv, s10181c68f0, ABISELECT(48,32), "S10181C68.s10181c68f0");
    check_field_offset(lv, s10181c68f1, ABISELECT(216,152), "S10181C68.s10181c68f1");
    check_field_offset(lv, s10181c68f2, ABISELECT(224,156), "S10181C68.s10181c68f2");
    check_field_offset(lv, s10181c68f3, ABISELECT(228,160), "S10181C68.s10181c68f3");
    test_class_info(&lv, &cd_S10181C68);
    dp->~S10181C68();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C68(Test_S10181C68, "S10181C68", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN9S10181C68C1Ev();
extern void _ZN9S10181C68D1Ev();
Name_Map name_map_S10181C68[] = {
  NSPAIR(_ZN9S10181C68C1Ev),
  NSPAIR(_ZN9S10181C68D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S10181C68[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S10181C68[];
extern void _ZN9S10181C68D1Ev();
extern void _ZN9S10181C68D0Ev();
extern void _ZN9S10181C683v89Ev();
extern void _ZN9S10181C683v90Ev();
extern void _ZN9S10181C683v91Ev();
extern void _ZN9S10181C683v92Ev();
static  VTBL_ENTRY vtc_S10181C68[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C68[0]),
  (VTBL_ENTRY)&_ZN9S10181C68D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C68D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C683v89Ev,
  (VTBL_ENTRY)&_ZN9S10181C683v90Ev,
  (VTBL_ENTRY)&_ZN9S10181C683v91Ev,
  (VTBL_ENTRY)&_ZN9S10181C683v92Ev,
};
extern VTBL_ENTRY _ZTI9S10181C68[];
extern  VTBL_ENTRY _ZTV9S10181C68[];
Class_Descriptor cd_S10181C68 = {  "S10181C68", // class name
  bases_S10181C68, 1,
  &(vtc_S10181C68[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI9S10181C68),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10181C68),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  S10181C101  : S10181C68 {
  virtual void  v199(); // _ZN10S10181C1014v199Ev
  virtual void  v200(); // _ZN10S10181C1014v200Ev
  ~S10181C101(); // tgen
  S10181C101(); // tgen
};
//SIG(-1 S10181C101) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v3 v4 v5 v6 FC7{ m Fp FC8{ m FC9{ m Fp Fi FC5} Fi} FC9 FC9 Fi[3] FC10{ m FC11{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC8 FC8 Fc} Fp Fc Fi} v1 v2}


void  S10181C101 ::v199(){vfunc_called(this, "_ZN10S10181C1014v199Ev");}
void  S10181C101 ::v200(){vfunc_called(this, "_ZN10S10181C1014v200Ev");}
S10181C101 ::~S10181C101(){ note_dtor("S10181C101", this);} // tgen
S10181C101 ::S10181C101(){ note_ctor("S10181C101", this);} // tgen

static void Test_S10181C101()
{
  extern Class_Descriptor cd_S10181C101;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S10181C101, buf);
    S10181C101 *dp, &lv = *(dp=new (buf) S10181C101());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S10181C101)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C101)");
    check_base_class_offset(lv, (S10180C17*)(S10181C68*), 0, "S10181C101");
    check_base_class_offset(lv, (S10181C68*), 0, "S10181C101");
    test_class_info(&lv, &cd_S10181C101);
    dp->~S10181C101();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C101(Test_S10181C101, "S10181C101", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN10S10181C101C1Ev();
extern void _ZN10S10181C101D1Ev();
Name_Map name_map_S10181C101[] = {
  NSPAIR(_ZN10S10181C101C1Ev),
  NSPAIR(_ZN10S10181C101D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10181C68;
extern VTBL_ENTRY _ZTI9S10181C68[];
extern  VTBL_ENTRY _ZTV9S10181C68[];
static Base_Class bases_S10181C101[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10181C68,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S10181C101[];
extern void _ZN10S10181C101D1Ev();
extern void _ZN10S10181C101D0Ev();
extern void _ZN9S10181C683v89Ev();
extern void _ZN9S10181C683v90Ev();
extern void _ZN9S10181C683v91Ev();
extern void _ZN9S10181C683v92Ev();
extern void _ZN10S10181C1014v199Ev();
extern void _ZN10S10181C1014v200Ev();
static  VTBL_ENTRY vtc_S10181C101[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S10181C101[0]),
  (VTBL_ENTRY)&_ZN10S10181C101D1Ev,
  (VTBL_ENTRY)&_ZN10S10181C101D0Ev,
  (VTBL_ENTRY)&_ZN9S10181C683v89Ev,
  (VTBL_ENTRY)&_ZN9S10181C683v90Ev,
  (VTBL_ENTRY)&_ZN9S10181C683v91Ev,
  (VTBL_ENTRY)&_ZN9S10181C683v92Ev,
  (VTBL_ENTRY)&_ZN10S10181C1014v199Ev,
  (VTBL_ENTRY)&_ZN10S10181C1014v200Ev,
};
extern VTBL_ENTRY _ZTI10S10181C101[];
extern  VTBL_ENTRY _ZTV10S10181C101[];
Class_Descriptor cd_S10181C101 = {  "S10181C101", // class name
  bases_S10181C101, 2,
  &(vtc_S10181C101[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI10S10181C101),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S10181C101),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  S10181C16  : S10181C2 , S10180C17 , S10181C24 {
  void *s10181c16f0[5];
  ::S10181C25 s10181c16f1;
  ::S10180C78 s10181c16f2;
  ::S10179C87 s10181c16f3;
  ::S10181C101 s10181c16f4;
  void *s10181c16f5;
  char s10181c16f6;
  void *s10181c16f7;
  int s10181c16f8;
  virtual  ~S10181C16(); // _ZN9S10181C16D1Ev
  virtual void  v39(); // _ZN9S10181C163v39Ev
  virtual void  v40(); // _ZN9S10181C163v40Ev
  S10181C16(); // tgen
};
//SIG(-1 S10181C16) C1{ BC2{ vd v3} BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} BC7{ vd v4} vd v1 v2 Fp[5] FC8{ BC3 BC2 BC9{ vd v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 Fp FC10{ m FC11{ m Fp Fi FC5} Fi} FC12{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC13{ vd v51} BC14{ vd v52 v53} vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fi FC15{ m Fi[2]} FC15 FC15 FC16{ BC3 vd Fi Fp FC10 FL FC17{ m Fi[2]} Fi Fc Fi FC18{ m FC19{ m Fp Fi[2] FC6} Fp[2]}} FC20{ BC21{ vd v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC10 FC12} vd v54 v55 v56} FC22{ vd m Fi Fp[3] FC23{ m Fc[2] Fp[3] Fi[4] FC24{ m FL[4]}}} FC25{ vd m FC24 Fi[2] FC26{ m FL[3] Fi[3] FL} FL FC27{ m Fi FC28{ m Fi[4]}} FC18 Fc[2] Fi[2] Fp[2] FL Fi[3]} Fi Fp FC29{ BC3 BC7 vd v81 Fi FC30{ m Fc[2]} FC31{ Fp[2]} Fp FC32{ vd m FC33{ vd m FC34{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC35{ BC36{ vd v88 v89 v90 v91 v92 v93 Fi Fp Fc} vd v82 v83 v84 v85 v86 v87 Fp} FC37{ BC38{ vd v95 Fi Fc[3]} vd v94 Fp[4] FL Fi FC24 FC39{ m Fp FC40{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC41{ BC38 vd v96 FC24 Fi Fp[2] FC42{ m FC24 FC39 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC43{ BC38 vd v97 Fp[2] FL Fi[4] FC44{ m Fi[2]} FC24 FC45{ m FC24 FC39 Fp Fi[4]} FC46{ m Fp}} FC24 FC24 FL Fi[5]} FL FC47{ m FC26 FC48{ m Fi} Fi} Fc[128] FC15 FC18} Fi[3] FC49{ m Fp Fi[2]} FC50{ m Fc[11] Fi[2]} FC51{ BC52{} FL Fi} FC53{ BC54{ BC3 vd v100 v101 v102 v103 FC55{ m Fp FC10 FC11 FC11 Fi[3] FC56{ m FC57{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC10 FC10 Fc} Fp Fc Fi} v98 v99} FL FC58{ BC54 v104} FC59{ BC54 v105} FC60{ BC54 v106 v107} FC18 Fc} FC61{ BC62{ BC3 BC21 BC63{ vd v110} BC64{ BC65{ vd v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125} BC66{ vd m Fp}} BC67{ vd v126 v127} BC68{ vd v128} vd v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 Fp[5] Fi Fp FC69{ m Fi[2]} FC70{ m Fp} FC59 FC60 FC71{ BC54 v163} FC53 FC72{ BC54 v164 v165 v166 FC73{ Fp[3]} FC40[3]} FC74{ BC3 BC21 vd v167 v168 v169 v170 v171 v172 v173 v174 FC75{ m FC11 Fi[2] FC11} Fi[2] Fc[2] Fi FL[2] FC76{ m FL} Fi} FC77{ BC78{ BC3 BC21 vd v180 v181 v182 v183 v184 v185} BC63 vd v175 v176 v177 v178 v179 FC79{ m Fi Fp Fi FC56} FC19} FC80{ BC3 BC21 vd v186 v187 v188 v189 FC18 Fp[2] FC11 Fi} FC81{ BC3 BC21 BC63 BC64 BC67 BC68 vd v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 FC18 Fp[2] Fi[2] FC82{ BC3 vd v209 Fp FC10 FC10 Fp Fi FC56} FC60 FC53 FC53 FC56 FC56 FC56 Fi} FC83{ BC84{ BC3 BC21 BC63 vd v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 Fi[2] FC59 FC18 FC85{ BC54 v239 v240 v241 Fp[3]} FC58 FC53 FC60 FC86{ BC3 vd v242 v243 FC87{ BC88{ BC89{ m Fp FC56 FC56 Fi[3] Fc[2] Fi Fp} FC70 FC90{ m Fp} FC70 FC11 FC11 FC70 FC90 FC70 FC11 FC11 FC11 Fc Fi Fp} FC11} Fi} FC71 FC91{ BC58 v244} FC71 Fp FC90 Fp[2] Fi Fc[3] Fi FL[2]} vd v210 v211 v212 v213 v214 v215 FC46 FC92{ m Fp FC90 Fp[5] FC93{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC94{ m FC44 FC44} FC44 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC18 Fc[2] Fi FC95{ m Fc[5]} FC96{ m FC56 FC56 FC56 FC70 Fi Fc[2] Fi} FC56 FC56 FC56 Fp FC97{ BC3 vd FC98{ m Fp[3] FC69 FC11 FL[2] Fc} FC18} Fc[2] FL Fc[2] Fi FC90 FC99{ m FC100{ BC101{ m Fp Fi FC102{ m} FC102}} Fi} Fc Fi} vd v108 v109 Fc} FC103{ BC104{ BC3 vd v247 v248 v249 v250 FC55 Fp Fc Fi} v245 v246} FC105{ BC106{ BC3 vd v253 v254 v255 v256 FC55 Fp Fc Fi} v251 v252} Fp Fc Fp Fi}


 S10181C16 ::~S10181C16(){ note_dtor("S10181C16", this);}
void  S10181C16 ::v39(){vfunc_called(this, "_ZN9S10181C163v39Ev");}
void  S10181C16 ::v40(){vfunc_called(this, "_ZN9S10181C163v40Ev");}
S10181C16 ::S10181C16(){ note_ctor("S10181C16", this);} // tgen

static void Test_S10181C16()
{
  extern Class_Descriptor cd_S10181C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2918,5115)];
    init_test(&cd_S10181C16, buf);
    S10181C16 *dp, &lv = *(dp=new (buf) S10181C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(23336,20456), "sizeof(S10181C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C16)");
    check_base_class_offset(lv, (S10181C2*), 0, "S10181C16");
    check_base_class_offset(lv, (S10180C17*), ABISELECT(8,4), "S10181C16");
    check_base_class_offset(lv, (S10181C24*), ABISELECT(56,36), "S10181C16");
    check_field_offset(lv, s10181c16f0, ABISELECT(64,40), "S10181C16.s10181c16f0");
    check_field_offset(lv, s10181c16f1, ABISELECT(104,60), "S10181C16.s10181c16f1");
    check_field_offset(lv, s10181c16f2, ABISELECT(16392,15608), "S10181C16.s10181c16f2");
    check_field_offset(lv, s10181c16f3, ABISELECT(22840,20112), "S10181C16.s10181c16f3");
    check_field_offset(lv, s10181c16f4, ABISELECT(23072,20276), "S10181C16.s10181c16f4");
    check_field_offset(lv, s10181c16f5, ABISELECT(23304,20440), "S10181C16.s10181c16f5");
    check_field_offset(lv, s10181c16f6, ABISELECT(23312,20444), "S10181C16.s10181c16f6");
    check_field_offset(lv, s10181c16f7, ABISELECT(23320,20448), "S10181C16.s10181c16f7");
    check_field_offset(lv, s10181c16f8, ABISELECT(23328,20452), "S10181C16.s10181c16f8");
    test_class_info(&lv, &cd_S10181C16);
    dp->~S10181C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C16(Test_S10181C16, "S10181C16", ABISELECT(23336,20456));

#else // __cplusplus

extern void _ZN9S10181C16C1Ev();
extern void _ZN9S10181C16D1Ev();
Name_Map name_map_S10181C16[] = {
  NSPAIR(_ZN9S10181C16C1Ev),
  NSPAIR(_ZN9S10181C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10181C2;
extern VTBL_ENTRY _ZTI8S10181C2[];
extern  VTBL_ENTRY _ZTV8S10181C2[];
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S10181C24;
extern VTBL_ENTRY _ZTI9S10181C24[];
extern  VTBL_ENTRY _ZTV9S10181C24[];
static Base_Class bases_S10181C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10181C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C17,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_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},
  {&cd_S10181C24,    ABISELECT(56,36), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI9S10181C16[];
extern void _ZN9S10181C16D1Ev();
extern void _ZN9S10181C16D0Ev();
extern void _ZN8S10181C22v7Ev();
extern void _ZN9S10181C163v39Ev();
extern void _ZN9S10181C163v40Ev();
extern void ABISELECT(_ZThn8_N9S10181C16D1Ev,_ZThn4_N9S10181C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S10181C16D0Ev,_ZThn4_N9S10181C16D0Ev)();
extern void ABISELECT(_ZThn56_N9S10181C16D1Ev,_ZThn36_N9S10181C16D1Ev)();
extern void ABISELECT(_ZThn56_N9S10181C16D0Ev,_ZThn36_N9S10181C16D0Ev)();
extern void _ZN9S10181C243v41Ev();
static  VTBL_ENTRY vtc_S10181C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10181C16[0]),
  (VTBL_ENTRY)&_ZN9S10181C16D1Ev,
  (VTBL_ENTRY)&_ZN9S10181C16D0Ev,
  (VTBL_ENTRY)&_ZN8S10181C22v7Ev,
  (VTBL_ENTRY)&_ZN9S10181C163v39Ev,
  (VTBL_ENTRY)&_ZN9S10181C163v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S10181C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S10181C16D1Ev,_ZThn4_N9S10181C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S10181C16D0Ev,_ZThn4_N9S10181C16D0Ev),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S10181C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10181C16D1Ev,_ZThn36_N9S10181C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S10181C16D0Ev,_ZThn36_N9S10181C16D0Ev),
  (VTBL_ENTRY)&_ZN9S10181C243v41Ev,
};
extern VTBL_ENTRY _ZTI9S10181C16[];
extern  VTBL_ENTRY _ZTV9S10181C16[];
Class_Descriptor cd_S10181C16 = {  "S10181C16", // class name
  bases_S10181C16, 3,
  &(vtc_S10181C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(23336,20456), // object size
  NSPAIRA(_ZTI9S10181C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S10181C16),16, //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  S10181C1  : S10181C2 , S10181C3 {
  ::S10180C4 s10181c1f0;
  ::S10180C9 s10181c1f1;
  void *s10181c1f2[3];
  ::S10180C10 s10181c1f3;
  ::S10181C16 s10181c1f4;
  ::S10180C129 s10181c1f5;
  ::S10181C101 s10181c1f6;
  ::S10179C87 s10181c1f7;
  ::S10180C176 s10181c1f8;
  ::S10180C13 s10181c1f9;
  ::S10180C178 s10181c1f10;
  int s10181c1f11;
  ::S10180C31 s10181c1f12;
  int s10181c1f13;
  ::S10180C179 s10181c1f14;
  ::S10180C179 s10181c1f15;
  ::S10180C179 s10181c1f16;
  virtual  ~S10181C1(); // _ZN8S10181C1D1Ev
  virtual void  v1(); // _ZN8S10181C12v1Ev
  virtual void  v2(); // _ZN8S10181C12v2Ev
  virtual void  v3(); // _ZN8S10181C12v3Ev
  virtual void  v4(); // _ZN8S10181C12v4Ev
  virtual void  v5(); // _ZN8S10181C12v5Ev
  virtual void  v6(); // _ZN8S10181C12v6Ev
  S10181C1(); // tgen
};
//SIG(1 S10181C1) C1{ BC2{ vd v7} BC3{ vd v8 v9 v10 v11 v12 Fp} vd v1 v2 v3 v4 v5 v6 FC4{ m Fp FC5{ BC6{ m Fp Fi FC7{ m} FC7}}} FC8{ m Fi Fp Fi[4] Fp} Fp[3] FC9{ BC10{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 Fp FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} FC14{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v13 v14 FC11 Fp} FC15{ BC2 BC16{ vd m FC17{ m Fp Fi FC13 FC18{ m}} FC17 Fc} BC19{ vd v41} vd v39 v40 Fp[5] FC20{ BC16 BC2 BC21{ vd v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fp FC11 FC14} BC22{ vd v88} BC23{ vd v89 v90} vd v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 Fi FC24{ m Fi[2]} FC24 FC24 FC25{ BC16 vd Fi Fp FC11 FL FC26{ m Fi[2]} Fi Fc Fi FC27{ m FC28{ m Fp Fi[2] FC18} Fp[2]}} FC29{ BC10 vd v91 v92 v93} FC30{ vd m Fi Fp[3] FC31{ m Fc[2] Fp[3] Fi[4] FC32{ m FL[4]}}} FC33{ vd m FC32 Fi[2] FC34{ m FL[3] Fi[3] FL} FL FC35{ m Fi FC36{ m Fi[4]}} FC27 Fc[2] Fi[2] Fp[2] FL Fi[3]} Fi Fp FC37{ BC16 BC19 vd v94 Fi FC38{ m Fc[2]} FC39{ Fp[2]} Fp FC40{ vd m FC41{ vd m FC42{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC43{ BC44{ vd v101 v102 v103 v104 v105 v106 Fi Fp Fc} vd v95 v96 v97 v98 v99 v100 Fp} FC45{ BC46{ vd v108 Fi Fc[3]} vd v107 Fp[4] FL Fi FC32 FC47{ m Fp FC48{ Fi[4]}} Fs[1024] Fi[4] FL[2] Fi FC49{ BC46 vd v109 FC32 Fi Fp[2] FC50{ m FC32 FC47 Fp Fi[5]} Fs[3585] Fc[4096] Fi}} FC51{ BC46 vd v110 Fp[2] FL Fi[4] FC52{ m Fi[2]} FC32 FC53{ m FC32 FC47 Fp Fi[4]} FC54{ m Fp}} FC32 FC32 FL Fi[5]} FL FC55{ m FC34 FC56{ m Fi} Fi} Fc[128] FC24 FC27} Fi[3] FC57{ m Fp Fi[2]} FC58{ m Fc[11] Fi[2]} FC59{ BC60{} FL Fi} FC61{ BC62{ BC16 vd v113 v114 v115 v116 FC63{ m Fp FC11 FC12 FC12 Fi[3] FC64{ m FC65{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC11 FC11 Fc} Fp Fc Fi} v111 v112} FL FC66{ BC62 v117} FC67{ BC62 v118} FC68{ BC62 v119 v120} FC27 Fc} FC69{ BC70{ BC16 BC10 BC71{ vd v123} BC72{ BC73{ vd v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138} BC74{ vd m Fp}} BC75{ vd v139 v140} BC76{ vd v141} vd v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 Fp[5] Fi Fp FC77{ m Fi[2]} FC78{ m Fp} FC67 FC68 FC79{ BC62 v176} FC61 FC80{ BC62 v177 v178 v179 FC81{ Fp[3]} FC48[3]} FC82{ BC16 BC10 vd v180 v181 v182 v183 v184 v185 v186 v187 FC83{ m FC12 Fi[2] FC12} Fi[2] Fc[2] Fi FL[2] FC84{ m FL} Fi} FC85{ BC86{ BC16 BC10 vd v193 v194 v195 v196 v197 v198} BC71 vd v188 v189 v190 v191 v192 FC87{ m Fi Fp Fi FC64} FC28} FC88{ BC16 BC10 vd v199 v200 v201 v202 FC27 Fp[2] FC12 Fi} FC89{ BC16 BC10 BC71 BC72 BC75 BC76 vd v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 v215 v216 v217 v218 v219 v220 v221 FC27 Fp[2] Fi[2] FC90{ BC16 vd v222 Fp FC11 FC11 Fp Fi FC64} FC68 FC61 FC61 FC64 FC64 FC64 Fi} FC91{ BC92{ BC16 BC10 BC71 vd v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 v245 v246 v247 v248 v249 v250 v251 Fi[2] FC67 FC27 FC93{ BC62 v252 v253 v254 Fp[3]} FC66 FC61 FC68 FC94{ BC16 vd v255 v256 FC95{ BC96{ BC97{ m Fp FC64 FC64 Fi[3] Fc[2] Fi Fp} FC78 FC98{ m Fp} FC78 FC12 FC12 FC78 FC98 FC78 FC12 FC12 FC12 Fc Fi Fp} FC12} Fi} FC79 FC99{ BC66 v257} FC79 Fp FC98 Fp[2] Fi Fc[3] Fi FL[2]} vd v223 v224 v225 v226 v227 v228 FC54 FC100{ m Fp FC98 Fp[5] FC101{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC102{ m FC52 FC52} FC52 Fc Fi[3] Fc Fi[6] Fc}} Fi} Fp FC27 Fc[2] Fi FC103{ m Fc[5]} FC104{ m FC64 FC64 FC64 FC78 Fi Fc[2] Fi} FC64 FC64 FC64 Fp FC105{ BC16 vd FC106{ m Fp[3] FC77 FC12 FL[2] Fc} FC27} Fc[2] FL Fc[2] Fi FC98 FC107{ m FC5 Fi} Fc Fi} vd v121 v122 Fc} FC108{ BC109{ BC16 vd v260 v261 v262 v263 FC63 Fp Fc Fi} v258 v259} FC110{ BC111{ BC16 vd v266 v267 v268 v269 FC63 Fp Fc Fi} v264 v265} Fp Fc Fp Fi} FC112{ BC71 BC16 vd v270 Fp[6] FC113{ BC16 BC10 BC71 vd v271 v272 v273 v274 v275 v276 v277 v278 FC27 Fp FC68 FC85 FC78 FC114{ vd v279 v280 FC115{ m Fp Fi[2] FC116{ m}} FC36[3] Fp[2] Fi Fc} FC117{ BC71 vd v281 Fp[2] FC118{ m Fp Fi FC116 FC119{ m}} FC120{ BC16 vd v282 v283 v284 v285 FC121{ m Fp[2] FC12 FC115 Fi[2]}}} FC90 FC122{ BC123{ BC124{ BC16 vd v295 v296 v297 v298 v299 v300 v301 v302 v303 v304 v305 v306 v307 v308 v309 v310 v311 v312 v313 v314 Fp[2] FC98 Fc[2] Fp FC125{ m FC64 FC64 FC126{ m FC84} FC126 FC64 FC64} FC11 Fp[4] FC27} vd v315 v316 v317 v318 v319 v320 v321 v322 v323 v324 v325 v326 v327 v328 v329 v330 v331 v332 v333 FC127{ vd m Fi[2] FC12 FC12 FC12 FC12 FC128{ m Fp[2]} FL[2]} Fp} vd v286 v287 v288 v289 v290 v291 v292 v293 v294 Fi[3]} FC129{ BC124 vd v334 v335 v336 v337 v338 v339 v340 v341 v342 v343 v344 v345 v346 v347 v348 v349 v350 v351 v352 FC127 Fp} FC130{ BC123 vd v353 v354} FC130 FC131{ BC124 vd v355 v356 v357 v358 v359 v360 v361 v362 v363 v364 v365 v366 Fi[2] FL Fi}[9] FC132{ BC123 vd v367 v368 v369} FC132 FC133{ BC123 vd v370 v371} FC134{ BC16 BC71 BC10 vd v372 v373 v374 v375 Fp FC117 FC90 FC68 FC79 Fp FL FC12} Fp Fi FC135{ m FL Fc FL[2] FC54} FC92 FC136{ BC16 BC10 BC71 vd v376 v377 v378 v379 v380 v381 Fi FC67 FC27 FC93 FC66 FC61 FC68 FC98 Fp[2] Fi} FC107 FC61 FC80 FC79 FC68 Fp FC137{ m Fp Fi[2] FC119} Fi FC138{ m FC27 FC139{ Fi FC140{ Fi[2] FL Fc}[9] Fi} FC12} Fp[2] Fi} FC70 FC141{ BC16 BC10 BC71 BC72 vd v382 v383 v384 v385 v386 v387 v388 v389 Fp[2] FC78 Fi[2] FC142{ BC143{ BC16 vd v395 v396 v397 v398 v399 Fp FC78 Fp[4] Fi} vd v390 v391 v392 v393 v394 Fp[2] Fi[4] FC78 FC24 FC24 Fc[2] FC78 FC126 Fi} Fp FC144{ BC16 BC10 vd v400 v401 v402 v403 v404 Fp FC145{ m FC137 Fi} Fi Fp Fc} Fc FC27 Fc[2]} FC146{ BC16 vd Fp} FC147{ BC16 BC10 vd v405 v406 v407 v408} FC61 Fp Fi Fp Fi} FC110 FC108 FC148{ BC149{ vd v417 v418 v419 v420 v421 v422 v423 v424} vd v409 v410 v411 v412 v413 v414 v415 v416 Fp[2]} FC12 FC150{ vd m Fi} Fi FC27 Fi FC151{ m Fp Fi} FC151 FC151}


 S10181C1 ::~S10181C1(){ note_dtor("S10181C1", this);}
void  S10181C1 ::v1(){vfunc_called(this, "_ZN8S10181C12v1Ev");}
void  S10181C1 ::v2(){vfunc_called(this, "_ZN8S10181C12v2Ev");}
void  S10181C1 ::v3(){vfunc_called(this, "_ZN8S10181C12v3Ev");}
void  S10181C1 ::v4(){vfunc_called(this, "_ZN8S10181C12v4Ev");}
void  S10181C1 ::v5(){vfunc_called(this, "_ZN8S10181C12v5Ev");}
void  S10181C1 ::v6(){vfunc_called(this, "_ZN8S10181C12v6Ev");}
S10181C1 ::S10181C1(){ note_ctor("S10181C1", this);} // tgen

static void Test_S10181C1()
{
  extern Class_Descriptor cd_S10181C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5557,8804)];
    init_test(&cd_S10181C1, buf);
    S10181C1 *dp, &lv = *(dp=new (buf) S10181C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(44448,35212), "sizeof(S10181C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10181C1)");
    check_base_class_offset(lv, (S10181C2*), 0, "S10181C1");
    check_base_class_offset(lv, (S10181C3*), ABISELECT(8,4), "S10181C1");
    check_field_offset(lv, s10181c1f0, ABISELECT(24,12), "S10181C1.s10181c1f0");
    check_field_offset(lv, s10181c1f1, ABISELECT(48,28), "S10181C1.s10181c1f1");
    check_field_offset(lv, s10181c1f2, ABISELECT(88,56), "S10181C1.s10181c1f2");
    check_field_offset(lv, s10181c1f3, ABISELECT(112,68), "S10181C1.s10181c1f3");
    check_field_offset(lv, s10181c1f4, ABISELECT(240,152), "S10181C1.s10181c1f4");
    check_field_offset(lv, s10181c1f5, ABISELECT(23576,20608), "S10181C1.s10181c1f5");
    check_field_offset(lv, s10181c1f6, ABISELECT(43824,34796), "S10181C1.s10181c1f6");
    check_field_offset(lv, s10181c1f7, ABISELECT(44056,34960), "S10181C1.s10181c1f7");
    check_field_offset(lv, s10181c1f8, ABISELECT(44288,35124), "S10181C1.s10181c1f8");
    check_field_offset(lv, s10181c1f9, ABISELECT(44312,35136), "S10181C1.s10181c1f9");
    check_field_offset(lv, s10181c1f10, ABISELECT(44328,35148), "S10181C1.s10181c1f10");
    check_field_offset(lv, s10181c1f11, ABISELECT(44344,35156), "S10181C1.s10181c1f11");
    check_field_offset(lv, s10181c1f12, ABISELECT(44352,35160), "S10181C1.s10181c1f12");
    check_field_offset(lv, s10181c1f13, ABISELECT(44392,35184), "S10181C1.s10181c1f13");
    check_field_offset(lv, s10181c1f14, ABISELECT(44400,35188), "S10181C1.s10181c1f14");
    check_field_offset(lv, s10181c1f15, ABISELECT(44416,35196), "S10181C1.s10181c1f15");
    check_field_offset(lv, s10181c1f16, ABISELECT(44432,35204), "S10181C1.s10181c1f16");
    test_class_info(&lv, &cd_S10181C1);
    dp->~S10181C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10181C1(Test_S10181C1, "S10181C1", ABISELECT(44448,35212));

#else // __cplusplus

extern void _ZN8S10181C1C1Ev();
extern void _ZN8S10181C1D1Ev();
Name_Map name_map_S10181C1[] = {
  NSPAIR(_ZN8S10181C1C1Ev),
  NSPAIR(_ZN8S10181C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10181C2;
extern VTBL_ENTRY _ZTI8S10181C2[];
extern  VTBL_ENTRY _ZTV8S10181C2[];
extern Class_Descriptor cd_S10181C3;
extern VTBL_ENTRY _ZTI8S10181C3[];
extern  VTBL_ENTRY _ZTV8S10181C3[];
static Base_Class bases_S10181C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10181C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10181C3,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_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 _ZTI8S10181C1[];
extern void _ZN8S10181C1D1Ev();
extern void _ZN8S10181C1D0Ev();
extern void _ZN8S10181C22v7Ev();
extern void _ZN8S10181C12v1Ev();
extern void _ZN8S10181C12v2Ev();
extern void _ZN8S10181C12v3Ev();
extern void _ZN8S10181C12v4Ev();
extern void _ZN8S10181C12v5Ev();
extern void _ZN8S10181C12v6Ev();
extern void ABISELECT(_ZThn8_N8S10181C1D1Ev,_ZThn4_N8S10181C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S10181C1D0Ev,_ZThn4_N8S10181C1D0Ev)();
extern void _ZN8S10181C32v8Ev();
extern void _ZN8S10181C32v9Ev();
extern void _ZN8S10181C33v10Ev();
extern void _ZN8S10181C33v11Ev();
extern void _ZN8S10181C33v12Ev();
static  VTBL_ENTRY vtc_S10181C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10181C1[0]),
  (VTBL_ENTRY)&_ZN8S10181C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10181C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10181C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10181C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10181C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10181C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10181C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10181C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10181C12v6Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S10181C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S10181C1D1Ev,_ZThn4_N8S10181C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S10181C1D0Ev,_ZThn4_N8S10181C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10181C32v8Ev,
  (VTBL_ENTRY)&_ZN8S10181C32v9Ev,
  (VTBL_ENTRY)&_ZN8S10181C33v10Ev,
  (VTBL_ENTRY)&_ZN8S10181C33v11Ev,
  (VTBL_ENTRY)&_ZN8S10181C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S10181C1[];
extern  VTBL_ENTRY _ZTV8S10181C1[];
Class_Descriptor cd_S10181C1 = {  "S10181C1", // class name
  bases_S10181C1, 2,
  &(vtc_S10181C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(44448,35212), // object size
  NSPAIRA(_ZTI8S10181C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10181C1),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  S7057C2_nt  {
  int s7057c2f0;
  __tsi64 s7057c2f1;
  void *s7057c2f2[4];
  int s7057c2f3[2];
  void *s7057c2f4;
  ::S10180C169 s7057c2f5;
  void *s7057c2f6[2];
  virtual  ~S7057C2_nt(); // _ZN10S7057C2_ntD1Ev
  virtual void  v6(); // _ZN10S7057C2_nt2v6Ev
  virtual void  v7(); // _ZN10S7057C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7057C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7057C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7057C2_nt3v10Ev
  virtual void  v11(); // _ZN10S7057C2_nt3v11Ev
  virtual void  v12(); // _ZN10S7057C2_nt3v12Ev
  virtual void  v13(); // _ZN10S7057C2_nt3v13Ev
  virtual void  v14(); // _ZN10S7057C2_nt3v14Ev
  virtual void  v15(); // _ZN10S7057C2_nt3v15Ev
  virtual void  v16(); // _ZN10S7057C2_nt3v16Ev
  virtual void  v17(); // _ZN10S7057C2_nt3v17Ev
  virtual void  v18(); // _ZN10S7057C2_nt3v18Ev
  virtual void  v19(); // _ZN10S7057C2_nt3v19Ev
  virtual void  v20(); // _ZN10S7057C2_nt3v20Ev
  virtual void  v21(); // _ZN10S7057C2_nt3v21Ev
  virtual void  v22(); // _ZN10S7057C2_nt3v22Ev
  virtual void  v23(); // _ZN10S7057C2_nt3v23Ev
  virtual void  v24(); // _ZN10S7057C2_nt3v24Ev
  virtual void  v25(); // _ZN10S7057C2_nt3v25Ev
  virtual void  v26(); // _ZN10S7057C2_nt3v26Ev
  virtual void  v27(); // _ZN10S7057C2_nt3v27Ev
  virtual void  v28(); // _ZN10S7057C2_nt3v28Ev
  virtual void  v29(); // _ZN10S7057C2_nt3v29Ev
  virtual void  v30(); // _ZN10S7057C2_nt3v30Ev
  virtual void  v31(); // _ZN10S7057C2_nt3v31Ev
  virtual void  v32(); // _ZN10S7057C2_nt3v32Ev
  virtual void  v33(); // _ZN10S7057C2_nt3v33Ev
  virtual void  v34(); // _ZN10S7057C2_nt3v34Ev
  virtual void  v35(); // _ZN10S7057C2_nt3v35Ev
  virtual void  v36(); // _ZN10S7057C2_nt3v36Ev
  virtual void  v37(); // _ZN10S7057C2_nt3v37Ev
  virtual void  v38(); // _ZN10S7057C2_nt3v38Ev
  virtual void  v39(); // _ZN10S7057C2_nt3v39Ev
  virtual void  v40(); // _ZN10S7057C2_nt3v40Ev
  virtual void  v41(); // _ZN10S7057C2_nt3v41Ev
  virtual void  v42(); // _ZN10S7057C2_nt3v42Ev
  virtual void  v43(); // _ZN10S7057C2_nt3v43Ev
  virtual void  v44(); // _ZN10S7057C2_nt3v44Ev
  virtual void  v45(); // _ZN10S7057C2_nt3v45Ev
  virtual void  v46(); // _ZN10S7057C2_nt3v46Ev
  virtual void  v47(); // _ZN10S7057C2_nt3v47Ev
  virtual void  v48(); // _ZN10S7057C2_nt3v48Ev
  virtual void  v49(); // _ZN10S7057C2_nt3v49Ev
  virtual void  v50(); // _ZN10S7057C2_nt3v50Ev
  virtual void  v51(); // _ZN10S7057C2_nt3v51Ev
  virtual void  v52(); // _ZN10S7057C2_nt3v52Ev
  virtual void  v53(); // _ZN10S7057C2_nt3v53Ev
  virtual void  v54(); // _ZN10S7057C2_nt3v54Ev
  virtual void  v55(); // _ZN10S7057C2_nt3v55Ev
  virtual void  v56(); // _ZN10S7057C2_nt3v56Ev
  virtual void  v57(); // _ZN10S7057C2_nt3v57Ev
  virtual void  v58(); // _ZN10S7057C2_nt3v58Ev
  virtual void  v59(); // _ZN10S7057C2_nt3v59Ev
  virtual void  v60(); // _ZN10S7057C2_nt3v60Ev
  virtual void  v61(); // _ZN10S7057C2_nt3v61Ev
  virtual void  v62(); // _ZN10S7057C2_nt3v62Ev
  virtual void  v63(); // _ZN10S7057C2_nt3v63Ev
  virtual void  v64(); // _ZN10S7057C2_nt3v64Ev
  virtual void  v65(); // _ZN10S7057C2_nt3v65Ev
  virtual void  v66(); // _ZN10S7057C2_nt3v66Ev
  virtual void  v67(); // _ZN10S7057C2_nt3v67Ev
  virtual void  v68(); // _ZN10S7057C2_nt3v68Ev
  virtual void  v69(); // _ZN10S7057C2_nt3v69Ev
  S7057C2_nt(); // tgen
};
//SIG(-1 S7057C2_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]}


 S7057C2_nt ::~S7057C2_nt(){ note_dtor("S7057C2_nt", this);}
void  S7057C2_nt ::v6(){vfunc_called(this, "_ZN10S7057C2_nt2v6Ev");}
void  S7057C2_nt ::v7(){vfunc_called(this, "_ZN10S7057C2_nt2v7Ev");}
void  S7057C2_nt ::v8(){vfunc_called(this, "_ZN10S7057C2_nt2v8Ev");}
void  S7057C2_nt ::v9(){vfunc_called(this, "_ZN10S7057C2_nt2v9Ev");}
void  S7057C2_nt ::v10(){vfunc_called(this, "_ZN10S7057C2_nt3v10Ev");}
void  S7057C2_nt ::v11(){vfunc_called(this, "_ZN10S7057C2_nt3v11Ev");}
void  S7057C2_nt ::v12(){vfunc_called(this, "_ZN10S7057C2_nt3v12Ev");}
void  S7057C2_nt ::v13(){vfunc_called(this, "_ZN10S7057C2_nt3v13Ev");}
void  S7057C2_nt ::v14(){vfunc_called(this, "_ZN10S7057C2_nt3v14Ev");}
void  S7057C2_nt ::v15(){vfunc_called(this, "_ZN10S7057C2_nt3v15Ev");}
void  S7057C2_nt ::v16(){vfunc_called(this, "_ZN10S7057C2_nt3v16Ev");}
void  S7057C2_nt ::v17(){vfunc_called(this, "_ZN10S7057C2_nt3v17Ev");}
void  S7057C2_nt ::v18(){vfunc_called(this, "_ZN10S7057C2_nt3v18Ev");}
void  S7057C2_nt ::v19(){vfunc_called(this, "_ZN10S7057C2_nt3v19Ev");}
void  S7057C2_nt ::v20(){vfunc_called(this, "_ZN10S7057C2_nt3v20Ev");}
void  S7057C2_nt ::v21(){vfunc_called(this, "_ZN10S7057C2_nt3v21Ev");}
void  S7057C2_nt ::v22(){vfunc_called(this, "_ZN10S7057C2_nt3v22Ev");}
void  S7057C2_nt ::v23(){vfunc_called(this, "_ZN10S7057C2_nt3v23Ev");}
void  S7057C2_nt ::v24(){vfunc_called(this, "_ZN10S7057C2_nt3v24Ev");}
void  S7057C2_nt ::v25(){vfunc_called(this, "_ZN10S7057C2_nt3v25Ev");}
void  S7057C2_nt ::v26(){vfunc_called(this, "_ZN10S7057C2_nt3v26Ev");}
void  S7057C2_nt ::v27(){vfunc_called(this, "_ZN10S7057C2_nt3v27Ev");}
void  S7057C2_nt ::v28(){vfunc_called(this, "_ZN10S7057C2_nt3v28Ev");}
void  S7057C2_nt ::v29(){vfunc_called(this, "_ZN10S7057C2_nt3v29Ev");}
void  S7057C2_nt ::v30(){vfunc_called(this, "_ZN10S7057C2_nt3v30Ev");}
void  S7057C2_nt ::v31(){vfunc_called(this, "_ZN10S7057C2_nt3v31Ev");}
void  S7057C2_nt ::v32(){vfunc_called(this, "_ZN10S7057C2_nt3v32Ev");}
void  S7057C2_nt ::v33(){vfunc_called(this, "_ZN10S7057C2_nt3v33Ev");}
void  S7057C2_nt ::v34(){vfunc_called(this, "_ZN10S7057C2_nt3v34Ev");}
void  S7057C2_nt ::v35(){vfunc_called(this, "_ZN10S7057C2_nt3v35Ev");}
void  S7057C2_nt ::v36(){vfunc_called(this, "_ZN10S7057C2_nt3v36Ev");}
void  S7057C2_nt ::v37(){vfunc_called(this, "_ZN10S7057C2_nt3v37Ev");}
void  S7057C2_nt ::v38(){vfunc_called(this, "_ZN10S7057C2_nt3v38Ev");}
void  S7057C2_nt ::v39(){vfunc_called(this, "_ZN10S7057C2_nt3v39Ev");}
void  S7057C2_nt ::v40(){vfunc_called(this, "_ZN10S7057C2_nt3v40Ev");}
void  S7057C2_nt ::v41(){vfunc_called(this, "_ZN10S7057C2_nt3v41Ev");}
void  S7057C2_nt ::v42(){vfunc_called(this, "_ZN10S7057C2_nt3v42Ev");}
void  S7057C2_nt ::v43(){vfunc_called(this, "_ZN10S7057C2_nt3v43Ev");}
void  S7057C2_nt ::v44(){vfunc_called(this, "_ZN10S7057C2_nt3v44Ev");}
void  S7057C2_nt ::v45(){vfunc_called(this, "_ZN10S7057C2_nt3v45Ev");}
void  S7057C2_nt ::v46(){vfunc_called(this, "_ZN10S7057C2_nt3v46Ev");}
void  S7057C2_nt ::v47(){vfunc_called(this, "_ZN10S7057C2_nt3v47Ev");}
void  S7057C2_nt ::v48(){vfunc_called(this, "_ZN10S7057C2_nt3v48Ev");}
void  S7057C2_nt ::v49(){vfunc_called(this, "_ZN10S7057C2_nt3v49Ev");}
void  S7057C2_nt ::v50(){vfunc_called(this, "_ZN10S7057C2_nt3v50Ev");}
void  S7057C2_nt ::v51(){vfunc_called(this, "_ZN10S7057C2_nt3v51Ev");}
void  S7057C2_nt ::v52(){vfunc_called(this, "_ZN10S7057C2_nt3v52Ev");}
void  S7057C2_nt ::v53(){vfunc_called(this, "_ZN10S7057C2_nt3v53Ev");}
void  S7057C2_nt ::v54(){vfunc_called(this, "_ZN10S7057C2_nt3v54Ev");}
void  S7057C2_nt ::v55(){vfunc_called(this, "_ZN10S7057C2_nt3v55Ev");}
void  S7057C2_nt ::v56(){vfunc_called(this, "_ZN10S7057C2_nt3v56Ev");}
void  S7057C2_nt ::v57(){vfunc_called(this, "_ZN10S7057C2_nt3v57Ev");}
void  S7057C2_nt ::v58(){vfunc_called(this, "_ZN10S7057C2_nt3v58Ev");}
void  S7057C2_nt ::v59(){vfunc_called(this, "_ZN10S7057C2_nt3v59Ev");}
void  S7057C2_nt ::v60(){vfunc_called(this, "_ZN10S7057C2_nt3v60Ev");}
void  S7057C2_nt ::v61(){vfunc_called(this, "_ZN10S7057C2_nt3v61Ev");}
void  S7057C2_nt ::v62(){vfunc_called(this, "_ZN10S7057C2_nt3v62Ev");}
void  S7057C2_nt ::v63(){vfunc_called(this, "_ZN10S7057C2_nt3v63Ev");}
void  S7057C2_nt ::v64(){vfunc_called(this, "_ZN10S7057C2_nt3v64Ev");}
void  S7057C2_nt ::v65(){vfunc_called(this, "_ZN10S7057C2_nt3v65Ev");}
void  S7057C2_nt ::v66(){vfunc_called(this, "_ZN10S7057C2_nt3v66Ev");}
void  S7057C2_nt ::v67(){vfunc_called(this, "_ZN10S7057C2_nt3v67Ev");}
void  S7057C2_nt ::v68(){vfunc_called(this, "_ZN10S7057C2_nt3v68Ev");}
void  S7057C2_nt ::v69(){vfunc_called(this, "_ZN10S7057C2_nt3v69Ev");}
S7057C2_nt ::S7057C2_nt(){ note_ctor("S7057C2_nt", this);} // tgen

//skip512 S7057C2_nt

#else // __cplusplus

extern void _ZN10S7057C2_ntC1Ev();
extern void _ZN10S7057C2_ntD1Ev();
Name_Map name_map_S7057C2_nt[] = {
  NSPAIR(_ZN10S7057C2_ntC1Ev),
  NSPAIR(_ZN10S7057C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7057C2_nt[];
extern void _ZN10S7057C2_ntD1Ev();
extern void _ZN10S7057C2_ntD0Ev();
extern void _ZN10S7057C2_nt2v6Ev();
extern void _ZN10S7057C2_nt2v7Ev();
extern void _ZN10S7057C2_nt2v8Ev();
extern void _ZN10S7057C2_nt2v9Ev();
extern void _ZN10S7057C2_nt3v10Ev();
extern void _ZN10S7057C2_nt3v11Ev();
extern void _ZN10S7057C2_nt3v12Ev();
extern void _ZN10S7057C2_nt3v13Ev();
extern void _ZN10S7057C2_nt3v14Ev();
extern void _ZN10S7057C2_nt3v15Ev();
extern void _ZN10S7057C2_nt3v16Ev();
extern void _ZN10S7057C2_nt3v17Ev();
extern void _ZN10S7057C2_nt3v18Ev();
extern void _ZN10S7057C2_nt3v19Ev();
extern void _ZN10S7057C2_nt3v20Ev();
extern void _ZN10S7057C2_nt3v21Ev();
extern void _ZN10S7057C2_nt3v22Ev();
extern void _ZN10S7057C2_nt3v23Ev();
extern void _ZN10S7057C2_nt3v24Ev();
extern void _ZN10S7057C2_nt3v25Ev();
extern void _ZN10S7057C2_nt3v26Ev();
extern void _ZN10S7057C2_nt3v27Ev();
extern void _ZN10S7057C2_nt3v28Ev();
extern void _ZN10S7057C2_nt3v29Ev();
extern void _ZN10S7057C2_nt3v30Ev();
extern void _ZN10S7057C2_nt3v31Ev();
extern void _ZN10S7057C2_nt3v32Ev();
extern void _ZN10S7057C2_nt3v33Ev();
extern void _ZN10S7057C2_nt3v34Ev();
extern void _ZN10S7057C2_nt3v35Ev();
extern void _ZN10S7057C2_nt3v36Ev();
extern void _ZN10S7057C2_nt3v37Ev();
extern void _ZN10S7057C2_nt3v38Ev();
extern void _ZN10S7057C2_nt3v39Ev();
extern void _ZN10S7057C2_nt3v40Ev();
extern void _ZN10S7057C2_nt3v41Ev();
extern void _ZN10S7057C2_nt3v42Ev();
extern void _ZN10S7057C2_nt3v43Ev();
extern void _ZN10S7057C2_nt3v44Ev();
extern void _ZN10S7057C2_nt3v45Ev();
extern void _ZN10S7057C2_nt3v46Ev();
extern void _ZN10S7057C2_nt3v47Ev();
extern void _ZN10S7057C2_nt3v48Ev();
extern void _ZN10S7057C2_nt3v49Ev();
extern void _ZN10S7057C2_nt3v50Ev();
extern void _ZN10S7057C2_nt3v51Ev();
extern void _ZN10S7057C2_nt3v52Ev();
extern void _ZN10S7057C2_nt3v53Ev();
extern void _ZN10S7057C2_nt3v54Ev();
extern void _ZN10S7057C2_nt3v55Ev();
extern void _ZN10S7057C2_nt3v56Ev();
extern void _ZN10S7057C2_nt3v57Ev();
extern void _ZN10S7057C2_nt3v58Ev();
extern void _ZN10S7057C2_nt3v59Ev();
extern void _ZN10S7057C2_nt3v60Ev();
extern void _ZN10S7057C2_nt3v61Ev();
extern void _ZN10S7057C2_nt3v62Ev();
extern void _ZN10S7057C2_nt3v63Ev();
extern void _ZN10S7057C2_nt3v64Ev();
extern void _ZN10S7057C2_nt3v65Ev();
extern void _ZN10S7057C2_nt3v66Ev();
extern void _ZN10S7057C2_nt3v67Ev();
extern void _ZN10S7057C2_nt3v68Ev();
extern void _ZN10S7057C2_nt3v69Ev();
static  VTBL_ENTRY vtc_S7057C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7057C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7057C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI10S7057C2_nt[];
VTBL_ENTRY *P__ZTI10S7057C2_nt = _ZTI10S7057C2_nt; 
extern  VTBL_ENTRY _ZTV10S7057C2_nt[];
Class_Descriptor cd_S7057C2_nt = {  "S7057C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7057C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S7057C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7057C2_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  S7057C5_nt  : S10180C64 {
};
//SIG(-1 S7057C5_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S7057C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S10180C64;
static Base_Class bases_S7057C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C64,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7057C5_nt = {  "S7057C5_nt", // class name
  bases_S7057C5_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  S7057C4_nt  : S7057C5_nt {
};
//SIG(-1 S7057C4_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S7057C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S10180C64;
extern Class_Descriptor cd_S7057C5_nt;
static Base_Class bases_S7057C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C64,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7057C5_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  S7057C1  : S7057C2_nt {
  ::S7057C4_nt s7057c1f0;
  virtual  ~S7057C1(); // _ZN7S7057C1D1Ev
  virtual void  v1(); // _ZN7S7057C12v1Ev
  virtual void  v2(); // _ZN7S7057C12v2Ev
  virtual void  v3(); // _ZN7S7057C12v3Ev
  virtual void  v4(); // _ZN7S7057C12v4Ev
  virtual void  v5(); // _ZN7S7057C12v5Ev
  S7057C1(); // tgen
};
//SIG(1 S7057C1) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S7057C1 ::~S7057C1(){ note_dtor("S7057C1", this);}
void  S7057C1 ::v1(){vfunc_called(this, "_ZN7S7057C12v1Ev");}
void  S7057C1 ::v2(){vfunc_called(this, "_ZN7S7057C12v2Ev");}
void  S7057C1 ::v3(){vfunc_called(this, "_ZN7S7057C12v3Ev");}
void  S7057C1 ::v4(){vfunc_called(this, "_ZN7S7057C12v4Ev");}
void  S7057C1 ::v5(){vfunc_called(this, "_ZN7S7057C12v5Ev");}
S7057C1 ::S7057C1(){ note_ctor("S7057C1", this);} // tgen

static void Test_S7057C1()
{
  extern Class_Descriptor cd_S7057C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S7057C1, buf);
    S7057C1 *dp, &lv = *(dp=new (buf) S7057C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S7057C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7057C1)");
    check_base_class_offset(lv, (S7057C2_nt*), 0, "S7057C1");
    check_field_offset(lv, s7057c1f0, ABISELECT(96,60), "S7057C1.s7057c1f0");
    test_class_info(&lv, &cd_S7057C1);
    dp->~S7057C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7057C1(Test_S7057C1, "S7057C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S7057C1C1Ev();
extern void _ZN7S7057C1D1Ev();
Name_Map name_map_S7057C1[] = {
  NSPAIR(_ZN7S7057C1C1Ev),
  NSPAIR(_ZN7S7057C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7057C2_nt;
extern VTBL_ENTRY _ZTI10S7057C2_nt[];
extern  VTBL_ENTRY _ZTV10S7057C2_nt[];
static Base_Class bases_S7057C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7057C2_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 _ZTI7S7057C1[];
extern void _ZN7S7057C1D1Ev();
extern void _ZN7S7057C1D0Ev();
extern void _ZN10S7057C2_nt2v6Ev();
extern void _ZN10S7057C2_nt2v7Ev();
extern void _ZN10S7057C2_nt2v8Ev();
extern void _ZN10S7057C2_nt2v9Ev();
extern void _ZN10S7057C2_nt3v10Ev();
extern void _ZN10S7057C2_nt3v11Ev();
extern void _ZN10S7057C2_nt3v12Ev();
extern void _ZN10S7057C2_nt3v13Ev();
extern void _ZN10S7057C2_nt3v14Ev();
extern void _ZN10S7057C2_nt3v15Ev();
extern void _ZN10S7057C2_nt3v16Ev();
extern void _ZN10S7057C2_nt3v17Ev();
extern void _ZN10S7057C2_nt3v18Ev();
extern void _ZN10S7057C2_nt3v19Ev();
extern void _ZN10S7057C2_nt3v20Ev();
extern void _ZN10S7057C2_nt3v21Ev();
extern void _ZN10S7057C2_nt3v22Ev();
extern void _ZN10S7057C2_nt3v23Ev();
extern void _ZN10S7057C2_nt3v24Ev();
extern void _ZN10S7057C2_nt3v25Ev();
extern void _ZN10S7057C2_nt3v26Ev();
extern void _ZN10S7057C2_nt3v27Ev();
extern void _ZN10S7057C2_nt3v28Ev();
extern void _ZN10S7057C2_nt3v29Ev();
extern void _ZN10S7057C2_nt3v30Ev();
extern void _ZN10S7057C2_nt3v31Ev();
extern void _ZN10S7057C2_nt3v32Ev();
extern void _ZN10S7057C2_nt3v33Ev();
extern void _ZN10S7057C2_nt3v34Ev();
extern void _ZN10S7057C2_nt3v35Ev();
extern void _ZN10S7057C2_nt3v36Ev();
extern void _ZN10S7057C2_nt3v37Ev();
extern void _ZN10S7057C2_nt3v38Ev();
extern void _ZN10S7057C2_nt3v39Ev();
extern void _ZN10S7057C2_nt3v40Ev();
extern void _ZN10S7057C2_nt3v41Ev();
extern void _ZN10S7057C2_nt3v42Ev();
extern void _ZN10S7057C2_nt3v43Ev();
extern void _ZN10S7057C2_nt3v44Ev();
extern void _ZN10S7057C2_nt3v45Ev();
extern void _ZN10S7057C2_nt3v46Ev();
extern void _ZN10S7057C2_nt3v47Ev();
extern void _ZN10S7057C2_nt3v48Ev();
extern void _ZN10S7057C2_nt3v49Ev();
extern void _ZN10S7057C2_nt3v50Ev();
extern void _ZN10S7057C2_nt3v51Ev();
extern void _ZN10S7057C2_nt3v52Ev();
extern void _ZN10S7057C2_nt3v53Ev();
extern void _ZN10S7057C2_nt3v54Ev();
extern void _ZN10S7057C2_nt3v55Ev();
extern void _ZN10S7057C2_nt3v56Ev();
extern void _ZN10S7057C2_nt3v57Ev();
extern void _ZN10S7057C2_nt3v58Ev();
extern void _ZN10S7057C2_nt3v59Ev();
extern void _ZN10S7057C2_nt3v60Ev();
extern void _ZN10S7057C2_nt3v61Ev();
extern void _ZN10S7057C2_nt3v62Ev();
extern void _ZN10S7057C2_nt3v63Ev();
extern void _ZN10S7057C2_nt3v64Ev();
extern void _ZN10S7057C2_nt3v65Ev();
extern void _ZN10S7057C2_nt3v66Ev();
extern void _ZN10S7057C2_nt3v67Ev();
extern void _ZN10S7057C2_nt3v68Ev();
extern void _ZN10S7057C2_nt3v69Ev();
extern void _ZN7S7057C12v1Ev();
extern void _ZN7S7057C12v2Ev();
extern void _ZN7S7057C12v3Ev();
extern void _ZN7S7057C12v4Ev();
extern void _ZN7S7057C12v5Ev();
static  VTBL_ENTRY vtc_S7057C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7057C1[0]),
  (VTBL_ENTRY)&_ZN7S7057C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7057C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S7057C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN7S7057C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7057C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7057C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7057C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7057C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7057C1[];
extern  VTBL_ENTRY _ZTV7S7057C1[];
Class_Descriptor cd_S7057C1 = {  "S7057C1", // class name
  bases_S7057C1, 1,
  &(vtc_S7057C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S7057C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7057C1),73, //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  S7934C9  {
  virtual  ~S7934C9(); // _ZN7S7934C9D1Ev
  virtual void  v2(); // _ZN7S7934C92v2Ev
  S7934C9(); // tgen
};
//SIG(-1 S7934C9) C1{ vd v1}


 S7934C9 ::~S7934C9(){ note_dtor("S7934C9", this);}
void  S7934C9 ::v2(){vfunc_called(this, "_ZN7S7934C92v2Ev");}
S7934C9 ::S7934C9(){ note_ctor("S7934C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7934C9C1Ev();
extern void _ZN7S7934C9D1Ev();
Name_Map name_map_S7934C9[] = {
  NSPAIR(_ZN7S7934C9C1Ev),
  NSPAIR(_ZN7S7934C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7934C9[];
extern void _ZN7S7934C9D1Ev();
extern void _ZN7S7934C9D0Ev();
extern void _ZN7S7934C92v2Ev();
static  VTBL_ENTRY vtc_S7934C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7934C9[0]),
  (VTBL_ENTRY)&_ZN7S7934C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7934C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7934C92v2Ev,
};
extern VTBL_ENTRY _ZTI7S7934C9[];
extern  VTBL_ENTRY _ZTV7S7934C9[];
Class_Descriptor cd_S7934C9 = {  "S7934C9", // class name
  0,0,//no base classes
  &(vtc_S7934C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7934C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7934C9),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  S7934C12_nt  : S10180C17 , S7934C9 {
  ::S10180C136 s7934c12f0;
  ::S10180C136 s7934c12f1;
  ::S10180C18 s7934c12f2;
  char s7934c12f3[2];
  virtual  ~S7934C12_nt(); // _ZN11S7934C12_ntD1Ev
  virtual void  v3(); // _ZN11S7934C12_nt2v3Ev
  S7934C12_nt(); // tgen
};
//SIG(-1 S7934C12_nt) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v2} vd v1 FC7{ m Fp Fi FC8{ m} FC9{ m}} FC7 FC3 Fc[2]}


 S7934C12_nt ::~S7934C12_nt(){ note_dtor("S7934C12_nt", this);}
void  S7934C12_nt ::v3(){vfunc_called(this, "_ZN11S7934C12_nt2v3Ev");}
S7934C12_nt ::S7934C12_nt(){ note_ctor("S7934C12_nt", this);} // tgen

//skip512 S7934C12_nt

#else // __cplusplus

extern void _ZN11S7934C12_ntC1Ev();
extern void _ZN11S7934C12_ntD1Ev();
Name_Map name_map_S7934C12_nt[] = {
  NSPAIR(_ZN11S7934C12_ntC1Ev),
  NSPAIR(_ZN11S7934C12_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S7934C9;
extern VTBL_ENTRY _ZTI7S7934C9[];
extern  VTBL_ENTRY _ZTV7S7934C9[];
static Base_Class bases_S7934C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7934C9,    ABISELECT(48,32), //bcp->offset
    5, //bcp->virtual_function_table_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 _ZTI11S7934C12_nt[];
extern void _ZN11S7934C12_ntD1Ev();
extern void _ZN11S7934C12_ntD0Ev();
extern void _ZN11S7934C12_nt2v3Ev();
extern void ABISELECT(_ZThn48_N11S7934C12_ntD1Ev,_ZThn32_N11S7934C12_ntD1Ev)();
extern void ABISELECT(_ZThn48_N11S7934C12_ntD0Ev,_ZThn32_N11S7934C12_ntD0Ev)();
extern void _ZN7S7934C92v2Ev();
static  VTBL_ENTRY vtc_S7934C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S7934C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S7934C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S7934C12_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S7934C12_nt2v3Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI11S7934C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N11S7934C12_ntD1Ev,_ZThn32_N11S7934C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N11S7934C12_ntD0Ev,_ZThn32_N11S7934C12_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S7934C92v2Ev,
};
extern VTBL_ENTRY _ZTI11S7934C12_nt[];
VTBL_ENTRY *P__ZTI11S7934C12_nt = _ZTI11S7934C12_nt; 
extern  VTBL_ENTRY _ZTV11S7934C12_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7934C22_nt  {
  void *s7934c22f0;
  int s7934c22f1;
  ::S10180C138 s7934c22f2;
  ::S10180C133 s7934c22f3;
  void  mf7934c22(); // _ZN11S7934C22_nt9mf7934c22Ev
};
//SIG(-1 S7934C22_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S7934C22_nt ::mf7934c22(){}

//skip512 S7934C22_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7934C25_nt  {
  void *s7934c25f0;
  int s7934c25f1;
  __tsi64 s7934c25f2;
  int s7934c25f3;
  __tsi64 s7934c25f4;
  int s7934c25f5;
};
//SIG(-1 S7934C25_nt) C1{ Fp Fi FL Fi FL Fi}



//skip512 S7934C25_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7934C1  : S10180C17 , S7934C9 {
  int s7934c1f0;
  void *s7934c1f1[5];
  int s7934c1f2[2];
  ::S10179C93 s7934c1f3;
  char s7934c1f4;
  ::S10180C150 s7934c1f5;
  ::S10180C150 s7934c1f6;
  ::S10180C150 s7934c1f7;
  char s7934c1f8;
  ::S7934C12_nt s7934c1f9;
  void *s7934c1f10[3];
  ::S10180C6 s7934c1f11;
  void *s7934c1f12[3];
  __tsi64 s7934c1f13[3];
  char s7934c1f14[9];
  ::S7934C22_nt s7934c1f15;
  char s7934c1f16;
  ::S7934C25_nt s7934c1f17;
  int s7934c1f18;
  char s7934c1f19;
  int s7934c1f20[2];
  virtual  ~S7934C1(); // _ZN7S7934C1D1Ev
  virtual void  v1(); // _ZN7S7934C12v1Ev
  S7934C1(); // tgen
};
//SIG(1 S7934C1) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v2} vd v1 Fi Fp[5] Fi[2] FC7{ m Fl} Fc FC8{ m Fp[2]} FC8 FC8 Fc FC9{ BC2 BC6 vd v3 FC10{ m Fp Fi FC11{ m} FC12{ m}} FC10 FC3 Fc[2]} Fp[3] FC13{ m Fp Fi FC14{ m} FC14} Fp[3] FL[3] Fc[9] FC15{ m Fp Fi FC12 FC11} Fc FC16{ Fp Fi FL Fi FL Fi} Fi Fc Fi[2]}


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

static void Test_S7934C1()
{
  extern Class_Descriptor cd_S7934C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(62,80)];
    init_test(&cd_S7934C1, buf);
    S7934C1 *dp, &lv = *(dp=new (buf) S7934C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(488,316), "sizeof(S7934C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7934C1)");
    check_base_class_offset(lv, (S10180C17*), 0, "S7934C1");
    check_base_class_offset(lv, (S7934C9*), ABISELECT(48,32), "S7934C1");
    check_field_offset(lv, s7934c1f0, ABISELECT(56,36), "S7934C1.s7934c1f0");
    check_field_offset(lv, s7934c1f1, ABISELECT(64,40), "S7934C1.s7934c1f1");
    check_field_offset(lv, s7934c1f2, ABISELECT(104,60), "S7934C1.s7934c1f2");
    check_field_offset(lv, s7934c1f3, ABISELECT(112,68), "S7934C1.s7934c1f3");
    check_field_offset(lv, s7934c1f4, ABISELECT(120,72), "S7934C1.s7934c1f4");
    check_field_offset(lv, s7934c1f5, ABISELECT(128,76), "S7934C1.s7934c1f5");
    check_field_offset(lv, s7934c1f6, ABISELECT(144,84), "S7934C1.s7934c1f6");
    check_field_offset(lv, s7934c1f7, ABISELECT(160,92), "S7934C1.s7934c1f7");
    check_field_offset(lv, s7934c1f8, ABISELECT(176,100), "S7934C1.s7934c1f8");
    check_field_offset(lv, s7934c1f9, ABISELECT(184,104), "S7934C1.s7934c1f9");
    check_field_offset(lv, s7934c1f10, ABISELECT(296,180), "S7934C1.s7934c1f10");
    check_field_offset(lv, s7934c1f11, ABISELECT(320,192), "S7934C1.s7934c1f11");
    check_field_offset(lv, s7934c1f12, ABISELECT(336,204), "S7934C1.s7934c1f12");
    check_field_offset(lv, s7934c1f13, ABISELECT(360,216), "S7934C1.s7934c1f13");
    check_field_offset(lv, s7934c1f14, ABISELECT(384,240), "S7934C1.s7934c1f14");
    check_field_offset(lv, s7934c1f15, ABISELECT(400,252), "S7934C1.s7934c1f15");
    check_field_offset(lv, s7934c1f16, ABISELECT(416,264), "S7934C1.s7934c1f16");
    check_field_offset(lv, s7934c1f17, ABISELECT(424,268), "S7934C1.s7934c1f17");
    check_field_offset(lv, s7934c1f18, ABISELECT(472,300), "S7934C1.s7934c1f18");
    check_field_offset(lv, s7934c1f19, ABISELECT(476,304), "S7934C1.s7934c1f19");
    check_field_offset(lv, s7934c1f20, ABISELECT(480,308), "S7934C1.s7934c1f20");
    test_class_info(&lv, &cd_S7934C1);
    dp->~S7934C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7934C1(Test_S7934C1, "S7934C1", ABISELECT(488,316));

#else // __cplusplus

extern void _ZN7S7934C1C1Ev();
extern void _ZN7S7934C1D1Ev();
Name_Map name_map_S7934C1[] = {
  NSPAIR(_ZN7S7934C1C1Ev),
  NSPAIR(_ZN7S7934C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S7934C9;
extern VTBL_ENTRY _ZTI7S7934C9[];
extern  VTBL_ENTRY _ZTV7S7934C9[];
static Base_Class bases_S7934C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7934C9,    ABISELECT(48,32), //bcp->offset
    5, //bcp->virtual_function_table_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 _ZTI7S7934C1[];
extern void _ZN7S7934C1D1Ev();
extern void _ZN7S7934C1D0Ev();
extern void _ZN7S7934C12v1Ev();
extern void ABISELECT(_ZThn48_N7S7934C1D1Ev,_ZThn32_N7S7934C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7934C1D0Ev,_ZThn32_N7S7934C1D0Ev)();
extern void _ZN7S7934C92v2Ev();
static  VTBL_ENTRY vtc_S7934C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7934C1[0]),
  (VTBL_ENTRY)&_ZN7S7934C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7934C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7934C12v1Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7934C1D1Ev,_ZThn32_N7S7934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7934C1D0Ev,_ZThn32_N7S7934C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7934C92v2Ev,
};
extern VTBL_ENTRY _ZTI7S7934C1[];
extern  VTBL_ENTRY _ZTV7S7934C1[];
Class_Descriptor cd_S7934C1 = {  "S7934C1", // class name
  bases_S7934C1, 2,
  &(vtc_S7934C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(488,316), // object size
  NSPAIRA(_ZTI7S7934C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7934C1),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  S18992C5_nt  {
  virtual void  v2(); // _ZN11S18992C5_nt2v2Ev
  virtual void  v3(); // _ZN11S18992C5_nt2v3Ev
  virtual void  v4(); // _ZN11S18992C5_nt2v4Ev
  virtual void  v5(); // _ZN11S18992C5_nt2v5Ev
  ~S18992C5_nt(); // tgen
  S18992C5_nt(); // tgen
};
//SIG(-1 S18992C5_nt) C1{ v1 v2 v3 v4}


void  S18992C5_nt ::v2(){vfunc_called(this, "_ZN11S18992C5_nt2v2Ev");}
void  S18992C5_nt ::v3(){vfunc_called(this, "_ZN11S18992C5_nt2v3Ev");}
void  S18992C5_nt ::v4(){vfunc_called(this, "_ZN11S18992C5_nt2v4Ev");}
void  S18992C5_nt ::v5(){vfunc_called(this, "_ZN11S18992C5_nt2v5Ev");}
S18992C5_nt ::~S18992C5_nt(){ note_dtor("S18992C5_nt", this);} // tgen
S18992C5_nt ::S18992C5_nt(){ note_ctor("S18992C5_nt", this);} // tgen

//skip512 S18992C5_nt

#else // __cplusplus

extern void _ZN11S18992C5_ntC1Ev();
extern void _ZN11S18992C5_ntD1Ev();
Name_Map name_map_S18992C5_nt[] = {
  NSPAIR(_ZN11S18992C5_ntC1Ev),
  NSPAIR(_ZN11S18992C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
static  VTBL_ENTRY vtc_S18992C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S18992C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
VTBL_ENTRY *P__ZTI11S18992C5_nt = _ZTI11S18992C5_nt; 
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
Class_Descriptor cd_S18992C5_nt = {  "S18992C5_nt", // class name
  0,0,//no base classes
  &(vtc_S18992C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S18992C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S18992C5_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  S18992C4  : S18992C5_nt {
  virtual void  v6(); // _ZN8S18992C42v6Ev
  virtual void  v7(); // _ZN8S18992C42v7Ev
  ~S18992C4(); // tgen
  S18992C4(); // tgen
};
//SIG(-1 S18992C4) C1{ BC2{ v3 v4 v5 v6} v1 v2}


void  S18992C4 ::v6(){vfunc_called(this, "_ZN8S18992C42v6Ev");}
void  S18992C4 ::v7(){vfunc_called(this, "_ZN8S18992C42v7Ev");}
S18992C4 ::~S18992C4(){ note_dtor("S18992C4", this);} // tgen
S18992C4 ::S18992C4(){ note_ctor("S18992C4", this);} // tgen

static void Test_S18992C4()
{
  extern Class_Descriptor cd_S18992C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S18992C4, buf);
    S18992C4 *dp, &lv = *(dp=new (buf) S18992C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S18992C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18992C4)");
    check_base_class_offset(lv, (S18992C5_nt*), 0, "S18992C4");
    test_class_info(&lv, &cd_S18992C4);
    dp->~S18992C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C4(Test_S18992C4, "S18992C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S18992C4C1Ev();
extern void _ZN8S18992C4D1Ev();
Name_Map name_map_S18992C4[] = {
  NSPAIR(_ZN8S18992C4C1Ev),
  NSPAIR(_ZN8S18992C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18992C5_nt;
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
static Base_Class bases_S18992C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18992C5_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 _ZTI8S18992C4[];
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
static  VTBL_ENTRY vtc_S18992C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C4[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S18992C4[];
extern  VTBL_ENTRY _ZTV8S18992C4[];
Class_Descriptor cd_S18992C4 = {  "S18992C4", // class name
  bases_S18992C4, 1,
  &(vtc_S18992C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18992C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18992C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18992C7_nt  {
  virtual void  v8(); // _ZN11S18992C7_nt2v8Ev
  ~S18992C7_nt(); // tgen
  S18992C7_nt(); // tgen
};
//SIG(-1 S18992C7_nt) C1{ v1}


void  S18992C7_nt ::v8(){vfunc_called(this, "_ZN11S18992C7_nt2v8Ev");}
S18992C7_nt ::~S18992C7_nt(){ note_dtor("S18992C7_nt", this);} // tgen
S18992C7_nt ::S18992C7_nt(){ note_ctor("S18992C7_nt", this);} // tgen

//skip512 S18992C7_nt

#else // __cplusplus

extern void _ZN11S18992C7_ntC1Ev();
extern void _ZN11S18992C7_ntD1Ev();
Name_Map name_map_S18992C7_nt[] = {
  NSPAIR(_ZN11S18992C7_ntC1Ev),
  NSPAIR(_ZN11S18992C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S18992C7_nt[];
extern void _ZN11S18992C7_nt2v8Ev();
static  VTBL_ENTRY vtc_S18992C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S18992C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI11S18992C7_nt[];
VTBL_ENTRY *P__ZTI11S18992C7_nt = _ZTI11S18992C7_nt; 
extern  VTBL_ENTRY _ZTV11S18992C7_nt[];
Class_Descriptor cd_S18992C7_nt = {  "S18992C7_nt", // class name
  0,0,//no base classes
  &(vtc_S18992C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S18992C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S18992C7_nt),3, //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  S18992C6  : S18992C7_nt {
  void *s18992c6f0;
  virtual void  v9(); // _ZN8S18992C62v9Ev
  virtual void  v10(); // _ZN8S18992C63v10Ev
  virtual void  v11(); // _ZN8S18992C63v11Ev
  virtual void  v12(); // _ZN8S18992C63v12Ev
  virtual void  v13(); // _ZN8S18992C63v13Ev
  virtual void  v14(); // _ZN8S18992C63v14Ev
  virtual void  v15(); // _ZN8S18992C63v15Ev
  ~S18992C6(); // tgen
  S18992C6(); // tgen
};
//SIG(-1 S18992C6) C1{ BC2{ v8} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S18992C6 ::v9(){vfunc_called(this, "_ZN8S18992C62v9Ev");}
void  S18992C6 ::v10(){vfunc_called(this, "_ZN8S18992C63v10Ev");}
void  S18992C6 ::v11(){vfunc_called(this, "_ZN8S18992C63v11Ev");}
void  S18992C6 ::v12(){vfunc_called(this, "_ZN8S18992C63v12Ev");}
void  S18992C6 ::v13(){vfunc_called(this, "_ZN8S18992C63v13Ev");}
void  S18992C6 ::v14(){vfunc_called(this, "_ZN8S18992C63v14Ev");}
void  S18992C6 ::v15(){vfunc_called(this, "_ZN8S18992C63v15Ev");}
S18992C6 ::~S18992C6(){ note_dtor("S18992C6", this);} // tgen
S18992C6 ::S18992C6(){ note_ctor("S18992C6", this);} // tgen

static void Test_S18992C6()
{
  extern Class_Descriptor cd_S18992C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18992C6, buf);
    S18992C6 *dp, &lv = *(dp=new (buf) S18992C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18992C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18992C6)");
    check_base_class_offset(lv, (S18992C7_nt*), 0, "S18992C6");
    check_field_offset(lv, s18992c6f0, ABISELECT(8,4), "S18992C6.s18992c6f0");
    test_class_info(&lv, &cd_S18992C6);
    dp->~S18992C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C6(Test_S18992C6, "S18992C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18992C6C1Ev();
extern void _ZN8S18992C6D1Ev();
Name_Map name_map_S18992C6[] = {
  NSPAIR(_ZN8S18992C6C1Ev),
  NSPAIR(_ZN8S18992C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18992C7_nt;
extern VTBL_ENTRY _ZTI11S18992C7_nt[];
extern  VTBL_ENTRY _ZTV11S18992C7_nt[];
static Base_Class bases_S18992C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18992C7_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 _ZTI8S18992C6[];
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY vtc_S18992C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C6[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern VTBL_ENTRY _ZTI8S18992C6[];
extern  VTBL_ENTRY _ZTV8S18992C6[];
Class_Descriptor cd_S18992C6 = {  "S18992C6", // class name
  bases_S18992C6, 1,
  &(vtc_S18992C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18992C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18992C6),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18992C3  : S18992C4 , virtual S18992C6 {
  char s18992c3f0[10];
  virtual  ~S18992C3(); // _ZN8S18992C3D2Ev
  virtual void  v16(); // _ZN8S18992C33v16Ev
  virtual void  v17(); // _ZN8S18992C33v17Ev
  S18992C3(); // tgen
};
//SIG(-1 S18992C3) C1{ BC2{ BC3{ v3 v4 v5 v6} v7 v8} VBC4{ BC5{ v9} v10 v11 v12 v13 v14 v15 v16 Fp} vd v1 v2 Fc[10]}


 S18992C3 ::~S18992C3(){ note_dtor("S18992C3", this);}
void  S18992C3 ::v16(){vfunc_called(this, "_ZN8S18992C33v16Ev");}
void  S18992C3 ::v17(){vfunc_called(this, "_ZN8S18992C33v17Ev");}
S18992C3 ::S18992C3(){ note_ctor("S18992C3", this);} // tgen

static void Test_S18992C3()
{
  extern Class_Descriptor cd_S18992C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S18992C3, buf);
    S18992C3 *dp, &lv = *(dp=new (buf) S18992C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S18992C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18992C3)");
    check_base_class_offset(lv, (S18992C5_nt*)(S18992C4*), 0, "S18992C3");
    check_base_class_offset(lv, (S18992C4*), 0, "S18992C3");
    check_base_class_offset(lv, (S18992C7_nt*)(S18992C6*), ABISELECT(24,16), "S18992C3");
    check_base_class_offset(lv, (S18992C6*), ABISELECT(24,16), "S18992C3");
    check_field_offset(lv, s18992c3f0, ABISELECT(8,4), "S18992C3.s18992c3f0");
    test_class_info(&lv, &cd_S18992C3);
    dp->~S18992C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C3(Test_S18992C3, "S18992C3", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S18992C3C1Ev();
extern void _ZN8S18992C3D2Ev();
Name_Map name_map_S18992C3[] = {
  NSPAIR(_ZN8S18992C3C1Ev),
  NSPAIR(_ZN8S18992C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18992C5_nt;
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
extern Class_Descriptor cd_S18992C4;
extern VTBL_ENTRY _ZTI8S18992C4[];
extern  VTBL_ENTRY _ZTV8S18992C4[];
extern Class_Descriptor cd_S18992C7_nt;
extern VTBL_ENTRY _ZTI11S18992C7_nt[];
extern  VTBL_ENTRY _ZTV11S18992C7_nt[];
extern Class_Descriptor cd_S18992C6;
extern VTBL_ENTRY _ZTI8S18992C6[];
extern  VTBL_ENTRY _ZTV8S18992C6[];
static Base_Class bases_S18992C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18992C5_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
  0, 0},
  {&cd_S18992C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S18992C7_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18992C6,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18992C3[];
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void _ZN8S18992C3D1Ev();
extern void _ZN8S18992C3D0Ev();
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY vtc_S18992C3[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S18992C3[];
static  VTT_ENTRY vtt_S18992C3[] = {
  {&(_ZTV8S18992C3[3]),  3,31},
  {&(_ZTV8S18992C3[23]),  23,31},
};
extern VTBL_ENTRY _ZTI8S18992C3[];
extern  VTBL_ENTRY _ZTV8S18992C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C3[];
Class_Descriptor cd_S18992C3 = {  "S18992C3", // class name
  bases_S18992C3, 4,
  &(vtc_S18992C3[0]), // expected_vtbl_contents
  &(vtt_S18992C3[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S18992C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18992C3),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18992C3),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18992C11  {
  void *s18992c11f0[2];
  virtual void  v43(); // _ZN9S18992C113v43Ev
  virtual void  v44(); // _ZN9S18992C113v44Ev
  virtual void  v45(); // _ZN9S18992C113v45Ev
  virtual void  v46(); // _ZN9S18992C113v46Ev
  virtual void  v47(); // _ZN9S18992C113v47Ev
  ~S18992C11(); // tgen
  S18992C11(); // tgen
};
//SIG(-1 S18992C11) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S18992C11 ::v43(){vfunc_called(this, "_ZN9S18992C113v43Ev");}
void  S18992C11 ::v44(){vfunc_called(this, "_ZN9S18992C113v44Ev");}
void  S18992C11 ::v45(){vfunc_called(this, "_ZN9S18992C113v45Ev");}
void  S18992C11 ::v46(){vfunc_called(this, "_ZN9S18992C113v46Ev");}
void  S18992C11 ::v47(){vfunc_called(this, "_ZN9S18992C113v47Ev");}
S18992C11 ::~S18992C11(){ note_dtor("S18992C11", this);} // tgen
S18992C11 ::S18992C11(){ note_ctor("S18992C11", this);} // tgen

static void Test_S18992C11()
{
  extern Class_Descriptor cd_S18992C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18992C11, buf);
    S18992C11 *dp, &lv = *(dp=new (buf) S18992C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18992C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18992C11)");
    check_field_offset(lv, s18992c11f0, ABISELECT(8,4), "S18992C11.s18992c11f0");
    test_class_info(&lv, &cd_S18992C11);
    dp->~S18992C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C11(Test_S18992C11, "S18992C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S18992C11C1Ev();
extern void _ZN9S18992C11D1Ev();
Name_Map name_map_S18992C11[] = {
  NSPAIR(_ZN9S18992C11C1Ev),
  NSPAIR(_ZN9S18992C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S18992C11[];
extern void _ZN9S18992C113v43Ev();
extern void _ZN9S18992C113v44Ev();
extern void _ZN9S18992C113v45Ev();
extern void _ZN9S18992C113v46Ev();
extern void _ZN9S18992C113v47Ev();
static  VTBL_ENTRY vtc_S18992C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S18992C11[0]),
  (VTBL_ENTRY)&_ZN9S18992C113v43Ev,
  (VTBL_ENTRY)&_ZN9S18992C113v44Ev,
  (VTBL_ENTRY)&_ZN9S18992C113v45Ev,
  (VTBL_ENTRY)&_ZN9S18992C113v46Ev,
  (VTBL_ENTRY)&_ZN9S18992C113v47Ev,
};
extern VTBL_ENTRY _ZTI9S18992C11[];
extern  VTBL_ENTRY _ZTV9S18992C11[];
Class_Descriptor cd_S18992C11 = {  "S18992C11", // class name
  0,0,//no base classes
  &(vtc_S18992C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S18992C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S18992C11),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  S18992C10  : S18992C11 {
  int s18992c10f0;
  virtual  ~S18992C10(); // _ZN9S18992C10D1Ev
  virtual void  v42(); // _ZN9S18992C103v42Ev
  S18992C10(); // tgen
};
//SIG(-1 S18992C10) C1{ BC2{ v2 v3 v4 v5 v6 Fp[2]} vd v1 Fi}


 S18992C10 ::~S18992C10(){ note_dtor("S18992C10", this);}
void  S18992C10 ::v42(){vfunc_called(this, "_ZN9S18992C103v42Ev");}
S18992C10 ::S18992C10(){ note_ctor("S18992C10", this);} // tgen

static void Test_S18992C10()
{
  extern Class_Descriptor cd_S18992C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S18992C10, buf);
    S18992C10 *dp, &lv = *(dp=new (buf) S18992C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S18992C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18992C10)");
    check_base_class_offset(lv, (S18992C11*), 0, "S18992C10");
    check_field_offset(lv, s18992c10f0, ABISELECT(24,12), "S18992C10.s18992c10f0");
    test_class_info(&lv, &cd_S18992C10);
    dp->~S18992C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C10(Test_S18992C10, "S18992C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S18992C10C1Ev();
extern void _ZN9S18992C10D1Ev();
Name_Map name_map_S18992C10[] = {
  NSPAIR(_ZN9S18992C10C1Ev),
  NSPAIR(_ZN9S18992C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18992C11;
extern VTBL_ENTRY _ZTI9S18992C11[];
extern  VTBL_ENTRY _ZTV9S18992C11[];
static Base_Class bases_S18992C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18992C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S18992C10[];
extern void _ZN9S18992C113v43Ev();
extern void _ZN9S18992C113v44Ev();
extern void _ZN9S18992C113v45Ev();
extern void _ZN9S18992C113v46Ev();
extern void _ZN9S18992C113v47Ev();
extern void _ZN9S18992C10D1Ev();
extern void _ZN9S18992C10D0Ev();
extern void _ZN9S18992C103v42Ev();
static  VTBL_ENTRY vtc_S18992C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S18992C10[0]),
  (VTBL_ENTRY)&_ZN9S18992C113v43Ev,
  (VTBL_ENTRY)&_ZN9S18992C113v44Ev,
  (VTBL_ENTRY)&_ZN9S18992C113v45Ev,
  (VTBL_ENTRY)&_ZN9S18992C113v46Ev,
  (VTBL_ENTRY)&_ZN9S18992C113v47Ev,
  (VTBL_ENTRY)&_ZN9S18992C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18992C10D0Ev,
  (VTBL_ENTRY)&_ZN9S18992C103v42Ev,
};
extern VTBL_ENTRY _ZTI9S18992C10[];
extern  VTBL_ENTRY _ZTV9S18992C10[];
Class_Descriptor cd_S18992C10 = {  "S18992C10", // class name
  bases_S18992C10, 1,
  &(vtc_S18992C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S18992C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S18992C10),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18992C9  : virtual S18992C3 {
  int s18992c9f0;
  ::S18992C10 s18992c9f1[9];
  virtual  ~S18992C9(); // _ZN8S18992C9D2Ev
  virtual void  v18(); // _ZN8S18992C93v18Ev
  virtual void  v19(); // _ZN8S18992C93v19Ev
  virtual void  v20(); // _ZN8S18992C93v20Ev
  virtual void  v21(); // _ZN8S18992C93v21Ev
  S18992C9(); // tgen
};
//SIG(-1 S18992C9) C1{ VBC2{ BC3{ BC4{ v5 v6 v7 v8} v9 v10} VBC5{ BC6{ v11} v12 v13 v14 v15 v16 v17 v18 Fp} vd v19 v20 Fc[10]} vd v1 v2 v3 v4 Fi FC7{ BC8{ v22 v23 v24 v25 v26 Fp[2]} vd v21 Fi}[9]}


 S18992C9 ::~S18992C9(){ note_dtor("S18992C9", this);}
void  S18992C9 ::v18(){vfunc_called(this, "_ZN8S18992C93v18Ev");}
void  S18992C9 ::v19(){vfunc_called(this, "_ZN8S18992C93v19Ev");}
void  S18992C9 ::v20(){vfunc_called(this, "_ZN8S18992C93v20Ev");}
void  S18992C9 ::v21(){vfunc_called(this, "_ZN8S18992C93v21Ev");}
S18992C9 ::S18992C9(){ note_ctor("S18992C9", this);} // tgen

static void Test_S18992C9()
{
  extern Class_Descriptor cd_S18992C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,45)];
    init_test(&cd_S18992C9, buf);
    S18992C9 *dp, &lv = *(dp=new (buf) S18992C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,176), "sizeof(S18992C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18992C9)");
    check_base_class_offset(lv, (S18992C5_nt*)(S18992C4*)(S18992C3*), ABISELECT(304,152), "S18992C9");
    check_base_class_offset(lv, (S18992C4*)(S18992C3*), ABISELECT(304,152), "S18992C9");
    check_base_class_offset(lv, (S18992C7_nt*)(S18992C6*), ABISELECT(328,168), "S18992C9");
    check_base_class_offset(lv, (S18992C6*)(S18992C3*), ABISELECT(328,168), "S18992C9");
    check_base_class_offset(lv, (S18992C3*), ABISELECT(304,152), "S18992C9");
    check_field_offset(lv, s18992c9f0, ABISELECT(8,4), "S18992C9.s18992c9f0");
    check_field_offset(lv, s18992c9f1, ABISELECT(16,8), "S18992C9.s18992c9f1");
    test_class_info(&lv, &cd_S18992C9);
    dp->~S18992C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C9(Test_S18992C9, "S18992C9", ABISELECT(344,176));

#else // __cplusplus

extern void _ZN8S18992C9C1Ev();
extern void _ZN8S18992C9D2Ev();
Name_Map name_map_S18992C9[] = {
  NSPAIR(_ZN8S18992C9C1Ev),
  NSPAIR(_ZN8S18992C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18992C5_nt;
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
extern Class_Descriptor cd_S18992C4;
extern VTBL_ENTRY _ZTI8S18992C4[];
extern  VTBL_ENTRY _ZTV8S18992C4[];
extern Class_Descriptor cd_S18992C7_nt;
extern VTBL_ENTRY _ZTI11S18992C7_nt[];
extern  VTBL_ENTRY _ZTV11S18992C7_nt[];
extern Class_Descriptor cd_S18992C6;
extern VTBL_ENTRY _ZTI8S18992C6[];
extern  VTBL_ENTRY _ZTV8S18992C6[];
extern Class_Descriptor cd_S18992C3;
extern VTBL_ENTRY _ZTI8S18992C3[];
extern  VTBL_ENTRY _ZTV8S18992C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C3[];
static Base_Class bases_S18992C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18992C5_nt,    ABISELECT(304,152), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18992C4,    ABISELECT(304,152), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18992C7_nt,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18992C6,    ABISELECT(328,168), //bcp->offset
    32, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18992C3,    ABISELECT(304,152), //bcp->offset
    10, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18992C9[];
extern void _ZN8S18992C9D1Ev();
extern void _ZN8S18992C9D0Ev();
extern void _ZN8S18992C93v18Ev();
extern void _ZN8S18992C93v19Ev();
extern void _ZN8S18992C93v20Ev();
extern void _ZN8S18992C93v21Ev();
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S18992C9D1Ev,_ZThn152_N8S18992C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S18992C9D0Ev,_ZThn152_N8S18992C9D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY vtc_S18992C9[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN8S18992C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v21Ev,
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S18992C9[];
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void _ZN8S18992C3D1Ev();
extern void _ZN8S18992C3D0Ev();
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__8S18992C9[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C3__8S18992C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
static  VTT_ENTRY vtt_S18992C9[] = {
  {&(_ZTV8S18992C9[4]),  4,50},
  {&(_ZTV8S18992C9[22]),  22,50},
  {&(_ZTV8S18992C9[42]),  42,50},
  {&(_tg__ZTV8S18992C3__8S18992C9[3]),  3,13},
  {&(_tg__ZTV8S18992C6__8S18992C3__8S18992C9[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S18992C9[];
extern  VTBL_ENTRY _ZTV8S18992C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C9[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18992C9D0Ev,_ZThn152_N8S18992C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18992C9D1Ev,_ZThn152_N8S18992C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18992C9 = {  "S18992C9", // class name
  bases_S18992C9, 5,
  &(vtc_S18992C9[0]), // expected_vtbl_contents
  &(vtt_S18992C9[0]), // expected_vtt_contents
  ABISELECT(344,176), // object size
  NSPAIRA(_ZTI8S18992C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18992C9),50, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18992C9),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18992C8  : virtual S18992C9 {
  __tsi64 s18992c8f0;
  long s18992c8f1;
  virtual void  v22(); // _ZN8S18992C83v22Ev
  virtual void  v23(); // _ZN8S18992C83v23Ev
  virtual void  v24(); // _ZN8S18992C83v24Ev
  ~S18992C8(); // tgen
  S18992C8(); // tgen
};
//SIG(-1 S18992C8) C1{ VBC2{ VBC3{ BC4{ BC5{ v4 v5 v6 v7} v8 v9} VBC6{ BC7{ v10} v11 v12 v13 v14 v15 v16 v17 Fp} vd v18 v19 Fc[10]} vd v20 v21 v22 v23 Fi FC8{ BC9{ v25 v26 v27 v28 v29 Fp[2]} vd v24 Fi}[9]} v1 v2 v3 FL Fl}


void  S18992C8 ::v22(){vfunc_called(this, "_ZN8S18992C83v22Ev");}
void  S18992C8 ::v23(){vfunc_called(this, "_ZN8S18992C83v23Ev");}
void  S18992C8 ::v24(){vfunc_called(this, "_ZN8S18992C83v24Ev");}
S18992C8 ::~S18992C8(){ note_dtor("S18992C8", this);} // tgen
S18992C8 ::S18992C8(){ note_ctor("S18992C8", this);} // tgen

static void Test_S18992C8()
{
  extern Class_Descriptor cd_S18992C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,49)];
    init_test(&cd_S18992C8, buf);
    S18992C8 *dp, &lv = *(dp=new (buf) S18992C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,192), "sizeof(S18992C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18992C8)");
    check_base_class_offset(lv, (S18992C5_nt*)(S18992C4*)(S18992C3*), ABISELECT(328,168), "S18992C8");
    check_base_class_offset(lv, (S18992C4*)(S18992C3*), ABISELECT(328,168), "S18992C8");
    check_base_class_offset(lv, (S18992C7_nt*)(S18992C6*), ABISELECT(352,184), "S18992C8");
    check_base_class_offset(lv, (S18992C6*)(S18992C3*), ABISELECT(352,184), "S18992C8");
    check_base_class_offset(lv, (S18992C3*)(S18992C9*), ABISELECT(328,168), "S18992C8");
    check_base_class_offset(lv, (S18992C9*), ABISELECT(24,16), "S18992C8");
    check_field_offset(lv, s18992c8f0, ABISELECT(8,4), "S18992C8.s18992c8f0");
    check_field_offset(lv, s18992c8f1, ABISELECT(16,12), "S18992C8.s18992c8f1");
    test_class_info(&lv, &cd_S18992C8);
    dp->~S18992C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C8(Test_S18992C8, "S18992C8", ABISELECT(368,192));

#else // __cplusplus

extern void _ZN8S18992C8C1Ev();
extern void _ZN8S18992C8D1Ev();
Name_Map name_map_S18992C8[] = {
  NSPAIR(_ZN8S18992C8C1Ev),
  NSPAIR(_ZN8S18992C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18992C5_nt;
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
extern Class_Descriptor cd_S18992C4;
extern VTBL_ENTRY _ZTI8S18992C4[];
extern  VTBL_ENTRY _ZTV8S18992C4[];
extern Class_Descriptor cd_S18992C7_nt;
extern VTBL_ENTRY _ZTI11S18992C7_nt[];
extern  VTBL_ENTRY _ZTV11S18992C7_nt[];
extern Class_Descriptor cd_S18992C6;
extern VTBL_ENTRY _ZTI8S18992C6[];
extern  VTBL_ENTRY _ZTV8S18992C6[];
extern Class_Descriptor cd_S18992C3;
extern VTBL_ENTRY _ZTI8S18992C3[];
extern  VTBL_ENTRY _ZTV8S18992C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C3[];
extern Class_Descriptor cd_S18992C9;
extern VTBL_ENTRY _ZTI8S18992C9[];
extern  VTBL_ENTRY _ZTV8S18992C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C9[];
static Base_Class bases_S18992C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18992C5_nt,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18992C4,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18992C7_nt,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18992C6,    ABISELECT(352,184), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18992C3,    ABISELECT(328,168), //bcp->offset
    25, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18992C9,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18992C8[];
extern void _ZN8S18992C83v22Ev();
extern void _ZN8S18992C83v23Ev();
extern void _ZN8S18992C83v24Ev();
extern void _ZN8S18992C8D1Ev();
extern void _ZN8S18992C8D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S18992C8D1Ev,_ZTv0_n20_N8S18992C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S18992C8D1Ev,_ZThn16_N8S18992C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18992C8D0Ev,_ZTv0_n20_N8S18992C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S18992C8D0Ev,_ZThn16_N8S18992C8D0Ev)() __attribute__((weak));
extern void _ZN8S18992C93v18Ev();
extern void _ZN8S18992C93v19Ev();
extern void _ZN8S18992C93v20Ev();
extern void _ZN8S18992C93v21Ev();
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18992C8D1Ev,_ZTv0_n40_N8S18992C8D1Ev)();
extern void ABISELECT(_ZThn328_N8S18992C8D1Ev,_ZThn168_N8S18992C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18992C8D0Ev,_ZTv0_n40_N8S18992C8D0Ev)();
extern void ABISELECT(_ZThn328_N8S18992C8D0Ev,_ZThn168_N8S18992C8D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY vtc_S18992C8[] = {
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&_ZN8S18992C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v24Ev,
  (VTBL_ENTRY)&_ZN8S18992C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C8D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C8D1Ev,_ZTv0_n20_N8S18992C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C8D0Ev,_ZTv0_n20_N8S18992C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v21Ev,
  0,
  0,
  ABISELECT(-328,-168),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C8D1Ev,_ZTv0_n40_N8S18992C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C8D0Ev,_ZTv0_n40_N8S18992C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S18992C8[];
extern void _ZN8S18992C9D1Ev();
extern void _ZN8S18992C9D0Ev();
extern void _ZN8S18992C93v18Ev();
extern void _ZN8S18992C93v19Ev();
extern void _ZN8S18992C93v20Ev();
extern void _ZN8S18992C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C9__8S18992C8[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN8S18992C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v21Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S18992C9D1Ev,_ZThn152_N8S18992C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S18992C9D0Ev,_ZThn152_N8S18992C9D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__8S18992C9__8S18992C8[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C9__8S18992C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void _ZN8S18992C3D1Ev();
extern void _ZN8S18992C3D0Ev();
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__8S18992C8[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C3__8S18992C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
static  VTT_ENTRY vtt_S18992C8[] = {
  {&(_ZTV8S18992C8[5]),  5,65},
  {&(_ZTV8S18992C8[19]),  19,65},
  {&(_ZTV8S18992C8[37]),  37,65},
  {&(_ZTV8S18992C8[57]),  57,65},
  {&(_tg__ZTV8S18992C9__8S18992C8[4]),  4,10},
  {&(_tg__ZTV8S18992C3__8S18992C9__8S18992C8[12]),  12,22},
  {&(_tg__ZTV8S18992C6__8S18992C9__8S18992C8[10]),  10,18},
  {&(_tg__ZTV8S18992C3__8S18992C8[3]),  3,13},
  {&(_tg__ZTV8S18992C6__8S18992C3__8S18992C8[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S18992C8[];
extern  VTBL_ENTRY _ZTV8S18992C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C8[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18992C9D0Ev,_ZThn152_N8S18992C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18992C9D1Ev,_ZThn152_N8S18992C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C8D0Ev,_ZTv0_n40_N8S18992C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S18992C8D0Ev,_ZThn168_N8S18992C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C8D1Ev,_ZTv0_n40_N8S18992C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S18992C8D1Ev,_ZThn168_N8S18992C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C8D0Ev,_ZTv0_n20_N8S18992C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S18992C8D0Ev,_ZThn16_N8S18992C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C8D1Ev,_ZTv0_n20_N8S18992C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S18992C8D1Ev,_ZThn16_N8S18992C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18992C8 = {  "S18992C8", // class name
  bases_S18992C8, 6,
  &(vtc_S18992C8[0]), // expected_vtbl_contents
  &(vtt_S18992C8[0]), // expected_vtt_contents
  ABISELECT(368,192), // object size
  NSPAIRA(_ZTI8S18992C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18992C8),65, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18992C8),9, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18992C12  {
  __tsi64 s18992c12f0:11;
  void *s18992c12f1[9];
  int s18992c12f2;
  void *s18992c12f3;
  long double s18992c12f4;
  virtual void  v38(); // _ZN9S18992C123v38Ev
  virtual void  v39(); // _ZN9S18992C123v39Ev
  virtual void  v40(); // _ZN9S18992C123v40Ev
  virtual void  v41(); // _ZN9S18992C123v41Ev
  ~S18992C12(); // tgen
  S18992C12(); // tgen
};
//SIG(-1 S18992C12) C1{ v1 v2 v3 v4 FL:11 Fp[9] Fi Fp FD}


void  S18992C12 ::v38(){vfunc_called(this, "_ZN9S18992C123v38Ev");}
void  S18992C12 ::v39(){vfunc_called(this, "_ZN9S18992C123v39Ev");}
void  S18992C12 ::v40(){vfunc_called(this, "_ZN9S18992C123v40Ev");}
void  S18992C12 ::v41(){vfunc_called(this, "_ZN9S18992C123v41Ev");}
S18992C12 ::~S18992C12(){ note_dtor("S18992C12", this);} // tgen
S18992C12 ::S18992C12(){ note_ctor("S18992C12", this);} // tgen

static void Test_S18992C12()
{
  extern Class_Descriptor cd_S18992C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S18992C12, buf);
    S18992C12 *dp, &lv = *(dp=new (buf) S18992C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S18992C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18992C12)");
    set_bf_and_test(lv, s18992c12f0, ABISELECT(8,4), 0, 11, 1, "S18992C12");
    set_bf_and_test(lv, s18992c12f0, ABISELECT(8,4), 0, 11, hide_sll(1LL<<10), "S18992C12");
    check_field_offset(lv, s18992c12f1, ABISELECT(16,8), "S18992C12.s18992c12f1");
    check_field_offset(lv, s18992c12f2, ABISELECT(88,44), "S18992C12.s18992c12f2");
    check_field_offset(lv, s18992c12f3, ABISELECT(96,48), "S18992C12.s18992c12f3");
    check_field_offset(lv, s18992c12f4, ABISELECT(112,52), "S18992C12.s18992c12f4");
    test_class_info(&lv, &cd_S18992C12);
    dp->~S18992C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C12(Test_S18992C12, "S18992C12", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN9S18992C12C1Ev();
extern void _ZN9S18992C12D1Ev();
Name_Map name_map_S18992C12[] = {
  NSPAIR(_ZN9S18992C12C1Ev),
  NSPAIR(_ZN9S18992C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S18992C12[];
extern void _ZN9S18992C123v38Ev();
extern void _ZN9S18992C123v39Ev();
extern void _ZN9S18992C123v40Ev();
extern void _ZN9S18992C123v41Ev();
static  VTBL_ENTRY vtc_S18992C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S18992C12[0]),
  (VTBL_ENTRY)&_ZN9S18992C123v38Ev,
  (VTBL_ENTRY)&_ZN9S18992C123v39Ev,
  (VTBL_ENTRY)&_ZN9S18992C123v40Ev,
  (VTBL_ENTRY)&_ZN9S18992C123v41Ev,
};
extern VTBL_ENTRY _ZTI9S18992C12[];
extern  VTBL_ENTRY _ZTV9S18992C12[];
Class_Descriptor cd_S18992C12 = {  "S18992C12", // class name
  0,0,//no base classes
  &(vtc_S18992C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI9S18992C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S18992C12),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  S18992C2  : S18992C3 , S18992C8 {
  ::S18992C12 s18992c2f0;
  void *s18992c2f1;
  virtual  ~S18992C2(); // _ZN8S18992C2D2Ev
  virtual void  v25(); // _ZN8S18992C23v25Ev
  virtual void  v26(); // _ZN8S18992C23v26Ev
  virtual void  v27(); // _ZN8S18992C23v27Ev
  virtual void  v28(); // _ZN8S18992C23v28Ev
  virtual void  v29(); // _ZN8S18992C23v29Ev
  virtual void  v30(); // _ZN8S18992C23v30Ev
  S18992C2(); // tgen
};
//SIG(-1 S18992C2) C1{ BC2{ BC3{ BC4{ v7 v8 v9 v10} v11 v12} VBC5{ BC6{ v13} v14 v15 v16 v17 v18 v19 v20 Fp} vd v21 v22 Fc[10]} BC7{ VBC8{ VBC2 vd v23 v24 v25 v26 Fi FC9{ BC10{ v35 v36 v37 v38 v39 Fp[2]} vd v34 Fi}[9]} v27 v28 v29 FL Fl} vd v1 v2 v3 v4 v5 v6 FC11{ v30 v31 v32 v33 FL:11 Fp[9] Fi Fp FD} Fp}


 S18992C2 ::~S18992C2(){ note_dtor("S18992C2", this);}
void  S18992C2 ::v25(){vfunc_called(this, "_ZN8S18992C23v25Ev");}
void  S18992C2 ::v26(){vfunc_called(this, "_ZN8S18992C23v26Ev");}
void  S18992C2 ::v27(){vfunc_called(this, "_ZN8S18992C23v27Ev");}
void  S18992C2 ::v28(){vfunc_called(this, "_ZN8S18992C23v28Ev");}
void  S18992C2 ::v29(){vfunc_called(this, "_ZN8S18992C23v29Ev");}
void  S18992C2 ::v30(){vfunc_called(this, "_ZN8S18992C23v30Ev");}
S18992C2 ::S18992C2(){ note_ctor("S18992C2", this);} // tgen

static void Test_S18992C2()
{
  extern Class_Descriptor cd_S18992C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,70)];
    init_test(&cd_S18992C2, buf);
    S18992C2 *dp, &lv = *(dp=new (buf) S18992C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,276), "sizeof(S18992C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18992C2)");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C5_nt*)(S18992C4*)(S18992C3*), 0, "S18992C2");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C4*)(S18992C3*), 0, "S18992C2");
    check_base_class_offset(lv, (S18992C7_nt*)(S18992C6*), ABISELECT(184,100), "S18992C2");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C6*)(S18992C3*), ABISELECT(184,100), "S18992C2");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C6*)(S18992C3*), ABISELECT(184,100), "S18992C2");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C3*), 0, "S18992C2");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C5_nt*)(S18992C4*)(S18992C3*), ABISELECT(504,260), "S18992C2");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C4*)(S18992C3*), ABISELECT(504,260), "S18992C2");
    check_base_class_offset(lv, (S18992C3*)(S18992C9*), ABISELECT(504,260), "S18992C2");
    check_base_class_offset(lv, (S18992C9*)(S18992C8*), ABISELECT(200,108), "S18992C2");
    check_base_class_offset(lv, (S18992C8*), ABISELECT(24,16), "S18992C2");
    check_field_offset(lv, s18992c2f0, ABISELECT(48,32), "S18992C2.s18992c2f0");
    check_field_offset(lv, s18992c2f1, ABISELECT(176,96), "S18992C2.s18992c2f1");
    test_class_info(&lv, &cd_S18992C2);
    dp->~S18992C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C2(Test_S18992C2, "S18992C2", ABISELECT(528,276));

#else // __cplusplus

extern void _ZN8S18992C2C1Ev();
extern void _ZN8S18992C2D2Ev();
Name_Map name_map_S18992C2[] = {
  NSPAIR(_ZN8S18992C2C1Ev),
  NSPAIR(_ZN8S18992C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18992C5_nt;
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
extern Class_Descriptor cd_S18992C4;
extern VTBL_ENTRY _ZTI8S18992C4[];
extern  VTBL_ENTRY _ZTV8S18992C4[];
extern Class_Descriptor cd_S18992C7_nt;
extern VTBL_ENTRY _ZTI11S18992C7_nt[];
extern  VTBL_ENTRY _ZTV11S18992C7_nt[];
extern Class_Descriptor cd_S18992C6;
extern VTBL_ENTRY _ZTI8S18992C6[];
extern  VTBL_ENTRY _ZTV8S18992C6[];
extern Class_Descriptor cd_S18992C3;
extern VTBL_ENTRY _ZTI8S18992C3[];
extern  VTBL_ENTRY _ZTV8S18992C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C3[];
extern Class_Descriptor cd_S18992C5_nt;
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
extern Class_Descriptor cd_S18992C4;
extern VTBL_ENTRY _ZTI8S18992C4[];
extern  VTBL_ENTRY _ZTV8S18992C4[];
extern Class_Descriptor cd_S18992C3;
extern VTBL_ENTRY _ZTI8S18992C3[];
extern  VTBL_ENTRY _ZTV8S18992C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C3[];
extern Class_Descriptor cd_S18992C9;
extern VTBL_ENTRY _ZTI8S18992C9[];
extern  VTBL_ENTRY _ZTV8S18992C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C9[];
extern Class_Descriptor cd_S18992C8;
extern VTBL_ENTRY _ZTI8S18992C8[];
extern  VTBL_ENTRY _ZTV8S18992C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C8[];
static Base_Class bases_S18992C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18992C5_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
    7, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S18992C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18992C7_nt,    ABISELECT(184,100), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18992C6,    ABISELECT(184,100), //bcp->offset
    31, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18992C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18992C5_nt,    ABISELECT(504,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S18992C4,    ABISELECT(504,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S18992C3,    ABISELECT(504,260), //bcp->offset
    64, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S18992C9,    ABISELECT(200,108), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S18992C8,    ABISELECT(24,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18992C2[];
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void _ZN8S18992C2D1Ev();
extern void _ZN8S18992C2D0Ev();
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
extern void _ZN8S18992C23v25Ev();
extern void _ZN8S18992C23v26Ev();
extern void _ZN8S18992C23v27Ev();
extern void _ZN8S18992C23v28Ev();
extern void _ZN8S18992C23v29Ev();
extern void _ZN8S18992C23v30Ev();
extern void _ZN8S18992C83v22Ev();
extern void _ZN8S18992C83v23Ev();
extern void _ZN8S18992C83v24Ev();
extern void ABISELECT(_ZThn24_N8S18992C2D1Ev,_ZThn16_N8S18992C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S18992C2D0Ev,_ZThn16_N8S18992C2D0Ev)();
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S18992C2D1Ev,_ZTv0_n20_N8S18992C2D1Ev)();
extern void ABISELECT(_ZThn200_N8S18992C2D1Ev,_ZThn108_N8S18992C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18992C2D0Ev,_ZTv0_n20_N8S18992C2D0Ev)();
extern void ABISELECT(_ZThn200_N8S18992C2D0Ev,_ZThn108_N8S18992C2D0Ev)() __attribute__((weak));
extern void _ZN8S18992C93v18Ev();
extern void _ZN8S18992C93v19Ev();
extern void _ZN8S18992C93v20Ev();
extern void _ZN8S18992C93v21Ev();
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18992C2D1Ev,_ZTv0_n40_N8S18992C2D1Ev)();
extern void ABISELECT(_ZThn504_N8S18992C2D1Ev,_ZThn260_N8S18992C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18992C2D0Ev,_ZTv0_n40_N8S18992C2D0Ev)();
extern void ABISELECT(_ZThn504_N8S18992C2D0Ev,_ZThn260_N8S18992C2D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY vtc_S18992C2[] = {
  ABISELECT(504,260),
  ABISELECT(200,108),
  ABISELECT(184,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C2[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18992C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v25Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v27Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v28Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v29Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v30Ev,
  ABISELECT(160,84),
  ABISELECT(480,244),
  ABISELECT(176,92),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18992C2[0]),
  (VTBL_ENTRY)&_ZN8S18992C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S18992C2D1Ev,_ZThn16_N8S18992C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S18992C2D0Ev,_ZThn16_N8S18992C2D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S18992C2[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  ABISELECT(-200,-108),
  (VTBL_ENTRY)&(_ZTI8S18992C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C2D1Ev,_ZTv0_n20_N8S18992C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C2D0Ev,_ZTv0_n20_N8S18992C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v21Ev,
  0,
  0,
  ABISELECT(-504,-260),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-504,-260),
  (VTBL_ENTRY)&(_ZTI8S18992C2[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C2D1Ev,_ZTv0_n40_N8S18992C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C2D0Ev,_ZTv0_n40_N8S18992C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern VTBL_ENTRY _ZTV8S18992C2[];
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void _ZN8S18992C3D1Ev();
extern void _ZN8S18992C3D0Ev();
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__A__8S18992C2[] = {
  ABISELECT(184,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C3__A__8S18992C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern void _ZN8S18992C83v22Ev();
extern void _ZN8S18992C83v23Ev();
extern void _ZN8S18992C83v24Ev();
extern void _ZN8S18992C8D1Ev();
extern void _ZN8S18992C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C8__8S18992C2[] = {
  ABISELECT(160,84),
  ABISELECT(480,244),
  ABISELECT(176,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&_ZN8S18992C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v24Ev,
  (VTBL_ENTRY)&_ZN8S18992C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S18992C8D1Ev,_ZTv0_n20_N8S18992C8D1Ev)();
extern void ABISELECT(_ZThn176_N8S18992C8D1Ev,_ZThn92_N8S18992C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18992C8D0Ev,_ZTv0_n20_N8S18992C8D0Ev)();
extern void ABISELECT(_ZThn176_N8S18992C8D0Ev,_ZThn92_N8S18992C8D0Ev)() __attribute__((weak));
extern void _ZN8S18992C93v18Ev();
extern void _ZN8S18992C93v19Ev();
extern void _ZN8S18992C93v20Ev();
extern void _ZN8S18992C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C9__8S18992C8__8S18992C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-92),
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C8D1Ev,_ZTv0_n20_N8S18992C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C8D0Ev,_ZTv0_n20_N8S18992C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v21Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18992C8D1Ev,_ZTv0_n40_N8S18992C8D1Ev)();
extern void ABISELECT(_ZThn480_N8S18992C8D1Ev,_ZThn244_N8S18992C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18992C8D0Ev,_ZTv0_n40_N8S18992C8D0Ev)();
extern void ABISELECT(_ZThn480_N8S18992C8D0Ev,_ZThn244_N8S18992C8D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__8S18992C8__8S18992C2[] = {
  0,
  0,
  ABISELECT(-480,-244),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-480,-244),
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C8D1Ev,_ZTv0_n40_N8S18992C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C8D0Ev,_ZTv0_n40_N8S18992C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C8__8S18992C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern void _ZN8S18992C9D1Ev();
extern void _ZN8S18992C9D0Ev();
extern void _ZN8S18992C93v18Ev();
extern void _ZN8S18992C93v19Ev();
extern void _ZN8S18992C93v20Ev();
extern void _ZN8S18992C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C9__8S18992C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN8S18992C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v21Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S18992C9D1Ev,_ZThn152_N8S18992C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S18992C9D0Ev,_ZThn152_N8S18992C9D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__8S18992C9__8S18992C2[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C9__8S18992C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void _ZN8S18992C3D1Ev();
extern void _ZN8S18992C3D0Ev();
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__A1__8S18992C2[] = {
  ABISELECT(-320,-160),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C3__A1__8S18992C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,160),
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
static  VTT_ENTRY vtt_S18992C2[] = {
  {&(_ZTV8S18992C2[5]),  5,86},
  {&(_tg__ZTV8S18992C3__A__8S18992C2[3]),  3,13},
  {&(_tg__ZTV8S18992C6__8S18992C3__A__8S18992C2[10]),  10,18},
  {&(_tg__ZTV8S18992C8__8S18992C2[5]),  5,10},
  {&(_tg__ZTV8S18992C9__8S18992C8__8S18992C2[9]),  9,15},
  {&(_tg__ZTV8S18992C3__8S18992C8__8S18992C2[12]),  12,22},
  {&(_tg__ZTV8S18992C6__8S18992C8__8S18992C2[10]),  10,18},
  {&(_ZTV8S18992C2[41]),  41,86},
  {&(_ZTV8S18992C2[26]),  26,86},
  {&(_ZTV8S18992C2[58]),  58,86},
  {&(_ZTV8S18992C2[76]),  76,86},
  {&(_tg__ZTV8S18992C9__8S18992C2[4]),  4,10},
  {&(_tg__ZTV8S18992C3__8S18992C9__8S18992C2[12]),  12,22},
  {&(_tg__ZTV8S18992C6__8S18992C9__8S18992C2[10]),  10,18},
  {&(_tg__ZTV8S18992C3__A1__8S18992C2[3]),  3,13},
  {&(_tg__ZTV8S18992C6__8S18992C3__A1__8S18992C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S18992C2[];
extern  VTBL_ENTRY _ZTV8S18992C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C2[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18992C9D0Ev,_ZThn152_N8S18992C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18992C9D1Ev,_ZThn152_N8S18992C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C8D0Ev,_ZTv0_n40_N8S18992C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S18992C8D0Ev,_ZThn244_N8S18992C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C8D1Ev,_ZTv0_n40_N8S18992C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S18992C8D1Ev,_ZThn244_N8S18992C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C8D0Ev,_ZTv0_n20_N8S18992C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S18992C8D0Ev,_ZThn92_N8S18992C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C8D1Ev,_ZTv0_n20_N8S18992C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S18992C8D1Ev,_ZThn92_N8S18992C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C2D0Ev,_ZTv0_n40_N8S18992C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S18992C2D0Ev,_ZThn260_N8S18992C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C2D1Ev,_ZTv0_n40_N8S18992C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S18992C2D1Ev,_ZThn260_N8S18992C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C2D0Ev,_ZTv0_n20_N8S18992C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S18992C2D0Ev,_ZThn108_N8S18992C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C2D1Ev,_ZTv0_n20_N8S18992C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S18992C2D1Ev,_ZThn108_N8S18992C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18992C2 = {  "S18992C2", // class name
  bases_S18992C2, 10,
  &(vtc_S18992C2[0]), // expected_vtbl_contents
  &(vtt_S18992C2[0]), // expected_vtt_contents
  ABISELECT(528,276), // object size
  NSPAIRA(_ZTI8S18992C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18992C2),86, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18992C2),16, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18992C13  : virtual S18992C5_nt {
  int s18992c13f0;
  long double s18992c13f1;
  virtual void  v31(); // _ZN9S18992C133v31Ev
  virtual void  v32(); // _ZN9S18992C133v32Ev
  virtual void  v33(); // _ZN9S18992C133v33Ev
  virtual void  v34(); // _ZN9S18992C133v34Ev
  virtual void  v35(); // _ZN9S18992C133v35Ev
  virtual void  v36(); // _ZN9S18992C133v36Ev
  virtual void  v37(); // _ZN9S18992C133v37Ev
  ~S18992C13(); // tgen
  S18992C13(); // tgen
};
//SIG(-1 S18992C13) C1{ VBC2{ v8 v9 v10 v11} v1 v2 v3 v4 v5 v6 v7 Fi FD}


void  S18992C13 ::v31(){vfunc_called(this, "_ZN9S18992C133v31Ev");}
void  S18992C13 ::v32(){vfunc_called(this, "_ZN9S18992C133v32Ev");}
void  S18992C13 ::v33(){vfunc_called(this, "_ZN9S18992C133v33Ev");}
void  S18992C13 ::v34(){vfunc_called(this, "_ZN9S18992C133v34Ev");}
void  S18992C13 ::v35(){vfunc_called(this, "_ZN9S18992C133v35Ev");}
void  S18992C13 ::v36(){vfunc_called(this, "_ZN9S18992C133v36Ev");}
void  S18992C13 ::v37(){vfunc_called(this, "_ZN9S18992C133v37Ev");}
S18992C13 ::~S18992C13(){ note_dtor("S18992C13", this);} // tgen
S18992C13 ::S18992C13(){ note_ctor("S18992C13", this);} // tgen

static void Test_S18992C13()
{
  extern Class_Descriptor cd_S18992C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,6)];
    init_test(&cd_S18992C13, buf);
    S18992C13 *dp, &lv = *(dp=new (buf) S18992C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18992C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18992C13)");
    check_base_class_offset(lv, (S18992C5_nt*), 0, "S18992C13");
    check_field_offset(lv, s18992c13f0, ABISELECT(8,4), "S18992C13.s18992c13f0");
    check_field_offset(lv, s18992c13f1, ABISELECT(16,8), "S18992C13.s18992c13f1");
    test_class_info(&lv, &cd_S18992C13);
    dp->~S18992C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C13(Test_S18992C13, "S18992C13", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S18992C13C1Ev();
extern void _ZN9S18992C13D1Ev();
Name_Map name_map_S18992C13[] = {
  NSPAIR(_ZN9S18992C13C1Ev),
  NSPAIR(_ZN9S18992C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18992C5_nt;
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
static Base_Class bases_S18992C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18992C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S18992C13[];
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN9S18992C133v31Ev();
extern void _ZN9S18992C133v32Ev();
extern void _ZN9S18992C133v33Ev();
extern void _ZN9S18992C133v34Ev();
extern void _ZN9S18992C133v35Ev();
extern void _ZN9S18992C133v36Ev();
extern void _ZN9S18992C133v37Ev();
static  VTBL_ENTRY vtc_S18992C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S18992C13[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v31Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v32Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v33Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v34Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v35Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v36Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v37Ev,
};
extern VTBL_ENTRY _ZTV9S18992C13[];
static  VTT_ENTRY vtt_S18992C13[] = {
  {&(_ZTV9S18992C13[7]),  7,18},
  {&(_ZTV9S18992C13[7]),  7,18},
};
extern VTBL_ENTRY _ZTI9S18992C13[];
extern  VTBL_ENTRY _ZTV9S18992C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18992C13[];
Class_Descriptor cd_S18992C13 = {  "S18992C13", // class name
  bases_S18992C13, 1,
  &(vtc_S18992C13[0]), // expected_vtbl_contents
  &(vtt_S18992C13[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S18992C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S18992C13),18, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18992C13),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18992C1  : virtual S18992C2 , virtual S18992C13 {
  virtual  ~S18992C1(); // _ZN8S18992C1D2Ev
  virtual void  v1(); // _ZN8S18992C12v1Ev
  S18992C1(); // tgen
};
//SIG(1 S18992C1) C1{ VBC2{ BC3{ BC4{ BC5{ v2 v3 v4 v5} v6 v7} VBC6{ BC7{ v8} v9 v10 v11 v12 v13 v14 v15 Fp} vd v16 v17 Fc[10]} BC8{ VBC9{ VBC3 vd v18 v19 v20 v21 Fi FC10{ BC11{ v43 v44 v45 v46 v47 Fp[2]} vd v42 Fi}[9]} v22 v23 v24 FL Fl} vd v25 v26 v27 v28 v29 v30 FC12{ v38 v39 v40 v41 FL:11 Fp[9] Fi Fp FD} Fp} VBC13{ VBC5 v31 v32 v33 v34 v35 v36 v37 Fi FD} vd v1}


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

static void Test_S18992C1()
{
  extern Class_Descriptor cd_S18992C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,76)];
    init_test(&cd_S18992C1, buf);
    S18992C1 *dp, &lv = *(dp=new (buf) S18992C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,300), "sizeof(S18992C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18992C1)");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C5_nt*)(S18992C4*)(S18992C3*)(S18992C2*), ABISELECT(16,4), "S18992C1");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C4*)(S18992C3*)(S18992C2*), ABISELECT(16,4), "S18992C1");
    check_base_class_offset(lv, (S18992C7_nt*)(S18992C6*), ABISELECT(200,104), "S18992C1");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C6*)(S18992C3*)(S18992C2*), ABISELECT(200,104), "S18992C1");
    /*is_ambiguous_... S18992C1::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C6*)(S18992C3*), ABISELECT(200,104), "S18992C1");
    /*is_ambiguous_... S18992C2::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C3*)(S18992C2*), ABISELECT(16,4), "S18992C1");
    /*is_ambiguous_... S18992C1::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C5_nt*)(S18992C4*)(S18992C3*), ABISELECT(520,264), "S18992C1");
    /*is_ambiguous_... S18992C1::S18992C3 */ AMB_check_base_class_offset(lv, (S18992C4*)(S18992C3*), ABISELECT(520,264), "S18992C1");
    check_base_class_offset(lv, (S18992C3*)(S18992C9*), ABISELECT(520,264), "S18992C1");
    check_base_class_offset(lv, (S18992C9*)(S18992C8*)(S18992C2*), ABISELECT(216,112), "S18992C1");
    check_base_class_offset(lv, (S18992C8*)(S18992C2*), ABISELECT(40,20), "S18992C1");
    check_base_class_offset(lv, (S18992C2*), ABISELECT(16,4), "S18992C1");
    check_base_class_offset(lv, (S18992C5_nt*)(S18992C13*), 0, "S18992C1");
    check_base_class_offset(lv, (S18992C13*), ABISELECT(544,280), "S18992C1");
    test_class_info(&lv, &cd_S18992C1);
    dp->~S18992C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18992C1(Test_S18992C1, "S18992C1", ABISELECT(576,300));

#else // __cplusplus

extern void _ZN8S18992C1C1Ev();
extern void _ZN8S18992C1D2Ev();
Name_Map name_map_S18992C1[] = {
  NSPAIR(_ZN8S18992C1C1Ev),
  NSPAIR(_ZN8S18992C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18992C5_nt;
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
extern Class_Descriptor cd_S18992C4;
extern VTBL_ENTRY _ZTI8S18992C4[];
extern  VTBL_ENTRY _ZTV8S18992C4[];
extern Class_Descriptor cd_S18992C7_nt;
extern VTBL_ENTRY _ZTI11S18992C7_nt[];
extern  VTBL_ENTRY _ZTV11S18992C7_nt[];
extern Class_Descriptor cd_S18992C6;
extern VTBL_ENTRY _ZTI8S18992C6[];
extern  VTBL_ENTRY _ZTV8S18992C6[];
extern Class_Descriptor cd_S18992C3;
extern VTBL_ENTRY _ZTI8S18992C3[];
extern  VTBL_ENTRY _ZTV8S18992C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C3[];
extern Class_Descriptor cd_S18992C5_nt;
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
extern Class_Descriptor cd_S18992C4;
extern VTBL_ENTRY _ZTI8S18992C4[];
extern  VTBL_ENTRY _ZTV8S18992C4[];
extern Class_Descriptor cd_S18992C3;
extern VTBL_ENTRY _ZTI8S18992C3[];
extern  VTBL_ENTRY _ZTV8S18992C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C3[];
extern Class_Descriptor cd_S18992C9;
extern VTBL_ENTRY _ZTI8S18992C9[];
extern  VTBL_ENTRY _ZTV8S18992C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C9[];
extern Class_Descriptor cd_S18992C8;
extern VTBL_ENTRY _ZTI8S18992C8[];
extern  VTBL_ENTRY _ZTV8S18992C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C8[];
extern Class_Descriptor cd_S18992C2;
extern VTBL_ENTRY _ZTI8S18992C2[];
extern  VTBL_ENTRY _ZTV8S18992C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C2[];
extern Class_Descriptor cd_S18992C5_nt;
extern VTBL_ENTRY _ZTI11S18992C5_nt[];
extern  VTBL_ENTRY _ZTV11S18992C5_nt[];
extern Class_Descriptor cd_S18992C13;
extern VTBL_ENTRY _ZTI9S18992C13[];
extern  VTBL_ENTRY _ZTV9S18992C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18992C13[];
static Base_Class bases_S18992C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18992C5_nt,    ABISELECT(16,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
    7, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S18992C4,    ABISELECT(16,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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18992C7_nt,    ABISELECT(200,104), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18992C6,    ABISELECT(200,104), //bcp->offset
    68, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18992C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S18992C5_nt,    ABISELECT(520,264), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S18992C4,    ABISELECT(520,264), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S18992C3,    ABISELECT(520,264), //bcp->offset
    101, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S18992C9,    ABISELECT(216,112), //bcp->offset
    86, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S18992C8,    ABISELECT(40,20), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S18992C2,    ABISELECT(16,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18992C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S18992C13,    ABISELECT(544,280), //bcp->offset
    123, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18992C1[];
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C1D1Ev();
extern void _ZN8S18992C1D0Ev();
extern void _ZN8S18992C12v1Ev();
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n96_N8S18992C1D1Ev,_ZTv0_n48_N8S18992C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S18992C1D1Ev,_ZThn4_N8S18992C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S18992C1D0Ev,_ZTv0_n48_N8S18992C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S18992C1D0Ev,_ZThn4_N8S18992C1D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
extern void _ZN8S18992C23v25Ev();
extern void _ZN8S18992C23v26Ev();
extern void _ZN8S18992C23v27Ev();
extern void _ZN8S18992C23v28Ev();
extern void _ZN8S18992C23v29Ev();
extern void _ZN8S18992C23v30Ev();
extern void _ZN8S18992C83v22Ev();
extern void _ZN8S18992C83v23Ev();
extern void _ZN8S18992C83v24Ev();
extern void ABISELECT(_ZTvn24_n96_N8S18992C1D1Ev,_ZTvn16_n48_N8S18992C1D1Ev)();
extern void ABISELECT(_ZTvn24_n96_N8S18992C1D0Ev,_ZTvn16_n48_N8S18992C1D0Ev)();
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S18992C1D1Ev,_ZTv0_n20_N8S18992C1D1Ev)();
extern void ABISELECT(_ZThn216_N8S18992C1D1Ev,_ZThn112_N8S18992C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18992C1D0Ev,_ZTv0_n20_N8S18992C1D0Ev)();
extern void ABISELECT(_ZThn216_N8S18992C1D0Ev,_ZThn112_N8S18992C1D0Ev)() __attribute__((weak));
extern void _ZN8S18992C93v18Ev();
extern void _ZN8S18992C93v19Ev();
extern void _ZN8S18992C93v20Ev();
extern void _ZN8S18992C93v21Ev();
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18992C1D1Ev,_ZTv0_n40_N8S18992C1D1Ev)();
extern void ABISELECT(_ZThn520_N8S18992C1D1Ev,_ZThn264_N8S18992C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18992C1D0Ev,_ZTv0_n40_N8S18992C1D0Ev)();
extern void ABISELECT(_ZThn520_N8S18992C1D0Ev,_ZThn264_N8S18992C1D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN9S18992C133v31Ev();
extern void _ZN9S18992C133v32Ev();
extern void _ZN9S18992C133v33Ev();
extern void _ZN9S18992C133v34Ev();
extern void _ZN9S18992C133v35Ev();
extern void _ZN9S18992C133v36Ev();
extern void _ZN9S18992C133v37Ev();
static  VTBL_ENTRY vtc_S18992C1[] = {
  0,
  ABISELECT(544,280),
  ABISELECT(520,264),
  ABISELECT(216,112),
  ABISELECT(200,104),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C1[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C12v1Ev,
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(504,260),
  ABISELECT(200,108),
  ABISELECT(184,100),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S18992C1[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S18992C1D1Ev,_ZTv0_n48_N8S18992C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S18992C1D0Ev,_ZTv0_n48_N8S18992C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v25Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v27Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v28Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v29Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v30Ev,
  ABISELECT(160,84),
  ABISELECT(480,244),
  ABISELECT(176,92),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18992C1[0]),
  (VTBL_ENTRY)&_ZN8S18992C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n96_N8S18992C1D1Ev,_ZTvn16_n48_N8S18992C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n96_N8S18992C1D0Ev,_ZTvn16_n48_N8S18992C1D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI8S18992C1[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-112),
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI8S18992C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C1D1Ev,_ZTv0_n20_N8S18992C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C1D0Ev,_ZTv0_n20_N8S18992C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v21Ev,
  0,
  0,
  ABISELECT(-520,-264),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-520,-264),
  (VTBL_ENTRY)&(_ZTI8S18992C1[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C1D1Ev,_ZTv0_n40_N8S18992C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C1D0Ev,_ZTv0_n40_N8S18992C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  (VTBL_ENTRY)&(_ZTI8S18992C1[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v31Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v32Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v33Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v34Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v35Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v36Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v37Ev,
};
extern VTBL_ENTRY _ZTV8S18992C1[];
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void _ZN8S18992C2D1Ev();
extern void _ZN8S18992C2D0Ev();
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
extern void _ZN8S18992C23v25Ev();
extern void _ZN8S18992C23v26Ev();
extern void _ZN8S18992C23v27Ev();
extern void _ZN8S18992C23v28Ev();
extern void _ZN8S18992C23v29Ev();
extern void _ZN8S18992C23v30Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C2__8S18992C1[] = {
  ABISELECT(504,260),
  ABISELECT(200,108),
  ABISELECT(184,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C2[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18992C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v25Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v27Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v28Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v29Ev,
  (VTBL_ENTRY)&_ZN8S18992C23v30Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void _ZN8S18992C3D1Ev();
extern void _ZN8S18992C3D0Ev();
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C38S18992C2__8S18992C1[] = {
  ABISELECT(184,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C38S18992C2__8S18992C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern void _ZN8S18992C83v22Ev();
extern void _ZN8S18992C83v23Ev();
extern void _ZN8S18992C83v24Ev();
extern void _ZN8S18992C8D1Ev();
extern void _ZN8S18992C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C88S18992C2__8S18992C1[] = {
  ABISELECT(160,84),
  ABISELECT(480,244),
  ABISELECT(176,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&_ZN8S18992C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v24Ev,
  (VTBL_ENTRY)&_ZN8S18992C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S18992C8D1Ev,_ZTv0_n20_N8S18992C8D1Ev)();
extern void ABISELECT(_ZThn176_N8S18992C8D1Ev,_ZThn92_N8S18992C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18992C8D0Ev,_ZTv0_n20_N8S18992C8D0Ev)();
extern void ABISELECT(_ZThn176_N8S18992C8D0Ev,_ZThn92_N8S18992C8D0Ev)() __attribute__((weak));
extern void _ZN8S18992C93v18Ev();
extern void _ZN8S18992C93v19Ev();
extern void _ZN8S18992C93v20Ev();
extern void _ZN8S18992C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C9__8S18992C88S18992C2__8S18992C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-92),
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C8D1Ev,_ZTv0_n20_N8S18992C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C8D0Ev,_ZTv0_n20_N8S18992C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v21Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18992C8D1Ev,_ZTv0_n40_N8S18992C8D1Ev)();
extern void ABISELECT(_ZThn480_N8S18992C8D1Ev,_ZThn244_N8S18992C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18992C8D0Ev,_ZTv0_n40_N8S18992C8D0Ev)();
extern void ABISELECT(_ZThn480_N8S18992C8D0Ev,_ZThn244_N8S18992C8D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__8S18992C88S18992C2__8S18992C1[] = {
  0,
  0,
  ABISELECT(-480,-244),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-480,-244),
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C8D1Ev,_ZTv0_n40_N8S18992C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C8D0Ev,_ZTv0_n40_N8S18992C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C88S18992C2__8S18992C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S18992C8[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C2__8S18992C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S18992C2[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern void _ZN8S18992C83v22Ev();
extern void _ZN8S18992C83v23Ev();
extern void _ZN8S18992C83v24Ev();
extern void ABISELECT(_ZThn24_N8S18992C2D1Ev,_ZThn16_N8S18992C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S18992C2D0Ev,_ZThn16_N8S18992C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S18992C8__8S18992C2__8S18992C1[] = {
  ABISELECT(160,84),
  ABISELECT(480,244),
  ABISELECT(176,92),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18992C2[0]),
  (VTBL_ENTRY)&_ZN8S18992C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18992C83v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S18992C2D1Ev,_ZThn16_N8S18992C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S18992C2D0Ev,_ZThn16_N8S18992C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S18992C2D1Ev,_ZTv0_n20_N8S18992C2D1Ev)();
extern void ABISELECT(_ZThn200_N8S18992C2D1Ev,_ZThn108_N8S18992C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18992C2D0Ev,_ZTv0_n20_N8S18992C2D0Ev)();
extern void ABISELECT(_ZThn200_N8S18992C2D0Ev,_ZThn108_N8S18992C2D0Ev)() __attribute__((weak));
extern void _ZN8S18992C93v18Ev();
extern void _ZN8S18992C93v19Ev();
extern void _ZN8S18992C93v20Ev();
extern void _ZN8S18992C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C9__8S18992C2__8S18992C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  ABISELECT(-200,-108),
  (VTBL_ENTRY)&(_ZTI8S18992C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C2D1Ev,_ZTv0_n20_N8S18992C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18992C2D0Ev,_ZTv0_n20_N8S18992C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v21Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18992C2D1Ev,_ZTv0_n40_N8S18992C2D1Ev)();
extern void ABISELECT(_ZThn504_N8S18992C2D1Ev,_ZThn260_N8S18992C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18992C2D0Ev,_ZTv0_n40_N8S18992C2D0Ev)();
extern void ABISELECT(_ZThn504_N8S18992C2D0Ev,_ZThn260_N8S18992C2D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__A1__8S18992C2__8S18992C1[] = {
  0,
  0,
  ABISELECT(-504,-260),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-504,-260),
  (VTBL_ENTRY)&(_ZTI8S18992C2[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C2D1Ev,_ZTv0_n40_N8S18992C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C2D0Ev,_ZTv0_n40_N8S18992C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN8S18992C9D1Ev();
extern void _ZN8S18992C9D0Ev();
extern void _ZN8S18992C93v18Ev();
extern void _ZN8S18992C93v19Ev();
extern void _ZN8S18992C93v20Ev();
extern void _ZN8S18992C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C9__8S18992C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN8S18992C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18992C93v21Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S18992C9D1Ev,_ZThn152_N8S18992C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S18992C9D0Ev,_ZThn152_N8S18992C9D0Ev)() __attribute__((weak));
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__8S18992C9__8S18992C1[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C9__8S18992C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S18992C9[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN8S18992C42v6Ev();
extern void _ZN8S18992C42v7Ev();
extern void _ZN8S18992C3D1Ev();
extern void _ZN8S18992C3D0Ev();
extern void _ZN8S18992C33v16Ev();
extern void _ZN8S18992C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C3__A1__8S18992C1[] = {
  ABISELECT(-320,-160),
  0,
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18992C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18992C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18992C33v17Ev,
};
extern void _ZN11S18992C7_nt2v8Ev();
extern void _ZN8S18992C62v9Ev();
extern void _ZN8S18992C63v10Ev();
extern void _ZN8S18992C63v11Ev();
extern void _ZN8S18992C63v12Ev();
extern void _ZN8S18992C63v13Ev();
extern void _ZN8S18992C63v14Ev();
extern void _ZN8S18992C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18992C6__8S18992C3__A1__8S18992C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,160),
  (VTBL_ENTRY)&(_ZTI8S18992C3[0]),
  (VTBL_ENTRY)&_ZN11S18992C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN8S18992C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18992C63v15Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
extern void _ZN9S18992C133v31Ev();
extern void _ZN9S18992C133v32Ev();
extern void _ZN9S18992C133v33Ev();
extern void _ZN9S18992C133v34Ev();
extern void _ZN9S18992C133v35Ev();
extern void _ZN9S18992C133v36Ev();
extern void _ZN9S18992C133v37Ev();
static  VTBL_ENTRY _tg__ZTV9S18992C13__8S18992C1[] = {
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  0,
  (VTBL_ENTRY)&(_ZTI9S18992C13[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v31Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v32Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v33Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v34Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v35Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v36Ev,
  (VTBL_ENTRY)&_ZN9S18992C133v37Ev,
};
extern void _ZN11S18992C5_nt2v2Ev();
extern void _ZN11S18992C5_nt2v3Ev();
extern void _ZN11S18992C5_nt2v4Ev();
extern void _ZN11S18992C5_nt2v5Ev();
static  VTBL_ENTRY _tg__ZTV11S18992C5_nt__9S18992C13__8S18992C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(544,280),
  (VTBL_ENTRY)&(_ZTI9S18992C13[0]),
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S18992C5_nt2v5Ev,
};
static  VTT_ENTRY vtt_S18992C1[] = {
  {&(_ZTV8S18992C1[12]),  12,148},
  {&(_ZTV8S18992C1[42]),  42,148},
  {&(_ZTV8S18992C1[78]),  78,148},
  {&(_ZTV8S18992C1[63]),  63,148},
  {&(_ZTV8S18992C1[95]),  95,148},
  {&(_ZTV8S18992C1[113]),  113,148},
  {&(_ZTV8S18992C1[137]),  137,148},
  {&(_ZTV8S18992C1[12]),  12,148},
  {&(_tg__ZTV8S18992C2__8S18992C1[5]),  5,21},
  {&(_tg__ZTV8S18992C38S18992C2__8S18992C1[3]),  3,13},
  {&(_tg__ZTV8S18992C6__8S18992C38S18992C2__8S18992C1[10]),  10,18},
  {&(_tg__ZTV8S18992C88S18992C2__8S18992C1[5]),  5,10},
  {&(_tg__ZTV8S18992C9__8S18992C88S18992C2__8S18992C1[9]),  9,15},
  {&(_tg__ZTV8S18992C3__8S18992C88S18992C2__8S18992C1[12]),  12,22},
  {&(_tg__ZTV8S18992C6__8S18992C88S18992C2__8S18992C1[10]),  10,18},
  {&(_tg__ZTV8S18992C6__8S18992C2__8S18992C1[10]),  10,18},
  {&(_tg__ZTV8S18992C8__8S18992C2__8S18992C1[5]),  5,10},
  {&(_tg__ZTV8S18992C9__8S18992C2__8S18992C1[9]),  9,15},
  {&(_tg__ZTV8S18992C3__A1__8S18992C2__8S18992C1[12]),  12,22},
  {&(_tg__ZTV8S18992C9__8S18992C1[4]),  4,10},
  {&(_tg__ZTV8S18992C3__8S18992C9__8S18992C1[12]),  12,22},
  {&(_tg__ZTV8S18992C6__8S18992C9__8S18992C1[10]),  10,18},
  {&(_tg__ZTV8S18992C3__A1__8S18992C1[3]),  3,13},
  {&(_tg__ZTV8S18992C6__8S18992C3__A1__8S18992C1[10]),  10,18},
  {&(_tg__ZTV9S18992C13__8S18992C1[7]),  7,18},
  {&(_tg__ZTV11S18992C5_nt__9S18992C13__8S18992C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S18992C1[];
extern  VTBL_ENTRY _ZTV8S18992C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18992C1[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C9D0Ev,_ZTv0_n40_N8S18992C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18992C9D0Ev,_ZThn152_N8S18992C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C9D1Ev,_ZTv0_n40_N8S18992C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18992C9D1Ev,_ZThn152_N8S18992C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C2D0Ev,_ZTv0_n40_N8S18992C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S18992C2D0Ev,_ZThn260_N8S18992C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C2D1Ev,_ZTv0_n40_N8S18992C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S18992C2D1Ev,_ZThn260_N8S18992C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C2D0Ev,_ZTv0_n20_N8S18992C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S18992C2D0Ev,_ZThn108_N8S18992C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C2D1Ev,_ZTv0_n20_N8S18992C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S18992C2D1Ev,_ZThn108_N8S18992C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C8D0Ev,_ZTv0_n40_N8S18992C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S18992C8D0Ev,_ZThn244_N8S18992C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C8D1Ev,_ZTv0_n40_N8S18992C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S18992C8D1Ev,_ZThn244_N8S18992C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C8D0Ev,_ZTv0_n20_N8S18992C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S18992C8D0Ev,_ZThn92_N8S18992C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C8D1Ev,_ZTv0_n20_N8S18992C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S18992C8D1Ev,_ZThn92_N8S18992C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C1D0Ev,_ZTv0_n40_N8S18992C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S18992C1D0Ev,_ZThn264_N8S18992C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18992C1D1Ev,_ZTv0_n40_N8S18992C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S18992C1D1Ev,_ZThn264_N8S18992C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C1D0Ev,_ZTv0_n20_N8S18992C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S18992C1D0Ev,_ZThn112_N8S18992C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18992C1D1Ev,_ZTv0_n20_N8S18992C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S18992C1D1Ev,_ZThn112_N8S18992C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S18992C1D0Ev,_ZTv0_n48_N8S18992C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18992C1D0Ev,_ZThn4_N8S18992C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S18992C1D1Ev,_ZTv0_n48_N8S18992C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18992C1D1Ev,_ZThn4_N8S18992C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18992C1 = {  "S18992C1", // class name
  bases_S18992C1, 13,
  &(vtc_S18992C1[0]), // expected_vtbl_contents
  &(vtt_S18992C1[0]), // expected_vtt_contents
  ABISELECT(576,300), // object size
  NSPAIRA(_ZTI8S18992C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18992C1),148, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18992C1),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18991C5  {
  virtual void  v2(); // _ZN8S18991C52v2Ev
  virtual void  v3(); // _ZN8S18991C52v3Ev
  virtual void  v4(); // _ZN8S18991C52v4Ev
  virtual void  v5(); // _ZN8S18991C52v5Ev
  ~S18991C5(); // tgen
  S18991C5(); // tgen
};
//SIG(-1 S18991C5) C1{ v1 v2 v3 v4}


void  S18991C5 ::v2(){vfunc_called(this, "_ZN8S18991C52v2Ev");}
void  S18991C5 ::v3(){vfunc_called(this, "_ZN8S18991C52v3Ev");}
void  S18991C5 ::v4(){vfunc_called(this, "_ZN8S18991C52v4Ev");}
void  S18991C5 ::v5(){vfunc_called(this, "_ZN8S18991C52v5Ev");}
S18991C5 ::~S18991C5(){ note_dtor("S18991C5", this);} // tgen
S18991C5 ::S18991C5(){ note_ctor("S18991C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18991C5C1Ev();
extern void _ZN8S18991C5D1Ev();
Name_Map name_map_S18991C5[] = {
  NSPAIR(_ZN8S18991C5C1Ev),
  NSPAIR(_ZN8S18991C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18991C5[];
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
static  VTBL_ENTRY vtc_S18991C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C5[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
};
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
Class_Descriptor cd_S18991C5 = {  "S18991C5", // class name
  0,0,//no base classes
  &(vtc_S18991C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18991C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18991C5),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  S18991C4  : S18991C5 {
  virtual void  v6(); // _ZN8S18991C42v6Ev
  virtual void  v7(); // _ZN8S18991C42v7Ev
  ~S18991C4(); // tgen
  S18991C4(); // tgen
};
//SIG(-1 S18991C4) C1{ BC2{ v3 v4 v5 v6} v1 v2}


void  S18991C4 ::v6(){vfunc_called(this, "_ZN8S18991C42v6Ev");}
void  S18991C4 ::v7(){vfunc_called(this, "_ZN8S18991C42v7Ev");}
S18991C4 ::~S18991C4(){ note_dtor("S18991C4", this);} // tgen
S18991C4 ::S18991C4(){ note_ctor("S18991C4", this);} // tgen

static void Test_S18991C4()
{
  extern Class_Descriptor cd_S18991C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S18991C4, buf);
    S18991C4 *dp, &lv = *(dp=new (buf) S18991C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S18991C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18991C4)");
    check_base_class_offset(lv, (S18991C5*), 0, "S18991C4");
    test_class_info(&lv, &cd_S18991C4);
    dp->~S18991C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18991C4(Test_S18991C4, "S18991C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S18991C4C1Ev();
extern void _ZN8S18991C4D1Ev();
Name_Map name_map_S18991C4[] = {
  NSPAIR(_ZN8S18991C4C1Ev),
  NSPAIR(_ZN8S18991C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18991C5;
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
static Base_Class bases_S18991C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18991C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S18991C4[];
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
static  VTBL_ENTRY vtc_S18991C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C4[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S18991C4[];
extern  VTBL_ENTRY _ZTV8S18991C4[];
Class_Descriptor cd_S18991C4 = {  "S18991C4", // class name
  bases_S18991C4, 1,
  &(vtc_S18991C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18991C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18991C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18991C7  {
  virtual void  v8(); // _ZN8S18991C72v8Ev
  ~S18991C7(); // tgen
  S18991C7(); // tgen
};
//SIG(-1 S18991C7) C1{ v1}


void  S18991C7 ::v8(){vfunc_called(this, "_ZN8S18991C72v8Ev");}
S18991C7 ::~S18991C7(){ note_dtor("S18991C7", this);} // tgen
S18991C7 ::S18991C7(){ note_ctor("S18991C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18991C7C1Ev();
extern void _ZN8S18991C7D1Ev();
Name_Map name_map_S18991C7[] = {
  NSPAIR(_ZN8S18991C7C1Ev),
  NSPAIR(_ZN8S18991C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18991C7[];
extern void _ZN8S18991C72v8Ev();
static  VTBL_ENTRY vtc_S18991C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C7[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
};
extern VTBL_ENTRY _ZTI8S18991C7[];
extern  VTBL_ENTRY _ZTV8S18991C7[];
Class_Descriptor cd_S18991C7 = {  "S18991C7", // class name
  0,0,//no base classes
  &(vtc_S18991C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18991C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18991C7),3, //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  S18991C6  : S18991C7 {
  void *s18991c6f0;
  virtual void  v9(); // _ZN8S18991C62v9Ev
  virtual void  v10(); // _ZN8S18991C63v10Ev
  virtual void  v11(); // _ZN8S18991C63v11Ev
  virtual void  v12(); // _ZN8S18991C63v12Ev
  virtual void  v13(); // _ZN8S18991C63v13Ev
  virtual void  v14(); // _ZN8S18991C63v14Ev
  virtual void  v15(); // _ZN8S18991C63v15Ev
  ~S18991C6(); // tgen
  S18991C6(); // tgen
};
//SIG(-1 S18991C6) C1{ BC2{ v8} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S18991C6 ::v9(){vfunc_called(this, "_ZN8S18991C62v9Ev");}
void  S18991C6 ::v10(){vfunc_called(this, "_ZN8S18991C63v10Ev");}
void  S18991C6 ::v11(){vfunc_called(this, "_ZN8S18991C63v11Ev");}
void  S18991C6 ::v12(){vfunc_called(this, "_ZN8S18991C63v12Ev");}
void  S18991C6 ::v13(){vfunc_called(this, "_ZN8S18991C63v13Ev");}
void  S18991C6 ::v14(){vfunc_called(this, "_ZN8S18991C63v14Ev");}
void  S18991C6 ::v15(){vfunc_called(this, "_ZN8S18991C63v15Ev");}
S18991C6 ::~S18991C6(){ note_dtor("S18991C6", this);} // tgen
S18991C6 ::S18991C6(){ note_ctor("S18991C6", this);} // tgen

static void Test_S18991C6()
{
  extern Class_Descriptor cd_S18991C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18991C6, buf);
    S18991C6 *dp, &lv = *(dp=new (buf) S18991C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18991C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18991C6)");
    check_base_class_offset(lv, (S18991C7*), 0, "S18991C6");
    check_field_offset(lv, s18991c6f0, ABISELECT(8,4), "S18991C6.s18991c6f0");
    test_class_info(&lv, &cd_S18991C6);
    dp->~S18991C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18991C6(Test_S18991C6, "S18991C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18991C6C1Ev();
extern void _ZN8S18991C6D1Ev();
Name_Map name_map_S18991C6[] = {
  NSPAIR(_ZN8S18991C6C1Ev),
  NSPAIR(_ZN8S18991C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18991C7;
extern VTBL_ENTRY _ZTI8S18991C7[];
extern  VTBL_ENTRY _ZTV8S18991C7[];
static Base_Class bases_S18991C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18991C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S18991C6[];
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY vtc_S18991C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C6[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern VTBL_ENTRY _ZTI8S18991C6[];
extern  VTBL_ENTRY _ZTV8S18991C6[];
Class_Descriptor cd_S18991C6 = {  "S18991C6", // class name
  bases_S18991C6, 1,
  &(vtc_S18991C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18991C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18991C6),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18991C3  : S18991C4 , virtual S18991C6 {
  char s18991c3f0[10];
  virtual  ~S18991C3(); // _ZN8S18991C3D2Ev
  virtual void  v16(); // _ZN8S18991C33v16Ev
  virtual void  v17(); // _ZN8S18991C33v17Ev
  S18991C3(); // tgen
};
//SIG(-1 S18991C3) C1{ BC2{ BC3{ v3 v4 v5 v6} v7 v8} VBC4{ BC5{ v9} v10 v11 v12 v13 v14 v15 v16 Fp} vd v1 v2 Fc[10]}


 S18991C3 ::~S18991C3(){ note_dtor("S18991C3", this);}
void  S18991C3 ::v16(){vfunc_called(this, "_ZN8S18991C33v16Ev");}
void  S18991C3 ::v17(){vfunc_called(this, "_ZN8S18991C33v17Ev");}
S18991C3 ::S18991C3(){ note_ctor("S18991C3", this);} // tgen

static void Test_S18991C3()
{
  extern Class_Descriptor cd_S18991C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S18991C3, buf);
    S18991C3 *dp, &lv = *(dp=new (buf) S18991C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S18991C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18991C3)");
    check_base_class_offset(lv, (S18991C5*)(S18991C4*), 0, "S18991C3");
    check_base_class_offset(lv, (S18991C4*), 0, "S18991C3");
    check_base_class_offset(lv, (S18991C7*)(S18991C6*), ABISELECT(24,16), "S18991C3");
    check_base_class_offset(lv, (S18991C6*), ABISELECT(24,16), "S18991C3");
    check_field_offset(lv, s18991c3f0, ABISELECT(8,4), "S18991C3.s18991c3f0");
    test_class_info(&lv, &cd_S18991C3);
    dp->~S18991C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18991C3(Test_S18991C3, "S18991C3", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S18991C3C1Ev();
extern void _ZN8S18991C3D2Ev();
Name_Map name_map_S18991C3[] = {
  NSPAIR(_ZN8S18991C3C1Ev),
  NSPAIR(_ZN8S18991C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18991C5;
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
extern Class_Descriptor cd_S18991C4;
extern VTBL_ENTRY _ZTI8S18991C4[];
extern  VTBL_ENTRY _ZTV8S18991C4[];
extern Class_Descriptor cd_S18991C7;
extern VTBL_ENTRY _ZTI8S18991C7[];
extern  VTBL_ENTRY _ZTV8S18991C7[];
extern Class_Descriptor cd_S18991C6;
extern VTBL_ENTRY _ZTI8S18991C6[];
extern  VTBL_ENTRY _ZTV8S18991C6[];
static Base_Class bases_S18991C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18991C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18991C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S18991C7,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18991C6,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18991C3[];
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void _ZN8S18991C3D1Ev();
extern void _ZN8S18991C3D0Ev();
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY vtc_S18991C3[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S18991C3[];
static  VTT_ENTRY vtt_S18991C3[] = {
  {&(_ZTV8S18991C3[3]),  3,31},
  {&(_ZTV8S18991C3[23]),  23,31},
};
extern VTBL_ENTRY _ZTI8S18991C3[];
extern  VTBL_ENTRY _ZTV8S18991C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C3[];
Class_Descriptor cd_S18991C3 = {  "S18991C3", // class name
  bases_S18991C3, 4,
  &(vtc_S18991C3[0]), // expected_vtbl_contents
  &(vtt_S18991C3[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S18991C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18991C3),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18991C3),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18991C9  : virtual S18991C3 {
  int s18991c9f0;
  ::S18992C10 s18991c9f1[9];
  virtual  ~S18991C9(); // _ZN8S18991C9D2Ev
  virtual void  v18(); // _ZN8S18991C93v18Ev
  virtual void  v19(); // _ZN8S18991C93v19Ev
  virtual void  v20(); // _ZN8S18991C93v20Ev
  virtual void  v21(); // _ZN8S18991C93v21Ev
  S18991C9(); // tgen
};
//SIG(-1 S18991C9) C1{ VBC2{ BC3{ BC4{ v5 v6 v7 v8} v9 v10} VBC5{ BC6{ v11} v12 v13 v14 v15 v16 v17 v18 Fp} vd v19 v20 Fc[10]} vd v1 v2 v3 v4 Fi FC7{ BC8{ v22 v23 v24 v25 v26 Fp[2]} vd v21 Fi}[9]}


 S18991C9 ::~S18991C9(){ note_dtor("S18991C9", this);}
void  S18991C9 ::v18(){vfunc_called(this, "_ZN8S18991C93v18Ev");}
void  S18991C9 ::v19(){vfunc_called(this, "_ZN8S18991C93v19Ev");}
void  S18991C9 ::v20(){vfunc_called(this, "_ZN8S18991C93v20Ev");}
void  S18991C9 ::v21(){vfunc_called(this, "_ZN8S18991C93v21Ev");}
S18991C9 ::S18991C9(){ note_ctor("S18991C9", this);} // tgen

static void Test_S18991C9()
{
  extern Class_Descriptor cd_S18991C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,45)];
    init_test(&cd_S18991C9, buf);
    S18991C9 *dp, &lv = *(dp=new (buf) S18991C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,176), "sizeof(S18991C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18991C9)");
    check_base_class_offset(lv, (S18991C5*)(S18991C4*)(S18991C3*), ABISELECT(304,152), "S18991C9");
    check_base_class_offset(lv, (S18991C4*)(S18991C3*), ABISELECT(304,152), "S18991C9");
    check_base_class_offset(lv, (S18991C7*)(S18991C6*), ABISELECT(328,168), "S18991C9");
    check_base_class_offset(lv, (S18991C6*)(S18991C3*), ABISELECT(328,168), "S18991C9");
    check_base_class_offset(lv, (S18991C3*), ABISELECT(304,152), "S18991C9");
    check_field_offset(lv, s18991c9f0, ABISELECT(8,4), "S18991C9.s18991c9f0");
    check_field_offset(lv, s18991c9f1, ABISELECT(16,8), "S18991C9.s18991c9f1");
    test_class_info(&lv, &cd_S18991C9);
    dp->~S18991C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18991C9(Test_S18991C9, "S18991C9", ABISELECT(344,176));

#else // __cplusplus

extern void _ZN8S18991C9C1Ev();
extern void _ZN8S18991C9D2Ev();
Name_Map name_map_S18991C9[] = {
  NSPAIR(_ZN8S18991C9C1Ev),
  NSPAIR(_ZN8S18991C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18991C5;
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
extern Class_Descriptor cd_S18991C4;
extern VTBL_ENTRY _ZTI8S18991C4[];
extern  VTBL_ENTRY _ZTV8S18991C4[];
extern Class_Descriptor cd_S18991C7;
extern VTBL_ENTRY _ZTI8S18991C7[];
extern  VTBL_ENTRY _ZTV8S18991C7[];
extern Class_Descriptor cd_S18991C6;
extern VTBL_ENTRY _ZTI8S18991C6[];
extern  VTBL_ENTRY _ZTV8S18991C6[];
extern Class_Descriptor cd_S18991C3;
extern VTBL_ENTRY _ZTI8S18991C3[];
extern  VTBL_ENTRY _ZTV8S18991C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C3[];
static Base_Class bases_S18991C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18991C5,    ABISELECT(304,152), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18991C4,    ABISELECT(304,152), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18991C7,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18991C6,    ABISELECT(328,168), //bcp->offset
    32, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18991C3,    ABISELECT(304,152), //bcp->offset
    10, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18991C9[];
extern void _ZN8S18991C9D1Ev();
extern void _ZN8S18991C9D0Ev();
extern void _ZN8S18991C93v18Ev();
extern void _ZN8S18991C93v19Ev();
extern void _ZN8S18991C93v20Ev();
extern void _ZN8S18991C93v21Ev();
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S18991C9D1Ev,_ZThn152_N8S18991C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S18991C9D0Ev,_ZThn152_N8S18991C9D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY vtc_S18991C9[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v21Ev,
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S18991C9[];
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void _ZN8S18991C3D1Ev();
extern void _ZN8S18991C3D0Ev();
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__8S18991C9[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C3__8S18991C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
static  VTT_ENTRY vtt_S18991C9[] = {
  {&(_ZTV8S18991C9[4]),  4,50},
  {&(_ZTV8S18991C9[22]),  22,50},
  {&(_ZTV8S18991C9[42]),  42,50},
  {&(_tg__ZTV8S18991C3__8S18991C9[3]),  3,13},
  {&(_tg__ZTV8S18991C6__8S18991C3__8S18991C9[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S18991C9[];
extern  VTBL_ENTRY _ZTV8S18991C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C9[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18991C9D0Ev,_ZThn152_N8S18991C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18991C9D1Ev,_ZThn152_N8S18991C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18991C9 = {  "S18991C9", // class name
  bases_S18991C9, 5,
  &(vtc_S18991C9[0]), // expected_vtbl_contents
  &(vtt_S18991C9[0]), // expected_vtt_contents
  ABISELECT(344,176), // object size
  NSPAIRA(_ZTI8S18991C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18991C9),50, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18991C9),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18991C8  : virtual S18991C9 {
  __tsi64 s18991c8f0;
  long s18991c8f1;
  virtual void  v22(); // _ZN8S18991C83v22Ev
  virtual void  v23(); // _ZN8S18991C83v23Ev
  virtual void  v24(); // _ZN8S18991C83v24Ev
  ~S18991C8(); // tgen
  S18991C8(); // tgen
};
//SIG(-1 S18991C8) C1{ VBC2{ VBC3{ BC4{ BC5{ v4 v5 v6 v7} v8 v9} VBC6{ BC7{ v10} v11 v12 v13 v14 v15 v16 v17 Fp} vd v18 v19 Fc[10]} vd v20 v21 v22 v23 Fi FC8{ BC9{ v25 v26 v27 v28 v29 Fp[2]} vd v24 Fi}[9]} v1 v2 v3 FL Fl}


void  S18991C8 ::v22(){vfunc_called(this, "_ZN8S18991C83v22Ev");}
void  S18991C8 ::v23(){vfunc_called(this, "_ZN8S18991C83v23Ev");}
void  S18991C8 ::v24(){vfunc_called(this, "_ZN8S18991C83v24Ev");}
S18991C8 ::~S18991C8(){ note_dtor("S18991C8", this);} // tgen
S18991C8 ::S18991C8(){ note_ctor("S18991C8", this);} // tgen

static void Test_S18991C8()
{
  extern Class_Descriptor cd_S18991C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,49)];
    init_test(&cd_S18991C8, buf);
    S18991C8 *dp, &lv = *(dp=new (buf) S18991C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,192), "sizeof(S18991C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18991C8)");
    check_base_class_offset(lv, (S18991C5*)(S18991C4*)(S18991C3*), ABISELECT(328,168), "S18991C8");
    check_base_class_offset(lv, (S18991C4*)(S18991C3*), ABISELECT(328,168), "S18991C8");
    check_base_class_offset(lv, (S18991C7*)(S18991C6*), ABISELECT(352,184), "S18991C8");
    check_base_class_offset(lv, (S18991C6*)(S18991C3*), ABISELECT(352,184), "S18991C8");
    check_base_class_offset(lv, (S18991C3*)(S18991C9*), ABISELECT(328,168), "S18991C8");
    check_base_class_offset(lv, (S18991C9*), ABISELECT(24,16), "S18991C8");
    check_field_offset(lv, s18991c8f0, ABISELECT(8,4), "S18991C8.s18991c8f0");
    check_field_offset(lv, s18991c8f1, ABISELECT(16,12), "S18991C8.s18991c8f1");
    test_class_info(&lv, &cd_S18991C8);
    dp->~S18991C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18991C8(Test_S18991C8, "S18991C8", ABISELECT(368,192));

#else // __cplusplus

extern void _ZN8S18991C8C1Ev();
extern void _ZN8S18991C8D1Ev();
Name_Map name_map_S18991C8[] = {
  NSPAIR(_ZN8S18991C8C1Ev),
  NSPAIR(_ZN8S18991C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18991C5;
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
extern Class_Descriptor cd_S18991C4;
extern VTBL_ENTRY _ZTI8S18991C4[];
extern  VTBL_ENTRY _ZTV8S18991C4[];
extern Class_Descriptor cd_S18991C7;
extern VTBL_ENTRY _ZTI8S18991C7[];
extern  VTBL_ENTRY _ZTV8S18991C7[];
extern Class_Descriptor cd_S18991C6;
extern VTBL_ENTRY _ZTI8S18991C6[];
extern  VTBL_ENTRY _ZTV8S18991C6[];
extern Class_Descriptor cd_S18991C3;
extern VTBL_ENTRY _ZTI8S18991C3[];
extern  VTBL_ENTRY _ZTV8S18991C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C3[];
extern Class_Descriptor cd_S18991C9;
extern VTBL_ENTRY _ZTI8S18991C9[];
extern  VTBL_ENTRY _ZTV8S18991C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C9[];
static Base_Class bases_S18991C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18991C5,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18991C4,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18991C7,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18991C6,    ABISELECT(352,184), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18991C3,    ABISELECT(328,168), //bcp->offset
    25, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18991C9,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18991C8[];
extern void _ZN8S18991C83v22Ev();
extern void _ZN8S18991C83v23Ev();
extern void _ZN8S18991C83v24Ev();
extern void _ZN8S18991C8D1Ev();
extern void _ZN8S18991C8D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S18991C8D1Ev,_ZTv0_n20_N8S18991C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S18991C8D1Ev,_ZThn16_N8S18991C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18991C8D0Ev,_ZTv0_n20_N8S18991C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S18991C8D0Ev,_ZThn16_N8S18991C8D0Ev)() __attribute__((weak));
extern void _ZN8S18991C93v18Ev();
extern void _ZN8S18991C93v19Ev();
extern void _ZN8S18991C93v20Ev();
extern void _ZN8S18991C93v21Ev();
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18991C8D1Ev,_ZTv0_n40_N8S18991C8D1Ev)();
extern void ABISELECT(_ZThn328_N8S18991C8D1Ev,_ZThn168_N8S18991C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18991C8D0Ev,_ZTv0_n40_N8S18991C8D0Ev)();
extern void ABISELECT(_ZThn328_N8S18991C8D0Ev,_ZThn168_N8S18991C8D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY vtc_S18991C8[] = {
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&_ZN8S18991C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v24Ev,
  (VTBL_ENTRY)&_ZN8S18991C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C8D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C8D1Ev,_ZTv0_n20_N8S18991C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C8D0Ev,_ZTv0_n20_N8S18991C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v21Ev,
  0,
  0,
  ABISELECT(-328,-168),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C8D1Ev,_ZTv0_n40_N8S18991C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C8D0Ev,_ZTv0_n40_N8S18991C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S18991C8[];
extern void _ZN8S18991C9D1Ev();
extern void _ZN8S18991C9D0Ev();
extern void _ZN8S18991C93v18Ev();
extern void _ZN8S18991C93v19Ev();
extern void _ZN8S18991C93v20Ev();
extern void _ZN8S18991C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C9__8S18991C8[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v21Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S18991C9D1Ev,_ZThn152_N8S18991C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S18991C9D0Ev,_ZThn152_N8S18991C9D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__8S18991C9__8S18991C8[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C9__8S18991C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void _ZN8S18991C3D1Ev();
extern void _ZN8S18991C3D0Ev();
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__8S18991C8[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C3__8S18991C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
static  VTT_ENTRY vtt_S18991C8[] = {
  {&(_ZTV8S18991C8[5]),  5,65},
  {&(_ZTV8S18991C8[19]),  19,65},
  {&(_ZTV8S18991C8[37]),  37,65},
  {&(_ZTV8S18991C8[57]),  57,65},
  {&(_tg__ZTV8S18991C9__8S18991C8[4]),  4,10},
  {&(_tg__ZTV8S18991C3__8S18991C9__8S18991C8[12]),  12,22},
  {&(_tg__ZTV8S18991C6__8S18991C9__8S18991C8[10]),  10,18},
  {&(_tg__ZTV8S18991C3__8S18991C8[3]),  3,13},
  {&(_tg__ZTV8S18991C6__8S18991C3__8S18991C8[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S18991C8[];
extern  VTBL_ENTRY _ZTV8S18991C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C8[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18991C9D0Ev,_ZThn152_N8S18991C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18991C9D1Ev,_ZThn152_N8S18991C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C8D0Ev,_ZTv0_n40_N8S18991C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S18991C8D0Ev,_ZThn168_N8S18991C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C8D1Ev,_ZTv0_n40_N8S18991C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S18991C8D1Ev,_ZThn168_N8S18991C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C8D0Ev,_ZTv0_n20_N8S18991C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S18991C8D0Ev,_ZThn16_N8S18991C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C8D1Ev,_ZTv0_n20_N8S18991C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S18991C8D1Ev,_ZThn16_N8S18991C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18991C8 = {  "S18991C8", // class name
  bases_S18991C8, 6,
  &(vtc_S18991C8[0]), // expected_vtbl_contents
  &(vtt_S18991C8[0]), // expected_vtt_contents
  ABISELECT(368,192), // object size
  NSPAIRA(_ZTI8S18991C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18991C8),65, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18991C8),9, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18991C12  {
  int s18991c12f0:11;
  void *s18991c12f1[9];
  int s18991c12f2;
  void *s18991c12f3;
  long double s18991c12f4;
  virtual void  v38(); // _ZN9S18991C123v38Ev
  virtual void  v39(); // _ZN9S18991C123v39Ev
  virtual void  v40(); // _ZN9S18991C123v40Ev
  virtual void  v41(); // _ZN9S18991C123v41Ev
  ~S18991C12(); // tgen
  S18991C12(); // tgen
};
//SIG(-1 S18991C12) C1{ v1 v2 v3 v4 Fi:11 Fp[9] Fi Fp FD}


void  S18991C12 ::v38(){vfunc_called(this, "_ZN9S18991C123v38Ev");}
void  S18991C12 ::v39(){vfunc_called(this, "_ZN9S18991C123v39Ev");}
void  S18991C12 ::v40(){vfunc_called(this, "_ZN9S18991C123v40Ev");}
void  S18991C12 ::v41(){vfunc_called(this, "_ZN9S18991C123v41Ev");}
S18991C12 ::~S18991C12(){ note_dtor("S18991C12", this);} // tgen
S18991C12 ::S18991C12(){ note_ctor("S18991C12", this);} // tgen

static void Test_S18991C12()
{
  extern Class_Descriptor cd_S18991C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S18991C12, buf);
    S18991C12 *dp, &lv = *(dp=new (buf) S18991C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S18991C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18991C12)");
    set_bf_and_test(lv, s18991c12f0, ABISELECT(8,4), 0, 11, 1, "S18991C12");
    set_bf_and_test(lv, s18991c12f0, ABISELECT(8,4), 0, 11, hide_sll(1LL<<10), "S18991C12");
    check_field_offset(lv, s18991c12f1, ABISELECT(16,8), "S18991C12.s18991c12f1");
    check_field_offset(lv, s18991c12f2, ABISELECT(88,44), "S18991C12.s18991c12f2");
    check_field_offset(lv, s18991c12f3, ABISELECT(96,48), "S18991C12.s18991c12f3");
    check_field_offset(lv, s18991c12f4, ABISELECT(112,52), "S18991C12.s18991c12f4");
    test_class_info(&lv, &cd_S18991C12);
    dp->~S18991C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18991C12(Test_S18991C12, "S18991C12", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN9S18991C12C1Ev();
extern void _ZN9S18991C12D1Ev();
Name_Map name_map_S18991C12[] = {
  NSPAIR(_ZN9S18991C12C1Ev),
  NSPAIR(_ZN9S18991C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S18991C12[];
extern void _ZN9S18991C123v38Ev();
extern void _ZN9S18991C123v39Ev();
extern void _ZN9S18991C123v40Ev();
extern void _ZN9S18991C123v41Ev();
static  VTBL_ENTRY vtc_S18991C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S18991C12[0]),
  (VTBL_ENTRY)&_ZN9S18991C123v38Ev,
  (VTBL_ENTRY)&_ZN9S18991C123v39Ev,
  (VTBL_ENTRY)&_ZN9S18991C123v40Ev,
  (VTBL_ENTRY)&_ZN9S18991C123v41Ev,
};
extern VTBL_ENTRY _ZTI9S18991C12[];
extern  VTBL_ENTRY _ZTV9S18991C12[];
Class_Descriptor cd_S18991C12 = {  "S18991C12", // class name
  0,0,//no base classes
  &(vtc_S18991C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI9S18991C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S18991C12),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  S18991C2  : S18991C3 , S18991C8 {
  ::S18991C12 s18991c2f0;
  void *s18991c2f1;
  virtual  ~S18991C2(); // _ZN8S18991C2D2Ev
  virtual void  v25(); // _ZN8S18991C23v25Ev
  virtual void  v26(); // _ZN8S18991C23v26Ev
  virtual void  v27(); // _ZN8S18991C23v27Ev
  virtual void  v28(); // _ZN8S18991C23v28Ev
  virtual void  v29(); // _ZN8S18991C23v29Ev
  virtual void  v30(); // _ZN8S18991C23v30Ev
  S18991C2(); // tgen
};
//SIG(-1 S18991C2) C1{ BC2{ BC3{ BC4{ v7 v8 v9 v10} v11 v12} VBC5{ BC6{ v13} v14 v15 v16 v17 v18 v19 v20 Fp} vd v21 v22 Fc[10]} BC7{ VBC8{ VBC2 vd v23 v24 v25 v26 Fi FC9{ BC10{ v35 v36 v37 v38 v39 Fp[2]} vd v34 Fi}[9]} v27 v28 v29 FL Fl} vd v1 v2 v3 v4 v5 v6 FC11{ v30 v31 v32 v33 Fi:11 Fp[9] Fi Fp FD} Fp}


 S18991C2 ::~S18991C2(){ note_dtor("S18991C2", this);}
void  S18991C2 ::v25(){vfunc_called(this, "_ZN8S18991C23v25Ev");}
void  S18991C2 ::v26(){vfunc_called(this, "_ZN8S18991C23v26Ev");}
void  S18991C2 ::v27(){vfunc_called(this, "_ZN8S18991C23v27Ev");}
void  S18991C2 ::v28(){vfunc_called(this, "_ZN8S18991C23v28Ev");}
void  S18991C2 ::v29(){vfunc_called(this, "_ZN8S18991C23v29Ev");}
void  S18991C2 ::v30(){vfunc_called(this, "_ZN8S18991C23v30Ev");}
S18991C2 ::S18991C2(){ note_ctor("S18991C2", this);} // tgen

static void Test_S18991C2()
{
  extern Class_Descriptor cd_S18991C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,70)];
    init_test(&cd_S18991C2, buf);
    S18991C2 *dp, &lv = *(dp=new (buf) S18991C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,276), "sizeof(S18991C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18991C2)");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C5*)(S18991C4*)(S18991C3*), 0, "S18991C2");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C4*)(S18991C3*), 0, "S18991C2");
    check_base_class_offset(lv, (S18991C7*)(S18991C6*), ABISELECT(184,100), "S18991C2");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C6*)(S18991C3*), ABISELECT(184,100), "S18991C2");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C6*)(S18991C3*), ABISELECT(184,100), "S18991C2");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C3*), 0, "S18991C2");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C5*)(S18991C4*)(S18991C3*), ABISELECT(504,260), "S18991C2");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C4*)(S18991C3*), ABISELECT(504,260), "S18991C2");
    check_base_class_offset(lv, (S18991C3*)(S18991C9*), ABISELECT(504,260), "S18991C2");
    check_base_class_offset(lv, (S18991C9*)(S18991C8*), ABISELECT(200,108), "S18991C2");
    check_base_class_offset(lv, (S18991C8*), ABISELECT(24,16), "S18991C2");
    check_field_offset(lv, s18991c2f0, ABISELECT(48,32), "S18991C2.s18991c2f0");
    check_field_offset(lv, s18991c2f1, ABISELECT(176,96), "S18991C2.s18991c2f1");
    test_class_info(&lv, &cd_S18991C2);
    dp->~S18991C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18991C2(Test_S18991C2, "S18991C2", ABISELECT(528,276));

#else // __cplusplus

extern void _ZN8S18991C2C1Ev();
extern void _ZN8S18991C2D2Ev();
Name_Map name_map_S18991C2[] = {
  NSPAIR(_ZN8S18991C2C1Ev),
  NSPAIR(_ZN8S18991C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18991C5;
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
extern Class_Descriptor cd_S18991C4;
extern VTBL_ENTRY _ZTI8S18991C4[];
extern  VTBL_ENTRY _ZTV8S18991C4[];
extern Class_Descriptor cd_S18991C7;
extern VTBL_ENTRY _ZTI8S18991C7[];
extern  VTBL_ENTRY _ZTV8S18991C7[];
extern Class_Descriptor cd_S18991C6;
extern VTBL_ENTRY _ZTI8S18991C6[];
extern  VTBL_ENTRY _ZTV8S18991C6[];
extern Class_Descriptor cd_S18991C3;
extern VTBL_ENTRY _ZTI8S18991C3[];
extern  VTBL_ENTRY _ZTV8S18991C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C3[];
extern Class_Descriptor cd_S18991C5;
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
extern Class_Descriptor cd_S18991C4;
extern VTBL_ENTRY _ZTI8S18991C4[];
extern  VTBL_ENTRY _ZTV8S18991C4[];
extern Class_Descriptor cd_S18991C3;
extern VTBL_ENTRY _ZTI8S18991C3[];
extern  VTBL_ENTRY _ZTV8S18991C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C3[];
extern Class_Descriptor cd_S18991C9;
extern VTBL_ENTRY _ZTI8S18991C9[];
extern  VTBL_ENTRY _ZTV8S18991C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C9[];
extern Class_Descriptor cd_S18991C8;
extern VTBL_ENTRY _ZTI8S18991C8[];
extern  VTBL_ENTRY _ZTV8S18991C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C8[];
static Base_Class bases_S18991C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18991C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S18991C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18991C7,    ABISELECT(184,100), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18991C6,    ABISELECT(184,100), //bcp->offset
    31, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18991C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18991C5,    ABISELECT(504,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S18991C4,    ABISELECT(504,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S18991C3,    ABISELECT(504,260), //bcp->offset
    64, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S18991C9,    ABISELECT(200,108), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S18991C8,    ABISELECT(24,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18991C2[];
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void _ZN8S18991C2D1Ev();
extern void _ZN8S18991C2D0Ev();
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
extern void _ZN8S18991C23v25Ev();
extern void _ZN8S18991C23v26Ev();
extern void _ZN8S18991C23v27Ev();
extern void _ZN8S18991C23v28Ev();
extern void _ZN8S18991C23v29Ev();
extern void _ZN8S18991C23v30Ev();
extern void _ZN8S18991C83v22Ev();
extern void _ZN8S18991C83v23Ev();
extern void _ZN8S18991C83v24Ev();
extern void ABISELECT(_ZThn24_N8S18991C2D1Ev,_ZThn16_N8S18991C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S18991C2D0Ev,_ZThn16_N8S18991C2D0Ev)();
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S18991C2D1Ev,_ZTv0_n20_N8S18991C2D1Ev)();
extern void ABISELECT(_ZThn200_N8S18991C2D1Ev,_ZThn108_N8S18991C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18991C2D0Ev,_ZTv0_n20_N8S18991C2D0Ev)();
extern void ABISELECT(_ZThn200_N8S18991C2D0Ev,_ZThn108_N8S18991C2D0Ev)() __attribute__((weak));
extern void _ZN8S18991C93v18Ev();
extern void _ZN8S18991C93v19Ev();
extern void _ZN8S18991C93v20Ev();
extern void _ZN8S18991C93v21Ev();
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18991C2D1Ev,_ZTv0_n40_N8S18991C2D1Ev)();
extern void ABISELECT(_ZThn504_N8S18991C2D1Ev,_ZThn260_N8S18991C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18991C2D0Ev,_ZTv0_n40_N8S18991C2D0Ev)();
extern void ABISELECT(_ZThn504_N8S18991C2D0Ev,_ZThn260_N8S18991C2D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY vtc_S18991C2[] = {
  ABISELECT(504,260),
  ABISELECT(200,108),
  ABISELECT(184,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C2[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18991C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v25Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v27Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v28Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v29Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v30Ev,
  ABISELECT(160,84),
  ABISELECT(480,244),
  ABISELECT(176,92),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18991C2[0]),
  (VTBL_ENTRY)&_ZN8S18991C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S18991C2D1Ev,_ZThn16_N8S18991C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S18991C2D0Ev,_ZThn16_N8S18991C2D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S18991C2[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  ABISELECT(-200,-108),
  (VTBL_ENTRY)&(_ZTI8S18991C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C2D1Ev,_ZTv0_n20_N8S18991C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C2D0Ev,_ZTv0_n20_N8S18991C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v21Ev,
  0,
  0,
  ABISELECT(-504,-260),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-504,-260),
  (VTBL_ENTRY)&(_ZTI8S18991C2[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C2D1Ev,_ZTv0_n40_N8S18991C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C2D0Ev,_ZTv0_n40_N8S18991C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern VTBL_ENTRY _ZTV8S18991C2[];
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void _ZN8S18991C3D1Ev();
extern void _ZN8S18991C3D0Ev();
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__A__8S18991C2[] = {
  ABISELECT(184,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C3__A__8S18991C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern void _ZN8S18991C83v22Ev();
extern void _ZN8S18991C83v23Ev();
extern void _ZN8S18991C83v24Ev();
extern void _ZN8S18991C8D1Ev();
extern void _ZN8S18991C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C8__8S18991C2[] = {
  ABISELECT(160,84),
  ABISELECT(480,244),
  ABISELECT(176,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&_ZN8S18991C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v24Ev,
  (VTBL_ENTRY)&_ZN8S18991C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S18991C8D1Ev,_ZTv0_n20_N8S18991C8D1Ev)();
extern void ABISELECT(_ZThn176_N8S18991C8D1Ev,_ZThn92_N8S18991C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18991C8D0Ev,_ZTv0_n20_N8S18991C8D0Ev)();
extern void ABISELECT(_ZThn176_N8S18991C8D0Ev,_ZThn92_N8S18991C8D0Ev)() __attribute__((weak));
extern void _ZN8S18991C93v18Ev();
extern void _ZN8S18991C93v19Ev();
extern void _ZN8S18991C93v20Ev();
extern void _ZN8S18991C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C9__8S18991C8__8S18991C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-92),
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C8D1Ev,_ZTv0_n20_N8S18991C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C8D0Ev,_ZTv0_n20_N8S18991C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v21Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18991C8D1Ev,_ZTv0_n40_N8S18991C8D1Ev)();
extern void ABISELECT(_ZThn480_N8S18991C8D1Ev,_ZThn244_N8S18991C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18991C8D0Ev,_ZTv0_n40_N8S18991C8D0Ev)();
extern void ABISELECT(_ZThn480_N8S18991C8D0Ev,_ZThn244_N8S18991C8D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__8S18991C8__8S18991C2[] = {
  0,
  0,
  ABISELECT(-480,-244),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-480,-244),
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C8D1Ev,_ZTv0_n40_N8S18991C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C8D0Ev,_ZTv0_n40_N8S18991C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C8__8S18991C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern void _ZN8S18991C9D1Ev();
extern void _ZN8S18991C9D0Ev();
extern void _ZN8S18991C93v18Ev();
extern void _ZN8S18991C93v19Ev();
extern void _ZN8S18991C93v20Ev();
extern void _ZN8S18991C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C9__8S18991C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v21Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S18991C9D1Ev,_ZThn152_N8S18991C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S18991C9D0Ev,_ZThn152_N8S18991C9D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__8S18991C9__8S18991C2[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C9__8S18991C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void _ZN8S18991C3D1Ev();
extern void _ZN8S18991C3D0Ev();
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__A1__8S18991C2[] = {
  ABISELECT(-320,-160),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C3__A1__8S18991C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,160),
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
static  VTT_ENTRY vtt_S18991C2[] = {
  {&(_ZTV8S18991C2[5]),  5,86},
  {&(_tg__ZTV8S18991C3__A__8S18991C2[3]),  3,13},
  {&(_tg__ZTV8S18991C6__8S18991C3__A__8S18991C2[10]),  10,18},
  {&(_tg__ZTV8S18991C8__8S18991C2[5]),  5,10},
  {&(_tg__ZTV8S18991C9__8S18991C8__8S18991C2[9]),  9,15},
  {&(_tg__ZTV8S18991C3__8S18991C8__8S18991C2[12]),  12,22},
  {&(_tg__ZTV8S18991C6__8S18991C8__8S18991C2[10]),  10,18},
  {&(_ZTV8S18991C2[41]),  41,86},
  {&(_ZTV8S18991C2[26]),  26,86},
  {&(_ZTV8S18991C2[58]),  58,86},
  {&(_ZTV8S18991C2[76]),  76,86},
  {&(_tg__ZTV8S18991C9__8S18991C2[4]),  4,10},
  {&(_tg__ZTV8S18991C3__8S18991C9__8S18991C2[12]),  12,22},
  {&(_tg__ZTV8S18991C6__8S18991C9__8S18991C2[10]),  10,18},
  {&(_tg__ZTV8S18991C3__A1__8S18991C2[3]),  3,13},
  {&(_tg__ZTV8S18991C6__8S18991C3__A1__8S18991C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S18991C2[];
extern  VTBL_ENTRY _ZTV8S18991C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C2[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18991C9D0Ev,_ZThn152_N8S18991C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18991C9D1Ev,_ZThn152_N8S18991C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C8D0Ev,_ZTv0_n40_N8S18991C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S18991C8D0Ev,_ZThn244_N8S18991C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C8D1Ev,_ZTv0_n40_N8S18991C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S18991C8D1Ev,_ZThn244_N8S18991C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C8D0Ev,_ZTv0_n20_N8S18991C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S18991C8D0Ev,_ZThn92_N8S18991C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C8D1Ev,_ZTv0_n20_N8S18991C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S18991C8D1Ev,_ZThn92_N8S18991C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C2D0Ev,_ZTv0_n40_N8S18991C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S18991C2D0Ev,_ZThn260_N8S18991C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C2D1Ev,_ZTv0_n40_N8S18991C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S18991C2D1Ev,_ZThn260_N8S18991C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C2D0Ev,_ZTv0_n20_N8S18991C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S18991C2D0Ev,_ZThn108_N8S18991C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C2D1Ev,_ZTv0_n20_N8S18991C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S18991C2D1Ev,_ZThn108_N8S18991C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18991C2 = {  "S18991C2", // class name
  bases_S18991C2, 10,
  &(vtc_S18991C2[0]), // expected_vtbl_contents
  &(vtt_S18991C2[0]), // expected_vtt_contents
  ABISELECT(528,276), // object size
  NSPAIRA(_ZTI8S18991C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18991C2),86, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18991C2),16, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18991C13  : virtual S18991C5 {
  int s18991c13f0;
  long double s18991c13f1;
  virtual void  v31(); // _ZN9S18991C133v31Ev
  virtual void  v32(); // _ZN9S18991C133v32Ev
  virtual void  v33(); // _ZN9S18991C133v33Ev
  virtual void  v34(); // _ZN9S18991C133v34Ev
  virtual void  v35(); // _ZN9S18991C133v35Ev
  virtual void  v36(); // _ZN9S18991C133v36Ev
  virtual void  v37(); // _ZN9S18991C133v37Ev
  ~S18991C13(); // tgen
  S18991C13(); // tgen
};
//SIG(-1 S18991C13) C1{ VBC2{ v8 v9 v10 v11} v1 v2 v3 v4 v5 v6 v7 Fi FD}


void  S18991C13 ::v31(){vfunc_called(this, "_ZN9S18991C133v31Ev");}
void  S18991C13 ::v32(){vfunc_called(this, "_ZN9S18991C133v32Ev");}
void  S18991C13 ::v33(){vfunc_called(this, "_ZN9S18991C133v33Ev");}
void  S18991C13 ::v34(){vfunc_called(this, "_ZN9S18991C133v34Ev");}
void  S18991C13 ::v35(){vfunc_called(this, "_ZN9S18991C133v35Ev");}
void  S18991C13 ::v36(){vfunc_called(this, "_ZN9S18991C133v36Ev");}
void  S18991C13 ::v37(){vfunc_called(this, "_ZN9S18991C133v37Ev");}
S18991C13 ::~S18991C13(){ note_dtor("S18991C13", this);} // tgen
S18991C13 ::S18991C13(){ note_ctor("S18991C13", this);} // tgen

static void Test_S18991C13()
{
  extern Class_Descriptor cd_S18991C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,6)];
    init_test(&cd_S18991C13, buf);
    S18991C13 *dp, &lv = *(dp=new (buf) S18991C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18991C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18991C13)");
    check_base_class_offset(lv, (S18991C5*), 0, "S18991C13");
    check_field_offset(lv, s18991c13f0, ABISELECT(8,4), "S18991C13.s18991c13f0");
    check_field_offset(lv, s18991c13f1, ABISELECT(16,8), "S18991C13.s18991c13f1");
    test_class_info(&lv, &cd_S18991C13);
    dp->~S18991C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18991C13(Test_S18991C13, "S18991C13", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S18991C13C1Ev();
extern void _ZN9S18991C13D1Ev();
Name_Map name_map_S18991C13[] = {
  NSPAIR(_ZN9S18991C13C1Ev),
  NSPAIR(_ZN9S18991C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18991C5;
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
static Base_Class bases_S18991C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18991C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S18991C13[];
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN9S18991C133v31Ev();
extern void _ZN9S18991C133v32Ev();
extern void _ZN9S18991C133v33Ev();
extern void _ZN9S18991C133v34Ev();
extern void _ZN9S18991C133v35Ev();
extern void _ZN9S18991C133v36Ev();
extern void _ZN9S18991C133v37Ev();
static  VTBL_ENTRY vtc_S18991C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S18991C13[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v31Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v32Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v33Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v34Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v35Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v36Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v37Ev,
};
extern VTBL_ENTRY _ZTV9S18991C13[];
static  VTT_ENTRY vtt_S18991C13[] = {
  {&(_ZTV9S18991C13[7]),  7,18},
  {&(_ZTV9S18991C13[7]),  7,18},
};
extern VTBL_ENTRY _ZTI9S18991C13[];
extern  VTBL_ENTRY _ZTV9S18991C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18991C13[];
Class_Descriptor cd_S18991C13 = {  "S18991C13", // class name
  bases_S18991C13, 1,
  &(vtc_S18991C13[0]), // expected_vtbl_contents
  &(vtt_S18991C13[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S18991C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S18991C13),18, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18991C13),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18991C1  : virtual S18991C2 , virtual S18991C13 {
  virtual  ~S18991C1(); // _ZN8S18991C1D2Ev
  virtual void  v1(); // _ZN8S18991C12v1Ev
  S18991C1(); // tgen
};
//SIG(1 S18991C1) C1{ VBC2{ BC3{ BC4{ BC5{ v2 v3 v4 v5} v6 v7} VBC6{ BC7{ v8} v9 v10 v11 v12 v13 v14 v15 Fp} vd v16 v17 Fc[10]} BC8{ VBC9{ VBC3 vd v18 v19 v20 v21 Fi FC10{ BC11{ v43 v44 v45 v46 v47 Fp[2]} vd v42 Fi}[9]} v22 v23 v24 FL Fl} vd v25 v26 v27 v28 v29 v30 FC12{ v38 v39 v40 v41 Fi:11 Fp[9] Fi Fp FD} Fp} VBC13{ VBC5 v31 v32 v33 v34 v35 v36 v37 Fi FD} vd v1}


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

static void Test_S18991C1()
{
  extern Class_Descriptor cd_S18991C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,76)];
    init_test(&cd_S18991C1, buf);
    S18991C1 *dp, &lv = *(dp=new (buf) S18991C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,300), "sizeof(S18991C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18991C1)");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C5*)(S18991C4*)(S18991C3*)(S18991C2*), ABISELECT(16,4), "S18991C1");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C4*)(S18991C3*)(S18991C2*), ABISELECT(16,4), "S18991C1");
    check_base_class_offset(lv, (S18991C7*)(S18991C6*), ABISELECT(200,104), "S18991C1");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C6*)(S18991C3*)(S18991C2*), ABISELECT(200,104), "S18991C1");
    /*is_ambiguous_... S18991C1::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C6*)(S18991C3*), ABISELECT(200,104), "S18991C1");
    /*is_ambiguous_... S18991C2::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C3*)(S18991C2*), ABISELECT(16,4), "S18991C1");
    /*is_ambiguous_... S18991C1::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C5*)(S18991C4*)(S18991C3*), ABISELECT(520,264), "S18991C1");
    /*is_ambiguous_... S18991C1::S18991C3 */ AMB_check_base_class_offset(lv, (S18991C4*)(S18991C3*), ABISELECT(520,264), "S18991C1");
    check_base_class_offset(lv, (S18991C3*)(S18991C9*), ABISELECT(520,264), "S18991C1");
    check_base_class_offset(lv, (S18991C9*)(S18991C8*)(S18991C2*), ABISELECT(216,112), "S18991C1");
    check_base_class_offset(lv, (S18991C8*)(S18991C2*), ABISELECT(40,20), "S18991C1");
    check_base_class_offset(lv, (S18991C2*), ABISELECT(16,4), "S18991C1");
    check_base_class_offset(lv, (S18991C5*)(S18991C13*), 0, "S18991C1");
    check_base_class_offset(lv, (S18991C13*), ABISELECT(544,280), "S18991C1");
    test_class_info(&lv, &cd_S18991C1);
    dp->~S18991C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18991C1(Test_S18991C1, "S18991C1", ABISELECT(576,300));

#else // __cplusplus

extern void _ZN8S18991C1C1Ev();
extern void _ZN8S18991C1D2Ev();
Name_Map name_map_S18991C1[] = {
  NSPAIR(_ZN8S18991C1C1Ev),
  NSPAIR(_ZN8S18991C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18991C5;
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
extern Class_Descriptor cd_S18991C4;
extern VTBL_ENTRY _ZTI8S18991C4[];
extern  VTBL_ENTRY _ZTV8S18991C4[];
extern Class_Descriptor cd_S18991C7;
extern VTBL_ENTRY _ZTI8S18991C7[];
extern  VTBL_ENTRY _ZTV8S18991C7[];
extern Class_Descriptor cd_S18991C6;
extern VTBL_ENTRY _ZTI8S18991C6[];
extern  VTBL_ENTRY _ZTV8S18991C6[];
extern Class_Descriptor cd_S18991C3;
extern VTBL_ENTRY _ZTI8S18991C3[];
extern  VTBL_ENTRY _ZTV8S18991C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C3[];
extern Class_Descriptor cd_S18991C5;
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
extern Class_Descriptor cd_S18991C4;
extern VTBL_ENTRY _ZTI8S18991C4[];
extern  VTBL_ENTRY _ZTV8S18991C4[];
extern Class_Descriptor cd_S18991C3;
extern VTBL_ENTRY _ZTI8S18991C3[];
extern  VTBL_ENTRY _ZTV8S18991C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C3[];
extern Class_Descriptor cd_S18991C9;
extern VTBL_ENTRY _ZTI8S18991C9[];
extern  VTBL_ENTRY _ZTV8S18991C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C9[];
extern Class_Descriptor cd_S18991C8;
extern VTBL_ENTRY _ZTI8S18991C8[];
extern  VTBL_ENTRY _ZTV8S18991C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C8[];
extern Class_Descriptor cd_S18991C2;
extern VTBL_ENTRY _ZTI8S18991C2[];
extern  VTBL_ENTRY _ZTV8S18991C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C2[];
extern Class_Descriptor cd_S18991C5;
extern VTBL_ENTRY _ZTI8S18991C5[];
extern  VTBL_ENTRY _ZTV8S18991C5[];
extern Class_Descriptor cd_S18991C13;
extern VTBL_ENTRY _ZTI9S18991C13[];
extern  VTBL_ENTRY _ZTV9S18991C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18991C13[];
static Base_Class bases_S18991C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18991C5,    ABISELECT(16,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
    7, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S18991C4,    ABISELECT(16,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
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18991C7,    ABISELECT(200,104), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18991C6,    ABISELECT(200,104), //bcp->offset
    68, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18991C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S18991C5,    ABISELECT(520,264), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S18991C4,    ABISELECT(520,264), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S18991C3,    ABISELECT(520,264), //bcp->offset
    101, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S18991C9,    ABISELECT(216,112), //bcp->offset
    86, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S18991C8,    ABISELECT(40,20), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S18991C2,    ABISELECT(16,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18991C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S18991C13,    ABISELECT(544,280), //bcp->offset
    123, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18991C1[];
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C1D1Ev();
extern void _ZN8S18991C1D0Ev();
extern void _ZN8S18991C12v1Ev();
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n96_N8S18991C1D1Ev,_ZTv0_n48_N8S18991C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S18991C1D1Ev,_ZThn4_N8S18991C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S18991C1D0Ev,_ZTv0_n48_N8S18991C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S18991C1D0Ev,_ZThn4_N8S18991C1D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
extern void _ZN8S18991C23v25Ev();
extern void _ZN8S18991C23v26Ev();
extern void _ZN8S18991C23v27Ev();
extern void _ZN8S18991C23v28Ev();
extern void _ZN8S18991C23v29Ev();
extern void _ZN8S18991C23v30Ev();
extern void _ZN8S18991C83v22Ev();
extern void _ZN8S18991C83v23Ev();
extern void _ZN8S18991C83v24Ev();
extern void ABISELECT(_ZTvn24_n96_N8S18991C1D1Ev,_ZTvn16_n48_N8S18991C1D1Ev)();
extern void ABISELECT(_ZTvn24_n96_N8S18991C1D0Ev,_ZTvn16_n48_N8S18991C1D0Ev)();
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
extern void ABISELECT(_ZTv0_n40_N8S18991C1D1Ev,_ZTv0_n20_N8S18991C1D1Ev)();
extern void ABISELECT(_ZThn216_N8S18991C1D1Ev,_ZThn112_N8S18991C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18991C1D0Ev,_ZTv0_n20_N8S18991C1D0Ev)();
extern void ABISELECT(_ZThn216_N8S18991C1D0Ev,_ZThn112_N8S18991C1D0Ev)() __attribute__((weak));
extern void _ZN8S18991C93v18Ev();
extern void _ZN8S18991C93v19Ev();
extern void _ZN8S18991C93v20Ev();
extern void _ZN8S18991C93v21Ev();
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18991C1D1Ev,_ZTv0_n40_N8S18991C1D1Ev)();
extern void ABISELECT(_ZThn520_N8S18991C1D1Ev,_ZThn264_N8S18991C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18991C1D0Ev,_ZTv0_n40_N8S18991C1D0Ev)();
extern void ABISELECT(_ZThn520_N8S18991C1D0Ev,_ZThn264_N8S18991C1D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN9S18991C133v31Ev();
extern void _ZN9S18991C133v32Ev();
extern void _ZN9S18991C133v33Ev();
extern void _ZN9S18991C133v34Ev();
extern void _ZN9S18991C133v35Ev();
extern void _ZN9S18991C133v36Ev();
extern void _ZN9S18991C133v37Ev();
static  VTBL_ENTRY vtc_S18991C1[] = {
  0,
  ABISELECT(544,280),
  ABISELECT(520,264),
  ABISELECT(216,112),
  ABISELECT(200,104),
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C1[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C12v1Ev,
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(504,260),
  ABISELECT(200,108),
  ABISELECT(184,100),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S18991C1[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S18991C1D1Ev,_ZTv0_n48_N8S18991C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S18991C1D0Ev,_ZTv0_n48_N8S18991C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v25Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v27Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v28Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v29Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v30Ev,
  ABISELECT(160,84),
  ABISELECT(480,244),
  ABISELECT(176,92),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18991C1[0]),
  (VTBL_ENTRY)&_ZN8S18991C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n96_N8S18991C1D1Ev,_ZTvn16_n48_N8S18991C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n96_N8S18991C1D0Ev,_ZTvn16_n48_N8S18991C1D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI8S18991C1[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-112),
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI8S18991C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C1D1Ev,_ZTv0_n20_N8S18991C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C1D0Ev,_ZTv0_n20_N8S18991C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v21Ev,
  0,
  0,
  ABISELECT(-520,-264),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-520,-264),
  (VTBL_ENTRY)&(_ZTI8S18991C1[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C1D1Ev,_ZTv0_n40_N8S18991C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C1D0Ev,_ZTv0_n40_N8S18991C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  (VTBL_ENTRY)&(_ZTI8S18991C1[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v31Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v32Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v33Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v34Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v35Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v36Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v37Ev,
};
extern VTBL_ENTRY _ZTV8S18991C1[];
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void _ZN8S18991C2D1Ev();
extern void _ZN8S18991C2D0Ev();
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
extern void _ZN8S18991C23v25Ev();
extern void _ZN8S18991C23v26Ev();
extern void _ZN8S18991C23v27Ev();
extern void _ZN8S18991C23v28Ev();
extern void _ZN8S18991C23v29Ev();
extern void _ZN8S18991C23v30Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C2__8S18991C1[] = {
  ABISELECT(504,260),
  ABISELECT(200,108),
  ABISELECT(184,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C2[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18991C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v25Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v27Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v28Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v29Ev,
  (VTBL_ENTRY)&_ZN8S18991C23v30Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void _ZN8S18991C3D1Ev();
extern void _ZN8S18991C3D0Ev();
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C38S18991C2__8S18991C1[] = {
  ABISELECT(184,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C38S18991C2__8S18991C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern void _ZN8S18991C83v22Ev();
extern void _ZN8S18991C83v23Ev();
extern void _ZN8S18991C83v24Ev();
extern void _ZN8S18991C8D1Ev();
extern void _ZN8S18991C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C88S18991C2__8S18991C1[] = {
  ABISELECT(160,84),
  ABISELECT(480,244),
  ABISELECT(176,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&_ZN8S18991C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v24Ev,
  (VTBL_ENTRY)&_ZN8S18991C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S18991C8D1Ev,_ZTv0_n20_N8S18991C8D1Ev)();
extern void ABISELECT(_ZThn176_N8S18991C8D1Ev,_ZThn92_N8S18991C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18991C8D0Ev,_ZTv0_n20_N8S18991C8D0Ev)();
extern void ABISELECT(_ZThn176_N8S18991C8D0Ev,_ZThn92_N8S18991C8D0Ev)() __attribute__((weak));
extern void _ZN8S18991C93v18Ev();
extern void _ZN8S18991C93v19Ev();
extern void _ZN8S18991C93v20Ev();
extern void _ZN8S18991C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C9__8S18991C88S18991C2__8S18991C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-92),
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C8D1Ev,_ZTv0_n20_N8S18991C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C8D0Ev,_ZTv0_n20_N8S18991C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v21Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18991C8D1Ev,_ZTv0_n40_N8S18991C8D1Ev)();
extern void ABISELECT(_ZThn480_N8S18991C8D1Ev,_ZThn244_N8S18991C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18991C8D0Ev,_ZTv0_n40_N8S18991C8D0Ev)();
extern void ABISELECT(_ZThn480_N8S18991C8D0Ev,_ZThn244_N8S18991C8D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__8S18991C88S18991C2__8S18991C1[] = {
  0,
  0,
  ABISELECT(-480,-244),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-480,-244),
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C8D1Ev,_ZTv0_n40_N8S18991C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C8D0Ev,_ZTv0_n40_N8S18991C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C88S18991C2__8S18991C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S18991C8[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C2__8S18991C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S18991C2[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern void _ZN8S18991C83v22Ev();
extern void _ZN8S18991C83v23Ev();
extern void _ZN8S18991C83v24Ev();
extern void ABISELECT(_ZThn24_N8S18991C2D1Ev,_ZThn16_N8S18991C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S18991C2D0Ev,_ZThn16_N8S18991C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S18991C8__8S18991C2__8S18991C1[] = {
  ABISELECT(160,84),
  ABISELECT(480,244),
  ABISELECT(176,92),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S18991C2[0]),
  (VTBL_ENTRY)&_ZN8S18991C83v22Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v23Ev,
  (VTBL_ENTRY)&_ZN8S18991C83v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S18991C2D1Ev,_ZThn16_N8S18991C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S18991C2D0Ev,_ZThn16_N8S18991C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S18991C2D1Ev,_ZTv0_n20_N8S18991C2D1Ev)();
extern void ABISELECT(_ZThn200_N8S18991C2D1Ev,_ZThn108_N8S18991C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S18991C2D0Ev,_ZTv0_n20_N8S18991C2D0Ev)();
extern void ABISELECT(_ZThn200_N8S18991C2D0Ev,_ZThn108_N8S18991C2D0Ev)() __attribute__((weak));
extern void _ZN8S18991C93v18Ev();
extern void _ZN8S18991C93v19Ev();
extern void _ZN8S18991C93v20Ev();
extern void _ZN8S18991C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C9__8S18991C2__8S18991C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  ABISELECT(-200,-108),
  (VTBL_ENTRY)&(_ZTI8S18991C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C2D1Ev,_ZTv0_n20_N8S18991C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S18991C2D0Ev,_ZTv0_n20_N8S18991C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v21Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18991C2D1Ev,_ZTv0_n40_N8S18991C2D1Ev)();
extern void ABISELECT(_ZThn504_N8S18991C2D1Ev,_ZThn260_N8S18991C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18991C2D0Ev,_ZTv0_n40_N8S18991C2D0Ev)();
extern void ABISELECT(_ZThn504_N8S18991C2D0Ev,_ZThn260_N8S18991C2D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__A1__8S18991C2__8S18991C1[] = {
  0,
  0,
  ABISELECT(-504,-260),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-504,-260),
  (VTBL_ENTRY)&(_ZTI8S18991C2[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C2D1Ev,_ZTv0_n40_N8S18991C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C2D0Ev,_ZTv0_n40_N8S18991C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C9D1Ev();
extern void _ZN8S18991C9D0Ev();
extern void _ZN8S18991C93v18Ev();
extern void _ZN8S18991C93v19Ev();
extern void _ZN8S18991C93v20Ev();
extern void _ZN8S18991C93v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C9__8S18991C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18991C93v21Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S18991C9D1Ev,_ZThn152_N8S18991C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S18991C9D0Ev,_ZThn152_N8S18991C9D0Ev)() __attribute__((weak));
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__8S18991C9__8S18991C1[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-320,-160),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C9__8S18991C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S18991C9[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN8S18991C42v6Ev();
extern void _ZN8S18991C42v7Ev();
extern void _ZN8S18991C3D1Ev();
extern void _ZN8S18991C3D0Ev();
extern void _ZN8S18991C33v16Ev();
extern void _ZN8S18991C33v17Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C3__A1__8S18991C1[] = {
  ABISELECT(-320,-160),
  0,
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v6Ev,
  (VTBL_ENTRY)&_ZN8S18991C42v7Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18991C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v16Ev,
  (VTBL_ENTRY)&_ZN8S18991C33v17Ev,
};
extern void _ZN8S18991C72v8Ev();
extern void _ZN8S18991C62v9Ev();
extern void _ZN8S18991C63v10Ev();
extern void _ZN8S18991C63v11Ev();
extern void _ZN8S18991C63v12Ev();
extern void _ZN8S18991C63v13Ev();
extern void _ZN8S18991C63v14Ev();
extern void _ZN8S18991C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C6__8S18991C3__A1__8S18991C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(320,160),
  (VTBL_ENTRY)&(_ZTI8S18991C3[0]),
  (VTBL_ENTRY)&_ZN8S18991C72v8Ev,
  (VTBL_ENTRY)&_ZN8S18991C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v11Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v12Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v13Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v14Ev,
  (VTBL_ENTRY)&_ZN8S18991C63v15Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
extern void _ZN9S18991C133v31Ev();
extern void _ZN9S18991C133v32Ev();
extern void _ZN9S18991C133v33Ev();
extern void _ZN9S18991C133v34Ev();
extern void _ZN9S18991C133v35Ev();
extern void _ZN9S18991C133v36Ev();
extern void _ZN9S18991C133v37Ev();
static  VTBL_ENTRY _tg__ZTV9S18991C13__8S18991C1[] = {
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  ABISELECT(-544,-280),
  0,
  (VTBL_ENTRY)&(_ZTI9S18991C13[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v31Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v32Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v33Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v34Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v35Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v36Ev,
  (VTBL_ENTRY)&_ZN9S18991C133v37Ev,
};
extern void _ZN8S18991C52v2Ev();
extern void _ZN8S18991C52v3Ev();
extern void _ZN8S18991C52v4Ev();
extern void _ZN8S18991C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18991C5__9S18991C13__8S18991C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(544,280),
  (VTBL_ENTRY)&(_ZTI9S18991C13[0]),
  (VTBL_ENTRY)&_ZN8S18991C52v2Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v3Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18991C52v5Ev,
};
static  VTT_ENTRY vtt_S18991C1[] = {
  {&(_ZTV8S18991C1[12]),  12,148},
  {&(_ZTV8S18991C1[42]),  42,148},
  {&(_ZTV8S18991C1[78]),  78,148},
  {&(_ZTV8S18991C1[63]),  63,148},
  {&(_ZTV8S18991C1[95]),  95,148},
  {&(_ZTV8S18991C1[113]),  113,148},
  {&(_ZTV8S18991C1[137]),  137,148},
  {&(_ZTV8S18991C1[12]),  12,148},
  {&(_tg__ZTV8S18991C2__8S18991C1[5]),  5,21},
  {&(_tg__ZTV8S18991C38S18991C2__8S18991C1[3]),  3,13},
  {&(_tg__ZTV8S18991C6__8S18991C38S18991C2__8S18991C1[10]),  10,18},
  {&(_tg__ZTV8S18991C88S18991C2__8S18991C1[5]),  5,10},
  {&(_tg__ZTV8S18991C9__8S18991C88S18991C2__8S18991C1[9]),  9,15},
  {&(_tg__ZTV8S18991C3__8S18991C88S18991C2__8S18991C1[12]),  12,22},
  {&(_tg__ZTV8S18991C6__8S18991C88S18991C2__8S18991C1[10]),  10,18},
  {&(_tg__ZTV8S18991C6__8S18991C2__8S18991C1[10]),  10,18},
  {&(_tg__ZTV8S18991C8__8S18991C2__8S18991C1[5]),  5,10},
  {&(_tg__ZTV8S18991C9__8S18991C2__8S18991C1[9]),  9,15},
  {&(_tg__ZTV8S18991C3__A1__8S18991C2__8S18991C1[12]),  12,22},
  {&(_tg__ZTV8S18991C9__8S18991C1[4]),  4,10},
  {&(_tg__ZTV8S18991C3__8S18991C9__8S18991C1[12]),  12,22},
  {&(_tg__ZTV8S18991C6__8S18991C9__8S18991C1[10]),  10,18},
  {&(_tg__ZTV8S18991C3__A1__8S18991C1[3]),  3,13},
  {&(_tg__ZTV8S18991C6__8S18991C3__A1__8S18991C1[10]),  10,18},
  {&(_tg__ZTV9S18991C13__8S18991C1[7]),  7,18},
  {&(_tg__ZTV8S18991C5__9S18991C13__8S18991C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S18991C1[];
extern  VTBL_ENTRY _ZTV8S18991C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18991C1[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C9D0Ev,_ZTv0_n40_N8S18991C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18991C9D0Ev,_ZThn152_N8S18991C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C9D1Ev,_ZTv0_n40_N8S18991C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S18991C9D1Ev,_ZThn152_N8S18991C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C2D0Ev,_ZTv0_n40_N8S18991C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S18991C2D0Ev,_ZThn260_N8S18991C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C2D1Ev,_ZTv0_n40_N8S18991C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S18991C2D1Ev,_ZThn260_N8S18991C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C2D0Ev,_ZTv0_n20_N8S18991C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S18991C2D0Ev,_ZThn108_N8S18991C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C2D1Ev,_ZTv0_n20_N8S18991C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S18991C2D1Ev,_ZThn108_N8S18991C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C8D0Ev,_ZTv0_n40_N8S18991C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S18991C8D0Ev,_ZThn244_N8S18991C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C8D1Ev,_ZTv0_n40_N8S18991C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S18991C8D1Ev,_ZThn244_N8S18991C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C8D0Ev,_ZTv0_n20_N8S18991C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S18991C8D0Ev,_ZThn92_N8S18991C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C8D1Ev,_ZTv0_n20_N8S18991C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S18991C8D1Ev,_ZThn92_N8S18991C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C1D0Ev,_ZTv0_n40_N8S18991C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S18991C1D0Ev,_ZThn264_N8S18991C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18991C1D1Ev,_ZTv0_n40_N8S18991C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S18991C1D1Ev,_ZThn264_N8S18991C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C1D0Ev,_ZTv0_n20_N8S18991C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S18991C1D0Ev,_ZThn112_N8S18991C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S18991C1D1Ev,_ZTv0_n20_N8S18991C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S18991C1D1Ev,_ZThn112_N8S18991C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S18991C1D0Ev,_ZTv0_n48_N8S18991C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18991C1D0Ev,_ZThn4_N8S18991C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S18991C1D1Ev,_ZTv0_n48_N8S18991C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18991C1D1Ev,_ZThn4_N8S18991C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18991C1 = {  "S18991C1", // class name
  bases_S18991C1, 13,
  &(vtc_S18991C1[0]), // expected_vtbl_contents
  &(vtt_S18991C1[0]), // expected_vtt_contents
  ABISELECT(576,300), // object size
  NSPAIRA(_ZTI8S18991C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18991C1),148, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18991C1),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1651C3_nt  : S10180C17 {
  char s1651c3f0;
  int s1651c3f1;
  ::S10180C136 s1651c3f2;
  virtual  ~S1651C3_nt(); // _ZN10S1651C3_ntD1Ev
  virtual void  v7(); // _ZN10S1651C3_nt2v7Ev
  virtual void  v8(); // _ZN10S1651C3_nt2v8Ev
  S1651C3_nt(); // tgen
};
//SIG(-1 S1651C3_nt) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 v2 Fc Fi FC6{ m Fp Fi FC7{ m} FC8{ m}}}


 S1651C3_nt ::~S1651C3_nt(){ note_dtor("S1651C3_nt", this);}
void  S1651C3_nt ::v7(){vfunc_called(this, "_ZN10S1651C3_nt2v7Ev");}
void  S1651C3_nt ::v8(){vfunc_called(this, "_ZN10S1651C3_nt2v8Ev");}
S1651C3_nt ::S1651C3_nt(){ note_ctor("S1651C3_nt", this);} // tgen

//skip512 S1651C3_nt

#else // __cplusplus

extern void _ZN10S1651C3_ntC1Ev();
extern void _ZN10S1651C3_ntD1Ev();
Name_Map name_map_S1651C3_nt[] = {
  NSPAIR(_ZN10S1651C3_ntC1Ev),
  NSPAIR(_ZN10S1651C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S1651C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S1651C3_nt[];
extern void _ZN10S1651C3_ntD1Ev();
extern void _ZN10S1651C3_ntD0Ev();
extern void _ZN10S1651C3_nt2v7Ev();
extern void _ZN10S1651C3_nt2v8Ev();
static  VTBL_ENTRY vtc_S1651C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1651C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1651C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1651C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1651C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1651C3_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S1651C3_nt[];
VTBL_ENTRY *P__ZTI10S1651C3_nt = _ZTI10S1651C3_nt; 
extern  VTBL_ENTRY _ZTV10S1651C3_nt[];
Class_Descriptor cd_S1651C3_nt = {  "S1651C3_nt", // class name
  bases_S1651C3_nt, 1,
  &(vtc_S1651C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI10S1651C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1651C3_nt),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  S1651C18_nt  : S10180C18 {
};
//SIG(-1 S1651C18_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S1651C18_nt

#else // __cplusplus

extern Class_Descriptor cd_S10180C18;
static Base_Class bases_S1651C18_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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  S1651C2  : S1651C3_nt {
  void *s1651c2f0[7];
  int s1651c2f1;
  ::S10180C5 s1651c2f2;
  ::S1651C18_nt s1651c2f3;
  ::S10180C6 s1651c2f4;
  virtual  ~S1651C2(); // _ZN7S1651C2D1Ev
  virtual void  v9(); // _ZN7S1651C22v9Ev
  virtual void  v10(); // _ZN7S1651C23v10Ev
  virtual void  v11(); // _ZN7S1651C23v11Ev
  virtual void  v12(); // _ZN7S1651C23v12Ev
  virtual void  v13(); // _ZN7S1651C23v13Ev
  virtual void  v14(); // _ZN7S1651C23v14Ev
  S1651C2(); // tgen
};
//SIG(-1 S1651C2) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v7 v8 Fc Fi FC7{ m Fp Fi FC8{ m} FC9{ m}}} vd v1 v2 v3 v4 v5 v6 Fp[7] Fi FC10{ BC11{ m Fp Fi FC12{ m} FC12}} FC13{ BC4} FC11}


 S1651C2 ::~S1651C2(){ note_dtor("S1651C2", this);}
void  S1651C2 ::v9(){vfunc_called(this, "_ZN7S1651C22v9Ev");}
void  S1651C2 ::v10(){vfunc_called(this, "_ZN7S1651C23v10Ev");}
void  S1651C2 ::v11(){vfunc_called(this, "_ZN7S1651C23v11Ev");}
void  S1651C2 ::v12(){vfunc_called(this, "_ZN7S1651C23v12Ev");}
void  S1651C2 ::v13(){vfunc_called(this, "_ZN7S1651C23v13Ev");}
void  S1651C2 ::v14(){vfunc_called(this, "_ZN7S1651C23v14Ev");}
S1651C2 ::S1651C2(){ note_ctor("S1651C2", this);} // tgen

static void Test_S1651C2()
{
  extern Class_Descriptor cd_S1651C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,30)];
    init_test(&cd_S1651C2, buf);
    S1651C2 *dp, &lv = *(dp=new (buf) S1651C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,116), "sizeof(S1651C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1651C2)");
    check_base_class_offset(lv, (S10180C17*)(S1651C3_nt*), 0, "S1651C2");
    check_base_class_offset(lv, (S1651C3_nt*), 0, "S1651C2");
    check_field_offset(lv, s1651c2f0, ABISELECT(64,48), "S1651C2.s1651c2f0");
    check_field_offset(lv, s1651c2f1, ABISELECT(120,76), "S1651C2.s1651c2f1");
    check_field_offset(lv, s1651c2f2, ABISELECT(128,80), "S1651C2.s1651c2f2");
    check_field_offset(lv, s1651c2f3, ABISELECT(144,92), "S1651C2.s1651c2f3");
    check_field_offset(lv, s1651c2f4, ABISELECT(160,104), "S1651C2.s1651c2f4");
    test_class_info(&lv, &cd_S1651C2);
    dp->~S1651C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1651C2(Test_S1651C2, "S1651C2", ABISELECT(176,116));

#else // __cplusplus

extern void _ZN7S1651C2C1Ev();
extern void _ZN7S1651C2D1Ev();
Name_Map name_map_S1651C2[] = {
  NSPAIR(_ZN7S1651C2C1Ev),
  NSPAIR(_ZN7S1651C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S1651C3_nt;
extern VTBL_ENTRY _ZTI10S1651C3_nt[];
extern  VTBL_ENTRY _ZTV10S1651C3_nt[];
static Base_Class bases_S1651C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1651C3_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 _ZTI7S1651C2[];
extern void _ZN7S1651C2D1Ev();
extern void _ZN7S1651C2D0Ev();
extern void _ZN10S1651C3_nt2v7Ev();
extern void _ZN10S1651C3_nt2v8Ev();
extern void _ZN7S1651C22v9Ev();
extern void _ZN7S1651C23v10Ev();
extern void _ZN7S1651C23v11Ev();
extern void _ZN7S1651C23v12Ev();
extern void _ZN7S1651C23v13Ev();
extern void _ZN7S1651C23v14Ev();
static  VTBL_ENTRY vtc_S1651C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1651C2[0]),
  (VTBL_ENTRY)&_ZN7S1651C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1651C2D0Ev,
  (VTBL_ENTRY)&_ZN10S1651C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1651C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1651C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1651C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1651C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1651C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1651C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1651C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S1651C2[];
extern  VTBL_ENTRY _ZTV7S1651C2[];
Class_Descriptor cd_S1651C2 = {  "S1651C2", // class name
  bases_S1651C2, 2,
  &(vtc_S1651C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,116), // object size
  NSPAIRA(_ZTI7S1651C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1651C2),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  S1651C1  : S1651C2 {
  char s1651c1f0[2];
  int s1651c1f1;
  ::S7934C22_nt s1651c1f2;
  void *s1651c1f3;
  virtual  ~S1651C1(); // _ZN7S1651C1D1Ev
  virtual void  v1(); // _ZN7S1651C12v1Ev
  virtual void  v2(); // _ZN7S1651C12v2Ev
  virtual void  v3(); // _ZN7S1651C12v3Ev
  virtual void  v4(); // _ZN7S1651C12v4Ev
  virtual void  v5(); // _ZN7S1651C12v5Ev
  virtual void  v6(); // _ZN7S1651C12v6Ev
  S1651C1(); // tgen
};
//SIG(1 S1651C1) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 Fc} vd v7 v8 Fc Fi FC8{ m Fp Fi FC9{ m} FC10{ m}}} vd v9 v10 v11 v12 v13 v14 Fp[7] Fi FC11{ BC12{ m Fp Fi FC13{ m} FC13}} FC14{ BC5} FC12} vd v1 v2 v3 v4 v5 v6 Fc[2] Fi FC15{ m Fp Fi FC10 FC9} Fp}


 S1651C1 ::~S1651C1(){ note_dtor("S1651C1", this);}
void  S1651C1 ::v1(){vfunc_called(this, "_ZN7S1651C12v1Ev");}
void  S1651C1 ::v2(){vfunc_called(this, "_ZN7S1651C12v2Ev");}
void  S1651C1 ::v3(){vfunc_called(this, "_ZN7S1651C12v3Ev");}
void  S1651C1 ::v4(){vfunc_called(this, "_ZN7S1651C12v4Ev");}
void  S1651C1 ::v5(){vfunc_called(this, "_ZN7S1651C12v5Ev");}
void  S1651C1 ::v6(){vfunc_called(this, "_ZN7S1651C12v6Ev");}
S1651C1 ::S1651C1(){ note_ctor("S1651C1", this);} // tgen

static void Test_S1651C1()
{
  extern Class_Descriptor cd_S1651C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,36)];
    init_test(&cd_S1651C1, buf);
    S1651C1 *dp, &lv = *(dp=new (buf) S1651C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,140), "sizeof(S1651C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1651C1)");
    check_base_class_offset(lv, (S10180C17*)(S1651C3_nt*)(S1651C2*), 0, "S1651C1");
    check_base_class_offset(lv, (S1651C3_nt*)(S1651C2*), 0, "S1651C1");
    check_base_class_offset(lv, (S1651C2*), 0, "S1651C1");
    check_field_offset(lv, s1651c1f0, ABISELECT(176,116), "S1651C1.s1651c1f0");
    check_field_offset(lv, s1651c1f1, ABISELECT(180,120), "S1651C1.s1651c1f1");
    check_field_offset(lv, s1651c1f2, ABISELECT(184,124), "S1651C1.s1651c1f2");
    check_field_offset(lv, s1651c1f3, ABISELECT(200,136), "S1651C1.s1651c1f3");
    test_class_info(&lv, &cd_S1651C1);
    dp->~S1651C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1651C1(Test_S1651C1, "S1651C1", ABISELECT(208,140));

#else // __cplusplus

extern void _ZN7S1651C1C1Ev();
extern void _ZN7S1651C1D1Ev();
Name_Map name_map_S1651C1[] = {
  NSPAIR(_ZN7S1651C1C1Ev),
  NSPAIR(_ZN7S1651C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S1651C3_nt;
extern VTBL_ENTRY _ZTI10S1651C3_nt[];
extern  VTBL_ENTRY _ZTV10S1651C3_nt[];
extern Class_Descriptor cd_S1651C2;
extern VTBL_ENTRY _ZTI7S1651C2[];
extern  VTBL_ENTRY _ZTV7S1651C2[];
static Base_Class bases_S1651C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1651C3_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_S1651C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1651C1[];
extern void _ZN7S1651C1D1Ev();
extern void _ZN7S1651C1D0Ev();
extern void _ZN10S1651C3_nt2v7Ev();
extern void _ZN10S1651C3_nt2v8Ev();
extern void _ZN7S1651C22v9Ev();
extern void _ZN7S1651C23v10Ev();
extern void _ZN7S1651C23v11Ev();
extern void _ZN7S1651C23v12Ev();
extern void _ZN7S1651C23v13Ev();
extern void _ZN7S1651C23v14Ev();
extern void _ZN7S1651C12v1Ev();
extern void _ZN7S1651C12v2Ev();
extern void _ZN7S1651C12v3Ev();
extern void _ZN7S1651C12v4Ev();
extern void _ZN7S1651C12v5Ev();
extern void _ZN7S1651C12v6Ev();
static  VTBL_ENTRY vtc_S1651C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1651C1[0]),
  (VTBL_ENTRY)&_ZN7S1651C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1651C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1651C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1651C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1651C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1651C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1651C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1651C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1651C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1651C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1651C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1651C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1651C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1651C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1651C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1651C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1651C1[];
extern  VTBL_ENTRY _ZTV7S1651C1[];
Class_Descriptor cd_S1651C1 = {  "S1651C1", // class name
  bases_S1651C1, 3,
  &(vtc_S1651C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,140), // object size
  NSPAIRA(_ZTI7S1651C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1651C1),18, //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  S19890C5  {
  long double s19890c5f0;
  char s19890c5f1:4;
  void  mf19890c5(); // _ZN8S19890C59mf19890c5Ev
};
//SIG(-1 S19890C5) C1{ m FD Fc:4}


void  S19890C5 ::mf19890c5(){}

static void Test_S19890C5()
{
  {
    init_simple_test("S19890C5");
    static S19890C5 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19890C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C5)");
    check_field_offset(lv, s19890c5f0, 0, "S19890C5.s19890c5f0");
    set_bf_and_test(lv, s19890c5f1, ABISELECT(16,12), 0, 4, 1, "S19890C5");
    set_bf_and_test(lv, s19890c5f1, ABISELECT(16,12), 0, 4, hide_sll(1LL<<3), "S19890C5");
  }
}
static Arrange_To_Call_Me vS19890C5(Test_S19890C5, "S19890C5", ABISELECT(32,16));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19890C5[];
VTBL_ENTRY *P__ZTI8S19890C5 = _ZTI8S19890C5; 
Class_Descriptor cd_S19890C5 = {  "S19890C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19890C5),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  S19890C4  : S19890C5 {
};
//SIG(-1 S19890C4) C1{ BC2{ m FD Fc:4}}



static void Test_S19890C4()
{
  extern Class_Descriptor cd_S19890C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S19890C4, buf);
    S19890C4 &lv = *(new (buf) S19890C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19890C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C4)");
    check_base_class_offset(lv, (S19890C5*), 0, "S19890C4");
    test_class_info(&lv, &cd_S19890C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C4(Test_S19890C4, "S19890C4", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
static Base_Class bases_S19890C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19890C4[];
Class_Descriptor cd_S19890C4 = {  "S19890C4", // class name
  bases_S19890C4, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19890C4),ABISELECT(24,12), //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  S19890C10  {
  ::S19890C5 s19890c10f0;
  int s19890c10f1;
  void  mf19890c10(); // _ZN9S19890C1010mf19890c10Ev
};
//SIG(-1 S19890C10) C1{ m FC2{ m FD Fc:4} Fi}


void  S19890C10 ::mf19890c10(){}

static void Test_S19890C10()
{
  {
    init_simple_test("S19890C10");
    static S19890C10 lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S19890C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C10)");
    check_field_offset(lv, s19890c10f0, 0, "S19890C10.s19890c10f0");
    check_field_offset(lv, s19890c10f1, ABISELECT(32,16), "S19890C10.s19890c10f1");
  }
}
static Arrange_To_Call_Me vS19890C10(Test_S19890C10, "S19890C10", ABISELECT(48,20));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19890C10[];
VTBL_ENTRY *P__ZTI9S19890C10 = _ZTI9S19890C10; 
Class_Descriptor cd_S19890C10 = {  "S19890C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI9S19890C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C9  : virtual S19890C4 , virtual S19890C10 , virtual S10180C133 , S10180C138 {
  virtual  ~S19890C9(); // _ZN8S19890C9D2Ev
  S19890C9(); // tgen
};
//SIG(-1 S19890C9) C1{ VBC2{ BC3{ m FD Fc:4}} VBC4{ m FC3 Fi} VBC5{ m} BC6{ m} vd}


 S19890C9 ::~S19890C9(){ note_dtor("S19890C9", this);}
S19890C9 ::S19890C9(){ note_ctor("S19890C9", this);} // tgen

static void Test_S19890C9()
{
  extern Class_Descriptor cd_S19890C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,11)];
    init_test(&cd_S19890C9, buf);
    S19890C9 *dp, &lv = *(dp=new (buf) S19890C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,40), "sizeof(S19890C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C9)");
    check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(16,4), "S19890C9");
    check_base_class_offset(lv, (S19890C4*), ABISELECT(16,4), "S19890C9");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(48,20), "S19890C9");
    check_base_class_offset(lv, (S10180C133*), 0, "S19890C9");
    check_base_class_offset(lv, (S10180C138*), 0, "S19890C9");
    test_class_info(&lv, &cd_S19890C9);
    dp->~S19890C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C9(Test_S19890C9, "S19890C9", ABISELECT(96,40));

#else // __cplusplus

extern void _ZN8S19890C9C1Ev();
extern void _ZN8S19890C9D2Ev();
Name_Map name_map_S19890C9[] = {
  NSPAIR(_ZN8S19890C9C1Ev),
  NSPAIR(_ZN8S19890C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S19890C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(16,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
  0, 0},
  {&cd_S19890C4,    ABISELECT(16,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, 1},
  {&cd_S19890C10,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19890C9[];
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY vtc_S19890C9[] = {
  0,
  ABISELECT(48,20),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S19890C9[];
static  VTT_ENTRY vtt_S19890C9[] = {
  {&(_ZTV8S19890C9[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
Class_Descriptor cd_S19890C9 = {  "S19890C9", // class name
  bases_S19890C9, 5,
  &(vtc_S19890C9[0]), // expected_vtbl_contents
  &(vtt_S19890C9[0]), // expected_vtt_contents
  ABISELECT(96,40), // object size
  NSPAIRA(_ZTI8S19890C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19890C9),7, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19890C9),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C11  : virtual S19890C10 , virtual S10180C138 , S19890C5 {
  __tsi64 s19890c11f0;
  ::S19890C5 s19890c11f1;
  ::S19890C4 s19890c11f2;
  ~S19890C11(); // tgen
  S19890C11(); // tgen
};
//SIG(-1 S19890C11) C1{ VBC2{ m FC3{ m FD Fc:4} Fi} VBC4{ m} BC3 FL FC3 FC5{ BC3}}


S19890C11 ::~S19890C11(){ note_dtor("S19890C11", this);} // tgen
S19890C11 ::S19890C11(){ note_ctor("S19890C11", this);} // tgen

static void Test_S19890C11()
{
  extern Class_Descriptor cd_S19890C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,21)];
    init_test(&cd_S19890C11, buf);
    S19890C11 *dp, &lv = *(dp=new (buf) S19890C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,80), "sizeof(S19890C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C11)");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(128,60), "S19890C11");
    check_base_class_offset(lv, (S10180C138*), 0, "S19890C11");
    check_base_class_offset(lv, (S19890C5*), ABISELECT(16,4), "S19890C11");
    check_field_offset(lv, s19890c11f0, ABISELECT(48,20), "S19890C11.s19890c11f0");
    check_field_offset(lv, s19890c11f1, ABISELECT(64,28), "S19890C11.s19890c11f1");
    check_field_offset(lv, s19890c11f2, ABISELECT(96,44), "S19890C11.s19890c11f2");
    test_class_info(&lv, &cd_S19890C11);
    dp->~S19890C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C11(Test_S19890C11, "S19890C11", ABISELECT(176,80));

#else // __cplusplus

extern void _ZN9S19890C11C1Ev();
extern void _ZN9S19890C11D1Ev();
Name_Map name_map_S19890C11[] = {
  NSPAIR(_ZN9S19890C11C1Ev),
  NSPAIR(_ZN9S19890C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
static Base_Class bases_S19890C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C10,    ABISELECT(128,60), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S19890C5,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI9S19890C11[];
static  VTBL_ENTRY vtc_S19890C11[] = {
  0,
  ABISELECT(128,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C11[0]),
};
extern VTBL_ENTRY _ZTV9S19890C11[];
static  VTT_ENTRY vtt_S19890C11[] = {
  {&(_ZTV9S19890C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19890C11[];
extern  VTBL_ENTRY _ZTV9S19890C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C11[];
Class_Descriptor cd_S19890C11 = {  "S19890C11", // class name
  bases_S19890C11, 3,
  &(vtc_S19890C11[0]), // expected_vtbl_contents
  &(vtt_S19890C11[0]), // expected_vtt_contents
  ABISELECT(176,80), // object size
  NSPAIRA(_ZTI9S19890C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19890C11),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19890C11),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C7  : S10180C133 , virtual S19890C9 , virtual S19890C11 {
  virtual  ~S19890C7(); // _ZN8S19890C7D2Ev
  S19890C7(); // tgen
};
//SIG(-1 S19890C7) C1{ BC2{ m} VBC3{ VBC4{ BC5{ m FD Fc:4}} VBC6{ m FC5 Fi} VBC2 BC7{ m} vd} VBC8{ VBC6 VBC7 BC5 FL FC5 FC4} vd}


 S19890C7 ::~S19890C7(){ note_dtor("S19890C7", this);}
S19890C7 ::S19890C7(){ note_ctor("S19890C7", this);} // tgen

static void Test_S19890C7()
{
  extern Class_Descriptor cd_S19890C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S19890C7, buf);
    S19890C7 *dp, &lv = *(dp=new (buf) S19890C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S19890C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C7)");
    /*is_ambiguous_... S19890C7::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*), 0, "S19890C7");
    check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(16,4), "S19890C7");
    check_base_class_offset(lv, (S19890C4*)(S19890C9*), ABISELECT(16,4), "S19890C7");
    check_base_class_offset(lv, (S19890C10*)(S19890C9*), ABISELECT(48,20), "S19890C7");
    check_base_class_offset(lv, (S19890C10*)(S19890C11*), ABISELECT(48,20), "S19890C7");
    check_base_class_offset(lv, (S10180C133*)(S19890C9*), ABISELECT(96,40), "S19890C7");
    check_base_class_offset(lv, (S10180C138*)(S19890C9*), 0, "S19890C7");
    check_base_class_offset(lv, (S19890C9*), 0, "S19890C7");
    check_base_class_offset(lv, (S10180C138*)(S19890C11*), ABISELECT(224,100), "S19890C7");
    check_base_class_offset(lv, (S19890C5*)(S19890C11*), ABISELECT(112,44), "S19890C7");
    check_base_class_offset(lv, (S19890C11*), ABISELECT(96,40), "S19890C7");
    test_class_info(&lv, &cd_S19890C7);
    dp->~S19890C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C7(Test_S19890C7, "S19890C7", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN8S19890C7C1Ev();
extern void _ZN8S19890C7D2Ev();
Name_Map name_map_S19890C7[] = {
  NSPAIR(_ZN8S19890C7C1Ev),
  NSPAIR(_ZN8S19890C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C11;
extern VTBL_ENTRY _ZTI9S19890C11[];
extern  VTBL_ENTRY _ZTV9S19890C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C11[];
static Base_Class bases_S19890C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19890C5,    ABISELECT(16,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_S19890C4,    ABISELECT(16,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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(96,40), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19890C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C138,    ABISELECT(224,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(112,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19890C11,    ABISELECT(96,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19890C7[];
extern void _ZN8S19890C7D1Ev();
extern void _ZN8S19890C7D0Ev();
static  VTBL_ENTRY vtc_S19890C7[] = {
  ABISELECT(224,100),
  ABISELECT(96,40),
  0,
  0,
  ABISELECT(96,40),
  ABISELECT(48,20),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
  (VTBL_ENTRY)&_ZN8S19890C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C7D0Ev,
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-96,-40),
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
};
extern VTBL_ENTRY _ZTV8S19890C7[];
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C9__8S19890C7[] = {
  ABISELECT(96,40),
  ABISELECT(48,20),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C7[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C11[0]),
};
static  VTT_ENTRY vtt_S19890C7[] = {
  {&(_ZTV8S19890C7[9]),  9,15},
  {&(_ZTV8S19890C7[9]),  9,15},
  {&(_ZTV8S19890C7[15]),  15,15},
  {&(_tg__ZTV8S19890C9__8S19890C7[5]),  5,7},
  {&(_tg__ZTV9S19890C11__8S19890C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19890C7[];
extern  VTBL_ENTRY _ZTV8S19890C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C7[];
Class_Descriptor cd_S19890C7 = {  "S19890C7", // class name
  bases_S19890C7, 10,
  &(vtc_S19890C7[0]), // expected_vtbl_contents
  &(vtt_S19890C7[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI8S19890C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19890C7),15, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19890C7),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C6  : S19890C7 {
  int s19890c6f0;
  virtual  ~S19890C6(); // _ZN8S19890C6D2Ev
  S19890C6(); // tgen
};
//SIG(-1 S19890C6) C1{ BC2{ BC3{ m} VBC4{ VBC5{ BC6{ m FD Fc:4}} VBC7{ m FC6 Fi} VBC3 BC8{ m} vd} VBC9{ VBC7 VBC8 BC6 FL FC6 FC5} vd} vd Fi}


 S19890C6 ::~S19890C6(){ note_dtor("S19890C6", this);}
S19890C6 ::S19890C6(){ note_ctor("S19890C6", this);} // tgen

static void Test_S19890C6()
{
  extern Class_Descriptor cd_S19890C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,28)];
    init_test(&cd_S19890C6, buf);
    S19890C6 *dp, &lv = *(dp=new (buf) S19890C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,108), "sizeof(S19890C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C6)");
    /*is_ambiguous_... S19890C7::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C7*), 0, "S19890C6");
    check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(16,8), "S19890C6");
    check_base_class_offset(lv, (S19890C4*)(S19890C9*), ABISELECT(16,8), "S19890C6");
    check_base_class_offset(lv, (S19890C10*)(S19890C9*), ABISELECT(48,24), "S19890C6");
    check_base_class_offset(lv, (S19890C10*)(S19890C11*), ABISELECT(48,24), "S19890C6");
    check_base_class_offset(lv, (S10180C133*)(S19890C9*), ABISELECT(96,44), "S19890C6");
    check_base_class_offset(lv, (S10180C138*)(S19890C9*), 0, "S19890C6");
    check_base_class_offset(lv, (S19890C9*)(S19890C7*), 0, "S19890C6");
    check_base_class_offset(lv, (S10180C138*)(S19890C11*), ABISELECT(224,104), "S19890C6");
    check_base_class_offset(lv, (S19890C5*)(S19890C11*), ABISELECT(112,48), "S19890C6");
    check_base_class_offset(lv, (S19890C11*)(S19890C7*), ABISELECT(96,44), "S19890C6");
    check_base_class_offset(lv, (S19890C7*), 0, "S19890C6");
    check_field_offset(lv, s19890c6f0, ABISELECT(8,4), "S19890C6.s19890c6f0");
    test_class_info(&lv, &cd_S19890C6);
    dp->~S19890C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C6(Test_S19890C6, "S19890C6", ABISELECT(240,108));

#else // __cplusplus

extern void _ZN8S19890C6C1Ev();
extern void _ZN8S19890C6D2Ev();
Name_Map name_map_S19890C6[] = {
  NSPAIR(_ZN8S19890C6C1Ev),
  NSPAIR(_ZN8S19890C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C11;
extern VTBL_ENTRY _ZTI9S19890C11[];
extern  VTBL_ENTRY _ZTV9S19890C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C11[];
extern Class_Descriptor cd_S19890C7;
extern VTBL_ENTRY _ZTI8S19890C7[];
extern  VTBL_ENTRY _ZTV8S19890C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C7[];
static Base_Class bases_S19890C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19890C5,    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_S19890C4,    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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19890C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(224,104), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(112,48), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19890C11,    ABISELECT(96,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19890C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19890C6[];
extern void _ZN8S19890C6D1Ev();
extern void _ZN8S19890C6D0Ev();
static  VTBL_ENTRY vtc_S19890C6[] = {
  ABISELECT(224,104),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(96,44),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C6[0]),
  (VTBL_ENTRY)&_ZN8S19890C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C6D0Ev,
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S19890C6[0]),
};
extern VTBL_ENTRY _ZTV8S19890C6[];
extern void _ZN8S19890C7D1Ev();
extern void _ZN8S19890C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C7__8S19890C6[] = {
  ABISELECT(224,104),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(96,44),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
  (VTBL_ENTRY)&_ZN8S19890C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C7__8S19890C6[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C9__8S19890C6[] = {
  ABISELECT(96,44),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C6[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C11[0]),
};
static  VTT_ENTRY vtt_S19890C6[] = {
  {&(_ZTV8S19890C6[9]),  9,15},
  {&(_tg__ZTV8S19890C7__8S19890C6[9]),  9,11},
  {&(_tg__ZTV8S19890C7__8S19890C6[9]),  9,11},
  {&(_tg__ZTV9S19890C11__8S19890C7__8S19890C6[4]),  4,4},
  {&(_ZTV8S19890C6[9]),  9,15},
  {&(_ZTV8S19890C6[15]),  15,15},
  {&(_tg__ZTV8S19890C9__8S19890C6[5]),  5,7},
  {&(_tg__ZTV9S19890C11__8S19890C6[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19890C6[];
extern  VTBL_ENTRY _ZTV8S19890C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C6[];
Class_Descriptor cd_S19890C6 = {  "S19890C6", // class name
  bases_S19890C6, 11,
  &(vtc_S19890C6[0]), // expected_vtbl_contents
  &(vtt_S19890C6[0]), // expected_vtt_contents
  ABISELECT(240,108), // object size
  NSPAIRA(_ZTI8S19890C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19890C6),15, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19890C6),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C14  : virtual S10180C133 , virtual S19890C10 , S19890C9 , virtual S10180C138 , S19890C4 {
  ::S19890C7 s19890c14f0;
  virtual  ~S19890C14(); // _ZN9S19890C14D2Ev
  S19890C14(); // tgen
};
//SIG(-1 S19890C14) C1{ VBC2{ m} VBC3{ m FC4{ m FD Fc:4} Fi} BC5{ VBC6{ BC4} VBC3 VBC2 BC7{ m} vd} VBC7 BC6 vd FC8{ BC2 VBC5 VBC9{ VBC3 VBC7 BC4 FL FC4 FC6} vd}}


 S19890C14 ::~S19890C14(){ note_dtor("S19890C14", this);}
S19890C14 ::S19890C14(){ note_ctor("S19890C14", this);} // tgen

static void Test_S19890C14()
{
  extern Class_Descriptor cd_S19890C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,42)];
    init_test(&cd_S19890C14, buf);
    S19890C14 *dp, &lv = *(dp=new (buf) S19890C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,164), "sizeof(S19890C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C14)");
    check_base_class_offset(lv, (S10180C133*), 0, "S19890C14");
    check_base_class_offset(lv, (S10180C133*)(S19890C9*), 0, "S19890C14");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(288,124), "S19890C14");
    check_base_class_offset(lv, (S19890C10*)(S19890C9*), ABISELECT(288,124), "S19890C14");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(336,144), "S19890C14");
    check_base_class_offset(lv, (S19890C4*)(S19890C9*), ABISELECT(336,144), "S19890C14");
    check_base_class_offset(lv, (S10180C138*)(S19890C9*), 0, "S19890C14");
    check_base_class_offset(lv, (S19890C9*), 0, "S19890C14");
    /*is_ambiguous_... S19890C14::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*), ABISELECT(368,160), "S19890C14");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(16,4), "S19890C14");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*), ABISELECT(16,4), "S19890C14");
    check_field_offset(lv, s19890c14f0, ABISELECT(48,20), "S19890C14.s19890c14f0");
    test_class_info(&lv, &cd_S19890C14);
    dp->~S19890C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C14(Test_S19890C14, "S19890C14", ABISELECT(384,164));

#else // __cplusplus

extern void _ZN9S19890C14C1Ev();
extern void _ZN9S19890C14D2Ev();
Name_Map name_map_S19890C14[] = {
  NSPAIR(_ZN9S19890C14C1Ev),
  NSPAIR(_ZN9S19890C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
static Base_Class bases_S19890C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S19890C10,    ABISELECT(288,124), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S19890C5,    ABISELECT(336,144), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19890C4,    ABISELECT(336,144), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S19890C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C138,    ABISELECT(368,160), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S19890C5,    ABISELECT(16,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
    8, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI9S19890C14[];
extern void _ZN9S19890C14D1Ev();
extern void _ZN9S19890C14D0Ev();
static  VTBL_ENTRY vtc_S19890C14[] = {
  ABISELECT(368,160),
  0,
  ABISELECT(288,124),
  ABISELECT(336,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C14[0]),
  (VTBL_ENTRY)&_ZN9S19890C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C14D0Ev,
};
extern VTBL_ENTRY _ZTV9S19890C14[];
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C9__9S19890C14[] = {
  0,
  ABISELECT(288,124),
  ABISELECT(336,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
static  VTT_ENTRY vtt_S19890C14[] = {
  {&(_ZTV9S19890C14[6]),  6,8},
  {&(_tg__ZTV8S19890C9__9S19890C14[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S19890C14[];
extern  VTBL_ENTRY _ZTV9S19890C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C14[];
Class_Descriptor cd_S19890C14 = {  "S19890C14", // class name
  bases_S19890C14, 9,
  &(vtc_S19890C14[0]), // expected_vtbl_contents
  &(vtt_S19890C14[0]), // expected_vtt_contents
  ABISELECT(384,164), // object size
  NSPAIRA(_ZTI9S19890C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19890C14),8, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19890C14),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C12  : S10180C178 , virtual S19890C14 , S19890C4 , virtual S19890C9 {
  int s19890c12f0;
  virtual  ~S19890C12(); // _ZN9S19890C12D2Ev
  S19890C12(); // tgen
};
//SIG(-1 S19890C12) C1{ BC2{ vd m Fi} VBC3{ VBC4{ m} VBC5{ m FC6{ m FD Fc:4} Fi} BC7{ VBC8{ BC6} VBC5 VBC4 BC9{ m} vd} VBC9 BC8 vd FC10{ BC4 VBC7 VBC11{ VBC5 VBC9 BC6 FL FC6 FC8} vd}} BC8 VBC7 vd Fi}


 S19890C12 ::~S19890C12(){ note_dtor("S19890C12", this);}
S19890C12 ::S19890C12(){ note_ctor("S19890C12", this);} // tgen

static void Test_S19890C12()
{
  extern Class_Descriptor cd_S19890C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,49)];
    init_test(&cd_S19890C12, buf);
    S19890C12 *dp, &lv = *(dp=new (buf) S19890C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,192), "sizeof(S19890C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C12)");
    check_base_class_offset(lv, (S10180C178*), 0, "S19890C12");
    check_base_class_offset(lv, (S10180C133*)(S19890C14*), 0, "S19890C12");
    check_base_class_offset(lv, (S10180C133*)(S19890C9*)(S19890C14*), 0, "S19890C12");
    /*is_ambiguous_... S19890C12::S19890C9 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C9*), 0, "S19890C12");
    check_base_class_offset(lv, (S19890C10*)(S19890C14*), ABISELECT(352,152), "S19890C12");
    check_base_class_offset(lv, (S19890C10*)(S19890C9*)(S19890C14*), ABISELECT(352,152), "S19890C12");
    /*is_ambiguous_... S19890C12::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C9*), ABISELECT(352,152), "S19890C12");
    /*is_ambiguous_... S19890C12::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(400,172), "S19890C12");
    check_base_class_offset(lv, (S19890C4*)(S19890C9*)(S19890C14*), ABISELECT(400,172), "S19890C12");
    /*is_ambiguous_... S19890C12::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C9*), ABISELECT(400,172), "S19890C12");
    check_base_class_offset(lv, (S10180C138*)(S19890C9*)(S19890C14*), ABISELECT(64,28), "S19890C12");
    check_base_class_offset(lv, (S19890C9*)(S19890C14*), ABISELECT(64,28), "S19890C12");
    /*is_ambiguous_... S19890C14::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C14*), 0, "S19890C12");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C14*), ABISELECT(80,32), "S19890C12");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C14*), ABISELECT(80,32), "S19890C12");
    check_base_class_offset(lv, (S19890C14*), ABISELECT(64,28), "S19890C12");
    /*is_ambiguous_... S19890C12::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(16,8), "S19890C12");
    /*is_ambiguous_... S19890C12::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*), ABISELECT(16,8), "S19890C12");
    /*is_ambiguous_... S19890C12::S19890C9 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C9*), ABISELECT(432,188), "S19890C12");
    /*is_ambiguous_... S19890C12::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C9*), ABISELECT(432,188), "S19890C12");
    check_field_offset(lv, s19890c12f0, ABISELECT(48,24), "S19890C12.s19890c12f0");
    test_class_info(&lv, &cd_S19890C12);
    dp->~S19890C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C12(Test_S19890C12, "S19890C12", ABISELECT(448,192));

#else // __cplusplus

extern void _ZN9S19890C12C1Ev();
extern void _ZN9S19890C12D2Ev();
Name_Map name_map_S19890C12[] = {
  NSPAIR(_ZN9S19890C12C1Ev),
  NSPAIR(_ZN9S19890C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C14;
extern VTBL_ENTRY _ZTI9S19890C14[];
extern  VTBL_ENTRY _ZTV9S19890C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C14[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
static Base_Class bases_S19890C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(352,152), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(400,172), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(400,172), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19890C9,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(80,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(80,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19890C14,    ABISELECT(64,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19890C5,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19890C4,    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},
  {&cd_S10180C138,    ABISELECT(432,188), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19890C9,    ABISELECT(432,188), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19890C12[];
extern void _ZN9S19890C12D1Ev();
extern void _ZN9S19890C12D0Ev();
extern void ABISELECT(_ZTv0_n56_N9S19890C12D1Ev,_ZTv0_n28_N9S19890C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19890C12D1Ev,_ZThn28_N9S19890C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19890C12D0Ev,_ZTv0_n28_N9S19890C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S19890C12D0Ev,_ZThn28_N9S19890C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19890C12D1Ev,_ZTv0_n24_N9S19890C12D1Ev)();
extern void ABISELECT(_ZThn432_N9S19890C12D1Ev,_ZThn188_N9S19890C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19890C12D0Ev,_ZTv0_n24_N9S19890C12D0Ev)();
extern void ABISELECT(_ZThn432_N9S19890C12D0Ev,_ZThn188_N9S19890C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19890C12[] = {
  ABISELECT(432,188),
  0,
  ABISELECT(400,172),
  ABISELECT(352,152),
  0,
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C12[0]),
  (VTBL_ENTRY)&_ZN9S19890C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C12D0Ev,
  ABISELECT(-64,-28),
  ABISELECT(-64,-28),
  ABISELECT(-64,-28),
  ABISELECT(288,124),
  ABISELECT(336,144),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19890C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19890C12D1Ev,_ZTv0_n28_N9S19890C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19890C12D0Ev,_ZTv0_n28_N9S19890C12D0Ev),
  ABISELECT(-432,-188),
  ABISELECT(-432,-188),
  ABISELECT(-80,-36),
  ABISELECT(-32,-16),
  ABISELECT(-432,-188),
  (VTBL_ENTRY)&(_ZTI9S19890C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C12D1Ev,_ZTv0_n24_N9S19890C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C12D0Ev,_ZTv0_n24_N9S19890C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19890C12[];
extern void _ZN9S19890C14D1Ev();
extern void _ZN9S19890C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C14__9S19890C12[] = {
  ABISELECT(-64,-28),
  ABISELECT(-64,-28),
  ABISELECT(288,124),
  ABISELECT(336,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C14[0]),
  (VTBL_ENTRY)&_ZN9S19890C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C14D0Ev,
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C99S19890C14__9S19890C12[] = {
  ABISELECT(-64,-28),
  ABISELECT(288,124),
  ABISELECT(336,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C9__A1__9S19890C12[] = {
  ABISELECT(-432,-188),
  ABISELECT(-80,-36),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
static  VTT_ENTRY vtt_S19890C12[] = {
  {&(_ZTV9S19890C12[8]),  8,27},
  {&(_ZTV9S19890C12[17]),  17,27},
  {&(_ZTV9S19890C12[25]),  25,27},
  {&(_tg__ZTV9S19890C14__9S19890C12[6]),  6,8},
  {&(_tg__ZTV8S19890C99S19890C14__9S19890C12[5]),  5,7},
  {&(_tg__ZTV8S19890C9__A1__9S19890C12[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S19890C12[];
extern  VTBL_ENTRY _ZTV9S19890C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C12[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C12D0Ev,_ZTv0_n24_N9S19890C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19890C12D0Ev,_ZThn188_N9S19890C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C12D1Ev,_ZTv0_n24_N9S19890C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19890C12D1Ev,_ZThn188_N9S19890C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19890C12D0Ev,_ZTv0_n28_N9S19890C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19890C12D0Ev,_ZThn28_N9S19890C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19890C12D1Ev,_ZTv0_n28_N9S19890C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19890C12D1Ev,_ZThn28_N9S19890C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19890C12 = {  "S19890C12", // class name
  bases_S19890C12, 15,
  &(vtc_S19890C12[0]), // expected_vtbl_contents
  &(vtt_S19890C12[0]), // expected_vtt_contents
  ABISELECT(448,192), // object size
  NSPAIRA(_ZTI9S19890C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19890C12),27, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19890C12),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C3  : virtual S19890C4 , S19890C6 , S19890C10 , S19890C12 {
  __tsi64 s19890c3f0;
  virtual  ~S19890C3(); // _ZN8S19890C3D2Ev
  S19890C3(); // tgen
};
//SIG(-1 S19890C3) C1{ VBC2{ BC3{ m FD Fc:4}} BC4{ BC5{ BC6{ m} VBC7{ VBC2 VBC8{ m FC3 Fi} VBC6 BC9{ m} vd} VBC10{ VBC8 VBC9 BC3 FL FC3 FC2} vd} vd Fi} BC8 BC11{ BC12{ vd m Fi} VBC13{ VBC6 VBC8 BC7 VBC9 BC2 vd FC5} BC2 VBC7 vd Fi} vd FL}


 S19890C3 ::~S19890C3(){ note_dtor("S19890C3", this);}
S19890C3 ::S19890C3(){ note_ctor("S19890C3", this);} // tgen

static void Test_S19890C3()
{
  extern Class_Descriptor cd_S19890C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,73)];
    init_test(&cd_S19890C3, buf);
    S19890C3 *dp, &lv = *(dp=new (buf) S19890C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,288), "sizeof(S19890C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C3)");
    /*is_ambiguous_... S19890C3::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(128,64), "S19890C3");
    /*is_ambiguous_... S19890C3::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*), ABISELECT(128,64), "S19890C3");
    /*is_ambiguous_... S19890C3::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C9*), ABISELECT(128,64), "S19890C3");
    check_base_class_offset(lv, (S19890C4*)(S19890C9*)(S19890C14*), ABISELECT(128,64), "S19890C3");
    /*is_ambiguous_... S19890C7::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C7*)(S19890C6*), 0, "S19890C3");
    /*is_ambiguous_... S19890C3::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C9*), ABISELECT(160,80), "S19890C3");
    check_base_class_offset(lv, (S19890C10*)(S19890C11*), ABISELECT(160,80), "S19890C3");
    check_base_class_offset(lv, (S19890C10*)(S19890C14*), ABISELECT(160,80), "S19890C3");
    check_base_class_offset(lv, (S19890C10*)(S19890C9*)(S19890C14*), ABISELECT(160,80), "S19890C3");
    /*is_ambiguous_... S19890C3::S19890C9 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C9*), ABISELECT(208,100), "S19890C3");
    check_base_class_offset(lv, (S10180C133*)(S19890C14*), ABISELECT(208,100), "S19890C3");
    check_base_class_offset(lv, (S10180C133*)(S19890C9*)(S19890C14*), ABISELECT(208,100), "S19890C3");
    /*is_ambiguous_... S19890C3::S19890C9 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C9*), 0, "S19890C3");
    check_base_class_offset(lv, (S19890C9*)(S19890C7*)(S19890C6*), 0, "S19890C3");
    /*is_ambiguous_... S19890C12::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C9*)(S19890C12*), 0, "S19890C3");
    check_base_class_offset(lv, (S10180C138*)(S19890C11*), ABISELECT(336,160), "S19890C3");
    /*is_ambiguous_... S19890C14::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C14*), ABISELECT(336,160), "S19890C3");
    check_base_class_offset(lv, (S19890C5*)(S19890C11*), ABISELECT(224,104), "S19890C3");
    check_base_class_offset(lv, (S19890C11*)(S19890C7*)(S19890C6*), ABISELECT(208,100), "S19890C3");
    check_base_class_offset(lv, (S19890C7*)(S19890C6*), 0, "S19890C3");
    check_base_class_offset(lv, (S19890C6*), 0, "S19890C3");
    /*is_ambiguous_... S19890C3::S19890C10 */ AMB_check_base_class_offset(lv, (S19890C10*), ABISELECT(16,8), "S19890C3");
    check_base_class_offset(lv, (S10180C178*)(S19890C12*), ABISELECT(64,28), "S19890C3");
    check_base_class_offset(lv, (S10180C138*)(S19890C9*)(S19890C14*), ABISELECT(352,164), "S19890C3");
    check_base_class_offset(lv, (S19890C9*)(S19890C14*), ABISELECT(352,164), "S19890C3");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C14*), ABISELECT(368,168), "S19890C3");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C14*), ABISELECT(368,168), "S19890C3");
    check_base_class_offset(lv, (S19890C14*)(S19890C12*), ABISELECT(352,164), "S19890C3");
    /*is_ambiguous_... S19890C12::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C12*), ABISELECT(80,36), "S19890C3");
    /*is_ambiguous_... S19890C12::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C12*), ABISELECT(80,36), "S19890C3");
    check_base_class_offset(lv, (S19890C12*), ABISELECT(64,28), "S19890C3");
    check_field_offset(lv, s19890c3f0, ABISELECT(120,56), "S19890C3.s19890c3f0");
    test_class_info(&lv, &cd_S19890C3);
    dp->~S19890C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C3(Test_S19890C3, "S19890C3", ABISELECT(640,288));

#else // __cplusplus

extern void _ZN8S19890C3C1Ev();
extern void _ZN8S19890C3D2Ev();
Name_Map name_map_S19890C3[] = {
  NSPAIR(_ZN8S19890C3C1Ev),
  NSPAIR(_ZN8S19890C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C11;
extern VTBL_ENTRY _ZTI9S19890C11[];
extern  VTBL_ENTRY _ZTV9S19890C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C11[];
extern Class_Descriptor cd_S19890C7;
extern VTBL_ENTRY _ZTI8S19890C7[];
extern  VTBL_ENTRY _ZTV8S19890C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C7[];
extern Class_Descriptor cd_S19890C6;
extern VTBL_ENTRY _ZTI8S19890C6[];
extern  VTBL_ENTRY _ZTV8S19890C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C6[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C14;
extern VTBL_ENTRY _ZTI9S19890C14[];
extern  VTBL_ENTRY _ZTV9S19890C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C14[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C12;
extern VTBL_ENTRY _ZTI9S19890C12[];
extern  VTBL_ENTRY _ZTV9S19890C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C12[];
static Base_Class bases_S19890C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19890C4,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19890C10,    ABISELECT(160,80), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(208,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19890C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(336,160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(224,104), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19890C11,    ABISELECT(208,100), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19890C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19890C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19890C10,    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},
  {&cd_S10180C178,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(352,164), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19890C9,    ABISELECT(352,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19890C5,    ABISELECT(368,168), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(368,168), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S19890C14,    ABISELECT(352,164), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(80,36), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(80,36), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S19890C12,    ABISELECT(64,28), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19890C3[];
extern void ABISELECT(_ZTv0_n48_N8S19890C3D1Ev,_ZTv0_n24_N8S19890C3D1Ev)();
extern void _ZN8S19890C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C3D0Ev,_ZTv0_n24_N8S19890C3D0Ev)();
extern void _ZN8S19890C3D0Ev() __attribute__((weak));
extern void ABISELECT(_ZThn64_N8S19890C3D1Ev,_ZThn28_N8S19890C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19890C3D0Ev,_ZThn28_N8S19890C3D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19890C3D1Ev,_ZTv0_n28_N8S19890C3D1Ev)();
extern void ABISELECT(_ZThn352_N8S19890C3D1Ev,_ZThn164_N8S19890C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19890C3D0Ev,_ZTv0_n28_N8S19890C3D0Ev)();
extern void ABISELECT(_ZThn352_N8S19890C3D0Ev,_ZThn164_N8S19890C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19890C3[] = {
  ABISELECT(352,164),
  ABISELECT(336,160),
  ABISELECT(208,100),
  0,
  0,
  ABISELECT(208,100),
  ABISELECT(160,80),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C3D1Ev,_ZTv0_n24_N8S19890C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C3D0Ev,_ZTv0_n24_N8S19890C3D0Ev),
  ABISELECT(-64,-28),
  ABISELECT(272,132),
  ABISELECT(64,36),
  ABISELECT(96,52),
  ABISELECT(144,72),
  ABISELECT(288,136),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S19890C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19890C3D1Ev,_ZThn28_N8S19890C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19890C3D0Ev,_ZThn28_N8S19890C3D0Ev),
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-208,-100),
  (VTBL_ENTRY)&(_ZTI8S19890C3[0]),
  ABISELECT(-352,-164),
  ABISELECT(-16,-4),
  ABISELECT(-144,-64),
  ABISELECT(-192,-84),
  ABISELECT(-224,-100),
  ABISELECT(-352,-164),
  (VTBL_ENTRY)&(_ZTI8S19890C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19890C3D1Ev,_ZTv0_n28_N8S19890C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19890C3D0Ev,_ZTv0_n28_N8S19890C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19890C3[];
extern void ABISELECT(_ZTv0_n48_N8S19890C6D1Ev,_ZTv0_n24_N8S19890C6D1Ev)();
extern void _ZN8S19890C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C6D0Ev,_ZTv0_n24_N8S19890C6D0Ev)();
extern void _ZN8S19890C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C6__8S19890C3[] = {
  ABISELECT(336,160),
  ABISELECT(208,100),
  0,
  0,
  ABISELECT(208,100),
  ABISELECT(160,80),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C6D1Ev,_ZTv0_n24_N8S19890C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C6D0Ev,_ZTv0_n24_N8S19890C6D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev)();
extern void _ZN8S19890C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev)();
extern void _ZN8S19890C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C78S19890C6__8S19890C3[] = {
  ABISELECT(336,160),
  ABISELECT(208,100),
  0,
  0,
  ABISELECT(208,100),
  ABISELECT(160,80),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C78S19890C6__8S19890C3[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-208,-100),
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C6__8S19890C3[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-208,-100),
  (VTBL_ENTRY)&(_ZTI8S19890C6[0]),
};
extern void _ZN9S19890C12D1Ev();
extern void _ZN9S19890C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C12__8S19890C3[] = {
  ABISELECT(-64,-28),
  ABISELECT(272,132),
  ABISELECT(64,36),
  ABISELECT(96,52),
  ABISELECT(144,72),
  ABISELECT(288,136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C12[0]),
  (VTBL_ENTRY)&_ZN9S19890C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C12D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19890C12D1Ev,_ZTv0_n28_N9S19890C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S19890C12D1Ev,_ZThn136_N9S19890C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19890C12D0Ev,_ZTv0_n28_N9S19890C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S19890C12D0Ev,_ZThn136_N9S19890C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19890C14__9S19890C12__8S19890C3[] = {
  ABISELECT(-288,-136),
  ABISELECT(-16,-4),
  ABISELECT(-144,-64),
  ABISELECT(-192,-84),
  ABISELECT(-224,-100),
  ABISELECT(-288,-136),
  (VTBL_ENTRY)&(_ZTI9S19890C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19890C12D1Ev,_ZTv0_n28_N9S19890C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19890C12D0Ev,_ZTv0_n28_N9S19890C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19890C12D1Ev,_ZTv0_n24_N9S19890C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19890C12D0Ev,_ZTv0_n24_N9S19890C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19890C9__A1__9S19890C12__8S19890C3[] = {
  ABISELECT(64,28),
  ABISELECT(208,100),
  ABISELECT(160,80),
  ABISELECT(128,64),
  ABISELECT(64,28),
  (VTBL_ENTRY)&(_ZTI9S19890C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C12D1Ev,_ZTv0_n24_N9S19890C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C12D0Ev,_ZTv0_n24_N9S19890C12D0Ev),
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C9__8S19890C3[] = {
  ABISELECT(208,100),
  ABISELECT(160,80),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C3[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C11[0]),
};
extern void _ZN9S19890C14D1Ev();
extern void _ZN9S19890C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C14__8S19890C3[] = {
  ABISELECT(-16,-4),
  ABISELECT(-144,-64),
  ABISELECT(-192,-84),
  ABISELECT(-224,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C14[0]),
  (VTBL_ENTRY)&_ZN9S19890C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C14D0Ev,
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C99S19890C14__A1__8S19890C3[] = {
  ABISELECT(-144,-64),
  ABISELECT(-192,-84),
  ABISELECT(-224,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
static  VTT_ENTRY vtt_S19890C3[] = {
  {&(_ZTV8S19890C3[10]),  10,35},
  {&(_tg__ZTV8S19890C6__8S19890C3[9]),  9,11},
  {&(_tg__ZTV8S19890C78S19890C6__8S19890C3[9]),  9,11},
  {&(_tg__ZTV8S19890C78S19890C6__8S19890C3[9]),  9,11},
  {&(_tg__ZTV9S19890C11__8S19890C78S19890C6__8S19890C3[4]),  4,4},
  {&(_tg__ZTV8S19890C6__8S19890C3[9]),  9,11},
  {&(_tg__ZTV9S19890C11__8S19890C6__8S19890C3[4]),  4,4},
  {&(_tg__ZTV9S19890C12__8S19890C3[8]),  8,10},
  {&(_tg__ZTV9S19890C14__9S19890C12__8S19890C3[7]),  7,9},
  {&(_tg__ZTV8S19890C9__A1__9S19890C12__8S19890C3[6]),  6,8},
  {&(_ZTV8S19890C3[10]),  10,35},
  {&(_ZTV8S19890C3[26]),  26,35},
  {&(_ZTV8S19890C3[20]),  20,35},
  {&(_ZTV8S19890C3[33]),  33,35},
  {&(_tg__ZTV8S19890C9__8S19890C3[5]),  5,7},
  {&(_tg__ZTV9S19890C11__8S19890C3[4]),  4,4},
  {&(_tg__ZTV9S19890C14__8S19890C3[6]),  6,8},
  {&(_tg__ZTV8S19890C99S19890C14__A1__8S19890C3[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19890C3[];
extern  VTBL_ENTRY _ZTV8S19890C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C3[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19890C12D0Ev,_ZTv0_n28_N9S19890C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19890C12D0Ev,_ZThn136_N9S19890C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19890C12D1Ev,_ZTv0_n28_N9S19890C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19890C12D1Ev,_ZThn136_N9S19890C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19890C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19890C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C6D0Ev,_ZTv0_n24_N8S19890C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19890C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C6D1Ev,_ZTv0_n24_N8S19890C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19890C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19890C3D0Ev,_ZTv0_n28_N8S19890C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19890C3D0Ev,_ZThn164_N8S19890C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19890C3D1Ev,_ZTv0_n28_N8S19890C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19890C3D1Ev,_ZThn164_N8S19890C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C3D0Ev,_ZTv0_n24_N8S19890C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19890C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C3D1Ev,_ZTv0_n24_N8S19890C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19890C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19890C3 = {  "S19890C3", // class name
  bases_S19890C3, 22,
  &(vtc_S19890C3[0]), // expected_vtbl_contents
  &(vtt_S19890C3[0]), // expected_vtt_contents
  ABISELECT(640,288), // object size
  NSPAIRA(_ZTI8S19890C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19890C3),35, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19890C3),18, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C17  : S19890C4 , virtual S19890C10 , S10180C133 , virtual S19890C11 {
  int s19890c17f0;
  ~S19890C17(); // tgen
  S19890C17(); // tgen
};
//SIG(-1 S19890C17) C1{ BC2{ BC3{ m FD Fc:4}} VBC4{ m FC3 Fi} BC5{ m} VBC6{ VBC4 VBC7{ m} BC3 FL FC3 FC2} Fi}


S19890C17 ::~S19890C17(){ note_dtor("S19890C17", this);} // tgen
S19890C17 ::S19890C17(){ note_ctor("S19890C17", this);} // tgen

static void Test_S19890C17()
{
  extern Class_Descriptor cd_S19890C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S19890C17, buf);
    S19890C17 *dp, &lv = *(dp=new (buf) S19890C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S19890C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C17)");
    check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(16,4), "S19890C17");
    check_base_class_offset(lv, (S19890C4*), ABISELECT(16,4), "S19890C17");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(64,24), "S19890C17");
    check_base_class_offset(lv, (S19890C10*)(S19890C11*), ABISELECT(64,24), "S19890C17");
    check_base_class_offset(lv, (S10180C133*), 0, "S19890C17");
    check_base_class_offset(lv, (S10180C138*)(S19890C11*), 0, "S19890C17");
    check_base_class_offset(lv, (S19890C5*)(S19890C11*), ABISELECT(128,48), "S19890C17");
    check_base_class_offset(lv, (S19890C11*), ABISELECT(112,44), "S19890C17");
    check_field_offset(lv, s19890c17f0, ABISELECT(48,20), "S19890C17.s19890c17f0");
    test_class_info(&lv, &cd_S19890C17);
    dp->~S19890C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C17(Test_S19890C17, "S19890C17", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN9S19890C17C1Ev();
extern void _ZN9S19890C17D1Ev();
Name_Map name_map_S19890C17[] = {
  NSPAIR(_ZN9S19890C17C1Ev),
  NSPAIR(_ZN9S19890C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C11;
extern VTBL_ENTRY _ZTI9S19890C11[];
extern  VTBL_ENTRY _ZTV9S19890C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C11[];
static Base_Class bases_S19890C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(16,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
  0, 0},
  {&cd_S19890C4,    ABISELECT(16,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_S19890C10,    ABISELECT(64,24), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(128,48), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19890C11,    ABISELECT(112,44), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19890C17[];
static  VTBL_ENTRY vtc_S19890C17[] = {
  0,
  ABISELECT(112,44),
  ABISELECT(64,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C17[0]),
  ABISELECT(-112,-44),
  ABISELECT(-48,-20),
  ABISELECT(-112,-44),
  (VTBL_ENTRY)&(_ZTI9S19890C17[0]),
};
extern VTBL_ENTRY _ZTV9S19890C17[];
static  VTBL_ENTRY _tg__ZTV9S19890C11__9S19890C17[] = {
  ABISELECT(-112,-44),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C11[0]),
};
static  VTT_ENTRY vtt_S19890C17[] = {
  {&(_ZTV9S19890C17[5]),  5,9},
  {&(_ZTV9S19890C17[9]),  9,9},
  {&(_tg__ZTV9S19890C11__9S19890C17[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19890C17[];
extern  VTBL_ENTRY _ZTV9S19890C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C17[];
Class_Descriptor cd_S19890C17 = {  "S19890C17", // class name
  bases_S19890C17, 7,
  &(vtc_S19890C17[0]), // expected_vtbl_contents
  &(vtt_S19890C17[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI9S19890C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19890C17),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19890C17),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C16  : virtual S19890C17 , S19890C10 , S10180C138 , S19890C14 , S19890C7 {
  char s19890c16f0[2];
  ~S19890C16(); // tgen
  S19890C16(); // tgen
};
//SIG(-1 S19890C16) C1{ VBC2{ BC3{ BC4{ m FD Fc:4}} VBC5{ m FC4 Fi} BC6{ m} VBC7{ VBC5 VBC8{ m} BC4 FL FC4 FC3} Fi} BC5 BC8 BC9{ VBC6 VBC5 BC10{ VBC3 VBC5 VBC6 BC8 vd} VBC8 BC3 vd FC11{ BC6 VBC10 VBC7 vd}} BC11 Fc[2]}


S19890C16 ::~S19890C16(){ note_dtor("S19890C16", this);} // tgen
S19890C16 ::S19890C16(){ note_ctor("S19890C16", this);} // tgen

static void Test_S19890C16()
{
  extern Class_Descriptor cd_S19890C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,70)];
    init_test(&cd_S19890C16, buf);
    S19890C16 *dp, &lv = *(dp=new (buf) S19890C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,276), "sizeof(S19890C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C16)");
    check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C17*), ABISELECT(384,160), "S19890C16");
    check_base_class_offset(lv, (S19890C4*)(S19890C17*), ABISELECT(384,160), "S19890C16");
    check_base_class_offset(lv, (S19890C10*)(S19890C17*), ABISELECT(432,180), "S19890C16");
    check_base_class_offset(lv, (S19890C10*)(S19890C11*), ABISELECT(432,180), "S19890C16");
    check_base_class_offset(lv, (S19890C10*)(S19890C14*), ABISELECT(432,180), "S19890C16");
    check_base_class_offset(lv, (S19890C10*)(S19890C9*)(S19890C14*), ABISELECT(432,180), "S19890C16");
    /*is_ambiguous_... S19890C16::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C9*), ABISELECT(432,180), "S19890C16");
    check_base_class_offset(lv, (S10180C133*)(S19890C17*), ABISELECT(368,156), "S19890C16");
    check_base_class_offset(lv, (S10180C138*)(S19890C11*), ABISELECT(608,260), "S19890C16");
    /*is_ambiguous_... S19890C14::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C14*), ABISELECT(608,260), "S19890C16");
    check_base_class_offset(lv, (S19890C5*)(S19890C11*), ABISELECT(496,204), "S19890C16");
    check_base_class_offset(lv, (S19890C11*)(S19890C17*), ABISELECT(480,200), "S19890C16");
    check_base_class_offset(lv, (S19890C11*)(S19890C7*), ABISELECT(480,200), "S19890C16");
    check_base_class_offset(lv, (S19890C17*), ABISELECT(368,156), "S19890C16");
    /*is_ambiguous_... S19890C16::S19890C10 */ AMB_check_base_class_offset(lv, (S19890C10*), ABISELECT(288,124), "S19890C16");
    /*is_ambiguous_... S19890C16::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*), ABISELECT(336,144), "S19890C16");
    check_base_class_offset(lv, (S10180C133*)(S19890C14*), 0, "S19890C16");
    check_base_class_offset(lv, (S10180C133*)(S19890C9*)(S19890C14*), 0, "S19890C16");
    /*is_ambiguous_... S19890C16::S19890C9 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C9*), 0, "S19890C16");
    /*is_ambiguous_... S19890C16::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(608,260), "S19890C16");
    check_base_class_offset(lv, (S19890C4*)(S19890C9*)(S19890C14*), ABISELECT(608,260), "S19890C16");
    /*is_ambiguous_... S19890C16::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C9*), ABISELECT(608,260), "S19890C16");
    check_base_class_offset(lv, (S10180C138*)(S19890C9*)(S19890C14*), 0, "S19890C16");
    check_base_class_offset(lv, (S19890C9*)(S19890C14*), 0, "S19890C16");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C14*), ABISELECT(16,4), "S19890C16");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C14*), ABISELECT(16,4), "S19890C16");
    check_base_class_offset(lv, (S19890C14*), 0, "S19890C16");
    /*is_ambiguous_... S19890C7::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C7*), ABISELECT(344,148), "S19890C16");
    /*is_ambiguous_... S19890C16::S19890C9 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C9*), ABISELECT(344,148), "S19890C16");
    check_base_class_offset(lv, (S19890C9*)(S19890C7*), ABISELECT(344,148), "S19890C16");
    check_base_class_offset(lv, (S19890C7*), ABISELECT(344,148), "S19890C16");
    check_field_offset(lv, s19890c16f0, ABISELECT(352,152), "S19890C16.s19890c16f0");
    test_class_info(&lv, &cd_S19890C16);
    dp->~S19890C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C16(Test_S19890C16, "S19890C16", ABISELECT(640,276));

#else // __cplusplus

extern void _ZN9S19890C16C1Ev();
extern void _ZN9S19890C16D1Ev();
Name_Map name_map_S19890C16[] = {
  NSPAIR(_ZN9S19890C16C1Ev),
  NSPAIR(_ZN9S19890C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C11;
extern VTBL_ENTRY _ZTI9S19890C11[];
extern  VTBL_ENTRY _ZTV9S19890C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C11[];
extern Class_Descriptor cd_S19890C17;
extern VTBL_ENTRY _ZTI9S19890C17[];
extern  VTBL_ENTRY _ZTV9S19890C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C17[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C14;
extern VTBL_ENTRY _ZTI9S19890C14[];
extern  VTBL_ENTRY _ZTV9S19890C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C14[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S19890C7;
extern VTBL_ENTRY _ZTI8S19890C7[];
extern  VTBL_ENTRY _ZTV8S19890C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C7[];
static Base_Class bases_S19890C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(384,160), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19890C4,    ABISELECT(384,160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19890C10,    ABISELECT(432,180), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(368,156), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(608,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(496,204), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19890C11,    ABISELECT(480,200), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19890C17,    ABISELECT(368,156), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19890C10,    ABISELECT(288,124), //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C138,    ABISELECT(336,144), //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(608,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(608,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19890C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19890C5,    ABISELECT(16,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
    16, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(16,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
    17, //immediately_derived
  0, 0},
  {&cd_S19890C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C133,    ABISELECT(344,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(344,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19890C9,    ABISELECT(344,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19890C7,    ABISELECT(344,148), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19890C16[];
extern void _ZN9S19890C16D1Ev();
extern void _ZN9S19890C16D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev)();
extern void ABISELECT(_ZThn344_N9S19890C16D1Ev,_ZThn148_N9S19890C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev)();
extern void ABISELECT(_ZThn344_N9S19890C16D0Ev,_ZThn148_N9S19890C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19890C16[] = {
  ABISELECT(344,148),
  ABISELECT(480,200),
  ABISELECT(368,156),
  ABISELECT(608,260),
  0,
  ABISELECT(432,180),
  ABISELECT(608,260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
  (VTBL_ENTRY)&_ZN9S19890C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C16D0Ev,
  ABISELECT(264,112),
  ABISELECT(136,52),
  0,
  ABISELECT(-344,-148),
  ABISELECT(-344,-148),
  ABISELECT(88,32),
  ABISELECT(264,112),
  ABISELECT(-344,-148),
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev),
  ABISELECT(240,104),
  ABISELECT(112,44),
  ABISELECT(64,24),
  ABISELECT(-368,-156),
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-480,-200),
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
};
extern VTBL_ENTRY _ZTV9S19890C16[];
extern void _ZN9S19890C14D1Ev();
extern void _ZN9S19890C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C14__9S19890C16[] = {
  ABISELECT(608,260),
  0,
  ABISELECT(432,180),
  ABISELECT(608,260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C14[0]),
  (VTBL_ENTRY)&_ZN9S19890C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C14D0Ev,
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C99S19890C14__9S19890C16[] = {
  0,
  ABISELECT(432,180),
  ABISELECT(608,260),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev)();
extern void _ZN8S19890C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev)();
extern void _ZN8S19890C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C7__9S19890C16[] = {
  ABISELECT(264,112),
  ABISELECT(136,52),
  0,
  0,
  ABISELECT(-344,-148),
  ABISELECT(88,32),
  ABISELECT(264,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C7__9S19890C16[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-136,-52),
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C17__9S19890C16[] = {
  ABISELECT(240,104),
  ABISELECT(112,44),
  ABISELECT(64,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__9S19890C17__9S19890C16[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-112,-44),
  (VTBL_ENTRY)&(_ZTI9S19890C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__9S19890C16[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C11[0]),
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C9__A1__9S19890C16[] = {
  ABISELECT(-344,-148),
  ABISELECT(88,32),
  ABISELECT(264,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
static  VTT_ENTRY vtt_S19890C16[] = {
  {&(_ZTV9S19890C16[9]),  9,31},
  {&(_tg__ZTV9S19890C14__9S19890C16[6]),  6,8},
  {&(_tg__ZTV8S19890C99S19890C14__9S19890C16[5]),  5,7},
  {&(_tg__ZTV8S19890C7__9S19890C16[9]),  9,11},
  {&(_tg__ZTV8S19890C7__9S19890C16[9]),  9,11},
  {&(_tg__ZTV9S19890C11__8S19890C7__9S19890C16[4]),  4,4},
  {&(_ZTV9S19890C16[27]),  27,31},
  {&(_ZTV9S19890C16[31]),  31,31},
  {&(_ZTV9S19890C16[20]),  20,31},
  {&(_ZTV9S19890C16[20]),  20,31},
  {&(_tg__ZTV9S19890C17__9S19890C16[5]),  5,5},
  {&(_tg__ZTV9S19890C11__9S19890C17__9S19890C16[4]),  4,4},
  {&(_tg__ZTV9S19890C11__9S19890C16[4]),  4,4},
  {&(_tg__ZTV8S19890C9__A1__9S19890C16[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S19890C16[];
extern  VTBL_ENTRY _ZTV9S19890C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C16[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19890C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19890C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19890C16D0Ev,_ZThn148_N9S19890C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19890C16D1Ev,_ZThn148_N9S19890C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19890C16 = {  "S19890C16", // class name
  bases_S19890C16, 22,
  &(vtc_S19890C16[0]), // expected_vtbl_contents
  &(vtt_S19890C16[0]), // expected_vtt_contents
  ABISELECT(640,276), // object size
  NSPAIRA(_ZTI9S19890C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19890C16),31, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19890C16),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C15  : virtual S19890C10 , virtual S19890C14 , S19890C16 {
  __tsi64 s19890c15f0;
  ~S19890C15(); // tgen
  S19890C15(); // tgen
};
//SIG(-1 S19890C15) C1{ VBC2{ m FC3{ m FD Fc:4} Fi} VBC4{ VBC5{ m} VBC2 BC6{ VBC7{ BC3} VBC2 VBC5 BC8{ m} vd} VBC8 BC7 vd FC9{ BC5 VBC6 VBC10{ VBC2 VBC8 BC3 FL FC3 FC7} vd}} BC11{ VBC12{ BC7 VBC2 BC5 VBC10 Fi} BC2 BC8 BC4 BC9 Fc[2]} FL}


S19890C15 ::~S19890C15(){ note_dtor("S19890C15", this);} // tgen
S19890C15 ::S19890C15(){ note_ctor("S19890C15", this);} // tgen

static void Test_S19890C15()
{
  extern Class_Descriptor cd_S19890C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(59,103)];
    init_test(&cd_S19890C15, buf);
    S19890C15 *dp, &lv = *(dp=new (buf) S19890C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,408), "sizeof(S19890C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C15)");
    /*is_ambiguous_... S19890C15::S19890C10 */ AMB_check_base_class_offset(lv, (S19890C10*), ABISELECT(368,164), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C14*), ABISELECT(368,164), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C9*)(S19890C14*), ABISELECT(368,164), "S19890C15");
    check_base_class_offset(lv, (S19890C10*)(S19890C17*), ABISELECT(368,164), "S19890C15");
    check_base_class_offset(lv, (S19890C10*)(S19890C11*), ABISELECT(368,164), "S19890C15");
    check_base_class_offset(lv, (S19890C10*)(S19890C14*)(S19890C16*), ABISELECT(368,164), "S19890C15");
    check_base_class_offset(lv, (S19890C10*)(S19890C9*)(S19890C14*)(S19890C16*), ABISELECT(368,164), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C9*), ABISELECT(368,164), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C14*), 0, "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C9*)(S19890C14*), 0, "S19890C15");
    check_base_class_offset(lv, (S10180C133*)(S19890C14*)(S19890C16*), 0, "S19890C15");
    check_base_class_offset(lv, (S10180C133*)(S19890C9*)(S19890C14*)(S19890C16*), 0, "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C9 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C9*), 0, "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(704,308), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C9*)(S19890C14*), ABISELECT(704,308), "S19890C15");
    check_base_class_offset(lv, (S19890C4*)(S19890C9*)(S19890C14*)(S19890C16*), ABISELECT(704,308), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C9*), ABISELECT(704,308), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C9*)(S19890C14*), ABISELECT(416,184), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C9*)(S19890C14*), ABISELECT(416,184), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C14*), ABISELECT(736,324), "S19890C15");
    check_base_class_offset(lv, (S10180C138*)(S19890C11*), ABISELECT(736,324), "S19890C15");
    /*is_ambiguous_... S19890C14::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C14*)(S19890C16*), ABISELECT(736,324), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C14*), ABISELECT(432,188), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C14*), ABISELECT(432,188), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C14*), ABISELECT(416,184), "S19890C15");
    check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C17*), ABISELECT(752,328), "S19890C15");
    check_base_class_offset(lv, (S19890C4*)(S19890C17*), ABISELECT(752,328), "S19890C15");
    check_base_class_offset(lv, (S10180C133*)(S19890C17*), ABISELECT(736,324), "S19890C15");
    check_base_class_offset(lv, (S19890C5*)(S19890C11*), ABISELECT(816,352), "S19890C15");
    check_base_class_offset(lv, (S19890C11*)(S19890C17*), ABISELECT(800,348), "S19890C15");
    check_base_class_offset(lv, (S19890C11*)(S19890C7*)(S19890C16*), ABISELECT(800,348), "S19890C15");
    check_base_class_offset(lv, (S19890C17*)(S19890C16*), ABISELECT(736,324), "S19890C15");
    /*is_ambiguous_... S19890C16::S19890C10 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C16*), ABISELECT(288,124), "S19890C15");
    /*is_ambiguous_... S19890C16::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C16*), ABISELECT(336,144), "S19890C15");
    check_base_class_offset(lv, (S10180C138*)(S19890C9*)(S19890C14*)(S19890C16*), 0, "S19890C15");
    check_base_class_offset(lv, (S19890C9*)(S19890C14*)(S19890C16*), 0, "S19890C15");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C14*)(S19890C16*), ABISELECT(16,4), "S19890C15");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C14*)(S19890C16*), ABISELECT(16,4), "S19890C15");
    check_base_class_offset(lv, (S19890C14*)(S19890C16*), 0, "S19890C15");
    /*is_ambiguous_... S19890C7::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C7*)(S19890C16*), ABISELECT(344,148), "S19890C15");
    /*is_ambiguous_... S19890C15::S19890C9 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C9*), ABISELECT(344,148), "S19890C15");
    check_base_class_offset(lv, (S19890C9*)(S19890C7*)(S19890C16*), ABISELECT(344,148), "S19890C15");
    check_base_class_offset(lv, (S19890C7*)(S19890C16*), ABISELECT(344,148), "S19890C15");
    check_base_class_offset(lv, (S19890C16*), 0, "S19890C15");
    check_field_offset(lv, s19890c15f0, ABISELECT(360,156), "S19890C15.s19890c15f0");
    test_class_info(&lv, &cd_S19890C15);
    dp->~S19890C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C15(Test_S19890C15, "S19890C15", ABISELECT(928,408));

#else // __cplusplus

extern void _ZN9S19890C15C1Ev();
extern void _ZN9S19890C15D1Ev();
Name_Map name_map_S19890C15[] = {
  NSPAIR(_ZN9S19890C15C1Ev),
  NSPAIR(_ZN9S19890C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C14;
extern VTBL_ENTRY _ZTI9S19890C14[];
extern  VTBL_ENTRY _ZTV9S19890C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C14[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C11;
extern VTBL_ENTRY _ZTI9S19890C11[];
extern  VTBL_ENTRY _ZTV9S19890C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C11[];
extern Class_Descriptor cd_S19890C17;
extern VTBL_ENTRY _ZTI9S19890C17[];
extern  VTBL_ENTRY _ZTV9S19890C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C17[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C14;
extern VTBL_ENTRY _ZTI9S19890C14[];
extern  VTBL_ENTRY _ZTV9S19890C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C14[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S19890C7;
extern VTBL_ENTRY _ZTI8S19890C7[];
extern  VTBL_ENTRY _ZTV8S19890C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C7[];
extern Class_Descriptor cd_S19890C16;
extern VTBL_ENTRY _ZTI9S19890C16[];
extern  VTBL_ENTRY _ZTV9S19890C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C16[];
static Base_Class bases_S19890C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C10,    ABISELECT(368,164), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(704,308), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19890C4,    ABISELECT(704,308), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(416,184), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S19890C9,    ABISELECT(416,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(736,324), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(432,188), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(432,188), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19890C14,    ABISELECT(416,184), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19890C5,    ABISELECT(752,328), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(752,328), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(736,324), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19890C5,    ABISELECT(816,352), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19890C11,    ABISELECT(800,348), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19890C17,    ABISELECT(736,324), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(288,124), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(336,144), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S19890C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19890C5,    ABISELECT(16,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
    21, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(16,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
    22, //immediately_derived
  0, 0},
  {&cd_S19890C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(344,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(344,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    25, //immediately_derived
  0, 0},
  {&cd_S19890C9,    ABISELECT(344,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S19890C7,    ABISELECT(344,148), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19890C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19890C15[];
extern void _ZN9S19890C15D1Ev();
extern void _ZN9S19890C15D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19890C15D1Ev,_ZTv0_n24_N9S19890C15D1Ev)();
extern void ABISELECT(_ZThn344_N9S19890C15D1Ev,_ZThn148_N9S19890C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19890C15D0Ev,_ZTv0_n24_N9S19890C15D0Ev)();
extern void ABISELECT(_ZThn344_N9S19890C15D0Ev,_ZThn148_N9S19890C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19890C15D1Ev,_ZTv0_n28_N9S19890C15D1Ev)();
extern void ABISELECT(_ZThn416_N9S19890C15D1Ev,_ZThn184_N9S19890C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19890C15D0Ev,_ZTv0_n28_N9S19890C15D0Ev)();
extern void ABISELECT(_ZThn416_N9S19890C15D0Ev,_ZThn184_N9S19890C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19890C15[] = {
  ABISELECT(416,184),
  ABISELECT(344,148),
  ABISELECT(800,348),
  ABISELECT(736,324),
  ABISELECT(736,324),
  0,
  ABISELECT(368,164),
  ABISELECT(704,308),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
  (VTBL_ENTRY)&_ZN9S19890C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C15D0Ev,
  ABISELECT(392,176),
  ABISELECT(456,200),
  0,
  ABISELECT(-344,-148),
  ABISELECT(-344,-148),
  ABISELECT(24,16),
  ABISELECT(360,160),
  ABISELECT(-344,-148),
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C15D1Ev,_ZTv0_n24_N9S19890C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C15D0Ev,_ZTv0_n24_N9S19890C15D0Ev),
  ABISELECT(-416,-184),
  ABISELECT(320,140),
  ABISELECT(-416,-184),
  ABISELECT(-48,-20),
  ABISELECT(288,124),
  ABISELECT(-416,-184),
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19890C15D1Ev,_ZTv0_n28_N9S19890C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19890C15D0Ev,_ZTv0_n28_N9S19890C15D0Ev),
  0,
  ABISELECT(64,24),
  ABISELECT(-368,-160),
  ABISELECT(-736,-324),
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
  ABISELECT(-64,-24),
  ABISELECT(-432,-184),
  ABISELECT(-800,-348),
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
};
extern VTBL_ENTRY _ZTV9S19890C15[];
extern void _ZN9S19890C16D1Ev();
extern void _ZN9S19890C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C16__9S19890C15[] = {
  ABISELECT(344,148),
  ABISELECT(800,348),
  ABISELECT(736,324),
  ABISELECT(736,324),
  0,
  ABISELECT(368,164),
  ABISELECT(704,308),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
  (VTBL_ENTRY)&_ZN9S19890C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C16D0Ev,
};
extern void _ZN9S19890C14D1Ev();
extern void _ZN9S19890C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C149S19890C16__A1__9S19890C15[] = {
  ABISELECT(736,324),
  0,
  ABISELECT(368,164),
  ABISELECT(704,308),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C14[0]),
  (VTBL_ENTRY)&_ZN9S19890C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C14D0Ev,
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C99S19890C149S19890C16__A1__9S19890C15[] = {
  0,
  ABISELECT(368,164),
  ABISELECT(704,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev)();
extern void _ZN8S19890C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev)();
extern void _ZN8S19890C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C79S19890C16__9S19890C15[] = {
  ABISELECT(392,176),
  ABISELECT(456,200),
  0,
  0,
  ABISELECT(-344,-148),
  ABISELECT(24,16),
  ABISELECT(360,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C79S19890C16__9S19890C15[] = {
  ABISELECT(-64,-24),
  ABISELECT(-432,-184),
  ABISELECT(-456,-200),
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C17__9S19890C16__9S19890C15[] = {
  0,
  ABISELECT(64,24),
  ABISELECT(-368,-160),
  ABISELECT(-736,-324),
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__9S19890C16__9S19890C15[] = {
  ABISELECT(-64,-24),
  ABISELECT(-432,-184),
  ABISELECT(-800,-348),
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev)();
extern void ABISELECT(_ZThn344_N9S19890C16D1Ev,_ZThn148_N9S19890C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev)();
extern void ABISELECT(_ZThn344_N9S19890C16D0Ev,_ZThn148_N9S19890C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C7__9S19890C16__9S19890C15[] = {
  ABISELECT(392,176),
  ABISELECT(456,200),
  0,
  ABISELECT(-344,-148),
  ABISELECT(-344,-148),
  ABISELECT(24,16),
  ABISELECT(360,160),
  ABISELECT(-344,-148),
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev),
};
extern void _ZN9S19890C14D1Ev();
extern void _ZN9S19890C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C14__9S19890C15[] = {
  ABISELECT(320,140),
  ABISELECT(-416,-184),
  ABISELECT(-48,-20),
  ABISELECT(288,124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C14[0]),
  (VTBL_ENTRY)&_ZN9S19890C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C14D0Ev,
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C99S19890C14__9S19890C15[] = {
  ABISELECT(-416,-184),
  ABISELECT(-48,-20),
  ABISELECT(288,124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19890C17__9S19890C15[] = {
  0,
  ABISELECT(64,24),
  ABISELECT(-368,-160),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__9S19890C17__9S19890C15[] = {
  ABISELECT(-64,-24),
  ABISELECT(-432,-184),
  ABISELECT(-64,-24),
  (VTBL_ENTRY)&(_ZTI9S19890C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__9S19890C15[] = {
  ABISELECT(-64,-24),
  ABISELECT(-432,-184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C11[0]),
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C9__A2__9S19890C15[] = {
  ABISELECT(-344,-148),
  ABISELECT(24,16),
  ABISELECT(360,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
static  VTT_ENTRY vtt_S19890C15[] = {
  {&(_ZTV9S19890C15[10]),  10,41},
  {&(_tg__ZTV9S19890C16__9S19890C15[9]),  9,11},
  {&(_tg__ZTV9S19890C149S19890C16__A1__9S19890C15[6]),  6,8},
  {&(_tg__ZTV8S19890C99S19890C149S19890C16__A1__9S19890C15[5]),  5,7},
  {&(_tg__ZTV8S19890C79S19890C16__9S19890C15[9]),  9,11},
  {&(_tg__ZTV8S19890C79S19890C16__9S19890C15[9]),  9,11},
  {&(_tg__ZTV9S19890C11__8S19890C79S19890C16__9S19890C15[4]),  4,4},
  {&(_tg__ZTV9S19890C17__9S19890C16__9S19890C15[5]),  5,5},
  {&(_tg__ZTV9S19890C11__9S19890C16__9S19890C15[4]),  4,4},
  {&(_tg__ZTV8S19890C7__9S19890C16__9S19890C15[9]),  9,11},
  {&(_tg__ZTV8S19890C7__9S19890C16__9S19890C15[9]),  9,11},
  {&(_ZTV9S19890C15[30]),  30,41},
  {&(_ZTV9S19890C15[37]),  37,41},
  {&(_ZTV9S19890C15[41]),  41,41},
  {&(_ZTV9S19890C15[21]),  21,41},
  {&(_ZTV9S19890C15[21]),  21,41},
  {&(_tg__ZTV9S19890C14__9S19890C15[6]),  6,8},
  {&(_tg__ZTV8S19890C99S19890C14__9S19890C15[5]),  5,7},
  {&(_tg__ZTV9S19890C17__9S19890C15[5]),  5,5},
  {&(_tg__ZTV9S19890C11__9S19890C17__9S19890C15[4]),  4,4},
  {&(_tg__ZTV9S19890C11__9S19890C15[4]),  4,4},
  {&(_tg__ZTV8S19890C9__A2__9S19890C15[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S19890C15[];
extern  VTBL_ENTRY _ZTV9S19890C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C15[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19890C16D0Ev,_ZThn148_N9S19890C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19890C16D1Ev,_ZThn148_N9S19890C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19890C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19890C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19890C15D0Ev,_ZTv0_n28_N9S19890C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N9S19890C15D0Ev,_ZThn184_N9S19890C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19890C15D1Ev,_ZTv0_n28_N9S19890C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N9S19890C15D1Ev,_ZThn184_N9S19890C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C15D0Ev,_ZTv0_n24_N9S19890C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19890C15D0Ev,_ZThn148_N9S19890C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C15D1Ev,_ZTv0_n24_N9S19890C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19890C15D1Ev,_ZThn148_N9S19890C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19890C15 = {  "S19890C15", // class name
  bases_S19890C15, 28,
  &(vtc_S19890C15[0]), // expected_vtbl_contents
  &(vtt_S19890C15[0]), // expected_vtt_contents
  ABISELECT(928,408), // object size
  NSPAIRA(_ZTI9S19890C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19890C15),41, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19890C15),22, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19890C1  : virtual S10180C138 , virtual S19890C3 , virtual S19890C15 {
  int s19890c1f0;
  void *s19890c1f1[7];
  ::S10180C178 s19890c1f2;
  ~S19890C1(); // tgen
  S19890C1(); // tgen
};
//SIG(1 S19890C1) C1{ VBC2{ m} VBC3{ VBC4{ BC5{ m FD Fc:4}} BC6{ BC7{ BC8{ m} VBC9{ VBC4 VBC10{ m FC5 Fi} VBC8 BC2 vd} VBC11{ VBC10 VBC2 BC5 FL FC5 FC4} vd} vd Fi} BC10 BC12{ BC13{ vd m Fi} VBC14{ VBC8 VBC10 BC9 VBC2 BC4 vd FC7} BC4 VBC9 vd Fi} vd FL} VBC15{ VBC10 VBC14 BC16{ VBC17{ BC4 VBC10 BC8 VBC11 Fi} BC10 BC2 BC14 BC7 Fc[2]} FL} Fi Fp[7] FC13}


S19890C1 ::~S19890C1(){ note_dtor("S19890C1", this);} // tgen
S19890C1 ::S19890C1(){ note_ctor("S19890C1", this);} // tgen

static void Test_S19890C1()
{
  extern Class_Descriptor cd_S19890C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(73,130)];
    init_test(&cd_S19890C1, buf);
    S19890C1 *dp, &lv = *(dp=new (buf) S19890C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1152,516), "sizeof(S19890C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19890C1)");
    /*is_ambiguous_... S19890C1::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*), ABISELECT(88,44), "S19890C1");
    check_base_class_offset(lv, (S10180C138*)(S19890C11*), ABISELECT(88,44), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C14 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C14*), ABISELECT(88,44), "S19890C1");
    /*is_ambiguous_... S19890C14::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C14*)(S19890C16*)(S19890C15*), ABISELECT(88,44), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*), ABISELECT(224,108), "S19890C1");
    /*is_ambiguous_... S19890C3::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C3*), ABISELECT(224,108), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C9*), ABISELECT(224,108), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C9*)(S19890C14*), ABISELECT(224,108), "S19890C1");
    check_base_class_offset(lv, (S19890C4*)(S19890C9*)(S19890C14*)(S19890C16*)(S19890C15*), ABISELECT(224,108), "S19890C1");
    /*is_ambiguous_... S19890C7::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C7*)(S19890C6*)(S19890C3*), ABISELECT(96,44), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C9*), ABISELECT(256,124), "S19890C1");
    check_base_class_offset(lv, (S19890C10*)(S19890C11*), ABISELECT(256,124), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C14*), ABISELECT(256,124), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C9*)(S19890C14*), ABISELECT(256,124), "S19890C1");
    /*is_ambiguous_... S19890C15::S19890C10 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C15*), ABISELECT(256,124), "S19890C1");
    check_base_class_offset(lv, (S19890C10*)(S19890C17*), ABISELECT(256,124), "S19890C1");
    check_base_class_offset(lv, (S19890C10*)(S19890C14*)(S19890C16*)(S19890C15*), ABISELECT(256,124), "S19890C1");
    check_base_class_offset(lv, (S19890C10*)(S19890C9*)(S19890C14*)(S19890C16*)(S19890C15*), ABISELECT(256,124), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C9 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C9*), 0, "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C14 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C14*), 0, "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C14 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C9*)(S19890C14*), 0, "S19890C1");
    check_base_class_offset(lv, (S10180C133*)(S19890C14*)(S19890C16*)(S19890C15*), 0, "S19890C1");
    check_base_class_offset(lv, (S10180C133*)(S19890C9*)(S19890C14*)(S19890C16*)(S19890C15*), 0, "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C9 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C9*), 0, "S19890C1");
    check_base_class_offset(lv, (S19890C9*)(S19890C7*)(S19890C6*)(S19890C3*), 0, "S19890C1");
    /*is_ambiguous_... S19890C12::S19890C9 */ AMB_check_base_class_offset(lv, (S19890C9*)(S19890C12*)(S19890C3*), 0, "S19890C1");
    check_base_class_offset(lv, (S19890C9*)(S19890C7*)(S19890C16*)(S19890C15*), 0, "S19890C1");
    check_base_class_offset(lv, (S19890C5*)(S19890C11*), ABISELECT(320,148), "S19890C1");
    check_base_class_offset(lv, (S19890C11*)(S19890C7*)(S19890C6*)(S19890C3*), ABISELECT(304,144), "S19890C1");
    check_base_class_offset(lv, (S19890C11*)(S19890C17*), ABISELECT(304,144), "S19890C1");
    check_base_class_offset(lv, (S19890C11*)(S19890C7*)(S19890C16*)(S19890C15*), ABISELECT(304,144), "S19890C1");
    check_base_class_offset(lv, (S19890C7*)(S19890C6*)(S19890C3*), ABISELECT(96,44), "S19890C1");
    check_base_class_offset(lv, (S19890C6*)(S19890C3*), ABISELECT(96,44), "S19890C1");
    /*is_ambiguous_... S19890C3::S19890C10 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C3*), ABISELECT(112,52), "S19890C1");
    check_base_class_offset(lv, (S10180C178*)(S19890C12*)(S19890C3*), ABISELECT(160,72), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C14 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C9*)(S19890C14*), ABISELECT(432,204), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C9*)(S19890C14*), ABISELECT(432,204), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C14*), ABISELECT(448,208), "S19890C1");
    /*is_ambiguous_... S19890C1::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C14*), ABISELECT(448,208), "S19890C1");
    check_base_class_offset(lv, (S19890C14*)(S19890C12*)(S19890C3*), ABISELECT(432,204), "S19890C1");
    /*is_ambiguous_... S19890C15::S19890C14 */ AMB_check_base_class_offset(lv, (S19890C14*)(S19890C15*), ABISELECT(432,204), "S19890C1");
    /*is_ambiguous_... S19890C12::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C12*)(S19890C3*), ABISELECT(176,80), "S19890C1");
    /*is_ambiguous_... S19890C12::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C12*)(S19890C3*), ABISELECT(176,80), "S19890C1");
    check_base_class_offset(lv, (S19890C12*)(S19890C3*), ABISELECT(160,72), "S19890C1");
    check_base_class_offset(lv, (S19890C3*), ABISELECT(96,44), "S19890C1");
    check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C17*), ABISELECT(1104,496), "S19890C1");
    check_base_class_offset(lv, (S19890C4*)(S19890C17*), ABISELECT(1104,496), "S19890C1");
    check_base_class_offset(lv, (S10180C133*)(S19890C17*), ABISELECT(1088,492), "S19890C1");
    check_base_class_offset(lv, (S19890C17*)(S19890C16*)(S19890C15*), ABISELECT(1088,492), "S19890C1");
    /*is_ambiguous_... S19890C16::S19890C10 */ AMB_check_base_class_offset(lv, (S19890C10*)(S19890C16*)(S19890C15*), ABISELECT(1008,452), "S19890C1");
    /*is_ambiguous_... S19890C16::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19890C16*)(S19890C15*), ABISELECT(1056,472), "S19890C1");
    check_base_class_offset(lv, (S10180C138*)(S19890C9*)(S19890C14*)(S19890C16*)(S19890C15*), ABISELECT(720,328), "S19890C1");
    check_base_class_offset(lv, (S19890C9*)(S19890C14*)(S19890C16*)(S19890C15*), ABISELECT(720,328), "S19890C1");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C5*)(S19890C4*)(S19890C14*)(S19890C16*)(S19890C15*), ABISELECT(736,332), "S19890C1");
    /*is_ambiguous_... S19890C14::S19890C4 */ AMB_check_base_class_offset(lv, (S19890C4*)(S19890C14*)(S19890C16*)(S19890C15*), ABISELECT(736,332), "S19890C1");
    check_base_class_offset(lv, (S19890C14*)(S19890C16*)(S19890C15*), ABISELECT(720,328), "S19890C1");
    /*is_ambiguous_... S19890C7::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19890C7*)(S19890C16*)(S19890C15*), ABISELECT(1064,476), "S19890C1");
    check_base_class_offset(lv, (S19890C7*)(S19890C16*)(S19890C15*), ABISELECT(1064,476), "S19890C1");
    check_base_class_offset(lv, (S19890C16*)(S19890C15*), ABISELECT(720,328), "S19890C1");
    check_base_class_offset(lv, (S19890C15*), ABISELECT(720,328), "S19890C1");
    check_field_offset(lv, s19890c1f0, ABISELECT(8,4), "S19890C1.s19890c1f0");
    check_field_offset(lv, s19890c1f1, ABISELECT(16,8), "S19890C1.s19890c1f1");
    check_field_offset(lv, s19890c1f2, ABISELECT(72,36), "S19890C1.s19890c1f2");
    test_class_info(&lv, &cd_S19890C1);
    dp->~S19890C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19890C1(Test_S19890C1, "S19890C1", ABISELECT(1152,516));

#else // __cplusplus

extern void _ZN8S19890C1C1Ev();
extern void _ZN8S19890C1D1Ev();
Name_Map name_map_S19890C1[] = {
  NSPAIR(_ZN8S19890C1C1Ev),
  NSPAIR(_ZN8S19890C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C11;
extern VTBL_ENTRY _ZTI9S19890C11[];
extern  VTBL_ENTRY _ZTV9S19890C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C11[];
extern Class_Descriptor cd_S19890C7;
extern VTBL_ENTRY _ZTI8S19890C7[];
extern  VTBL_ENTRY _ZTV8S19890C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C7[];
extern Class_Descriptor cd_S19890C6;
extern VTBL_ENTRY _ZTI8S19890C6[];
extern  VTBL_ENTRY _ZTV8S19890C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C6[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C14;
extern VTBL_ENTRY _ZTI9S19890C14[];
extern  VTBL_ENTRY _ZTV9S19890C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C14[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C12;
extern VTBL_ENTRY _ZTI9S19890C12[];
extern  VTBL_ENTRY _ZTV9S19890C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C12[];
extern Class_Descriptor cd_S19890C3;
extern VTBL_ENTRY _ZTI8S19890C3[];
extern  VTBL_ENTRY _ZTV8S19890C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C3[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C17;
extern VTBL_ENTRY _ZTI9S19890C17[];
extern  VTBL_ENTRY _ZTV9S19890C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C17[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C9;
extern VTBL_ENTRY _ZTI8S19890C9[];
extern  VTBL_ENTRY _ZTV8S19890C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C9[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S19890C4;
extern VTBL_ENTRY _ZTI8S19890C4[];
extern Class_Descriptor cd_S19890C14;
extern VTBL_ENTRY _ZTI9S19890C14[];
extern  VTBL_ENTRY _ZTV9S19890C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C14[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C7;
extern VTBL_ENTRY _ZTI8S19890C7[];
extern  VTBL_ENTRY _ZTV8S19890C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C7[];
extern Class_Descriptor cd_S19890C16;
extern VTBL_ENTRY _ZTI9S19890C16[];
extern  VTBL_ENTRY _ZTV9S19890C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C16[];
extern Class_Descriptor cd_S19890C15;
extern VTBL_ENTRY _ZTI9S19890C15[];
extern  VTBL_ENTRY _ZTV9S19890C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19890C15[];
static Base_Class bases_S19890C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S19890C5,    ABISELECT(224,108), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19890C4,    ABISELECT(224,108), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19890C10,    ABISELECT(256,124), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19890C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(320,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19890C11,    ABISELECT(304,144), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19890C7,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19890C6,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19890C10,    ABISELECT(112,52), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S10180C178,    ABISELECT(160,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(432,204), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19890C9,    ABISELECT(432,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19890C5,    ABISELECT(448,208), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(448,208), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S19890C14,    ABISELECT(432,204), //bcp->offset
    41, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(176,80), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(176,80), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S19890C12,    ABISELECT(160,72), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19890C3,    ABISELECT(96,44), //bcp->offset
    15, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19890C5,    ABISELECT(1104,496), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(1104,496), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(1088,492), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S19890C17,    ABISELECT(1088,492), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(1008,452), //bcp->offset
    -1, //bcp->virtual_function_table_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
    36, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(1056,472), //bcp->offset
    -1, //bcp->virtual_function_table_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
    36, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(720,328), //bcp->offset
    -1, //bcp->virtual_function_table_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
    30, //immediately_derived
  0, 0},
  {&cd_S19890C9,    ABISELECT(720,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19890C5,    ABISELECT(736,332), //bcp->offset
    -1, //bcp->virtual_function_table_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
    32, //immediately_derived
  0, 0},
  {&cd_S19890C4,    ABISELECT(736,332), //bcp->offset
    -1, //bcp->virtual_function_table_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
    33, //immediately_derived
  0, 0},
  {&cd_S19890C14,    ABISELECT(720,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(1064,476), //bcp->offset
    -1, //bcp->virtual_function_table_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
    35, //immediately_derived
  0, 0},
  {&cd_S19890C7,    ABISELECT(1064,476), //bcp->offset
    63, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19890C16,    ABISELECT(720,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19890C15,    ABISELECT(720,328), //bcp->offset
    50, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19890C1[];
extern void ABISELECT(_ZTv0_n48_N8S19890C1D1Ev,_ZTv0_n24_N8S19890C1D1Ev)();
extern void _ZN8S19890C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C1D0Ev,_ZTv0_n24_N8S19890C1D0Ev)();
extern void _ZN8S19890C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C1D1Ev,_ZTv0_n24_N8S19890C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19890C1D1Ev,_ZThn44_N8S19890C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C1D0Ev,_ZTv0_n24_N8S19890C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19890C1D0Ev,_ZThn44_N8S19890C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn64_n48_N8S19890C1D1Ev,_ZTvn28_n24_N8S19890C1D1Ev)();
extern void ABISELECT(_ZTvn64_n48_N8S19890C1D0Ev,_ZTvn28_n24_N8S19890C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19890C1D1Ev,_ZTv0_n28_N8S19890C1D1Ev)();
extern void ABISELECT(_ZThn432_N8S19890C1D1Ev,_ZThn204_N8S19890C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19890C1D0Ev,_ZTv0_n28_N8S19890C1D0Ev)();
extern void ABISELECT(_ZThn432_N8S19890C1D0Ev,_ZThn204_N8S19890C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19890C1D1Ev,_ZTv0_n44_N8S19890C1D1Ev)();
extern void ABISELECT(_ZThn720_N8S19890C1D1Ev,_ZThn328_N8S19890C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19890C1D0Ev,_ZTv0_n44_N8S19890C1D0Ev)();
extern void ABISELECT(_ZThn720_N8S19890C1D0Ev,_ZThn328_N8S19890C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C1D1Ev,_ZTv0_n24_N8S19890C1D1Ev)();
extern void ABISELECT(_ZThn1064_N8S19890C1D1Ev,_ZThn476_N8S19890C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C1D0Ev,_ZTv0_n24_N8S19890C1D0Ev)();
extern void ABISELECT(_ZThn1064_N8S19890C1D0Ev,_ZThn476_N8S19890C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19890C1[] = {
  ABISELECT(1088,492),
  ABISELECT(720,328),
  ABISELECT(432,204),
  ABISELECT(304,144),
  0,
  ABISELECT(96,44),
  ABISELECT(88,44),
  0,
  0,
  ABISELECT(256,124),
  ABISELECT(224,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C1D1Ev,_ZTv0_n24_N8S19890C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C1D0Ev,_ZTv0_n24_N8S19890C1D0Ev),
  ABISELECT(336,160),
  ABISELECT(-8,0),
  ABISELECT(208,100),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(160,80),
  ABISELECT(128,64),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S19890C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C1D1Ev,_ZTv0_n24_N8S19890C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C1D0Ev,_ZTv0_n24_N8S19890C1D0Ev),
  ABISELECT(-160,-72),
  ABISELECT(-72,-28),
  ABISELECT(64,36),
  ABISELECT(96,52),
  ABISELECT(-160,-72),
  ABISELECT(272,132),
  ABISELECT(-160,-72),
  (VTBL_ENTRY)&(_ZTI8S19890C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n48_N8S19890C1D1Ev,_ZTvn28_n24_N8S19890C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n48_N8S19890C1D0Ev,_ZTvn28_n24_N8S19890C1D0Ev),
  ABISELECT(-216,-100),
  ABISELECT(-48,-20),
  ABISELECT(-304,-144),
  (VTBL_ENTRY)&(_ZTI8S19890C1[0]),
  ABISELECT(-432,-204),
  ABISELECT(-344,-160),
  ABISELECT(-432,-204),
  ABISELECT(-176,-80),
  ABISELECT(-208,-96),
  ABISELECT(-432,-204),
  (VTBL_ENTRY)&(_ZTI8S19890C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19890C1D1Ev,_ZTv0_n28_N8S19890C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19890C1D0Ev,_ZTv0_n28_N8S19890C1D0Ev),
  ABISELECT(-720,-328),
  ABISELECT(-288,-124),
  ABISELECT(-720,-328),
  ABISELECT(-416,-184),
  ABISELECT(368,164),
  ABISELECT(-632,-284),
  ABISELECT(-720,-328),
  ABISELECT(-464,-204),
  ABISELECT(-496,-220),
  ABISELECT(-720,-328),
  (VTBL_ENTRY)&(_ZTI8S19890C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19890C1D1Ev,_ZTv0_n44_N8S19890C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19890C1D0Ev,_ZTv0_n44_N8S19890C1D0Ev),
  ABISELECT(-976,-432),
  ABISELECT(-760,-332),
  ABISELECT(-1064,-476),
  ABISELECT(-1064,-476),
  ABISELECT(-1064,-476),
  ABISELECT(-808,-352),
  ABISELECT(-840,-368),
  ABISELECT(-1064,-476),
  (VTBL_ENTRY)&(_ZTI8S19890C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C1D1Ev,_ZTv0_n24_N8S19890C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C1D0Ev,_ZTv0_n24_N8S19890C1D0Ev),
  ABISELECT(-1000,-448),
  ABISELECT(-784,-348),
  ABISELECT(-832,-368),
  ABISELECT(-1088,-492),
  (VTBL_ENTRY)&(_ZTI8S19890C1[0]),
};
extern VTBL_ENTRY _ZTV8S19890C1[];
extern void ABISELECT(_ZTv0_n48_N8S19890C3D1Ev,_ZTv0_n24_N8S19890C3D1Ev)();
extern void _ZN8S19890C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C3D0Ev,_ZTv0_n24_N8S19890C3D0Ev)();
extern void _ZN8S19890C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C3__8S19890C1[] = {
  ABISELECT(336,160),
  ABISELECT(-8,0),
  ABISELECT(208,100),
  ABISELECT(-96,-44),
  0,
  ABISELECT(-96,-44),
  ABISELECT(160,80),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C3D1Ev,_ZTv0_n24_N8S19890C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C3D0Ev,_ZTv0_n24_N8S19890C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19890C6D1Ev,_ZTv0_n24_N8S19890C6D1Ev)();
extern void _ZN8S19890C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C6D0Ev,_ZTv0_n24_N8S19890C6D0Ev)();
extern void _ZN8S19890C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C68S19890C3__8S19890C1[] = {
  ABISELECT(-8,0),
  ABISELECT(208,100),
  ABISELECT(-96,-44),
  0,
  ABISELECT(-96,-44),
  ABISELECT(160,80),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C6D1Ev,_ZTv0_n24_N8S19890C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C6D0Ev,_ZTv0_n24_N8S19890C6D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev)();
extern void _ZN8S19890C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev)();
extern void _ZN8S19890C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C78S19890C68S19890C3__8S19890C1[] = {
  ABISELECT(-8,0),
  ABISELECT(208,100),
  ABISELECT(-96,-44),
  0,
  ABISELECT(-96,-44),
  ABISELECT(160,80),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19890C9__8S19890C78S19890C68S19890C3__8S19890C1[] = {
  ABISELECT(96,44),
  0,
  ABISELECT(256,124),
  ABISELECT(224,108),
  ABISELECT(96,44),
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C78S19890C68S19890C3__8S19890C1[] = {
  ABISELECT(-216,-100),
  ABISELECT(-48,-20),
  ABISELECT(-208,-100),
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19890C6D1Ev,_ZTv0_n24_N8S19890C6D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19890C6D0Ev,_ZTv0_n24_N8S19890C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19890C9__8S19890C68S19890C3__8S19890C1[] = {
  ABISELECT(96,44),
  0,
  ABISELECT(256,124),
  ABISELECT(224,108),
  ABISELECT(96,44),
  (VTBL_ENTRY)&(_ZTI8S19890C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C6D1Ev,_ZTv0_n24_N8S19890C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C6D0Ev,_ZTv0_n24_N8S19890C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C68S19890C3__8S19890C1[] = {
  ABISELECT(-216,-100),
  ABISELECT(-48,-20),
  ABISELECT(-208,-100),
  (VTBL_ENTRY)&(_ZTI8S19890C6[0]),
};
extern void _ZN9S19890C12D1Ev();
extern void _ZN9S19890C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C128S19890C3__8S19890C1[] = {
  ABISELECT(-160,-72),
  ABISELECT(-72,-28),
  ABISELECT(64,36),
  ABISELECT(96,52),
  ABISELECT(-160,-72),
  ABISELECT(272,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C12[0]),
  (VTBL_ENTRY)&_ZN9S19890C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C12D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19890C12D1Ev,_ZTv0_n28_N9S19890C12D1Ev)();
extern void ABISELECT(_ZThn272_N9S19890C12D1Ev,_ZThn132_N9S19890C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19890C12D0Ev,_ZTv0_n28_N9S19890C12D0Ev)();
extern void ABISELECT(_ZThn272_N9S19890C12D0Ev,_ZThn132_N9S19890C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19890C14__9S19890C128S19890C3__8S19890C1[] = {
  ABISELECT(-272,-132),
  ABISELECT(-344,-160),
  ABISELECT(-432,-204),
  ABISELECT(-176,-80),
  ABISELECT(-208,-96),
  ABISELECT(-272,-132),
  (VTBL_ENTRY)&(_ZTI9S19890C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19890C12D1Ev,_ZTv0_n28_N9S19890C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19890C12D0Ev,_ZTv0_n28_N9S19890C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19890C12D1Ev,_ZTv0_n24_N9S19890C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19890C12D0Ev,_ZTv0_n24_N9S19890C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19890C9__A1__9S19890C128S19890C3__8S19890C1[] = {
  ABISELECT(160,72),
  0,
  ABISELECT(256,124),
  ABISELECT(224,108),
  ABISELECT(160,72),
  (VTBL_ENTRY)&(_ZTI9S19890C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C12D1Ev,_ZTv0_n24_N9S19890C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C12D0Ev,_ZTv0_n24_N9S19890C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19890C3D1Ev,_ZTv0_n24_N8S19890C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19890C3D0Ev,_ZTv0_n24_N8S19890C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19890C9__8S19890C3__8S19890C1[] = {
  ABISELECT(96,44),
  0,
  ABISELECT(256,124),
  ABISELECT(224,108),
  ABISELECT(96,44),
  (VTBL_ENTRY)&(_ZTI8S19890C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C3D1Ev,_ZTv0_n24_N8S19890C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C3D0Ev,_ZTv0_n24_N8S19890C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C3__8S19890C1[] = {
  ABISELECT(-216,-100),
  ABISELECT(-48,-20),
  ABISELECT(-208,-100),
  (VTBL_ENTRY)&(_ZTI8S19890C3[0]),
};
extern void ABISELECT(_ZThn64_N8S19890C3D1Ev,_ZThn28_N8S19890C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19890C3D0Ev,_ZThn28_N8S19890C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19890C12__8S19890C3__8S19890C1[] = {
  ABISELECT(-160,-72),
  ABISELECT(-72,-28),
  ABISELECT(64,36),
  ABISELECT(96,52),
  ABISELECT(-160,-72),
  ABISELECT(272,132),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S19890C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19890C3D1Ev,_ZThn28_N8S19890C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19890C3D0Ev,_ZThn28_N8S19890C3D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S19890C3D1Ev,_ZTv0_n28_N8S19890C3D1Ev)();
extern void ABISELECT(_ZThn336_N8S19890C3D1Ev,_ZThn160_N8S19890C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19890C3D0Ev,_ZTv0_n28_N8S19890C3D0Ev)();
extern void ABISELECT(_ZThn336_N8S19890C3D0Ev,_ZThn160_N8S19890C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19890C14__8S19890C3__8S19890C1[] = {
  ABISELECT(-336,-160),
  ABISELECT(-344,-160),
  ABISELECT(-432,-204),
  ABISELECT(-176,-80),
  ABISELECT(-208,-96),
  ABISELECT(-336,-160),
  (VTBL_ENTRY)&(_ZTI8S19890C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19890C3D1Ev,_ZTv0_n28_N8S19890C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19890C3D0Ev,_ZTv0_n28_N8S19890C3D0Ev),
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C9__8S19890C1[] = {
  0,
  ABISELECT(256,124),
  ABISELECT(224,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C1[] = {
  ABISELECT(-216,-100),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C11[0]),
};
extern void _ZN9S19890C14D1Ev();
extern void _ZN9S19890C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C14__8S19890C1[] = {
  ABISELECT(-344,-160),
  ABISELECT(-432,-204),
  ABISELECT(-176,-80),
  ABISELECT(-208,-96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C14[0]),
  (VTBL_ENTRY)&_ZN9S19890C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C14D0Ev,
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C99S19890C14__A1__8S19890C1[] = {
  ABISELECT(-432,-204),
  ABISELECT(-176,-80),
  ABISELECT(-208,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
extern void _ZN9S19890C15D1Ev();
extern void _ZN9S19890C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C15__8S19890C1[] = {
  ABISELECT(-288,-124),
  ABISELECT(-720,-328),
  ABISELECT(-416,-184),
  ABISELECT(368,164),
  ABISELECT(-632,-284),
  ABISELECT(-720,-328),
  ABISELECT(-464,-204),
  ABISELECT(-496,-220),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
  (VTBL_ENTRY)&_ZN9S19890C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C15D0Ev,
};
extern void _ZN9S19890C16D1Ev();
extern void _ZN9S19890C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C169S19890C15__8S19890C1[] = {
  ABISELECT(-720,-328),
  ABISELECT(-416,-184),
  ABISELECT(368,164),
  ABISELECT(-632,-284),
  ABISELECT(-720,-328),
  ABISELECT(-464,-204),
  ABISELECT(-496,-220),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
  (VTBL_ENTRY)&_ZN9S19890C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C16D0Ev,
};
extern void _ZN9S19890C14D1Ev();
extern void _ZN9S19890C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19890C149S19890C169S19890C15__A1__8S19890C1[] = {
  ABISELECT(-632,-284),
  ABISELECT(-720,-328),
  ABISELECT(-464,-204),
  ABISELECT(-496,-220),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C14[0]),
  (VTBL_ENTRY)&_ZN9S19890C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19890C14D0Ev,
};
extern void _ZN8S19890C9D1Ev();
extern void _ZN8S19890C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19890C99S19890C149S19890C169S19890C15__A2__8S19890C1[] = {
  ABISELECT(-720,-328),
  ABISELECT(-464,-204),
  ABISELECT(-496,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C9[0]),
  (VTBL_ENTRY)&_ZN8S19890C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19890C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev)();
extern void _ZN8S19890C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev)();
extern void _ZN8S19890C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C79S19890C169S19890C15__A1__8S19890C1[] = {
  ABISELECT(-976,-432),
  ABISELECT(-760,-332),
  ABISELECT(-1064,-476),
  0,
  ABISELECT(-1064,-476),
  ABISELECT(-808,-352),
  ABISELECT(-840,-368),
  0,
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19890C9__8S19890C79S19890C169S19890C15__A1__8S19890C1[] = {
  ABISELECT(1064,476),
  0,
  ABISELECT(256,124),
  ABISELECT(224,108),
  ABISELECT(1064,476),
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__8S19890C79S19890C169S19890C15__A1__8S19890C1[] = {
  ABISELECT(-216,-100),
  ABISELECT(-48,-20),
  ABISELECT(760,332),
  (VTBL_ENTRY)&(_ZTI8S19890C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C17__9S19890C169S19890C15__8S19890C1[] = {
  ABISELECT(-1000,-448),
  ABISELECT(-784,-348),
  ABISELECT(-832,-368),
  ABISELECT(-368,-164),
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__9S19890C169S19890C15__8S19890C1[] = {
  ABISELECT(-216,-100),
  ABISELECT(-48,-20),
  ABISELECT(416,184),
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev)();
extern void ABISELECT(_ZThn344_N9S19890C16D1Ev,_ZThn148_N9S19890C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev)();
extern void ABISELECT(_ZThn344_N9S19890C16D0Ev,_ZThn148_N9S19890C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C7__9S19890C169S19890C15__8S19890C1[] = {
  ABISELECT(-976,-432),
  ABISELECT(-760,-332),
  ABISELECT(-1064,-476),
  ABISELECT(-344,-148),
  ABISELECT(-1064,-476),
  ABISELECT(-808,-352),
  ABISELECT(-840,-368),
  ABISELECT(-344,-148),
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19890C9__A1__9S19890C169S19890C15__8S19890C1[] = {
  ABISELECT(720,328),
  0,
  ABISELECT(256,124),
  ABISELECT(224,108),
  ABISELECT(720,328),
  (VTBL_ENTRY)&(_ZTI9S19890C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S19890C15D1Ev,_ZTv0_n28_N9S19890C15D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19890C15D0Ev,_ZTv0_n28_N9S19890C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19890C14__9S19890C15__8S19890C1[] = {
  ABISELECT(288,124),
  ABISELECT(-344,-160),
  ABISELECT(-432,-204),
  ABISELECT(-176,-80),
  ABISELECT(-208,-96),
  ABISELECT(288,124),
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19890C15D1Ev,_ZTv0_n28_N9S19890C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19890C15D0Ev,_ZTv0_n28_N9S19890C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19890C17__9S19890C15__8S19890C1[] = {
  ABISELECT(-1000,-448),
  ABISELECT(-784,-348),
  ABISELECT(-832,-368),
  ABISELECT(-368,-164),
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__9S19890C15__8S19890C1[] = {
  ABISELECT(-216,-100),
  ABISELECT(-48,-20),
  ABISELECT(416,184),
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19890C15D1Ev,_ZTv0_n24_N9S19890C15D1Ev)();
extern void ABISELECT(_ZThn344_N9S19890C15D1Ev,_ZThn148_N9S19890C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19890C15D0Ev,_ZTv0_n24_N9S19890C15D0Ev)();
extern void ABISELECT(_ZThn344_N9S19890C15D0Ev,_ZThn148_N9S19890C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19890C79S19890C16__9S19890C15__8S19890C1[] = {
  ABISELECT(-976,-432),
  ABISELECT(-760,-332),
  ABISELECT(-1064,-476),
  ABISELECT(-344,-148),
  ABISELECT(-1064,-476),
  ABISELECT(-808,-352),
  ABISELECT(-840,-368),
  ABISELECT(-344,-148),
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C15D1Ev,_ZTv0_n24_N9S19890C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C15D0Ev,_ZTv0_n24_N9S19890C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19890C15D1Ev,_ZTv0_n24_N9S19890C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19890C15D0Ev,_ZTv0_n24_N9S19890C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19890C9__A2__9S19890C15__8S19890C1[] = {
  ABISELECT(720,328),
  0,
  ABISELECT(256,124),
  ABISELECT(224,108),
  ABISELECT(720,328),
  (VTBL_ENTRY)&(_ZTI9S19890C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C15D1Ev,_ZTv0_n24_N9S19890C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19890C15D0Ev,_ZTv0_n24_N9S19890C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19890C17__8S19890C1[] = {
  ABISELECT(-1000,-448),
  ABISELECT(-784,-348),
  ABISELECT(-832,-368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19890C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19890C11__9S19890C17__8S19890C1[] = {
  ABISELECT(-216,-100),
  ABISELECT(-48,-20),
  ABISELECT(784,348),
  (VTBL_ENTRY)&(_ZTI9S19890C17[0]),
};
static  VTT_ENTRY vtt_S19890C1[] = {
  {&(_ZTV8S19890C1[13]),  13,79},
  {&(_ZTV8S19890C1[25]),  25,79},
  {&(_ZTV8S19890C1[13]),  13,79},
  {&(_ZTV8S19890C1[41]),  41,79},
  {&(_ZTV8S19890C1[35]),  35,79},
  {&(_ZTV8S19890C1[48]),  48,79},
  {&(_ZTV8S19890C1[61]),  61,79},
  {&(_ZTV8S19890C1[79]),  79,79},
  {&(_ZTV8S19890C1[72]),  72,79},
  {&(_tg__ZTV8S19890C3__8S19890C1[10]),  10,12},
  {&(_tg__ZTV8S19890C68S19890C3__8S19890C1[9]),  9,11},
  {&(_tg__ZTV8S19890C78S19890C68S19890C3__8S19890C1[9]),  9,11},
  {&(_tg__ZTV8S19890C9__8S19890C78S19890C68S19890C3__8S19890C1[6]),  6,8},
  {&(_tg__ZTV9S19890C11__8S19890C78S19890C68S19890C3__8S19890C1[4]),  4,4},
  {&(_tg__ZTV8S19890C9__8S19890C68S19890C3__8S19890C1[6]),  6,8},
  {&(_tg__ZTV9S19890C11__8S19890C68S19890C3__8S19890C1[4]),  4,4},
  {&(_tg__ZTV9S19890C128S19890C3__8S19890C1[8]),  8,10},
  {&(_tg__ZTV9S19890C14__9S19890C128S19890C3__8S19890C1[7]),  7,9},
  {&(_tg__ZTV8S19890C9__A1__9S19890C128S19890C3__8S19890C1[6]),  6,8},
  {&(_tg__ZTV8S19890C9__8S19890C3__8S19890C1[6]),  6,8},
  {&(_tg__ZTV9S19890C11__8S19890C3__8S19890C1[4]),  4,4},
  {&(_tg__ZTV9S19890C12__8S19890C3__8S19890C1[8]),  8,10},
  {&(_tg__ZTV9S19890C14__8S19890C3__8S19890C1[7]),  7,9},
  {&(_tg__ZTV8S19890C9__8S19890C1[5]),  5,7},
  {&(_tg__ZTV9S19890C11__8S19890C1[4]),  4,4},
  {&(_tg__ZTV9S19890C14__8S19890C1[6]),  6,8},
  {&(_tg__ZTV8S19890C99S19890C14__A1__8S19890C1[5]),  5,7},
  {&(_tg__ZTV9S19890C15__8S19890C1[10]),  10,12},
  {&(_tg__ZTV9S19890C169S19890C15__8S19890C1[9]),  9,11},
  {&(_tg__ZTV9S19890C149S19890C169S19890C15__A1__8S19890C1[6]),  6,8},
  {&(_tg__ZTV8S19890C99S19890C149S19890C169S19890C15__A2__8S19890C1[5]),  5,7},
  {&(_tg__ZTV8S19890C79S19890C169S19890C15__A1__8S19890C1[9]),  9,11},
  {&(_tg__ZTV8S19890C9__8S19890C79S19890C169S19890C15__A1__8S19890C1[6]),  6,8},
  {&(_tg__ZTV9S19890C11__8S19890C79S19890C169S19890C15__A1__8S19890C1[4]),  4,4},
  {&(_tg__ZTV9S19890C17__9S19890C169S19890C15__8S19890C1[5]),  5,5},
  {&(_tg__ZTV9S19890C11__9S19890C169S19890C15__8S19890C1[4]),  4,4},
  {&(_tg__ZTV8S19890C7__9S19890C169S19890C15__8S19890C1[9]),  9,11},
  {&(_tg__ZTV8S19890C9__A1__9S19890C169S19890C15__8S19890C1[6]),  6,8},
  {&(_tg__ZTV9S19890C14__9S19890C15__8S19890C1[7]),  7,9},
  {&(_tg__ZTV9S19890C17__9S19890C15__8S19890C1[5]),  5,5},
  {&(_tg__ZTV9S19890C11__9S19890C15__8S19890C1[4]),  4,4},
  {&(_tg__ZTV8S19890C79S19890C16__9S19890C15__8S19890C1[9]),  9,11},
  {&(_tg__ZTV8S19890C9__A2__9S19890C15__8S19890C1[6]),  6,8},
  {&(_tg__ZTV9S19890C17__8S19890C1[5]),  5,5},
  {&(_tg__ZTV9S19890C11__9S19890C17__8S19890C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19890C1[];
extern  VTBL_ENTRY _ZTV8S19890C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19890C1[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C15D0Ev,_ZTv0_n24_N9S19890C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19890C15D0Ev,_ZThn148_N9S19890C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C15D1Ev,_ZTv0_n24_N9S19890C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19890C15D1Ev,_ZThn148_N9S19890C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C16D0Ev,_ZTv0_n24_N9S19890C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19890C16D0Ev,_ZThn148_N9S19890C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19890C16D1Ev,_ZTv0_n24_N9S19890C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19890C16D1Ev,_ZThn148_N9S19890C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19890C3D0Ev,_ZTv0_n28_N8S19890C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19890C3D0Ev,_ZThn160_N8S19890C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19890C3D1Ev,_ZTv0_n28_N8S19890C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19890C3D1Ev,_ZThn160_N8S19890C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19890C12D0Ev,_ZTv0_n28_N9S19890C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19890C12D0Ev,_ZThn132_N9S19890C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19890C12D1Ev,_ZTv0_n28_N9S19890C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19890C12D1Ev,_ZThn132_N9S19890C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C7D0Ev,_ZTv0_n24_N8S19890C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19890C7D0Ev,
  (VTBL_ENTRY)_ZN8S19890C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C7D1Ev,_ZTv0_n24_N8S19890C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19890C7D1Ev,
  (VTBL_ENTRY)_ZN8S19890C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C6D0Ev,_ZTv0_n24_N8S19890C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19890C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C6D1Ev,_ZTv0_n24_N8S19890C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19890C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C3D0Ev,_ZTv0_n24_N8S19890C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19890C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C3D1Ev,_ZTv0_n24_N8S19890C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19890C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19890C1D0Ev,_ZTv0_n44_N8S19890C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19890C1D0Ev,_ZThn328_N8S19890C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19890C1D1Ev,_ZTv0_n44_N8S19890C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19890C1D1Ev,_ZThn328_N8S19890C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19890C1D0Ev,_ZTv0_n28_N8S19890C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19890C1D0Ev,_ZThn204_N8S19890C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19890C1D1Ev,_ZTv0_n28_N8S19890C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19890C1D1Ev,_ZThn204_N8S19890C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C1D0Ev,_ZTv0_n24_N8S19890C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1064_N8S19890C1D0Ev,_ZThn476_N8S19890C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19890C1D0Ev,_ZThn44_N8S19890C1D0Ev),
  (VTBL_ENTRY)_ZN8S19890C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19890C1D1Ev,_ZTv0_n24_N8S19890C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1064_N8S19890C1D1Ev,_ZThn476_N8S19890C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19890C1D1Ev,_ZThn44_N8S19890C1D1Ev),
  (VTBL_ENTRY)_ZN8S19890C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19890C1 = {  "S19890C1", // class name
  bases_S19890C1, 38,
  &(vtc_S19890C1[0]), // expected_vtbl_contents
  &(vtt_S19890C1[0]), // expected_vtt_contents
  ABISELECT(1152,516), // object size
  NSPAIRA(_ZTI8S19890C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19890C1),79, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19890C1),45, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S1168C5()
{
  extern Class_Descriptor cd_S1168C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1168C5, buf);
    S1168C5 &lv = *(new (buf) S1168C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1168C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1168C5)");
    check_base_class_offset(lv, (S10180C161*), 0, "S1168C5");
    test_class_info(&lv, &cd_S1168C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1168C5(Test_S1168C5, "S1168C5", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S10180C161;
static Base_Class bases_S1168C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C161,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1168C5 = {  "S1168C5", // class name
  bases_S1168C5, 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  S1168C8_nt  : S10180C114 {
};
//SIG(-1 S1168C8_nt) C1{ BC2{ m Fp}}



//skip512 S1168C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S10180C114;
extern VTBL_ENTRY _ZTI10S10180C114[];
static Base_Class bases_S1168C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C114,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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  S1168C3  : S10180C138 {
  int s1168c3f0;
  void *s1168c3f1;
  ::S1168C5 s1168c3f2;
  ::S1168C8_nt s1168c3f3;
  char s1168c3f4;
  virtual  ~S1168C3(); // _ZN7S1168C3D1Ev
  virtual void  v4(); // _ZN7S1168C32v4Ev
  virtual void  v5(); // _ZN7S1168C32v5Ev
  virtual void  v6(); // _ZN7S1168C32v6Ev
  virtual void  v7(); // _ZN7S1168C32v7Ev
  virtual void  v8(); // _ZN7S1168C32v8Ev
  virtual void  v9(); // _ZN7S1168C32v9Ev
  virtual void  v10(); // _ZN7S1168C33v10Ev
  virtual void  v11(); // _ZN7S1168C33v11Ev
  S1168C3(); // tgen
};
//SIG(-1 S1168C3) C1{ BC2{ m} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp FC3{ BC4{ m Fp Fi[2] FC2}} FC5{ BC6{ m Fp}} Fc}


 S1168C3 ::~S1168C3(){ note_dtor("S1168C3", this);}
void  S1168C3 ::v4(){vfunc_called(this, "_ZN7S1168C32v4Ev");}
void  S1168C3 ::v5(){vfunc_called(this, "_ZN7S1168C32v5Ev");}
void  S1168C3 ::v6(){vfunc_called(this, "_ZN7S1168C32v6Ev");}
void  S1168C3 ::v7(){vfunc_called(this, "_ZN7S1168C32v7Ev");}
void  S1168C3 ::v8(){vfunc_called(this, "_ZN7S1168C32v8Ev");}
void  S1168C3 ::v9(){vfunc_called(this, "_ZN7S1168C32v9Ev");}
void  S1168C3 ::v10(){vfunc_called(this, "_ZN7S1168C33v10Ev");}
void  S1168C3 ::v11(){vfunc_called(this, "_ZN7S1168C33v11Ev");}
S1168C3 ::S1168C3(){ note_ctor("S1168C3", this);} // tgen

static void Test_S1168C3()
{
  extern Class_Descriptor cd_S1168C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1168C3, buf);
    S1168C3 *dp, &lv = *(dp=new (buf) S1168C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1168C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1168C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S1168C3");
    check_field_offset(lv, s1168c3f0, ABISELECT(8,4), "S1168C3.s1168c3f0");
    check_field_offset(lv, s1168c3f1, ABISELECT(16,8), "S1168C3.s1168c3f1");
    check_field_offset(lv, s1168c3f2, ABISELECT(24,12), "S1168C3.s1168c3f2");
    check_field_offset(lv, s1168c3f3, ABISELECT(48,28), "S1168C3.s1168c3f3");
    check_field_offset(lv, s1168c3f4, ABISELECT(56,32), "S1168C3.s1168c3f4");
    test_class_info(&lv, &cd_S1168C3);
    dp->~S1168C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1168C3(Test_S1168C3, "S1168C3", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1168C3C1Ev();
extern void _ZN7S1168C3D1Ev();
Name_Map name_map_S1168C3[] = {
  NSPAIR(_ZN7S1168C3C1Ev),
  NSPAIR(_ZN7S1168C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S1168C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1168C3[];
extern void _ZN7S1168C3D1Ev();
extern void _ZN7S1168C3D0Ev();
extern void _ZN7S1168C32v4Ev();
extern void _ZN7S1168C32v5Ev();
extern void _ZN7S1168C32v6Ev();
extern void _ZN7S1168C32v7Ev();
extern void _ZN7S1168C32v8Ev();
extern void _ZN7S1168C32v9Ev();
extern void _ZN7S1168C33v10Ev();
extern void _ZN7S1168C33v11Ev();
static  VTBL_ENTRY vtc_S1168C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1168C3[0]),
  (VTBL_ENTRY)&_ZN7S1168C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1168C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1168C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1168C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1168C3[];
extern  VTBL_ENTRY _ZTV7S1168C3[];
Class_Descriptor cd_S1168C3 = {  "S1168C3", // class name
  bases_S1168C3, 1,
  &(vtc_S1168C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1168C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1168C3),12, //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  S1168C2  : S1168C3 {
  void *s1168c2f0;
  virtual void  v12(); // _ZN7S1168C23v12Ev
  virtual void  v13(); // _ZN7S1168C23v13Ev
  virtual void  v14(); // _ZN7S1168C23v14Ev
  virtual void  v15(); // _ZN7S1168C23v15Ev
  virtual void  v16(); // _ZN7S1168C23v16Ev
  virtual void  v17(); // _ZN7S1168C23v17Ev
  ~S1168C2(); // tgen
  S1168C2(); // tgen
};
//SIG(-1 S1168C2) C1{ BC2{ BC3{ m} vd v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp FC4{ BC5{ m Fp Fi[2] FC3}} FC6{ BC7{ m Fp}} Fc} v1 v2 v3 v4 v5 v6 Fp}


void  S1168C2 ::v12(){vfunc_called(this, "_ZN7S1168C23v12Ev");}
void  S1168C2 ::v13(){vfunc_called(this, "_ZN7S1168C23v13Ev");}
void  S1168C2 ::v14(){vfunc_called(this, "_ZN7S1168C23v14Ev");}
void  S1168C2 ::v15(){vfunc_called(this, "_ZN7S1168C23v15Ev");}
void  S1168C2 ::v16(){vfunc_called(this, "_ZN7S1168C23v16Ev");}
void  S1168C2 ::v17(){vfunc_called(this, "_ZN7S1168C23v17Ev");}
S1168C2 ::~S1168C2(){ note_dtor("S1168C2", this);} // tgen
S1168C2 ::S1168C2(){ note_ctor("S1168C2", this);} // tgen

static void Test_S1168C2()
{
  extern Class_Descriptor cd_S1168C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S1168C2, buf);
    S1168C2 *dp, &lv = *(dp=new (buf) S1168C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S1168C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1168C2)");
    check_base_class_offset(lv, (S10180C138*)(S1168C3*), 0, "S1168C2");
    check_base_class_offset(lv, (S1168C3*), 0, "S1168C2");
    check_field_offset(lv, s1168c2f0, ABISELECT(64,36), "S1168C2.s1168c2f0");
    test_class_info(&lv, &cd_S1168C2);
    dp->~S1168C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1168C2(Test_S1168C2, "S1168C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S1168C2C1Ev();
extern void _ZN7S1168C2D1Ev();
Name_Map name_map_S1168C2[] = {
  NSPAIR(_ZN7S1168C2C1Ev),
  NSPAIR(_ZN7S1168C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1168C3;
extern VTBL_ENTRY _ZTI7S1168C3[];
extern  VTBL_ENTRY _ZTV7S1168C3[];
static Base_Class bases_S1168C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1168C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1168C2[];
extern void _ZN7S1168C2D1Ev();
extern void _ZN7S1168C2D0Ev();
extern void _ZN7S1168C32v4Ev();
extern void _ZN7S1168C32v5Ev();
extern void _ZN7S1168C32v6Ev();
extern void _ZN7S1168C32v7Ev();
extern void _ZN7S1168C32v8Ev();
extern void _ZN7S1168C32v9Ev();
extern void _ZN7S1168C33v10Ev();
extern void _ZN7S1168C33v11Ev();
extern void _ZN7S1168C23v12Ev();
extern void _ZN7S1168C23v13Ev();
extern void _ZN7S1168C23v14Ev();
extern void _ZN7S1168C23v15Ev();
extern void _ZN7S1168C23v16Ev();
extern void _ZN7S1168C23v17Ev();
static  VTBL_ENTRY vtc_S1168C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1168C2[0]),
  (VTBL_ENTRY)&_ZN7S1168C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1168C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1168C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1168C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1168C2[];
extern  VTBL_ENTRY _ZTV7S1168C2[];
Class_Descriptor cd_S1168C2 = {  "S1168C2", // class name
  bases_S1168C2, 2,
  &(vtc_S1168C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S1168C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1168C2),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  S1168C13  : S10180C136 {
};
//SIG(-1 S1168C13) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



static void Test_S1168C13()
{
  extern Class_Descriptor cd_S1168C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1168C13, buf);
    S1168C13 &lv = *(new (buf) S1168C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1168C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1168C13)");
    check_base_class_offset(lv, (S10180C136*), 0, "S1168C13");
    test_class_info(&lv, &cd_S1168C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1168C13(Test_S1168C13, "S1168C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S10180C136;
static Base_Class bases_S1168C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C136,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1168C13 = {  "S1168C13", // class name
  bases_S1168C13, 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  S1168C12  : S1168C13 {
};
//SIG(-1 S1168C12) C1{ BC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}}}



static void Test_S1168C12()
{
  extern Class_Descriptor cd_S1168C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1168C12, buf);
    S1168C12 &lv = *(new (buf) S1168C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1168C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1168C12)");
    check_base_class_offset(lv, (S10180C136*)(S1168C13*), 0, "S1168C12");
    check_base_class_offset(lv, (S1168C13*), 0, "S1168C12");
    test_class_info(&lv, &cd_S1168C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1168C12(Test_S1168C12, "S1168C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S10180C136;
extern Class_Descriptor cd_S1168C13;
static Base_Class bases_S1168C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C136,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1168C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1168C12 = {  "S1168C12", // class name
  bases_S1168C12, 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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1168C21  : S10180C178 {
  int s1168c21f0;
  ::S10180C37 s1168c21f1;
  ::S1168C5 s1168c21f2;
  ~S1168C21(); // tgen
  S1168C21(); // tgen
};
//SIG(-1 S1168C21) C1{ BC2{ vd m Fi} Fi FC3{ m FC4{ FL[4]}} FC5{ BC6{ m Fp Fi[2] FC7{ m}}}}


S1168C21 ::~S1168C21(){ note_dtor("S1168C21", this);} // tgen
S1168C21 ::S1168C21(){ note_ctor("S1168C21", this);} // tgen

static void Test_S1168C21()
{
  extern Class_Descriptor cd_S1168C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,16)];
    init_test(&cd_S1168C21, buf);
    S1168C21 *dp, &lv = *(dp=new (buf) S1168C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S1168C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1168C21)");
    check_base_class_offset(lv, (S10180C178*), 0, "S1168C21");
    check_field_offset(lv, s1168c21f0, ABISELECT(12,8), "S1168C21.s1168c21f0");
    check_field_offset(lv, s1168c21f1, ABISELECT(16,12), "S1168C21.s1168c21f1");
    check_field_offset(lv, s1168c21f2, ABISELECT(48,44), "S1168C21.s1168c21f2");
    test_class_info(&lv, &cd_S1168C21);
    dp->~S1168C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1168C21(Test_S1168C21, "S1168C21", ABISELECT(72,60));

#else // __cplusplus

extern void _ZN8S1168C21C1Ev();
extern void _ZN8S1168C21D1Ev();
Name_Map name_map_S1168C21[] = {
  NSPAIR(_ZN8S1168C21C1Ev),
  NSPAIR(_ZN8S1168C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
static Base_Class bases_S1168C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S1168C21[];
extern void _ZN8S1168C21D1Ev();
extern void _ZN8S1168C21D0Ev();
static  VTBL_ENTRY vtc_S1168C21[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1168C21[0]),
  (VTBL_ENTRY)&_ZN8S1168C21D1Ev,
  (VTBL_ENTRY)&_ZN8S1168C21D0Ev,
};
extern VTBL_ENTRY _ZTI8S1168C21[];
extern  VTBL_ENTRY _ZTV8S1168C21[];
Class_Descriptor cd_S1168C21 = {  "S1168C21", // class name
  bases_S1168C21, 1,
  &(vtc_S1168C21[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,60), // object size
  NSPAIRA(_ZTI8S1168C21),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1168C21),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  S1168C1  : S1168C2 {
  ::S10180C37 s1168c1f0;
  ::S1168C12 s1168c1f1;
  ::S10180C37 s1168c1f2;
  ::S10180C5 s1168c1f3;
  ::S1168C21 s1168c1f4;
  virtual  ~S1168C1(); // _ZN7S1168C1D1Ev
  virtual void  v1(); // _ZN7S1168C12v1Ev
  virtual void  v2(); // _ZN7S1168C12v2Ev
  virtual void  v3(); // _ZN7S1168C12v3Ev
  S1168C1(); // tgen
};
//SIG(1 S1168C1) C1{ BC2{ BC3{ BC4{ m} vd v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp FC5{ BC6{ m Fp Fi[2] FC4}} FC7{ BC8{ m Fp}} Fc} v12 v13 v14 v15 v16 v17 Fp} vd v1 v2 v3 FC9{ m FC10{ FL[4]}} FC11{ BC12{ BC13{ m Fp Fi FC14{ m} FC4}}} FC9 FC15{ BC16{ m Fp Fi FC17{ m} FC17}} FC18{ BC19{ vd m Fi} Fi FC9 FC5}}


 S1168C1 ::~S1168C1(){ note_dtor("S1168C1", this);}
void  S1168C1 ::v1(){vfunc_called(this, "_ZN7S1168C12v1Ev");}
void  S1168C1 ::v2(){vfunc_called(this, "_ZN7S1168C12v2Ev");}
void  S1168C1 ::v3(){vfunc_called(this, "_ZN7S1168C12v3Ev");}
S1168C1 ::S1168C1(){ note_ctor("S1168C1", this);} // tgen

static void Test_S1168C1()
{
  extern Class_Descriptor cd_S1168C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,48)];
    init_test(&cd_S1168C1, buf);
    S1168C1 *dp, &lv = *(dp=new (buf) S1168C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,188), "sizeof(S1168C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1168C1)");
    check_base_class_offset(lv, (S10180C138*)(S1168C3*)(S1168C2*), 0, "S1168C1");
    check_base_class_offset(lv, (S1168C3*)(S1168C2*), 0, "S1168C1");
    check_base_class_offset(lv, (S1168C2*), 0, "S1168C1");
    check_field_offset(lv, s1168c1f0, ABISELECT(72,40), "S1168C1.s1168c1f0");
    check_field_offset(lv, s1168c1f1, ABISELECT(104,72), "S1168C1.s1168c1f1");
    check_field_offset(lv, s1168c1f2, ABISELECT(120,84), "S1168C1.s1168c1f2");
    check_field_offset(lv, s1168c1f3, ABISELECT(152,116), "S1168C1.s1168c1f3");
    check_field_offset(lv, s1168c1f4, ABISELECT(168,128), "S1168C1.s1168c1f4");
    test_class_info(&lv, &cd_S1168C1);
    dp->~S1168C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1168C1(Test_S1168C1, "S1168C1", ABISELECT(240,188));

#else // __cplusplus

extern void _ZN7S1168C1C1Ev();
extern void _ZN7S1168C1D1Ev();
Name_Map name_map_S1168C1[] = {
  NSPAIR(_ZN7S1168C1C1Ev),
  NSPAIR(_ZN7S1168C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1168C3;
extern VTBL_ENTRY _ZTI7S1168C3[];
extern  VTBL_ENTRY _ZTV7S1168C3[];
extern Class_Descriptor cd_S1168C2;
extern VTBL_ENTRY _ZTI7S1168C2[];
extern  VTBL_ENTRY _ZTV7S1168C2[];
static Base_Class bases_S1168C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1168C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1168C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1168C1[];
extern void _ZN7S1168C1D1Ev();
extern void _ZN7S1168C1D0Ev();
extern void _ZN7S1168C32v4Ev();
extern void _ZN7S1168C32v5Ev();
extern void _ZN7S1168C32v6Ev();
extern void _ZN7S1168C32v7Ev();
extern void _ZN7S1168C32v8Ev();
extern void _ZN7S1168C32v9Ev();
extern void _ZN7S1168C33v10Ev();
extern void _ZN7S1168C33v11Ev();
extern void _ZN7S1168C23v12Ev();
extern void _ZN7S1168C23v13Ev();
extern void _ZN7S1168C23v14Ev();
extern void _ZN7S1168C23v15Ev();
extern void _ZN7S1168C23v16Ev();
extern void _ZN7S1168C23v17Ev();
extern void _ZN7S1168C12v1Ev();
extern void _ZN7S1168C12v2Ev();
extern void _ZN7S1168C12v3Ev();
static  VTBL_ENTRY vtc_S1168C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1168C1[0]),
  (VTBL_ENTRY)&_ZN7S1168C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1168C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1168C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1168C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1168C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1168C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1168C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1168C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1168C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1168C1[];
extern  VTBL_ENTRY _ZTV7S1168C1[];
Class_Descriptor cd_S1168C1 = {  "S1168C1", // class name
  bases_S1168C1, 3,
  &(vtc_S1168C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,188), // object size
  NSPAIRA(_ZTI7S1168C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1168C1),21, //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  S1167C3  : S10180C138 {
  int s1167c3f0;
  void *s1167c3f1;
  ::S1168C5 s1167c3f2;
  ::S1168C8_nt s1167c3f3;
  char s1167c3f4;
  virtual  ~S1167C3(); // _ZN7S1167C3D1Ev
  virtual void  v4(); // _ZN7S1167C32v4Ev
  virtual void  v5(); // _ZN7S1167C32v5Ev
  virtual void  v6(); // _ZN7S1167C32v6Ev
  virtual void  v7(); // _ZN7S1167C32v7Ev
  virtual void  v8(); // _ZN7S1167C32v8Ev
  virtual void  v9(); // _ZN7S1167C32v9Ev
  virtual void  v10(); // _ZN7S1167C33v10Ev
  virtual void  v11(); // _ZN7S1167C33v11Ev
  S1167C3(); // tgen
};
//SIG(-1 S1167C3) C1{ BC2{ m} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp FC3{ BC4{ m Fp Fi[2] FC2}} FC5{ BC6{ m Fp}} Fc}


 S1167C3 ::~S1167C3(){ note_dtor("S1167C3", this);}
void  S1167C3 ::v4(){vfunc_called(this, "_ZN7S1167C32v4Ev");}
void  S1167C3 ::v5(){vfunc_called(this, "_ZN7S1167C32v5Ev");}
void  S1167C3 ::v6(){vfunc_called(this, "_ZN7S1167C32v6Ev");}
void  S1167C3 ::v7(){vfunc_called(this, "_ZN7S1167C32v7Ev");}
void  S1167C3 ::v8(){vfunc_called(this, "_ZN7S1167C32v8Ev");}
void  S1167C3 ::v9(){vfunc_called(this, "_ZN7S1167C32v9Ev");}
void  S1167C3 ::v10(){vfunc_called(this, "_ZN7S1167C33v10Ev");}
void  S1167C3 ::v11(){vfunc_called(this, "_ZN7S1167C33v11Ev");}
S1167C3 ::S1167C3(){ note_ctor("S1167C3", this);} // tgen

static void Test_S1167C3()
{
  extern Class_Descriptor cd_S1167C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1167C3, buf);
    S1167C3 *dp, &lv = *(dp=new (buf) S1167C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1167C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1167C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S1167C3");
    check_field_offset(lv, s1167c3f0, ABISELECT(8,4), "S1167C3.s1167c3f0");
    check_field_offset(lv, s1167c3f1, ABISELECT(16,8), "S1167C3.s1167c3f1");
    check_field_offset(lv, s1167c3f2, ABISELECT(24,12), "S1167C3.s1167c3f2");
    check_field_offset(lv, s1167c3f3, ABISELECT(48,28), "S1167C3.s1167c3f3");
    check_field_offset(lv, s1167c3f4, ABISELECT(56,32), "S1167C3.s1167c3f4");
    test_class_info(&lv, &cd_S1167C3);
    dp->~S1167C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1167C3(Test_S1167C3, "S1167C3", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1167C3C1Ev();
extern void _ZN7S1167C3D1Ev();
Name_Map name_map_S1167C3[] = {
  NSPAIR(_ZN7S1167C3C1Ev),
  NSPAIR(_ZN7S1167C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S1167C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1167C3[];
extern void _ZN7S1167C3D1Ev();
extern void _ZN7S1167C3D0Ev();
extern void _ZN7S1167C32v4Ev();
extern void _ZN7S1167C32v5Ev();
extern void _ZN7S1167C32v6Ev();
extern void _ZN7S1167C32v7Ev();
extern void _ZN7S1167C32v8Ev();
extern void _ZN7S1167C32v9Ev();
extern void _ZN7S1167C33v10Ev();
extern void _ZN7S1167C33v11Ev();
static  VTBL_ENTRY vtc_S1167C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1167C3[0]),
  (VTBL_ENTRY)&_ZN7S1167C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1167C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1167C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1167C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1167C3[];
extern  VTBL_ENTRY _ZTV7S1167C3[];
Class_Descriptor cd_S1167C3 = {  "S1167C3", // class name
  bases_S1167C3, 1,
  &(vtc_S1167C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1167C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1167C3),12, //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  S1167C2  : S1167C3 {
  void *s1167c2f0;
  virtual void  v12(); // _ZN7S1167C23v12Ev
  virtual void  v13(); // _ZN7S1167C23v13Ev
  virtual void  v14(); // _ZN7S1167C23v14Ev
  virtual void  v15(); // _ZN7S1167C23v15Ev
  virtual void  v16(); // _ZN7S1167C23v16Ev
  virtual void  v17(); // _ZN7S1167C23v17Ev
  ~S1167C2(); // tgen
  S1167C2(); // tgen
};
//SIG(-1 S1167C2) C1{ BC2{ BC3{ m} vd v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp FC4{ BC5{ m Fp Fi[2] FC3}} FC6{ BC7{ m Fp}} Fc} v1 v2 v3 v4 v5 v6 Fp}


void  S1167C2 ::v12(){vfunc_called(this, "_ZN7S1167C23v12Ev");}
void  S1167C2 ::v13(){vfunc_called(this, "_ZN7S1167C23v13Ev");}
void  S1167C2 ::v14(){vfunc_called(this, "_ZN7S1167C23v14Ev");}
void  S1167C2 ::v15(){vfunc_called(this, "_ZN7S1167C23v15Ev");}
void  S1167C2 ::v16(){vfunc_called(this, "_ZN7S1167C23v16Ev");}
void  S1167C2 ::v17(){vfunc_called(this, "_ZN7S1167C23v17Ev");}
S1167C2 ::~S1167C2(){ note_dtor("S1167C2", this);} // tgen
S1167C2 ::S1167C2(){ note_ctor("S1167C2", this);} // tgen

static void Test_S1167C2()
{
  extern Class_Descriptor cd_S1167C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S1167C2, buf);
    S1167C2 *dp, &lv = *(dp=new (buf) S1167C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S1167C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1167C2)");
    check_base_class_offset(lv, (S10180C138*)(S1167C3*), 0, "S1167C2");
    check_base_class_offset(lv, (S1167C3*), 0, "S1167C2");
    check_field_offset(lv, s1167c2f0, ABISELECT(64,36), "S1167C2.s1167c2f0");
    test_class_info(&lv, &cd_S1167C2);
    dp->~S1167C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1167C2(Test_S1167C2, "S1167C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S1167C2C1Ev();
extern void _ZN7S1167C2D1Ev();
Name_Map name_map_S1167C2[] = {
  NSPAIR(_ZN7S1167C2C1Ev),
  NSPAIR(_ZN7S1167C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1167C3;
extern VTBL_ENTRY _ZTI7S1167C3[];
extern  VTBL_ENTRY _ZTV7S1167C3[];
static Base_Class bases_S1167C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1167C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1167C2[];
extern void _ZN7S1167C2D1Ev();
extern void _ZN7S1167C2D0Ev();
extern void _ZN7S1167C32v4Ev();
extern void _ZN7S1167C32v5Ev();
extern void _ZN7S1167C32v6Ev();
extern void _ZN7S1167C32v7Ev();
extern void _ZN7S1167C32v8Ev();
extern void _ZN7S1167C32v9Ev();
extern void _ZN7S1167C33v10Ev();
extern void _ZN7S1167C33v11Ev();
extern void _ZN7S1167C23v12Ev();
extern void _ZN7S1167C23v13Ev();
extern void _ZN7S1167C23v14Ev();
extern void _ZN7S1167C23v15Ev();
extern void _ZN7S1167C23v16Ev();
extern void _ZN7S1167C23v17Ev();
static  VTBL_ENTRY vtc_S1167C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1167C2[0]),
  (VTBL_ENTRY)&_ZN7S1167C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1167C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1167C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1167C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1167C2[];
extern  VTBL_ENTRY _ZTV7S1167C2[];
Class_Descriptor cd_S1167C2 = {  "S1167C2", // class name
  bases_S1167C2, 2,
  &(vtc_S1167C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S1167C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1167C2),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  S1167C23  : S10180C161 {
};
//SIG(-1 S1167C23) C1{ BC2{ m Fp Fi[2] FC3{ m}}}



static void Test_S1167C23()
{
  extern Class_Descriptor cd_S1167C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1167C23, buf);
    S1167C23 &lv = *(new (buf) S1167C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1167C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1167C23)");
    check_base_class_offset(lv, (S10180C161*), 0, "S1167C23");
    test_class_info(&lv, &cd_S1167C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1167C23(Test_S1167C23, "S1167C23", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S10180C161;
static Base_Class bases_S1167C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C161,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1167C23 = {  "S1167C23", // class name
  bases_S1167C23, 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  S1167C21  : S10180C178 {
  int s1167c21f0;
  ::S10179C37 s1167c21f1;
  ::S1167C23 s1167c21f2;
  ~S1167C21(); // tgen
  S1167C21(); // tgen
};
//SIG(-1 S1167C21) C1{ BC2{ vd m Fi} Fi FC3{ m FC4{ Fl[4]}} FC5{ BC6{ m Fp Fi[2] FC7{ m}}}}


S1167C21 ::~S1167C21(){ note_dtor("S1167C21", this);} // tgen
S1167C21 ::S1167C21(){ note_ctor("S1167C21", this);} // tgen

static void Test_S1167C21()
{
  extern Class_Descriptor cd_S1167C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S1167C21, buf);
    S1167C21 *dp, &lv = *(dp=new (buf) S1167C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S1167C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1167C21)");
    check_base_class_offset(lv, (S10180C178*), 0, "S1167C21");
    check_field_offset(lv, s1167c21f0, ABISELECT(12,8), "S1167C21.s1167c21f0");
    check_field_offset(lv, s1167c21f1, ABISELECT(16,12), "S1167C21.s1167c21f1");
    check_field_offset(lv, s1167c21f2, ABISELECT(48,28), "S1167C21.s1167c21f2");
    test_class_info(&lv, &cd_S1167C21);
    dp->~S1167C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1167C21(Test_S1167C21, "S1167C21", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN8S1167C21C1Ev();
extern void _ZN8S1167C21D1Ev();
Name_Map name_map_S1167C21[] = {
  NSPAIR(_ZN8S1167C21C1Ev),
  NSPAIR(_ZN8S1167C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
static Base_Class bases_S1167C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S1167C21[];
extern void _ZN8S1167C21D1Ev();
extern void _ZN8S1167C21D0Ev();
static  VTBL_ENTRY vtc_S1167C21[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1167C21[0]),
  (VTBL_ENTRY)&_ZN8S1167C21D1Ev,
  (VTBL_ENTRY)&_ZN8S1167C21D0Ev,
};
extern VTBL_ENTRY _ZTI8S1167C21[];
extern  VTBL_ENTRY _ZTV8S1167C21[];
Class_Descriptor cd_S1167C21 = {  "S1167C21", // class name
  bases_S1167C21, 1,
  &(vtc_S1167C21[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI8S1167C21),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1167C21),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  S1167C1  : S1167C2 {
  ::S10179C37 s1167c1f0;
  ::S1168C12 s1167c1f1;
  ::S10179C37 s1167c1f2;
  ::S10180C5 s1167c1f3;
  ::S1167C21 s1167c1f4;
  virtual  ~S1167C1(); // _ZN7S1167C1D1Ev
  virtual void  v1(); // _ZN7S1167C12v1Ev
  virtual void  v2(); // _ZN7S1167C12v2Ev
  virtual void  v3(); // _ZN7S1167C12v3Ev
  S1167C1(); // tgen
};
//SIG(1 S1167C1) C1{ BC2{ BC3{ BC4{ m} vd v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp FC5{ BC6{ m Fp Fi[2] FC4}} FC7{ BC8{ m Fp}} Fc} v12 v13 v14 v15 v16 v17 Fp} vd v1 v2 v3 FC9{ m FC10{ Fl[4]}} FC11{ BC12{ BC13{ m Fp Fi FC14{ m} FC4}}} FC9 FC15{ BC16{ m Fp Fi FC17{ m} FC17}} FC18{ BC19{ vd m Fi} Fi FC9 FC20{ BC6}}}


 S1167C1 ::~S1167C1(){ note_dtor("S1167C1", this);}
void  S1167C1 ::v1(){vfunc_called(this, "_ZN7S1167C12v1Ev");}
void  S1167C1 ::v2(){vfunc_called(this, "_ZN7S1167C12v2Ev");}
void  S1167C1 ::v3(){vfunc_called(this, "_ZN7S1167C12v3Ev");}
S1167C1 ::S1167C1(){ note_ctor("S1167C1", this);} // tgen

static void Test_S1167C1()
{
  extern Class_Descriptor cd_S1167C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,36)];
    init_test(&cd_S1167C1, buf);
    S1167C1 *dp, &lv = *(dp=new (buf) S1167C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,140), "sizeof(S1167C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1167C1)");
    check_base_class_offset(lv, (S10180C138*)(S1167C3*)(S1167C2*), 0, "S1167C1");
    check_base_class_offset(lv, (S1167C3*)(S1167C2*), 0, "S1167C1");
    check_base_class_offset(lv, (S1167C2*), 0, "S1167C1");
    check_field_offset(lv, s1167c1f0, ABISELECT(72,40), "S1167C1.s1167c1f0");
    check_field_offset(lv, s1167c1f1, ABISELECT(104,56), "S1167C1.s1167c1f1");
    check_field_offset(lv, s1167c1f2, ABISELECT(120,68), "S1167C1.s1167c1f2");
    check_field_offset(lv, s1167c1f3, ABISELECT(152,84), "S1167C1.s1167c1f3");
    check_field_offset(lv, s1167c1f4, ABISELECT(168,96), "S1167C1.s1167c1f4");
    test_class_info(&lv, &cd_S1167C1);
    dp->~S1167C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1167C1(Test_S1167C1, "S1167C1", ABISELECT(240,140));

#else // __cplusplus

extern void _ZN7S1167C1C1Ev();
extern void _ZN7S1167C1D1Ev();
Name_Map name_map_S1167C1[] = {
  NSPAIR(_ZN7S1167C1C1Ev),
  NSPAIR(_ZN7S1167C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1167C3;
extern VTBL_ENTRY _ZTI7S1167C3[];
extern  VTBL_ENTRY _ZTV7S1167C3[];
extern Class_Descriptor cd_S1167C2;
extern VTBL_ENTRY _ZTI7S1167C2[];
extern  VTBL_ENTRY _ZTV7S1167C2[];
static Base_Class bases_S1167C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1167C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1167C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1167C1[];
extern void _ZN7S1167C1D1Ev();
extern void _ZN7S1167C1D0Ev();
extern void _ZN7S1167C32v4Ev();
extern void _ZN7S1167C32v5Ev();
extern void _ZN7S1167C32v6Ev();
extern void _ZN7S1167C32v7Ev();
extern void _ZN7S1167C32v8Ev();
extern void _ZN7S1167C32v9Ev();
extern void _ZN7S1167C33v10Ev();
extern void _ZN7S1167C33v11Ev();
extern void _ZN7S1167C23v12Ev();
extern void _ZN7S1167C23v13Ev();
extern void _ZN7S1167C23v14Ev();
extern void _ZN7S1167C23v15Ev();
extern void _ZN7S1167C23v16Ev();
extern void _ZN7S1167C23v17Ev();
extern void _ZN7S1167C12v1Ev();
extern void _ZN7S1167C12v2Ev();
extern void _ZN7S1167C12v3Ev();
static  VTBL_ENTRY vtc_S1167C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1167C1[0]),
  (VTBL_ENTRY)&_ZN7S1167C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1167C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1167C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1167C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1167C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1167C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1167C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1167C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1167C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1167C1[];
extern  VTBL_ENTRY _ZTV7S1167C1[];
Class_Descriptor cd_S1167C1 = {  "S1167C1", // class name
  bases_S1167C1, 3,
  &(vtc_S1167C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,140), // object size
  NSPAIRA(_ZTI7S1167C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1167C1),21, //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  S1170C3  : S10180C138 {
  int s1170c3f0;
  void *s1170c3f1;
  ::S1168C5 s1170c3f2;
  ::S1168C8_nt s1170c3f3;
  char s1170c3f4;
  virtual  ~S1170C3(); // _ZN7S1170C3D1Ev
  virtual void  v4(); // _ZN7S1170C32v4Ev
  virtual void  v5(); // _ZN7S1170C32v5Ev
  virtual void  v6(); // _ZN7S1170C32v6Ev
  virtual void  v7(); // _ZN7S1170C32v7Ev
  virtual void  v8(); // _ZN7S1170C32v8Ev
  virtual void  v9(); // _ZN7S1170C32v9Ev
  virtual void  v10(); // _ZN7S1170C33v10Ev
  virtual void  v11(); // _ZN7S1170C33v11Ev
  S1170C3(); // tgen
};
//SIG(-1 S1170C3) C1{ BC2{ m} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp FC3{ BC4{ m Fp Fi[2] FC2}} FC5{ BC6{ m Fp}} Fc}


 S1170C3 ::~S1170C3(){ note_dtor("S1170C3", this);}
void  S1170C3 ::v4(){vfunc_called(this, "_ZN7S1170C32v4Ev");}
void  S1170C3 ::v5(){vfunc_called(this, "_ZN7S1170C32v5Ev");}
void  S1170C3 ::v6(){vfunc_called(this, "_ZN7S1170C32v6Ev");}
void  S1170C3 ::v7(){vfunc_called(this, "_ZN7S1170C32v7Ev");}
void  S1170C3 ::v8(){vfunc_called(this, "_ZN7S1170C32v8Ev");}
void  S1170C3 ::v9(){vfunc_called(this, "_ZN7S1170C32v9Ev");}
void  S1170C3 ::v10(){vfunc_called(this, "_ZN7S1170C33v10Ev");}
void  S1170C3 ::v11(){vfunc_called(this, "_ZN7S1170C33v11Ev");}
S1170C3 ::S1170C3(){ note_ctor("S1170C3", this);} // tgen

static void Test_S1170C3()
{
  extern Class_Descriptor cd_S1170C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1170C3, buf);
    S1170C3 *dp, &lv = *(dp=new (buf) S1170C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1170C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1170C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S1170C3");
    check_field_offset(lv, s1170c3f0, ABISELECT(8,4), "S1170C3.s1170c3f0");
    check_field_offset(lv, s1170c3f1, ABISELECT(16,8), "S1170C3.s1170c3f1");
    check_field_offset(lv, s1170c3f2, ABISELECT(24,12), "S1170C3.s1170c3f2");
    check_field_offset(lv, s1170c3f3, ABISELECT(48,28), "S1170C3.s1170c3f3");
    check_field_offset(lv, s1170c3f4, ABISELECT(56,32), "S1170C3.s1170c3f4");
    test_class_info(&lv, &cd_S1170C3);
    dp->~S1170C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1170C3(Test_S1170C3, "S1170C3", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1170C3C1Ev();
extern void _ZN7S1170C3D1Ev();
Name_Map name_map_S1170C3[] = {
  NSPAIR(_ZN7S1170C3C1Ev),
  NSPAIR(_ZN7S1170C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S1170C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1170C3[];
extern void _ZN7S1170C3D1Ev();
extern void _ZN7S1170C3D0Ev();
extern void _ZN7S1170C32v4Ev();
extern void _ZN7S1170C32v5Ev();
extern void _ZN7S1170C32v6Ev();
extern void _ZN7S1170C32v7Ev();
extern void _ZN7S1170C32v8Ev();
extern void _ZN7S1170C32v9Ev();
extern void _ZN7S1170C33v10Ev();
extern void _ZN7S1170C33v11Ev();
static  VTBL_ENTRY vtc_S1170C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1170C3[0]),
  (VTBL_ENTRY)&_ZN7S1170C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1170C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1170C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1170C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1170C3[];
extern  VTBL_ENTRY _ZTV7S1170C3[];
Class_Descriptor cd_S1170C3 = {  "S1170C3", // class name
  bases_S1170C3, 1,
  &(vtc_S1170C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1170C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1170C3),12, //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  S1170C2  : S1170C3 {
  void *s1170c2f0;
  virtual void  v12(); // _ZN7S1170C23v12Ev
  virtual void  v13(); // _ZN7S1170C23v13Ev
  virtual void  v14(); // _ZN7S1170C23v14Ev
  virtual void  v15(); // _ZN7S1170C23v15Ev
  virtual void  v16(); // _ZN7S1170C23v16Ev
  virtual void  v17(); // _ZN7S1170C23v17Ev
  ~S1170C2(); // tgen
  S1170C2(); // tgen
};
//SIG(-1 S1170C2) C1{ BC2{ BC3{ m} vd v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp FC4{ BC5{ m Fp Fi[2] FC3}} FC6{ BC7{ m Fp}} Fc} v1 v2 v3 v4 v5 v6 Fp}


void  S1170C2 ::v12(){vfunc_called(this, "_ZN7S1170C23v12Ev");}
void  S1170C2 ::v13(){vfunc_called(this, "_ZN7S1170C23v13Ev");}
void  S1170C2 ::v14(){vfunc_called(this, "_ZN7S1170C23v14Ev");}
void  S1170C2 ::v15(){vfunc_called(this, "_ZN7S1170C23v15Ev");}
void  S1170C2 ::v16(){vfunc_called(this, "_ZN7S1170C23v16Ev");}
void  S1170C2 ::v17(){vfunc_called(this, "_ZN7S1170C23v17Ev");}
S1170C2 ::~S1170C2(){ note_dtor("S1170C2", this);} // tgen
S1170C2 ::S1170C2(){ note_ctor("S1170C2", this);} // tgen

static void Test_S1170C2()
{
  extern Class_Descriptor cd_S1170C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S1170C2, buf);
    S1170C2 *dp, &lv = *(dp=new (buf) S1170C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S1170C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1170C2)");
    check_base_class_offset(lv, (S10180C138*)(S1170C3*), 0, "S1170C2");
    check_base_class_offset(lv, (S1170C3*), 0, "S1170C2");
    check_field_offset(lv, s1170c2f0, ABISELECT(64,36), "S1170C2.s1170c2f0");
    test_class_info(&lv, &cd_S1170C2);
    dp->~S1170C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1170C2(Test_S1170C2, "S1170C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S1170C2C1Ev();
extern void _ZN7S1170C2D1Ev();
Name_Map name_map_S1170C2[] = {
  NSPAIR(_ZN7S1170C2C1Ev),
  NSPAIR(_ZN7S1170C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1170C3;
extern VTBL_ENTRY _ZTI7S1170C3[];
extern  VTBL_ENTRY _ZTV7S1170C3[];
static Base_Class bases_S1170C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1170C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1170C2[];
extern void _ZN7S1170C2D1Ev();
extern void _ZN7S1170C2D0Ev();
extern void _ZN7S1170C32v4Ev();
extern void _ZN7S1170C32v5Ev();
extern void _ZN7S1170C32v6Ev();
extern void _ZN7S1170C32v7Ev();
extern void _ZN7S1170C32v8Ev();
extern void _ZN7S1170C32v9Ev();
extern void _ZN7S1170C33v10Ev();
extern void _ZN7S1170C33v11Ev();
extern void _ZN7S1170C23v12Ev();
extern void _ZN7S1170C23v13Ev();
extern void _ZN7S1170C23v14Ev();
extern void _ZN7S1170C23v15Ev();
extern void _ZN7S1170C23v16Ev();
extern void _ZN7S1170C23v17Ev();
static  VTBL_ENTRY vtc_S1170C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1170C2[0]),
  (VTBL_ENTRY)&_ZN7S1170C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1170C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1170C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1170C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1170C2[];
extern  VTBL_ENTRY _ZTV7S1170C2[];
Class_Descriptor cd_S1170C2 = {  "S1170C2", // class name
  bases_S1170C2, 2,
  &(vtc_S1170C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S1170C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1170C2),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  S1170C20  : S10180C178 {
  int s1170c20f0;
  ::S10181C37 s1170c20f1;
  ::S1167C23 s1170c20f2;
  ~S1170C20(); // tgen
  S1170C20(); // tgen
};
//SIG(-1 S1170C20) C1{ BC2{ vd m Fi} Fi FC3{ m FL[4]} FC4{ BC5{ m Fp Fi[2] FC6{ m}}}}


S1170C20 ::~S1170C20(){ note_dtor("S1170C20", this);} // tgen
S1170C20 ::S1170C20(){ note_ctor("S1170C20", this);} // tgen

static void Test_S1170C20()
{
  extern Class_Descriptor cd_S1170C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,16)];
    init_test(&cd_S1170C20, buf);
    S1170C20 *dp, &lv = *(dp=new (buf) S1170C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S1170C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1170C20)");
    check_base_class_offset(lv, (S10180C178*), 0, "S1170C20");
    check_field_offset(lv, s1170c20f0, ABISELECT(12,8), "S1170C20.s1170c20f0");
    check_field_offset(lv, s1170c20f1, ABISELECT(16,12), "S1170C20.s1170c20f1");
    check_field_offset(lv, s1170c20f2, ABISELECT(48,44), "S1170C20.s1170c20f2");
    test_class_info(&lv, &cd_S1170C20);
    dp->~S1170C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1170C20(Test_S1170C20, "S1170C20", ABISELECT(72,60));

#else // __cplusplus

extern void _ZN8S1170C20C1Ev();
extern void _ZN8S1170C20D1Ev();
Name_Map name_map_S1170C20[] = {
  NSPAIR(_ZN8S1170C20C1Ev),
  NSPAIR(_ZN8S1170C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
static Base_Class bases_S1170C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S1170C20[];
extern void _ZN8S1170C20D1Ev();
extern void _ZN8S1170C20D0Ev();
static  VTBL_ENTRY vtc_S1170C20[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1170C20[0]),
  (VTBL_ENTRY)&_ZN8S1170C20D1Ev,
  (VTBL_ENTRY)&_ZN8S1170C20D0Ev,
};
extern VTBL_ENTRY _ZTI8S1170C20[];
extern  VTBL_ENTRY _ZTV8S1170C20[];
Class_Descriptor cd_S1170C20 = {  "S1170C20", // class name
  bases_S1170C20, 1,
  &(vtc_S1170C20[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,60), // object size
  NSPAIRA(_ZTI8S1170C20),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1170C20),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  S1170C1  : S1170C2 {
  ::S10181C37 s1170c1f0;
  ::S1168C12 s1170c1f1;
  ::S10181C37 s1170c1f2;
  ::S10180C5 s1170c1f3;
  ::S1170C20 s1170c1f4;
  virtual  ~S1170C1(); // _ZN7S1170C1D1Ev
  virtual void  v1(); // _ZN7S1170C12v1Ev
  virtual void  v2(); // _ZN7S1170C12v2Ev
  virtual void  v3(); // _ZN7S1170C12v3Ev
  S1170C1(); // tgen
};
//SIG(1 S1170C1) C1{ BC2{ BC3{ BC4{ m} vd v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp FC5{ BC6{ m Fp Fi[2] FC4}} FC7{ BC8{ m Fp}} Fc} v12 v13 v14 v15 v16 v17 Fp} vd v1 v2 v3 FC9{ m FL[4]} FC10{ BC11{ BC12{ m Fp Fi FC13{ m} FC4}}} FC9 FC14{ BC15{ m Fp Fi FC16{ m} FC16}} FC17{ BC18{ vd m Fi} Fi FC9 FC19{ BC6}}}


 S1170C1 ::~S1170C1(){ note_dtor("S1170C1", this);}
void  S1170C1 ::v1(){vfunc_called(this, "_ZN7S1170C12v1Ev");}
void  S1170C1 ::v2(){vfunc_called(this, "_ZN7S1170C12v2Ev");}
void  S1170C1 ::v3(){vfunc_called(this, "_ZN7S1170C12v3Ev");}
S1170C1 ::S1170C1(){ note_ctor("S1170C1", this);} // tgen

static void Test_S1170C1()
{
  extern Class_Descriptor cd_S1170C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,48)];
    init_test(&cd_S1170C1, buf);
    S1170C1 *dp, &lv = *(dp=new (buf) S1170C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,188), "sizeof(S1170C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1170C1)");
    check_base_class_offset(lv, (S10180C138*)(S1170C3*)(S1170C2*), 0, "S1170C1");
    check_base_class_offset(lv, (S1170C3*)(S1170C2*), 0, "S1170C1");
    check_base_class_offset(lv, (S1170C2*), 0, "S1170C1");
    check_field_offset(lv, s1170c1f0, ABISELECT(72,40), "S1170C1.s1170c1f0");
    check_field_offset(lv, s1170c1f1, ABISELECT(104,72), "S1170C1.s1170c1f1");
    check_field_offset(lv, s1170c1f2, ABISELECT(120,84), "S1170C1.s1170c1f2");
    check_field_offset(lv, s1170c1f3, ABISELECT(152,116), "S1170C1.s1170c1f3");
    check_field_offset(lv, s1170c1f4, ABISELECT(168,128), "S1170C1.s1170c1f4");
    test_class_info(&lv, &cd_S1170C1);
    dp->~S1170C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1170C1(Test_S1170C1, "S1170C1", ABISELECT(240,188));

#else // __cplusplus

extern void _ZN7S1170C1C1Ev();
extern void _ZN7S1170C1D1Ev();
Name_Map name_map_S1170C1[] = {
  NSPAIR(_ZN7S1170C1C1Ev),
  NSPAIR(_ZN7S1170C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1170C3;
extern VTBL_ENTRY _ZTI7S1170C3[];
extern  VTBL_ENTRY _ZTV7S1170C3[];
extern Class_Descriptor cd_S1170C2;
extern VTBL_ENTRY _ZTI7S1170C2[];
extern  VTBL_ENTRY _ZTV7S1170C2[];
static Base_Class bases_S1170C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1170C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1170C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1170C1[];
extern void _ZN7S1170C1D1Ev();
extern void _ZN7S1170C1D0Ev();
extern void _ZN7S1170C32v4Ev();
extern void _ZN7S1170C32v5Ev();
extern void _ZN7S1170C32v6Ev();
extern void _ZN7S1170C32v7Ev();
extern void _ZN7S1170C32v8Ev();
extern void _ZN7S1170C32v9Ev();
extern void _ZN7S1170C33v10Ev();
extern void _ZN7S1170C33v11Ev();
extern void _ZN7S1170C23v12Ev();
extern void _ZN7S1170C23v13Ev();
extern void _ZN7S1170C23v14Ev();
extern void _ZN7S1170C23v15Ev();
extern void _ZN7S1170C23v16Ev();
extern void _ZN7S1170C23v17Ev();
extern void _ZN7S1170C12v1Ev();
extern void _ZN7S1170C12v2Ev();
extern void _ZN7S1170C12v3Ev();
static  VTBL_ENTRY vtc_S1170C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1170C1[0]),
  (VTBL_ENTRY)&_ZN7S1170C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1170C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1170C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1170C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1170C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1170C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1170C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1170C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1170C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1170C1[];
extern  VTBL_ENTRY _ZTV7S1170C1[];
Class_Descriptor cd_S1170C1 = {  "S1170C1", // class name
  bases_S1170C1, 3,
  &(vtc_S1170C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,188), // object size
  NSPAIRA(_ZTI7S1170C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1170C1),21, //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  S1652C3  : S10180C17 {
  char s1652c3f0;
  int s1652c3f1;
  ::S10180C136 s1652c3f2;
  virtual  ~S1652C3(); // _ZN7S1652C3D1Ev
  virtual void  v7(); // _ZN7S1652C32v7Ev
  virtual void  v8(); // _ZN7S1652C32v8Ev
  S1652C3(); // tgen
};
//SIG(-1 S1652C3) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} vd v1 v2 Fc Fi FC6{ m Fp Fi FC7{ m} FC8{ m}}}


 S1652C3 ::~S1652C3(){ note_dtor("S1652C3", this);}
void  S1652C3 ::v7(){vfunc_called(this, "_ZN7S1652C32v7Ev");}
void  S1652C3 ::v8(){vfunc_called(this, "_ZN7S1652C32v8Ev");}
S1652C3 ::S1652C3(){ note_ctor("S1652C3", this);} // tgen

static void Test_S1652C3()
{
  extern Class_Descriptor cd_S1652C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S1652C3, buf);
    S1652C3 *dp, &lv = *(dp=new (buf) S1652C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S1652C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1652C3)");
    check_base_class_offset(lv, (S10180C17*), 0, "S1652C3");
    check_field_offset(lv, s1652c3f0, ABISELECT(41,29), "S1652C3.s1652c3f0");
    check_field_offset(lv, s1652c3f1, ABISELECT(44,32), "S1652C3.s1652c3f1");
    check_field_offset(lv, s1652c3f2, ABISELECT(48,36), "S1652C3.s1652c3f2");
    test_class_info(&lv, &cd_S1652C3);
    dp->~S1652C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1652C3(Test_S1652C3, "S1652C3", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S1652C3C1Ev();
extern void _ZN7S1652C3D1Ev();
Name_Map name_map_S1652C3[] = {
  NSPAIR(_ZN7S1652C3C1Ev),
  NSPAIR(_ZN7S1652C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
static Base_Class bases_S1652C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1652C3[];
extern void _ZN7S1652C3D1Ev();
extern void _ZN7S1652C3D0Ev();
extern void _ZN7S1652C32v7Ev();
extern void _ZN7S1652C32v8Ev();
static  VTBL_ENTRY vtc_S1652C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1652C3[0]),
  (VTBL_ENTRY)&_ZN7S1652C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1652C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1652C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1652C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S1652C3[];
extern  VTBL_ENTRY _ZTV7S1652C3[];
Class_Descriptor cd_S1652C3 = {  "S1652C3", // class name
  bases_S1652C3, 1,
  &(vtc_S1652C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S1652C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1652C3),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  S1652C2  : S1652C3 {
  void *s1652c2f0[7];
  int s1652c2f1;
  ::S10180C5 s1652c2f2;
  ::S1651C18_nt s1652c2f3;
  ::S10180C18 s1652c2f4;
  virtual  ~S1652C2(); // _ZN7S1652C2D1Ev
  virtual void  v9(); // _ZN7S1652C22v9Ev
  virtual void  v10(); // _ZN7S1652C23v10Ev
  virtual void  v11(); // _ZN7S1652C23v11Ev
  virtual void  v12(); // _ZN7S1652C23v12Ev
  virtual void  v13(); // _ZN7S1652C23v13Ev
  virtual void  v14(); // _ZN7S1652C23v14Ev
  S1652C2(); // tgen
};
//SIG(-1 S1652C2) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC4 Fc} vd v7 v8 Fc Fi FC7{ m Fp Fi FC8{ m} FC9{ m}}} vd v1 v2 v3 v4 v5 v6 Fp[7] Fi FC10{ BC11{ m Fp Fi FC12{ m} FC12}} FC13{ BC4} FC4}


 S1652C2 ::~S1652C2(){ note_dtor("S1652C2", this);}
void  S1652C2 ::v9(){vfunc_called(this, "_ZN7S1652C22v9Ev");}
void  S1652C2 ::v10(){vfunc_called(this, "_ZN7S1652C23v10Ev");}
void  S1652C2 ::v11(){vfunc_called(this, "_ZN7S1652C23v11Ev");}
void  S1652C2 ::v12(){vfunc_called(this, "_ZN7S1652C23v12Ev");}
void  S1652C2 ::v13(){vfunc_called(this, "_ZN7S1652C23v13Ev");}
void  S1652C2 ::v14(){vfunc_called(this, "_ZN7S1652C23v14Ev");}
S1652C2 ::S1652C2(){ note_ctor("S1652C2", this);} // tgen

static void Test_S1652C2()
{
  extern Class_Descriptor cd_S1652C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,30)];
    init_test(&cd_S1652C2, buf);
    S1652C2 *dp, &lv = *(dp=new (buf) S1652C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,116), "sizeof(S1652C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1652C2)");
    check_base_class_offset(lv, (S10180C17*)(S1652C3*), 0, "S1652C2");
    check_base_class_offset(lv, (S1652C3*), 0, "S1652C2");
    check_field_offset(lv, s1652c2f0, ABISELECT(64,48), "S1652C2.s1652c2f0");
    check_field_offset(lv, s1652c2f1, ABISELECT(120,76), "S1652C2.s1652c2f1");
    check_field_offset(lv, s1652c2f2, ABISELECT(128,80), "S1652C2.s1652c2f2");
    check_field_offset(lv, s1652c2f3, ABISELECT(144,92), "S1652C2.s1652c2f3");
    check_field_offset(lv, s1652c2f4, ABISELECT(160,104), "S1652C2.s1652c2f4");
    test_class_info(&lv, &cd_S1652C2);
    dp->~S1652C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1652C2(Test_S1652C2, "S1652C2", ABISELECT(176,116));

#else // __cplusplus

extern void _ZN7S1652C2C1Ev();
extern void _ZN7S1652C2D1Ev();
Name_Map name_map_S1652C2[] = {
  NSPAIR(_ZN7S1652C2C1Ev),
  NSPAIR(_ZN7S1652C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S1652C3;
extern VTBL_ENTRY _ZTI7S1652C3[];
extern  VTBL_ENTRY _ZTV7S1652C3[];
static Base_Class bases_S1652C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1652C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1652C2[];
extern void _ZN7S1652C2D1Ev();
extern void _ZN7S1652C2D0Ev();
extern void _ZN7S1652C32v7Ev();
extern void _ZN7S1652C32v8Ev();
extern void _ZN7S1652C22v9Ev();
extern void _ZN7S1652C23v10Ev();
extern void _ZN7S1652C23v11Ev();
extern void _ZN7S1652C23v12Ev();
extern void _ZN7S1652C23v13Ev();
extern void _ZN7S1652C23v14Ev();
static  VTBL_ENTRY vtc_S1652C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1652C2[0]),
  (VTBL_ENTRY)&_ZN7S1652C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1652C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1652C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1652C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1652C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1652C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1652C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1652C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1652C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1652C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S1652C2[];
extern  VTBL_ENTRY _ZTV7S1652C2[];
Class_Descriptor cd_S1652C2 = {  "S1652C2", // class name
  bases_S1652C2, 2,
  &(vtc_S1652C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,116), // object size
  NSPAIRA(_ZTI7S1652C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1652C2),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  S1652C1  : S1652C2 {
  void *s1652c1f0;
  int s1652c1f1;
  char s1652c1f2;
  virtual  ~S1652C1(); // _ZN7S1652C1D1Ev
  virtual void  v1(); // _ZN7S1652C12v1Ev
  virtual void  v2(); // _ZN7S1652C12v2Ev
  virtual void  v3(); // _ZN7S1652C12v3Ev
  virtual void  v4(); // _ZN7S1652C12v4Ev
  virtual void  v5(); // _ZN7S1652C12v5Ev
  virtual void  v6(); // _ZN7S1652C12v6Ev
  S1652C1(); // tgen
};
//SIG(1 S1652C1) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 Fc} vd v7 v8 Fc Fi FC8{ m Fp Fi FC9{ m} FC10{ m}}} vd v9 v10 v11 v12 v13 v14 Fp[7] Fi FC11{ BC12{ m Fp Fi FC13{ m} FC13}} FC14{ BC5} FC5} vd v1 v2 v3 v4 v5 v6 Fp Fi Fc}


 S1652C1 ::~S1652C1(){ note_dtor("S1652C1", this);}
void  S1652C1 ::v1(){vfunc_called(this, "_ZN7S1652C12v1Ev");}
void  S1652C1 ::v2(){vfunc_called(this, "_ZN7S1652C12v2Ev");}
void  S1652C1 ::v3(){vfunc_called(this, "_ZN7S1652C12v3Ev");}
void  S1652C1 ::v4(){vfunc_called(this, "_ZN7S1652C12v4Ev");}
void  S1652C1 ::v5(){vfunc_called(this, "_ZN7S1652C12v5Ev");}
void  S1652C1 ::v6(){vfunc_called(this, "_ZN7S1652C12v6Ev");}
S1652C1 ::S1652C1(){ note_ctor("S1652C1", this);} // tgen

static void Test_S1652C1()
{
  extern Class_Descriptor cd_S1652C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,33)];
    init_test(&cd_S1652C1, buf);
    S1652C1 *dp, &lv = *(dp=new (buf) S1652C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S1652C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1652C1)");
    check_base_class_offset(lv, (S10180C17*)(S1652C3*)(S1652C2*), 0, "S1652C1");
    check_base_class_offset(lv, (S1652C3*)(S1652C2*), 0, "S1652C1");
    check_base_class_offset(lv, (S1652C2*), 0, "S1652C1");
    check_field_offset(lv, s1652c1f0, ABISELECT(176,116), "S1652C1.s1652c1f0");
    check_field_offset(lv, s1652c1f1, ABISELECT(184,120), "S1652C1.s1652c1f1");
    check_field_offset(lv, s1652c1f2, ABISELECT(188,124), "S1652C1.s1652c1f2");
    test_class_info(&lv, &cd_S1652C1);
    dp->~S1652C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1652C1(Test_S1652C1, "S1652C1", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S1652C1C1Ev();
extern void _ZN7S1652C1D1Ev();
Name_Map name_map_S1652C1[] = {
  NSPAIR(_ZN7S1652C1C1Ev),
  NSPAIR(_ZN7S1652C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S1652C3;
extern VTBL_ENTRY _ZTI7S1652C3[];
extern  VTBL_ENTRY _ZTV7S1652C3[];
extern Class_Descriptor cd_S1652C2;
extern VTBL_ENTRY _ZTI7S1652C2[];
extern  VTBL_ENTRY _ZTV7S1652C2[];
static Base_Class bases_S1652C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1652C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1652C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1652C1[];
extern void _ZN7S1652C1D1Ev();
extern void _ZN7S1652C1D0Ev();
extern void _ZN7S1652C32v7Ev();
extern void _ZN7S1652C32v8Ev();
extern void _ZN7S1652C22v9Ev();
extern void _ZN7S1652C23v10Ev();
extern void _ZN7S1652C23v11Ev();
extern void _ZN7S1652C23v12Ev();
extern void _ZN7S1652C23v13Ev();
extern void _ZN7S1652C23v14Ev();
extern void _ZN7S1652C12v1Ev();
extern void _ZN7S1652C12v2Ev();
extern void _ZN7S1652C12v3Ev();
extern void _ZN7S1652C12v4Ev();
extern void _ZN7S1652C12v5Ev();
extern void _ZN7S1652C12v6Ev();
static  VTBL_ENTRY vtc_S1652C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1652C1[0]),
  (VTBL_ENTRY)&_ZN7S1652C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1652C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1652C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1652C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1652C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1652C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1652C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1652C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1652C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1652C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1652C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1652C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1652C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1652C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1652C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1652C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1652C1[];
extern  VTBL_ENTRY _ZTV7S1652C1[];
Class_Descriptor cd_S1652C1 = {  "S1652C1", // class name
  bases_S1652C1, 3,
  &(vtc_S1652C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S1652C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1652C1),18, //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  S20442C5  {
  void *s20442c5f0[2];
  virtual void  v5(); // _ZN8S20442C52v5Ev
  virtual void  v6(); // _ZN8S20442C52v6Ev
  virtual void  v7(); // _ZN8S20442C52v7Ev
  virtual void  v8(); // _ZN8S20442C52v8Ev
  virtual void  v9(); // _ZN8S20442C52v9Ev
  ~S20442C5(); // tgen
  S20442C5(); // tgen
};
//SIG(-1 S20442C5) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S20442C5 ::v5(){vfunc_called(this, "_ZN8S20442C52v5Ev");}
void  S20442C5 ::v6(){vfunc_called(this, "_ZN8S20442C52v6Ev");}
void  S20442C5 ::v7(){vfunc_called(this, "_ZN8S20442C52v7Ev");}
void  S20442C5 ::v8(){vfunc_called(this, "_ZN8S20442C52v8Ev");}
void  S20442C5 ::v9(){vfunc_called(this, "_ZN8S20442C52v9Ev");}
S20442C5 ::~S20442C5(){ note_dtor("S20442C5", this);} // tgen
S20442C5 ::S20442C5(){ note_ctor("S20442C5", this);} // tgen

static void Test_S20442C5()
{
  extern Class_Descriptor cd_S20442C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20442C5, buf);
    S20442C5 *dp, &lv = *(dp=new (buf) S20442C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20442C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20442C5)");
    check_field_offset(lv, s20442c5f0, ABISELECT(8,4), "S20442C5.s20442c5f0");
    test_class_info(&lv, &cd_S20442C5);
    dp->~S20442C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20442C5(Test_S20442C5, "S20442C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20442C5C1Ev();
extern void _ZN8S20442C5D1Ev();
Name_Map name_map_S20442C5[] = {
  NSPAIR(_ZN8S20442C5C1Ev),
  NSPAIR(_ZN8S20442C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20442C5[];
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
static  VTBL_ENTRY vtc_S20442C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C5[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
};
extern VTBL_ENTRY _ZTI8S20442C5[];
extern  VTBL_ENTRY _ZTV8S20442C5[];
Class_Descriptor cd_S20442C5 = {  "S20442C5", // class name
  0,0,//no base classes
  &(vtc_S20442C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20442C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20442C5),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  S20442C7_nt  {
  virtual  ~S20442C7_nt(); // _ZN11S20442C7_ntD1Ev
  virtual void  v10(); // _ZN11S20442C7_nt3v10Ev
  virtual void  v11(); // _ZN11S20442C7_nt3v11Ev
  virtual void  v12(); // _ZN11S20442C7_nt3v12Ev
  S20442C7_nt(); // tgen
};
//SIG(-1 S20442C7_nt) C1{ vd v1 v2 v3}


 S20442C7_nt ::~S20442C7_nt(){ note_dtor("S20442C7_nt", this);}
void  S20442C7_nt ::v10(){vfunc_called(this, "_ZN11S20442C7_nt3v10Ev");}
void  S20442C7_nt ::v11(){vfunc_called(this, "_ZN11S20442C7_nt3v11Ev");}
void  S20442C7_nt ::v12(){vfunc_called(this, "_ZN11S20442C7_nt3v12Ev");}
S20442C7_nt ::S20442C7_nt(){ note_ctor("S20442C7_nt", this);} // tgen

//skip512 S20442C7_nt

#else // __cplusplus

extern void _ZN11S20442C7_ntC1Ev();
extern void _ZN11S20442C7_ntD1Ev();
Name_Map name_map_S20442C7_nt[] = {
  NSPAIR(_ZN11S20442C7_ntC1Ev),
  NSPAIR(_ZN11S20442C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20442C7_nt[];
extern void _ZN11S20442C7_ntD1Ev();
extern void _ZN11S20442C7_ntD0Ev();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
static  VTBL_ENTRY vtc_S20442C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20442C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20442C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI11S20442C7_nt[];
VTBL_ENTRY *P__ZTI11S20442C7_nt = _ZTI11S20442C7_nt; 
extern  VTBL_ENTRY _ZTV11S20442C7_nt[];
Class_Descriptor cd_S20442C7_nt = {  "S20442C7_nt", // class name
  0,0,//no base classes
  &(vtc_S20442C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20442C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20442C7_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  S20442C6  : S20442C7_nt {
  virtual void  v13(); // _ZN8S20442C63v13Ev
  virtual void  v14(); // _ZN8S20442C63v14Ev
  virtual void  v15(); // _ZN8S20442C63v15Ev
  virtual void  v16(); // _ZN8S20442C63v16Ev
  virtual void  v17(); // _ZN8S20442C63v17Ev
  virtual void  v18(); // _ZN8S20442C63v18Ev
  virtual void  v19(); // _ZN8S20442C63v19Ev
  virtual void  v20(); // _ZN8S20442C63v20Ev
  virtual void  v21(); // _ZN8S20442C63v21Ev
  ~S20442C6(); // tgen
  S20442C6(); // tgen
};
//SIG(-1 S20442C6) C1{ BC2{ vd v10 v11 v12} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S20442C6 ::v13(){vfunc_called(this, "_ZN8S20442C63v13Ev");}
void  S20442C6 ::v14(){vfunc_called(this, "_ZN8S20442C63v14Ev");}
void  S20442C6 ::v15(){vfunc_called(this, "_ZN8S20442C63v15Ev");}
void  S20442C6 ::v16(){vfunc_called(this, "_ZN8S20442C63v16Ev");}
void  S20442C6 ::v17(){vfunc_called(this, "_ZN8S20442C63v17Ev");}
void  S20442C6 ::v18(){vfunc_called(this, "_ZN8S20442C63v18Ev");}
void  S20442C6 ::v19(){vfunc_called(this, "_ZN8S20442C63v19Ev");}
void  S20442C6 ::v20(){vfunc_called(this, "_ZN8S20442C63v20Ev");}
void  S20442C6 ::v21(){vfunc_called(this, "_ZN8S20442C63v21Ev");}
S20442C6 ::~S20442C6(){ note_dtor("S20442C6", this);} // tgen
S20442C6 ::S20442C6(){ note_ctor("S20442C6", this);} // tgen

static void Test_S20442C6()
{
  extern Class_Descriptor cd_S20442C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20442C6, buf);
    S20442C6 *dp, &lv = *(dp=new (buf) S20442C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20442C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20442C6)");
    check_base_class_offset(lv, (S20442C7_nt*), 0, "S20442C6");
    test_class_info(&lv, &cd_S20442C6);
    dp->~S20442C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20442C6(Test_S20442C6, "S20442C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20442C6C1Ev();
extern void _ZN8S20442C6D1Ev();
Name_Map name_map_S20442C6[] = {
  NSPAIR(_ZN8S20442C6C1Ev),
  NSPAIR(_ZN8S20442C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20442C7_nt;
extern VTBL_ENTRY _ZTI11S20442C7_nt[];
extern  VTBL_ENTRY _ZTV11S20442C7_nt[];
static Base_Class bases_S20442C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20442C7_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 _ZTI8S20442C6[];
extern void _ZN8S20442C6D1Ev();
extern void _ZN8S20442C6D0Ev();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY vtc_S20442C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C6[0]),
  (VTBL_ENTRY)&_ZN8S20442C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C6D0Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern VTBL_ENTRY _ZTI8S20442C6[];
extern  VTBL_ENTRY _ZTV8S20442C6[];
Class_Descriptor cd_S20442C6 = {  "S20442C6", // class name
  bases_S20442C6, 1,
  &(vtc_S20442C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20442C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20442C6),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20442C8_nt  {
  __tsi64 s20442c8f0;
  virtual void  v45(); // _ZN11S20442C8_nt3v45Ev
  virtual void  v46(); // _ZN11S20442C8_nt3v46Ev
  ~S20442C8_nt(); // tgen
  S20442C8_nt(); // tgen
};
//SIG(1 S20442C8_nt) C1{ v1 v2 FL}


void  S20442C8_nt ::v45(){vfunc_called(this, "_ZN11S20442C8_nt3v45Ev");}
void  S20442C8_nt ::v46(){vfunc_called(this, "_ZN11S20442C8_nt3v46Ev");}
S20442C8_nt ::~S20442C8_nt(){ note_dtor("S20442C8_nt", this);} // tgen
S20442C8_nt ::S20442C8_nt(){ note_ctor("S20442C8_nt", this);} // tgen

//skip512 S20442C8_nt

#else // __cplusplus

extern void _ZN11S20442C8_ntC1Ev();
extern void _ZN11S20442C8_ntD1Ev();
Name_Map name_map_S20442C8_nt[] = {
  NSPAIR(_ZN11S20442C8_ntC1Ev),
  NSPAIR(_ZN11S20442C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20442C8_nt[];
extern void _ZN11S20442C8_nt3v45Ev();
extern void _ZN11S20442C8_nt3v46Ev();
static  VTBL_ENTRY vtc_S20442C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20442C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20442C8_nt3v45Ev,
  (VTBL_ENTRY)&_ZN11S20442C8_nt3v46Ev,
};
extern VTBL_ENTRY _ZTI11S20442C8_nt[];
VTBL_ENTRY *P__ZTI11S20442C8_nt = _ZTI11S20442C8_nt; 
extern  VTBL_ENTRY _ZTV11S20442C8_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20442C4  : S20442C5 , virtual S20442C6 {
  ::S20442C8_nt s20442c4f0[9];
  virtual void  v22(); // _ZN8S20442C43v22Ev
  virtual void  v23(); // _ZN8S20442C43v23Ev
  virtual void  v24(); // _ZN8S20442C43v24Ev
  virtual void  v25(); // _ZN8S20442C43v25Ev
  virtual void  v26(); // _ZN8S20442C43v26Ev
  virtual void  v27(); // _ZN8S20442C43v27Ev
  virtual void  v28(); // _ZN8S20442C43v28Ev
  virtual void  v29(); // _ZN8S20442C43v29Ev
  virtual void  v30(); // _ZN8S20442C43v30Ev
  ~S20442C4(); // tgen
  S20442C4(); // tgen
};
//SIG(-1 S20442C4) C1{ BC2{ v10 v11 v12 v13 v14 Fp[2]} VBC3{ BC4{ vd v15 v16 v17} v18 v19 v20 v21 v22 v23 v24 v25 v26} v1 v2 v3 v4 v5 v6 v7 v8 v9 FC5{ v27 v28 FL}[9]}


void  S20442C4 ::v22(){vfunc_called(this, "_ZN8S20442C43v22Ev");}
void  S20442C4 ::v23(){vfunc_called(this, "_ZN8S20442C43v23Ev");}
void  S20442C4 ::v24(){vfunc_called(this, "_ZN8S20442C43v24Ev");}
void  S20442C4 ::v25(){vfunc_called(this, "_ZN8S20442C43v25Ev");}
void  S20442C4 ::v26(){vfunc_called(this, "_ZN8S20442C43v26Ev");}
void  S20442C4 ::v27(){vfunc_called(this, "_ZN8S20442C43v27Ev");}
void  S20442C4 ::v28(){vfunc_called(this, "_ZN8S20442C43v28Ev");}
void  S20442C4 ::v29(){vfunc_called(this, "_ZN8S20442C43v29Ev");}
void  S20442C4 ::v30(){vfunc_called(this, "_ZN8S20442C43v30Ev");}
S20442C4 ::~S20442C4(){ note_dtor("S20442C4", this);} // tgen
S20442C4 ::S20442C4(){ note_ctor("S20442C4", this);} // tgen

static void Test_S20442C4()
{
  extern Class_Descriptor cd_S20442C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,32)];
    init_test(&cd_S20442C4, buf);
    S20442C4 *dp, &lv = *(dp=new (buf) S20442C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S20442C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20442C4)");
    check_base_class_offset(lv, (S20442C5*), 0, "S20442C4");
    check_base_class_offset(lv, (S20442C7_nt*)(S20442C6*), ABISELECT(168,120), "S20442C4");
    check_base_class_offset(lv, (S20442C6*), ABISELECT(168,120), "S20442C4");
    check_field_offset(lv, s20442c4f0, ABISELECT(24,12), "S20442C4.s20442c4f0");
    test_class_info(&lv, &cd_S20442C4);
    dp->~S20442C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20442C4(Test_S20442C4, "S20442C4", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN8S20442C4C1Ev();
extern void _ZN8S20442C4D1Ev();
Name_Map name_map_S20442C4[] = {
  NSPAIR(_ZN8S20442C4C1Ev),
  NSPAIR(_ZN8S20442C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20442C5;
extern VTBL_ENTRY _ZTI8S20442C5[];
extern  VTBL_ENTRY _ZTV8S20442C5[];
extern Class_Descriptor cd_S20442C7_nt;
extern VTBL_ENTRY _ZTI11S20442C7_nt[];
extern  VTBL_ENTRY _ZTV11S20442C7_nt[];
extern Class_Descriptor cd_S20442C6;
extern VTBL_ENTRY _ZTI8S20442C6[];
extern  VTBL_ENTRY _ZTV8S20442C6[];
static Base_Class bases_S20442C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20442C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S20442C7_nt,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20442C6,    ABISELECT(168,120), //bcp->offset
    19, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20442C4[];
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C4D1Ev();
extern void _ZN8S20442C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev)();
extern void ABISELECT(_ZThn168_N8S20442C4D1Ev,_ZThn120_N8S20442C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev)();
extern void ABISELECT(_ZThn168_N8S20442C4D0Ev,_ZThn120_N8S20442C4D0Ev)() __attribute__((weak));
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY vtc_S20442C4[] = {
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-120),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern VTBL_ENTRY _ZTV8S20442C4[];
static  VTT_ENTRY vtt_S20442C4[] = {
  {&(_ZTV8S20442C4[3]),  3,48},
  {&(_ZTV8S20442C4[34]),  34,48},
};
extern VTBL_ENTRY _ZTI8S20442C4[];
extern  VTBL_ENTRY _ZTV8S20442C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C4[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S20442C4D0Ev,_ZThn120_N8S20442C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S20442C4D1Ev,_ZThn120_N8S20442C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20442C4 = {  "S20442C4", // class name
  bases_S20442C4, 3,
  &(vtc_S20442C4[0]), // expected_vtbl_contents
  &(vtt_S20442C4[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI8S20442C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20442C4),48, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20442C4),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20442C3  : S20442C4 {
  virtual  ~S20442C3(); // _ZN8S20442C3D2Ev
  virtual void  v31(); // _ZN8S20442C33v31Ev
  S20442C3(); // tgen
};
//SIG(-1 S20442C3) C1{ BC2{ BC3{ v2 v3 v4 v5 v6 Fp[2]} VBC4{ BC5{ vd v7 v8 v9} v10 v11 v12 v13 v14 v15 v16 v17 v18} v19 v20 v21 v22 v23 v24 v25 v26 v27 FC6{ v28 v29 FL}[9]} vd v1}


 S20442C3 ::~S20442C3(){ note_dtor("S20442C3", this);}
void  S20442C3 ::v31(){vfunc_called(this, "_ZN8S20442C33v31Ev");}
S20442C3 ::S20442C3(){ note_ctor("S20442C3", this);} // tgen

static void Test_S20442C3()
{
  extern Class_Descriptor cd_S20442C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,32)];
    init_test(&cd_S20442C3, buf);
    S20442C3 *dp, &lv = *(dp=new (buf) S20442C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S20442C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20442C3)");
    check_base_class_offset(lv, (S20442C5*)(S20442C4*), 0, "S20442C3");
    check_base_class_offset(lv, (S20442C7_nt*)(S20442C6*), ABISELECT(168,120), "S20442C3");
    check_base_class_offset(lv, (S20442C6*)(S20442C4*), ABISELECT(168,120), "S20442C3");
    check_base_class_offset(lv, (S20442C4*), 0, "S20442C3");
    test_class_info(&lv, &cd_S20442C3);
    dp->~S20442C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20442C3(Test_S20442C3, "S20442C3", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN8S20442C3C1Ev();
extern void _ZN8S20442C3D2Ev();
Name_Map name_map_S20442C3[] = {
  NSPAIR(_ZN8S20442C3C1Ev),
  NSPAIR(_ZN8S20442C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20442C5;
extern VTBL_ENTRY _ZTI8S20442C5[];
extern  VTBL_ENTRY _ZTV8S20442C5[];
extern Class_Descriptor cd_S20442C7_nt;
extern VTBL_ENTRY _ZTI11S20442C7_nt[];
extern  VTBL_ENTRY _ZTV11S20442C7_nt[];
extern Class_Descriptor cd_S20442C6;
extern VTBL_ENTRY _ZTI8S20442C6[];
extern  VTBL_ENTRY _ZTV8S20442C6[];
extern Class_Descriptor cd_S20442C4;
extern VTBL_ENTRY _ZTI8S20442C4[];
extern  VTBL_ENTRY _ZTV8S20442C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C4[];
static Base_Class bases_S20442C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20442C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20442C7_nt,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20442C6,    ABISELECT(168,120), //bcp->offset
    20, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20442C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20442C3[];
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C3D1Ev();
extern void _ZN8S20442C3D0Ev();
extern void _ZN8S20442C33v31Ev();
extern void ABISELECT(_ZTv0_n24_N8S20442C3D1Ev,_ZTv0_n12_N8S20442C3D1Ev)();
extern void ABISELECT(_ZThn168_N8S20442C3D1Ev,_ZThn120_N8S20442C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20442C3D0Ev,_ZTv0_n12_N8S20442C3D0Ev)();
extern void ABISELECT(_ZThn168_N8S20442C3D0Ev,_ZThn120_N8S20442C3D0Ev)() __attribute__((weak));
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY vtc_S20442C3[] = {
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C3[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20442C33v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-120),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S20442C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C3D1Ev,_ZTv0_n12_N8S20442C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C3D0Ev,_ZTv0_n12_N8S20442C3D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern VTBL_ENTRY _ZTV8S20442C3[];
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C4D1Ev();
extern void _ZN8S20442C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C4__8S20442C3[] = {
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev)();
extern void ABISELECT(_ZThn168_N8S20442C4D1Ev,_ZThn120_N8S20442C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev)();
extern void ABISELECT(_ZThn168_N8S20442C4D0Ev,_ZThn120_N8S20442C4D0Ev)() __attribute__((weak));
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C4__8S20442C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-120),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
static  VTT_ENTRY vtt_S20442C3[] = {
  {&(_ZTV8S20442C3[3]),  3,49},
  {&(_tg__ZTV8S20442C4__8S20442C3[3]),  3,19},
  {&(_tg__ZTV8S20442C6__8S20442C4__8S20442C3[15]),  15,29},
  {&(_ZTV8S20442C3[35]),  35,49},
};
extern VTBL_ENTRY _ZTI8S20442C3[];
extern  VTBL_ENTRY _ZTV8S20442C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C3[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S20442C4D0Ev,_ZThn120_N8S20442C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S20442C4D1Ev,_ZThn120_N8S20442C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C3D0Ev,_ZTv0_n12_N8S20442C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S20442C3D0Ev,_ZThn120_N8S20442C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C3D1Ev,_ZTv0_n12_N8S20442C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S20442C3D1Ev,_ZThn120_N8S20442C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20442C3 = {  "S20442C3", // class name
  bases_S20442C3, 4,
  &(vtc_S20442C3[0]), // expected_vtbl_contents
  &(vtt_S20442C3[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI8S20442C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20442C3),49, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20442C3),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20442C9  : virtual S20442C3 , virtual S20442C4 {
  virtual void  v32(); // _ZN8S20442C93v32Ev
  ~S20442C9(); // tgen
  S20442C9(); // tgen
};
//SIG(-1 S20442C9) C1{ VBC2{ BC3{ BC4{ v2 v3 v4 v5 v6 Fp[2]} VBC5{ BC6{ vd v7 v8 v9} v10 v11 v12 v13 v14 v15 v16 v17 v18} v19 v20 v21 v22 v23 v24 v25 v26 v27 FC7{ v29 v30 FL}[9]} vd v28} VBC3 v1}


void  S20442C9 ::v32(){vfunc_called(this, "_ZN8S20442C93v32Ev");}
S20442C9 ::~S20442C9(){ note_dtor("S20442C9", this);} // tgen
S20442C9 ::S20442C9(){ note_ctor("S20442C9", this);} // tgen

static void Test_S20442C9()
{
  extern Class_Descriptor cd_S20442C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,62)];
    init_test(&cd_S20442C9, buf);
    S20442C9 *dp, &lv = *(dp=new (buf) S20442C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,244), "sizeof(S20442C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20442C9)");
    check_base_class_offset(lv, (S20442C5*)(S20442C4*)(S20442C3*), ABISELECT(8,4), "S20442C9");
    check_base_class_offset(lv, (S20442C7_nt*)(S20442C6*), 0, "S20442C9");
    check_base_class_offset(lv, (S20442C6*)(S20442C4*)(S20442C3*), 0, "S20442C9");
    /*is_ambiguous_... S20442C9::S20442C4 */ AMB_check_base_class_offset(lv, (S20442C6*)(S20442C4*), 0, "S20442C9");
    check_base_class_offset(lv, (S20442C4*)(S20442C3*), ABISELECT(8,4), "S20442C9");
    check_base_class_offset(lv, (S20442C3*), ABISELECT(8,4), "S20442C9");
    /*is_ambiguous_... S20442C9::S20442C4 */ AMB_check_base_class_offset(lv, (S20442C5*)(S20442C4*), ABISELECT(176,124), "S20442C9");
    /*is_ambiguous_... S20442C9::S20442C4 */ AMB_check_base_class_offset(lv, (S20442C4*), ABISELECT(176,124), "S20442C9");
    test_class_info(&lv, &cd_S20442C9);
    dp->~S20442C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20442C9(Test_S20442C9, "S20442C9", ABISELECT(344,244));

#else // __cplusplus

extern void _ZN8S20442C9C1Ev();
extern void _ZN8S20442C9D1Ev();
Name_Map name_map_S20442C9[] = {
  NSPAIR(_ZN8S20442C9C1Ev),
  NSPAIR(_ZN8S20442C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20442C5;
extern VTBL_ENTRY _ZTI8S20442C5[];
extern  VTBL_ENTRY _ZTV8S20442C5[];
extern Class_Descriptor cd_S20442C7_nt;
extern VTBL_ENTRY _ZTI11S20442C7_nt[];
extern  VTBL_ENTRY _ZTV11S20442C7_nt[];
extern Class_Descriptor cd_S20442C6;
extern VTBL_ENTRY _ZTI8S20442C6[];
extern  VTBL_ENTRY _ZTV8S20442C6[];
extern Class_Descriptor cd_S20442C4;
extern VTBL_ENTRY _ZTI8S20442C4[];
extern  VTBL_ENTRY _ZTV8S20442C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C4[];
extern Class_Descriptor cd_S20442C3;
extern VTBL_ENTRY _ZTI8S20442C3[];
extern  VTBL_ENTRY _ZTV8S20442C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C3[];
extern Class_Descriptor cd_S20442C5;
extern VTBL_ENTRY _ZTI8S20442C5[];
extern  VTBL_ENTRY _ZTV8S20442C5[];
extern Class_Descriptor cd_S20442C4;
extern VTBL_ENTRY _ZTI8S20442C4[];
extern  VTBL_ENTRY _ZTV8S20442C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C4[];
static Base_Class bases_S20442C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20442C5,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20442C7_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_S20442C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20442C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20442C3,    ABISELECT(8,4), //bcp->offset
    33, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20442C5,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S20442C4,    ABISELECT(176,124), //bcp->offset
    69, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20442C9[];
extern void _ZN8S20442C9D1Ev();
extern void _ZN8S20442C9D0Ev();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
extern void _ZN8S20442C93v32Ev();
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S20442C9D1Ev,_ZThn4_N8S20442C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S20442C9D0Ev,_ZThn4_N8S20442C9D0Ev)() __attribute__((weak));
extern void _ZN8S20442C33v31Ev();
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev)();
extern void ABISELECT(_ZThn176_N8S20442C9D1Ev,_ZThn124_N8S20442C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev)();
extern void ABISELECT(_ZThn176_N8S20442C9D0Ev,_ZThn124_N8S20442C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20442C9[] = {
  ABISELECT(176,124),
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C9[0]),
  (VTBL_ENTRY)&_ZN8S20442C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C9D0Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20442C93v32Ev,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20442C9[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20442C33v31Ev,
  ABISELECT(-176,-124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI8S20442C9[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S20442C9[];
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C3D1Ev();
extern void _ZN8S20442C3D0Ev();
extern void _ZN8S20442C33v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C3__8S20442C9[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C3[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20442C33v31Ev,
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C4D1Ev();
extern void _ZN8S20442C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C48S20442C3__8S20442C9[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C48S20442C3__8S20442C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C3D1Ev,_ZTv0_n12_N8S20442C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C3D0Ev,_ZTv0_n12_N8S20442C3D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C3__8S20442C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20442C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C3D1Ev,_ZTv0_n12_N8S20442C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C3D0Ev,_ZTv0_n12_N8S20442C3D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C4D1Ev();
extern void _ZN8S20442C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C4__A1__8S20442C9[] = {
  ABISELECT(-176,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C4__A1__8S20442C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  ABISELECT(176,124),
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
static  VTT_ENTRY vtt_S20442C9[] = {
  {&(_ZTV8S20442C9[18]),  18,103},
  {&(_ZTV8S20442C9[52]),  52,103},
  {&(_ZTV8S20442C9[18]),  18,103},
  {&(_ZTV8S20442C9[87]),  87,103},
  {&(_tg__ZTV8S20442C3__8S20442C9[3]),  3,20},
  {&(_tg__ZTV8S20442C48S20442C3__8S20442C9[3]),  3,19},
  {&(_tg__ZTV8S20442C6__8S20442C48S20442C3__8S20442C9[15]),  15,29},
  {&(_tg__ZTV8S20442C6__8S20442C3__8S20442C9[15]),  15,29},
  {&(_tg__ZTV8S20442C4__A1__8S20442C9[3]),  3,19},
  {&(_tg__ZTV8S20442C6__8S20442C4__A1__8S20442C9[15]),  15,29},
};
extern VTBL_ENTRY _ZTI8S20442C9[];
extern  VTBL_ENTRY _ZTV8S20442C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C9[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20442C9D0Ev,_ZThn124_N8S20442C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20442C9D0Ev,_ZThn4_N8S20442C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20442C9D1Ev,_ZThn124_N8S20442C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20442C9D1Ev,_ZThn4_N8S20442C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20442C9 = {  "S20442C9", // class name
  bases_S20442C9, 7,
  &(vtc_S20442C9[0]), // expected_vtbl_contents
  &(vtt_S20442C9[0]), // expected_vtt_contents
  ABISELECT(344,244), // object size
  NSPAIRA(_ZTI8S20442C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20442C9),103, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20442C9),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20442C10  {
  int s20442c10f0;
  virtual void  v37(); // _ZN9S20442C103v37Ev
  virtual void  v38(); // _ZN9S20442C103v38Ev
  virtual void  v39(); // _ZN9S20442C103v39Ev
  virtual void  v40(); // _ZN9S20442C103v40Ev
  virtual void  v41(); // _ZN9S20442C103v41Ev
  virtual void  v42(); // _ZN9S20442C103v42Ev
  virtual void  v43(); // _ZN9S20442C103v43Ev
  virtual void  v44(); // _ZN9S20442C103v44Ev
  ~S20442C10(); // tgen
  S20442C10(); // tgen
};
//SIG(1 S20442C10) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fi}


void  S20442C10 ::v37(){vfunc_called(this, "_ZN9S20442C103v37Ev");}
void  S20442C10 ::v38(){vfunc_called(this, "_ZN9S20442C103v38Ev");}
void  S20442C10 ::v39(){vfunc_called(this, "_ZN9S20442C103v39Ev");}
void  S20442C10 ::v40(){vfunc_called(this, "_ZN9S20442C103v40Ev");}
void  S20442C10 ::v41(){vfunc_called(this, "_ZN9S20442C103v41Ev");}
void  S20442C10 ::v42(){vfunc_called(this, "_ZN9S20442C103v42Ev");}
void  S20442C10 ::v43(){vfunc_called(this, "_ZN9S20442C103v43Ev");}
void  S20442C10 ::v44(){vfunc_called(this, "_ZN9S20442C103v44Ev");}
S20442C10 ::~S20442C10(){ note_dtor("S20442C10", this);} // tgen
S20442C10 ::S20442C10(){ note_ctor("S20442C10", this);} // tgen

static void Test_S20442C10()
{
  extern Class_Descriptor cd_S20442C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20442C10, buf);
    S20442C10 *dp, &lv = *(dp=new (buf) S20442C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20442C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20442C10)");
    check_field_offset(lv, s20442c10f0, ABISELECT(8,4), "S20442C10.s20442c10f0");
    test_class_info(&lv, &cd_S20442C10);
    dp->~S20442C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20442C10(Test_S20442C10, "S20442C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S20442C10C1Ev();
extern void _ZN9S20442C10D1Ev();
Name_Map name_map_S20442C10[] = {
  NSPAIR(_ZN9S20442C10C1Ev),
  NSPAIR(_ZN9S20442C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20442C10[];
extern void _ZN9S20442C103v37Ev();
extern void _ZN9S20442C103v38Ev();
extern void _ZN9S20442C103v39Ev();
extern void _ZN9S20442C103v40Ev();
extern void _ZN9S20442C103v41Ev();
extern void _ZN9S20442C103v42Ev();
extern void _ZN9S20442C103v43Ev();
extern void _ZN9S20442C103v44Ev();
static  VTBL_ENTRY vtc_S20442C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20442C10[0]),
  (VTBL_ENTRY)&_ZN9S20442C103v37Ev,
  (VTBL_ENTRY)&_ZN9S20442C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20442C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20442C103v40Ev,
  (VTBL_ENTRY)&_ZN9S20442C103v41Ev,
  (VTBL_ENTRY)&_ZN9S20442C103v42Ev,
  (VTBL_ENTRY)&_ZN9S20442C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20442C103v44Ev,
};
extern VTBL_ENTRY _ZTI9S20442C10[];
extern  VTBL_ENTRY _ZTV9S20442C10[];
Class_Descriptor cd_S20442C10 = {  "S20442C10", // class name
  0,0,//no base classes
  &(vtc_S20442C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20442C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20442C10),10, //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  S20442C2  : virtual S20442C3 , virtual S20442C9 {
  int s20442c2f0;
  ::S20442C10 s20442c2f1[10];
  ::S10180C67 s20442c2f2;
  virtual  ~S20442C2(); // _ZN8S20442C2D2Ev
  virtual void  v33(); // _ZN8S20442C23v33Ev
  virtual void  v34(); // _ZN8S20442C23v34Ev
  virtual void  v35(); // _ZN8S20442C23v35Ev
  virtual void  v36(); // _ZN8S20442C23v36Ev
  S20442C2(); // tgen
};
//SIG(-1 S20442C2) C1{ VBC2{ BC3{ BC4{ v5 v6 v7 v8 v9 Fp[2]} VBC5{ BC6{ vd v10 v11 v12} v13 v14 v15 v16 v17 v18 v19 v20 v21} v22 v23 v24 v25 v26 v27 v28 v29 v30 FC7{ v41 v42 FL}[9]} vd v31} VBC8{ VBC2 VBC3 v32} vd v1 v2 v3 v4 Fi FC9{ v33 v34 v35 v36 v37 v38 v39 v40 Fi}[10] FC10{}}


 S20442C2 ::~S20442C2(){ note_dtor("S20442C2", this);}
void  S20442C2 ::v33(){vfunc_called(this, "_ZN8S20442C23v33Ev");}
void  S20442C2 ::v34(){vfunc_called(this, "_ZN8S20442C23v34Ev");}
void  S20442C2 ::v35(){vfunc_called(this, "_ZN8S20442C23v35Ev");}
void  S20442C2 ::v36(){vfunc_called(this, "_ZN8S20442C23v36Ev");}
S20442C2 ::S20442C2(){ note_ctor("S20442C2", this);} // tgen

static void Test_S20442C2()
{
  extern Class_Descriptor cd_S20442C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(66,84)];
    init_test(&cd_S20442C2, buf);
    S20442C2 *dp, &lv = *(dp=new (buf) S20442C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(520,332), "sizeof(S20442C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20442C2)");
    check_base_class_offset(lv, (S20442C5*)(S20442C4*)(S20442C3*), ABISELECT(184,92), "S20442C2");
    check_base_class_offset(lv, (S20442C7_nt*)(S20442C6*), 0, "S20442C2");
    check_base_class_offset(lv, (S20442C6*)(S20442C4*)(S20442C3*), 0, "S20442C2");
    /*is_ambiguous_... S20442C2::S20442C4 */ AMB_check_base_class_offset(lv, (S20442C6*)(S20442C4*), 0, "S20442C2");
    check_base_class_offset(lv, (S20442C4*)(S20442C3*), ABISELECT(184,92), "S20442C2");
    check_base_class_offset(lv, (S20442C3*), ABISELECT(184,92), "S20442C2");
    check_base_class_offset(lv, (S20442C3*)(S20442C9*), ABISELECT(184,92), "S20442C2");
    /*is_ambiguous_... S20442C2::S20442C4 */ AMB_check_base_class_offset(lv, (S20442C5*)(S20442C4*), ABISELECT(352,212), "S20442C2");
    /*is_ambiguous_... S20442C9::S20442C4 */ AMB_check_base_class_offset(lv, (S20442C4*)(S20442C9*), ABISELECT(352,212), "S20442C2");
    check_base_class_offset(lv, (S20442C9*), 0, "S20442C2");
    check_field_offset(lv, s20442c2f0, ABISELECT(8,4), "S20442C2.s20442c2f0");
    check_field_offset(lv, s20442c2f1, ABISELECT(16,8), "S20442C2.s20442c2f1");
    check_field_offset(lv, s20442c2f2, ABISELECT(176,88), "S20442C2.s20442c2f2");
    test_class_info(&lv, &cd_S20442C2);
    dp->~S20442C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20442C2(Test_S20442C2, "S20442C2", ABISELECT(520,332));

#else // __cplusplus

extern void _ZN8S20442C2C1Ev();
extern void _ZN8S20442C2D2Ev();
Name_Map name_map_S20442C2[] = {
  NSPAIR(_ZN8S20442C2C1Ev),
  NSPAIR(_ZN8S20442C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20442C5;
extern VTBL_ENTRY _ZTI8S20442C5[];
extern  VTBL_ENTRY _ZTV8S20442C5[];
extern Class_Descriptor cd_S20442C7_nt;
extern VTBL_ENTRY _ZTI11S20442C7_nt[];
extern  VTBL_ENTRY _ZTV11S20442C7_nt[];
extern Class_Descriptor cd_S20442C6;
extern VTBL_ENTRY _ZTI8S20442C6[];
extern  VTBL_ENTRY _ZTV8S20442C6[];
extern Class_Descriptor cd_S20442C4;
extern VTBL_ENTRY _ZTI8S20442C4[];
extern  VTBL_ENTRY _ZTV8S20442C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C4[];
extern Class_Descriptor cd_S20442C3;
extern VTBL_ENTRY _ZTI8S20442C3[];
extern  VTBL_ENTRY _ZTV8S20442C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C3[];
extern Class_Descriptor cd_S20442C5;
extern VTBL_ENTRY _ZTI8S20442C5[];
extern  VTBL_ENTRY _ZTV8S20442C5[];
extern Class_Descriptor cd_S20442C4;
extern VTBL_ENTRY _ZTI8S20442C4[];
extern  VTBL_ENTRY _ZTV8S20442C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C4[];
extern Class_Descriptor cd_S20442C9;
extern VTBL_ENTRY _ZTI8S20442C9[];
extern  VTBL_ENTRY _ZTV8S20442C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C9[];
static Base_Class bases_S20442C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20442C5,    ABISELECT(184,92), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20442C7_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_S20442C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20442C4,    ABISELECT(184,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20442C3,    ABISELECT(184,92), //bcp->offset
    39, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20442C5,    ABISELECT(352,212), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S20442C4,    ABISELECT(352,212), //bcp->offset
    75, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20442C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20442C2[];
extern void _ZN8S20442C2D1Ev();
extern void _ZN8S20442C2D0Ev();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
extern void _ZN8S20442C93v32Ev();
extern void _ZN8S20442C23v33Ev();
extern void _ZN8S20442C23v34Ev();
extern void _ZN8S20442C23v35Ev();
extern void _ZN8S20442C23v36Ev();
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C2D1Ev,_ZTv0_n72_N8S20442C2D1Ev)();
extern void ABISELECT(_ZThn184_N8S20442C2D1Ev,_ZThn92_N8S20442C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C2D0Ev,_ZTv0_n72_N8S20442C2D0Ev)();
extern void ABISELECT(_ZThn184_N8S20442C2D0Ev,_ZThn92_N8S20442C2D0Ev)() __attribute__((weak));
extern void _ZN8S20442C33v31Ev();
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C2D1Ev,_ZTv0_n72_N8S20442C2D1Ev)();
extern void ABISELECT(_ZThn352_N8S20442C2D1Ev,_ZThn212_N8S20442C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C2D0Ev,_ZTv0_n72_N8S20442C2D0Ev)();
extern void ABISELECT(_ZThn352_N8S20442C2D0Ev,_ZThn212_N8S20442C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20442C2[] = {
  0,
  0,
  ABISELECT(352,212),
  0,
  ABISELECT(184,92),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C2[0]),
  (VTBL_ENTRY)&_ZN8S20442C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C2D0Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20442C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v36Ev,
  0,
  ABISELECT(-184,-92),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-92),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI8S20442C2[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C2D1Ev,_ZTv0_n72_N8S20442C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C2D0Ev,_ZTv0_n72_N8S20442C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20442C33v31Ev,
  ABISELECT(-352,-212),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-212),
  ABISELECT(-352,-212),
  (VTBL_ENTRY)&(_ZTI8S20442C2[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C2D1Ev,_ZTv0_n72_N8S20442C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C2D0Ev,_ZTv0_n72_N8S20442C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20442C2[];
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C3D1Ev();
extern void _ZN8S20442C3D0Ev();
extern void _ZN8S20442C33v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C3__8S20442C2[] = {
  ABISELECT(-184,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C3[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20442C33v31Ev,
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C4D1Ev();
extern void _ZN8S20442C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C48S20442C3__8S20442C2[] = {
  ABISELECT(-184,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C48S20442C3__8S20442C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(184,92),
  ABISELECT(184,92),
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C3D1Ev,_ZTv0_n12_N8S20442C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C3D0Ev,_ZTv0_n12_N8S20442C3D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C3__8S20442C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(184,92),
  ABISELECT(184,92),
  (VTBL_ENTRY)&(_ZTI8S20442C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C3D1Ev,_ZTv0_n12_N8S20442C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C3D0Ev,_ZTv0_n12_N8S20442C3D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C9D1Ev,_ZTv0_n12_N8S20442C9D1Ev)();
extern void _ZN8S20442C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20442C9D0Ev,_ZTv0_n12_N8S20442C9D0Ev)();
extern void _ZN8S20442C9D0Ev() __attribute__((weak));
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
extern void _ZN8S20442C93v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C9__8S20442C2[] = {
  ABISELECT(352,212),
  0,
  ABISELECT(184,92),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C9D1Ev,_ZTv0_n12_N8S20442C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C9D0Ev,_ZTv0_n12_N8S20442C9D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20442C93v32Ev,
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev)();
extern void ABISELECT(_ZThn184_N8S20442C9D1Ev,_ZThn92_N8S20442C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev)();
extern void ABISELECT(_ZThn184_N8S20442C9D0Ev,_ZThn92_N8S20442C9D0Ev)() __attribute__((weak));
extern void _ZN8S20442C33v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C3__8S20442C9__8S20442C2[] = {
  0,
  ABISELECT(-184,-92),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-92),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI8S20442C9[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20442C33v31Ev,
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev)();
extern void ABISELECT(_ZThn352_N8S20442C9D1Ev,_ZThn212_N8S20442C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev)();
extern void ABISELECT(_ZThn352_N8S20442C9D0Ev,_ZThn212_N8S20442C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20442C4__A1__8S20442C9__8S20442C2[] = {
  ABISELECT(-352,-212),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-212),
  ABISELECT(-352,-212),
  (VTBL_ENTRY)&(_ZTI8S20442C9[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev),
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C4D1Ev();
extern void _ZN8S20442C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C4__A1__8S20442C2[] = {
  ABISELECT(-352,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C4__A1__8S20442C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(352,212),
  ABISELECT(352,212),
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
static  VTT_ENTRY vtt_S20442C2[] = {
  {&(_ZTV8S20442C2[20]),  20,109},
  {&(_ZTV8S20442C2[58]),  58,109},
  {&(_ZTV8S20442C2[20]),  20,109},
  {&(_ZTV8S20442C2[20]),  20,109},
  {&(_ZTV8S20442C2[93]),  93,109},
  {&(_tg__ZTV8S20442C3__8S20442C2[3]),  3,20},
  {&(_tg__ZTV8S20442C48S20442C3__8S20442C2[3]),  3,19},
  {&(_tg__ZTV8S20442C6__8S20442C48S20442C3__8S20442C2[15]),  15,29},
  {&(_tg__ZTV8S20442C6__8S20442C3__8S20442C2[15]),  15,29},
  {&(_tg__ZTV8S20442C9__8S20442C2[18]),  18,33},
  {&(_tg__ZTV8S20442C3__8S20442C9__8S20442C2[19]),  19,36},
  {&(_tg__ZTV8S20442C9__8S20442C2[18]),  18,33},
  {&(_tg__ZTV8S20442C4__A1__8S20442C9__8S20442C2[18]),  18,34},
  {&(_tg__ZTV8S20442C4__A1__8S20442C2[3]),  3,19},
  {&(_tg__ZTV8S20442C6__8S20442C4__A1__8S20442C2[15]),  15,29},
};
extern VTBL_ENTRY _ZTI8S20442C2[];
extern  VTBL_ENTRY _ZTV8S20442C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C2[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20442C9D0Ev,_ZThn212_N8S20442C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20442C9D0Ev,_ZThn92_N8S20442C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20442C9D1Ev,_ZThn212_N8S20442C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20442C9D1Ev,_ZThn92_N8S20442C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C9D0Ev,_ZTv0_n12_N8S20442C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S20442C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C9D1Ev,_ZTv0_n12_N8S20442C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S20442C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C2D0Ev,_ZTv0_n72_N8S20442C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20442C2D0Ev,_ZThn212_N8S20442C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20442C2D0Ev,_ZThn92_N8S20442C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C2D1Ev,_ZTv0_n72_N8S20442C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20442C2D1Ev,_ZThn212_N8S20442C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20442C2D1Ev,_ZThn92_N8S20442C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20442C2 = {  "S20442C2", // class name
  bases_S20442C2, 8,
  &(vtc_S20442C2[0]), // expected_vtbl_contents
  &(vtt_S20442C2[0]), // expected_vtt_contents
  ABISELECT(520,332), // object size
  NSPAIRA(_ZTI8S20442C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20442C2),109, //virtual function table var
  20, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20442C2),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20442C1  : virtual S20442C2 {
  virtual  ~S20442C1(); // _ZN8S20442C1D2Ev
  virtual void  v1(); // _ZN8S20442C12v1Ev
  virtual void  v2(); // _ZN8S20442C12v2Ev
  virtual void  v3(); // _ZN8S20442C12v3Ev
  virtual void  v4(); // _ZN8S20442C12v4Ev
  S20442C1(); // tgen
};
//SIG(1 S20442C1) C1{ VBC2{ VBC3{ BC4{ BC5{ v5 v6 v7 v8 v9 Fp[2]} VBC6{ BC7{ vd v10 v11 v12} v13 v14 v15 v16 v17 v18 v19 v20 v21} v22 v23 v24 v25 v26 v27 v28 v29 v30 FC8{ v45 v46 FL}[9]} vd v31} VBC9{ VBC3 VBC4 v32} vd v33 v34 v35 v36 Fi FC10{ v37 v38 v39 v40 v41 v42 v43 v44 Fi}[10] FC11{}} vd v1 v2 v3 v4}


 S20442C1 ::~S20442C1(){ note_dtor("S20442C1", this);}
void  S20442C1 ::v1(){vfunc_called(this, "_ZN8S20442C12v1Ev");}
void  S20442C1 ::v2(){vfunc_called(this, "_ZN8S20442C12v2Ev");}
void  S20442C1 ::v3(){vfunc_called(this, "_ZN8S20442C12v3Ev");}
void  S20442C1 ::v4(){vfunc_called(this, "_ZN8S20442C12v4Ev");}
S20442C1 ::S20442C1(){ note_ctor("S20442C1", this);} // tgen

static void Test_S20442C1()
{
  extern Class_Descriptor cd_S20442C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,85)];
    init_test(&cd_S20442C1, buf);
    S20442C1 *dp, &lv = *(dp=new (buf) S20442C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,336), "sizeof(S20442C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20442C1)");
    check_base_class_offset(lv, (S20442C5*)(S20442C4*)(S20442C3*), ABISELECT(192,96), "S20442C1");
    check_base_class_offset(lv, (S20442C7_nt*)(S20442C6*), 0, "S20442C1");
    check_base_class_offset(lv, (S20442C6*)(S20442C4*)(S20442C3*), 0, "S20442C1");
    /*is_ambiguous_... S20442C1::S20442C4 */ AMB_check_base_class_offset(lv, (S20442C6*)(S20442C4*), 0, "S20442C1");
    check_base_class_offset(lv, (S20442C4*)(S20442C3*), ABISELECT(192,96), "S20442C1");
    check_base_class_offset(lv, (S20442C3*)(S20442C2*), ABISELECT(192,96), "S20442C1");
    check_base_class_offset(lv, (S20442C3*)(S20442C9*), ABISELECT(192,96), "S20442C1");
    /*is_ambiguous_... S20442C1::S20442C4 */ AMB_check_base_class_offset(lv, (S20442C5*)(S20442C4*), ABISELECT(360,216), "S20442C1");
    /*is_ambiguous_... S20442C9::S20442C4 */ AMB_check_base_class_offset(lv, (S20442C4*)(S20442C9*), ABISELECT(360,216), "S20442C1");
    check_base_class_offset(lv, (S20442C9*)(S20442C2*), ABISELECT(8,4), "S20442C1");
    check_base_class_offset(lv, (S20442C2*), ABISELECT(8,4), "S20442C1");
    test_class_info(&lv, &cd_S20442C1);
    dp->~S20442C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20442C1(Test_S20442C1, "S20442C1", ABISELECT(528,336));

#else // __cplusplus

extern void _ZN8S20442C1C1Ev();
extern void _ZN8S20442C1D2Ev();
Name_Map name_map_S20442C1[] = {
  NSPAIR(_ZN8S20442C1C1Ev),
  NSPAIR(_ZN8S20442C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20442C5;
extern VTBL_ENTRY _ZTI8S20442C5[];
extern  VTBL_ENTRY _ZTV8S20442C5[];
extern Class_Descriptor cd_S20442C7_nt;
extern VTBL_ENTRY _ZTI11S20442C7_nt[];
extern  VTBL_ENTRY _ZTV11S20442C7_nt[];
extern Class_Descriptor cd_S20442C6;
extern VTBL_ENTRY _ZTI8S20442C6[];
extern  VTBL_ENTRY _ZTV8S20442C6[];
extern Class_Descriptor cd_S20442C4;
extern VTBL_ENTRY _ZTI8S20442C4[];
extern  VTBL_ENTRY _ZTV8S20442C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C4[];
extern Class_Descriptor cd_S20442C3;
extern VTBL_ENTRY _ZTI8S20442C3[];
extern  VTBL_ENTRY _ZTV8S20442C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C3[];
extern Class_Descriptor cd_S20442C5;
extern VTBL_ENTRY _ZTI8S20442C5[];
extern  VTBL_ENTRY _ZTV8S20442C5[];
extern Class_Descriptor cd_S20442C4;
extern VTBL_ENTRY _ZTI8S20442C4[];
extern  VTBL_ENTRY _ZTV8S20442C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C4[];
extern Class_Descriptor cd_S20442C9;
extern VTBL_ENTRY _ZTI8S20442C9[];
extern  VTBL_ENTRY _ZTV8S20442C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C9[];
extern Class_Descriptor cd_S20442C2;
extern VTBL_ENTRY _ZTI8S20442C2[];
extern  VTBL_ENTRY _ZTV8S20442C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C2[];
static Base_Class bases_S20442C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20442C5,    ABISELECT(192,96), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20442C7_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_S20442C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20442C4,    ABISELECT(192,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20442C3,    ABISELECT(192,96), //bcp->offset
    81, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20442C5,    ABISELECT(360,216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S20442C4,    ABISELECT(360,216), //bcp->offset
    117, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20442C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20442C2,    ABISELECT(8,4), //bcp->offset
    38, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20442C1[];
extern void _ZN8S20442C1D1Ev();
extern void _ZN8S20442C1D0Ev();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
extern void _ZN8S20442C12v1Ev();
extern void _ZN8S20442C12v2Ev();
extern void _ZN8S20442C12v3Ev();
extern void _ZN8S20442C12v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S20442C1D1Ev,_ZTv0_n12_N8S20442C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20442C1D1Ev,_ZThn4_N8S20442C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20442C1D0Ev,_ZTv0_n12_N8S20442C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20442C1D0Ev,_ZThn4_N8S20442C1D0Ev)() __attribute__((weak));
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
extern void _ZN8S20442C93v32Ev();
extern void _ZN8S20442C23v33Ev();
extern void _ZN8S20442C23v34Ev();
extern void _ZN8S20442C23v35Ev();
extern void _ZN8S20442C23v36Ev();
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C1D1Ev,_ZTv0_n72_N8S20442C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S20442C1D1Ev,_ZThn96_N8S20442C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C1D0Ev,_ZTv0_n72_N8S20442C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S20442C1D0Ev,_ZThn96_N8S20442C1D0Ev)() __attribute__((weak));
extern void _ZN8S20442C33v31Ev();
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C1D1Ev,_ZTv0_n72_N8S20442C1D1Ev)();
extern void ABISELECT(_ZThn360_N8S20442C1D1Ev,_ZThn216_N8S20442C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C1D0Ev,_ZTv0_n72_N8S20442C1D0Ev)();
extern void ABISELECT(_ZThn360_N8S20442C1D0Ev,_ZThn216_N8S20442C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20442C1[] = {
  ABISELECT(360,216),
  ABISELECT(8,4),
  0,
  ABISELECT(192,96),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C1[0]),
  (VTBL_ENTRY)&_ZN8S20442C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C1D0Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20442C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20442C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20442C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20442C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(352,212),
  ABISELECT(-8,-4),
  ABISELECT(184,92),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20442C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C1D1Ev,_ZTv0_n12_N8S20442C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C1D0Ev,_ZTv0_n12_N8S20442C1D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20442C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v36Ev,
  0,
  ABISELECT(-192,-96),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-96),
  ABISELECT(-192,-96),
  (VTBL_ENTRY)&(_ZTI8S20442C1[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C1D1Ev,_ZTv0_n72_N8S20442C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C1D0Ev,_ZTv0_n72_N8S20442C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20442C33v31Ev,
  ABISELECT(-360,-216),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-216),
  ABISELECT(-360,-216),
  (VTBL_ENTRY)&(_ZTI8S20442C1[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C1D1Ev,_ZTv0_n72_N8S20442C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C1D0Ev,_ZTv0_n72_N8S20442C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20442C1[];
extern void ABISELECT(_ZTv0_n24_N8S20442C2D1Ev,_ZTv0_n12_N8S20442C2D1Ev)();
extern void _ZN8S20442C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20442C2D0Ev,_ZTv0_n12_N8S20442C2D0Ev)();
extern void _ZN8S20442C2D0Ev() __attribute__((weak));
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
extern void _ZN8S20442C93v32Ev();
extern void _ZN8S20442C23v33Ev();
extern void _ZN8S20442C23v34Ev();
extern void _ZN8S20442C23v35Ev();
extern void _ZN8S20442C23v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C2__8S20442C1[] = {
  0,
  0,
  ABISELECT(352,212),
  ABISELECT(-8,-4),
  ABISELECT(184,92),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C2D1Ev,_ZTv0_n12_N8S20442C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C2D0Ev,_ZTv0_n12_N8S20442C2D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20442C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20442C23v36Ev,
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C2D1Ev,_ZTv0_n72_N8S20442C2D1Ev)();
extern void ABISELECT(_ZThn184_N8S20442C2D1Ev,_ZThn92_N8S20442C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C2D0Ev,_ZTv0_n72_N8S20442C2D0Ev)();
extern void ABISELECT(_ZThn184_N8S20442C2D0Ev,_ZThn92_N8S20442C2D0Ev)() __attribute__((weak));
extern void _ZN8S20442C33v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C3__8S20442C2__8S20442C1[] = {
  0,
  ABISELECT(-184,-92),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-96),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI8S20442C2[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C2D1Ev,_ZTv0_n72_N8S20442C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C2D0Ev,_ZTv0_n72_N8S20442C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20442C33v31Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C2D1Ev,_ZTv0_n12_N8S20442C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C2D0Ev,_ZTv0_n12_N8S20442C2D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C2__8S20442C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20442C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C2D1Ev,_ZTv0_n12_N8S20442C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C2D0Ev,_ZTv0_n12_N8S20442C2D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C2D1Ev,_ZTv0_n72_N8S20442C2D1Ev)();
extern void ABISELECT(_ZThn352_N8S20442C2D1Ev,_ZThn212_N8S20442C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C2D0Ev,_ZTv0_n72_N8S20442C2D0Ev)();
extern void ABISELECT(_ZThn352_N8S20442C2D0Ev,_ZThn212_N8S20442C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20442C4__A1__8S20442C2__8S20442C1[] = {
  ABISELECT(-352,-212),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-216),
  ABISELECT(-352,-212),
  (VTBL_ENTRY)&(_ZTI8S20442C2[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C2D1Ev,_ZTv0_n72_N8S20442C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C2D0Ev,_ZTv0_n72_N8S20442C2D0Ev),
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C3D1Ev();
extern void _ZN8S20442C3D0Ev();
extern void _ZN8S20442C33v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C3__8S20442C1[] = {
  ABISELECT(-192,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C3[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20442C33v31Ev,
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C4D1Ev();
extern void _ZN8S20442C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C48S20442C3__8S20442C1[] = {
  ABISELECT(-192,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C48S20442C3__8S20442C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,96),
  ABISELECT(192,96),
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C3D1Ev,_ZTv0_n12_N8S20442C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C3D0Ev,_ZTv0_n12_N8S20442C3D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C3__8S20442C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(192,96),
  ABISELECT(192,96),
  (VTBL_ENTRY)&(_ZTI8S20442C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C3D1Ev,_ZTv0_n12_N8S20442C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C3D0Ev,_ZTv0_n12_N8S20442C3D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C9D1Ev,_ZTv0_n12_N8S20442C9D1Ev)();
extern void _ZN8S20442C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20442C9D0Ev,_ZTv0_n12_N8S20442C9D0Ev)();
extern void _ZN8S20442C9D0Ev() __attribute__((weak));
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
extern void _ZN8S20442C93v32Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C9__8S20442C1[] = {
  ABISELECT(352,212),
  ABISELECT(-8,-4),
  ABISELECT(184,92),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C9D1Ev,_ZTv0_n12_N8S20442C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C9D0Ev,_ZTv0_n12_N8S20442C9D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20442C93v32Ev,
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev)();
extern void ABISELECT(_ZThn184_N8S20442C9D1Ev,_ZThn92_N8S20442C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev)();
extern void ABISELECT(_ZThn184_N8S20442C9D0Ev,_ZThn92_N8S20442C9D0Ev)() __attribute__((weak));
extern void _ZN8S20442C33v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C3__8S20442C9__8S20442C1[] = {
  0,
  ABISELECT(-184,-92),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-96),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI8S20442C9[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20442C33v31Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C9D1Ev,_ZTv0_n12_N8S20442C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C9D0Ev,_ZTv0_n12_N8S20442C9D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C9__8S20442C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20442C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C9D1Ev,_ZTv0_n12_N8S20442C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C9D0Ev,_ZTv0_n12_N8S20442C9D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev)();
extern void ABISELECT(_ZThn352_N8S20442C9D1Ev,_ZThn212_N8S20442C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev)();
extern void ABISELECT(_ZThn352_N8S20442C9D0Ev,_ZThn212_N8S20442C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20442C4__A1__8S20442C9__8S20442C1[] = {
  ABISELECT(-352,-212),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-216),
  ABISELECT(-352,-212),
  (VTBL_ENTRY)&(_ZTI8S20442C9[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev),
};
extern void _ZN8S20442C52v5Ev();
extern void _ZN8S20442C52v6Ev();
extern void _ZN8S20442C52v7Ev();
extern void _ZN8S20442C52v8Ev();
extern void _ZN8S20442C52v9Ev();
extern void _ZN8S20442C43v22Ev();
extern void _ZN8S20442C43v23Ev();
extern void _ZN8S20442C43v24Ev();
extern void _ZN8S20442C43v25Ev();
extern void _ZN8S20442C43v26Ev();
extern void _ZN8S20442C43v27Ev();
extern void _ZN8S20442C43v28Ev();
extern void _ZN8S20442C43v29Ev();
extern void _ZN8S20442C43v30Ev();
extern void _ZN8S20442C4D1Ev();
extern void _ZN8S20442C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C4__A1__8S20442C1[] = {
  ABISELECT(-360,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&_ZN8S20442C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20442C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20442C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20442C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev)();
extern void _ZN11S20442C7_nt3v10Ev();
extern void _ZN11S20442C7_nt3v11Ev();
extern void _ZN11S20442C7_nt3v12Ev();
extern void _ZN8S20442C63v13Ev();
extern void _ZN8S20442C63v14Ev();
extern void _ZN8S20442C63v15Ev();
extern void _ZN8S20442C63v16Ev();
extern void _ZN8S20442C63v17Ev();
extern void _ZN8S20442C63v18Ev();
extern void _ZN8S20442C63v19Ev();
extern void _ZN8S20442C63v20Ev();
extern void _ZN8S20442C63v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20442C6__8S20442C4__A1__8S20442C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(360,216),
  ABISELECT(360,216),
  (VTBL_ENTRY)&(_ZTI8S20442C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D1Ev,_ZTv0_n12_N8S20442C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20442C4D0Ev,_ZTv0_n12_N8S20442C4D0Ev),
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20442C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20442C63v21Ev,
};
static  VTT_ENTRY vtt_S20442C1[] = {
  {&(_ZTV8S20442C1[20]),  20,151},
  {&(_ZTV8S20442C1[62]),  62,151},
  {&(_ZTV8S20442C1[100]),  100,151},
  {&(_ZTV8S20442C1[20]),  20,151},
  {&(_ZTV8S20442C1[62]),  62,151},
  {&(_ZTV8S20442C1[135]),  135,151},
  {&(_tg__ZTV8S20442C2__8S20442C1[20]),  20,39},
  {&(_tg__ZTV8S20442C3__8S20442C2__8S20442C1[19]),  19,36},
  {&(_tg__ZTV8S20442C6__8S20442C2__8S20442C1[15]),  15,29},
  {&(_tg__ZTV8S20442C2__8S20442C1[20]),  20,39},
  {&(_tg__ZTV8S20442C4__A1__8S20442C2__8S20442C1[18]),  18,34},
  {&(_tg__ZTV8S20442C3__8S20442C1[3]),  3,20},
  {&(_tg__ZTV8S20442C48S20442C3__8S20442C1[3]),  3,19},
  {&(_tg__ZTV8S20442C6__8S20442C48S20442C3__8S20442C1[15]),  15,29},
  {&(_tg__ZTV8S20442C6__8S20442C3__8S20442C1[15]),  15,29},
  {&(_tg__ZTV8S20442C9__8S20442C1[18]),  18,33},
  {&(_tg__ZTV8S20442C3__8S20442C9__8S20442C1[19]),  19,36},
  {&(_tg__ZTV8S20442C6__8S20442C9__8S20442C1[15]),  15,29},
  {&(_tg__ZTV8S20442C4__A1__8S20442C9__8S20442C1[18]),  18,34},
  {&(_tg__ZTV8S20442C4__A1__8S20442C1[3]),  3,19},
  {&(_tg__ZTV8S20442C6__8S20442C4__A1__8S20442C1[15]),  15,29},
};
extern VTBL_ENTRY _ZTI8S20442C1[];
extern  VTBL_ENTRY _ZTV8S20442C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20442C1[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C9D0Ev,_ZTv0_n72_N8S20442C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20442C9D0Ev,_ZThn212_N8S20442C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20442C9D0Ev,_ZThn92_N8S20442C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C9D1Ev,_ZTv0_n72_N8S20442C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20442C9D1Ev,_ZThn212_N8S20442C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20442C9D1Ev,_ZThn92_N8S20442C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C9D0Ev,_ZTv0_n12_N8S20442C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S20442C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C9D1Ev,_ZTv0_n12_N8S20442C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S20442C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C2D0Ev,_ZTv0_n72_N8S20442C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20442C2D0Ev,_ZThn212_N8S20442C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20442C2D0Ev,_ZThn92_N8S20442C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C2D1Ev,_ZTv0_n72_N8S20442C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20442C2D1Ev,_ZThn212_N8S20442C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20442C2D1Ev,_ZThn92_N8S20442C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C2D0Ev,_ZTv0_n12_N8S20442C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20442C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C2D1Ev,_ZTv0_n12_N8S20442C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20442C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C1D0Ev,_ZTv0_n72_N8S20442C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N8S20442C1D0Ev,_ZThn216_N8S20442C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20442C1D0Ev,_ZThn96_N8S20442C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N8S20442C1D1Ev,_ZTv0_n72_N8S20442C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N8S20442C1D1Ev,_ZThn216_N8S20442C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20442C1D1Ev,_ZThn96_N8S20442C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C1D0Ev,_ZTv0_n12_N8S20442C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20442C1D0Ev,_ZThn4_N8S20442C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20442C1D1Ev,_ZTv0_n12_N8S20442C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20442C1D1Ev,_ZThn4_N8S20442C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20442C1 = {  "S20442C1", // class name
  bases_S20442C1, 9,
  &(vtc_S20442C1[0]), // expected_vtbl_contents
  &(vtt_S20442C1[0]), // expected_vtt_contents
  ABISELECT(528,336), // object size
  NSPAIRA(_ZTI8S20442C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20442C1),151, //virtual function table var
  20, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20442C1),21, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9150C2_nt  {
  virtual  ~S9150C2_nt(); // _ZN10S9150C2_ntD1Ev
  virtual void  v27(); // _ZN10S9150C2_nt3v27Ev
  virtual void  v28(); // _ZN10S9150C2_nt3v28Ev
  virtual void  v29(); // _ZN10S9150C2_nt3v29Ev
  virtual void  v30(); // _ZN10S9150C2_nt3v30Ev
  virtual void  v31(); // _ZN10S9150C2_nt3v31Ev
  virtual void  v32(); // _ZN10S9150C2_nt3v32Ev
  virtual void  v33(); // _ZN10S9150C2_nt3v33Ev
  virtual void  v34(); // _ZN10S9150C2_nt3v34Ev
  virtual void  v35(); // _ZN10S9150C2_nt3v35Ev
  virtual void  v36(); // _ZN10S9150C2_nt3v36Ev
  virtual void  v37(); // _ZN10S9150C2_nt3v37Ev
  virtual void  v38(); // _ZN10S9150C2_nt3v38Ev
  virtual void  v39(); // _ZN10S9150C2_nt3v39Ev
  virtual void  v40(); // _ZN10S9150C2_nt3v40Ev
  virtual void  v41(); // _ZN10S9150C2_nt3v41Ev
  virtual void  v42(); // _ZN10S9150C2_nt3v42Ev
  virtual void  v43(); // _ZN10S9150C2_nt3v43Ev
  virtual void  v44(); // _ZN10S9150C2_nt3v44Ev
  virtual void  v45(); // _ZN10S9150C2_nt3v45Ev
  virtual void  v46(); // _ZN10S9150C2_nt3v46Ev
  virtual void  v47(); // _ZN10S9150C2_nt3v47Ev
  virtual void  v48(); // _ZN10S9150C2_nt3v48Ev
  virtual void  v49(); // _ZN10S9150C2_nt3v49Ev
  virtual void  v50(); // _ZN10S9150C2_nt3v50Ev
  virtual void  v51(); // _ZN10S9150C2_nt3v51Ev
  virtual void  v52(); // _ZN10S9150C2_nt3v52Ev
  S9150C2_nt(); // tgen
};
//SIG(-1 S9150C2_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}


 S9150C2_nt ::~S9150C2_nt(){ note_dtor("S9150C2_nt", this);}
void  S9150C2_nt ::v27(){vfunc_called(this, "_ZN10S9150C2_nt3v27Ev");}
void  S9150C2_nt ::v28(){vfunc_called(this, "_ZN10S9150C2_nt3v28Ev");}
void  S9150C2_nt ::v29(){vfunc_called(this, "_ZN10S9150C2_nt3v29Ev");}
void  S9150C2_nt ::v30(){vfunc_called(this, "_ZN10S9150C2_nt3v30Ev");}
void  S9150C2_nt ::v31(){vfunc_called(this, "_ZN10S9150C2_nt3v31Ev");}
void  S9150C2_nt ::v32(){vfunc_called(this, "_ZN10S9150C2_nt3v32Ev");}
void  S9150C2_nt ::v33(){vfunc_called(this, "_ZN10S9150C2_nt3v33Ev");}
void  S9150C2_nt ::v34(){vfunc_called(this, "_ZN10S9150C2_nt3v34Ev");}
void  S9150C2_nt ::v35(){vfunc_called(this, "_ZN10S9150C2_nt3v35Ev");}
void  S9150C2_nt ::v36(){vfunc_called(this, "_ZN10S9150C2_nt3v36Ev");}
void  S9150C2_nt ::v37(){vfunc_called(this, "_ZN10S9150C2_nt3v37Ev");}
void  S9150C2_nt ::v38(){vfunc_called(this, "_ZN10S9150C2_nt3v38Ev");}
void  S9150C2_nt ::v39(){vfunc_called(this, "_ZN10S9150C2_nt3v39Ev");}
void  S9150C2_nt ::v40(){vfunc_called(this, "_ZN10S9150C2_nt3v40Ev");}
void  S9150C2_nt ::v41(){vfunc_called(this, "_ZN10S9150C2_nt3v41Ev");}
void  S9150C2_nt ::v42(){vfunc_called(this, "_ZN10S9150C2_nt3v42Ev");}
void  S9150C2_nt ::v43(){vfunc_called(this, "_ZN10S9150C2_nt3v43Ev");}
void  S9150C2_nt ::v44(){vfunc_called(this, "_ZN10S9150C2_nt3v44Ev");}
void  S9150C2_nt ::v45(){vfunc_called(this, "_ZN10S9150C2_nt3v45Ev");}
void  S9150C2_nt ::v46(){vfunc_called(this, "_ZN10S9150C2_nt3v46Ev");}
void  S9150C2_nt ::v47(){vfunc_called(this, "_ZN10S9150C2_nt3v47Ev");}
void  S9150C2_nt ::v48(){vfunc_called(this, "_ZN10S9150C2_nt3v48Ev");}
void  S9150C2_nt ::v49(){vfunc_called(this, "_ZN10S9150C2_nt3v49Ev");}
void  S9150C2_nt ::v50(){vfunc_called(this, "_ZN10S9150C2_nt3v50Ev");}
void  S9150C2_nt ::v51(){vfunc_called(this, "_ZN10S9150C2_nt3v51Ev");}
void  S9150C2_nt ::v52(){vfunc_called(this, "_ZN10S9150C2_nt3v52Ev");}
S9150C2_nt ::S9150C2_nt(){ note_ctor("S9150C2_nt", this);} // tgen

//skip512 S9150C2_nt

#else // __cplusplus

extern void _ZN10S9150C2_ntC1Ev();
extern void _ZN10S9150C2_ntD1Ev();
Name_Map name_map_S9150C2_nt[] = {
  NSPAIR(_ZN10S9150C2_ntC1Ev),
  NSPAIR(_ZN10S9150C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9150C2_nt[];
extern void _ZN10S9150C2_ntD1Ev();
extern void _ZN10S9150C2_ntD0Ev();
extern void _ZN10S9150C2_nt3v27Ev();
extern void _ZN10S9150C2_nt3v28Ev();
extern void _ZN10S9150C2_nt3v29Ev();
extern void _ZN10S9150C2_nt3v30Ev();
extern void _ZN10S9150C2_nt3v31Ev();
extern void _ZN10S9150C2_nt3v32Ev();
extern void _ZN10S9150C2_nt3v33Ev();
extern void _ZN10S9150C2_nt3v34Ev();
extern void _ZN10S9150C2_nt3v35Ev();
extern void _ZN10S9150C2_nt3v36Ev();
extern void _ZN10S9150C2_nt3v37Ev();
extern void _ZN10S9150C2_nt3v38Ev();
extern void _ZN10S9150C2_nt3v39Ev();
extern void _ZN10S9150C2_nt3v40Ev();
extern void _ZN10S9150C2_nt3v41Ev();
extern void _ZN10S9150C2_nt3v42Ev();
extern void _ZN10S9150C2_nt3v43Ev();
extern void _ZN10S9150C2_nt3v44Ev();
extern void _ZN10S9150C2_nt3v45Ev();
extern void _ZN10S9150C2_nt3v46Ev();
extern void _ZN10S9150C2_nt3v47Ev();
extern void _ZN10S9150C2_nt3v48Ev();
extern void _ZN10S9150C2_nt3v49Ev();
extern void _ZN10S9150C2_nt3v50Ev();
extern void _ZN10S9150C2_nt3v51Ev();
extern void _ZN10S9150C2_nt3v52Ev();
static  VTBL_ENTRY vtc_S9150C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9150C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9150C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v52Ev,
};
extern VTBL_ENTRY _ZTI10S9150C2_nt[];
VTBL_ENTRY *P__ZTI10S9150C2_nt = _ZTI10S9150C2_nt; 
extern  VTBL_ENTRY _ZTV10S9150C2_nt[];
Class_Descriptor cd_S9150C2_nt = {  "S9150C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9150C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9150C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9150C2_nt),30, //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  S9150C3  {
  int s9150c3f0[2];
  void *s9150c3f1;
  long s9150c3f2;
  void *s9150c3f3;
  long s9150c3f4;
  char s9150c3f5;
};
//SIG(-1 S9150C3) C1{ Fi[2] Fp Fl Fp Fl Fc}



static void Test_S9150C3()
{
  {
    init_simple_test("S9150C3");
    S9150C3 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S9150C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9150C3)");
    check_field_offset(lv, s9150c3f0, 0, "S9150C3.s9150c3f0");
    check_field_offset(lv, s9150c3f1, 8, "S9150C3.s9150c3f1");
    check_field_offset(lv, s9150c3f2, ABISELECT(16,12), "S9150C3.s9150c3f2");
    check_field_offset(lv, s9150c3f3, ABISELECT(24,16), "S9150C3.s9150c3f3");
    check_field_offset(lv, s9150c3f4, ABISELECT(32,20), "S9150C3.s9150c3f4");
    check_field_offset(lv, s9150c3f5, ABISELECT(40,24), "S9150C3.s9150c3f5");
  }
}
static Arrange_To_Call_Me vS9150C3(Test_S9150C3, "S9150C3", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9150C1  : S9150C2_nt {
  int s9150c1f0;
  void *s9150c1f1[3];
  __tsi64 s9150c1f2;
  void *s9150c1f3[2];
  int s9150c1f4[2];
  ::S9150C3 s9150c1f5;
  virtual  ~S9150C1(); // _ZN7S9150C1D1Ev
  virtual void  v1(); // _ZN7S9150C12v1Ev
  virtual void  v2(); // _ZN7S9150C12v2Ev
  virtual void  v3(); // _ZN7S9150C12v3Ev
  virtual void  v4(); // _ZN7S9150C12v4Ev
  virtual void  v5(); // _ZN7S9150C12v5Ev
  virtual void  v6(); // _ZN7S9150C12v6Ev
  virtual void  v7(); // _ZN7S9150C12v7Ev
  virtual void  v8(); // _ZN7S9150C12v8Ev
  virtual void  v9(); // _ZN7S9150C12v9Ev
  virtual void  v10(); // _ZN7S9150C13v10Ev
  virtual void  v11(); // _ZN7S9150C13v11Ev
  virtual void  v12(); // _ZN7S9150C13v12Ev
  virtual void  v13(); // _ZN7S9150C13v13Ev
  virtual void  v14(); // _ZN7S9150C13v14Ev
  virtual void  v15(); // _ZN7S9150C13v15Ev
  virtual void  v16(); // _ZN7S9150C13v16Ev
  virtual void  v17(); // _ZN7S9150C13v17Ev
  virtual void  v18(); // _ZN7S9150C13v18Ev
  virtual void  v19(); // _ZN7S9150C13v19Ev
  virtual void  v20(); // _ZN7S9150C13v20Ev
  virtual void  v21(); // _ZN7S9150C13v21Ev
  virtual void  v22(); // _ZN7S9150C13v22Ev
  virtual void  v23(); // _ZN7S9150C13v23Ev
  virtual void  v24(); // _ZN7S9150C13v24Ev
  virtual void  v25(); // _ZN7S9150C13v25Ev
  virtual void  v26(); // _ZN7S9150C13v26Ev
  S9150C1(); // tgen
};
//SIG(1 S9150C1) C1{ BC2{ vd 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} 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 Fi Fp[3] FL Fp[2] Fi[2] FC3{ Fi[2] Fp Fl Fp Fl Fc}}


 S9150C1 ::~S9150C1(){ note_dtor("S9150C1", this);}
void  S9150C1 ::v1(){vfunc_called(this, "_ZN7S9150C12v1Ev");}
void  S9150C1 ::v2(){vfunc_called(this, "_ZN7S9150C12v2Ev");}
void  S9150C1 ::v3(){vfunc_called(this, "_ZN7S9150C12v3Ev");}
void  S9150C1 ::v4(){vfunc_called(this, "_ZN7S9150C12v4Ev");}
void  S9150C1 ::v5(){vfunc_called(this, "_ZN7S9150C12v5Ev");}
void  S9150C1 ::v6(){vfunc_called(this, "_ZN7S9150C12v6Ev");}
void  S9150C1 ::v7(){vfunc_called(this, "_ZN7S9150C12v7Ev");}
void  S9150C1 ::v8(){vfunc_called(this, "_ZN7S9150C12v8Ev");}
void  S9150C1 ::v9(){vfunc_called(this, "_ZN7S9150C12v9Ev");}
void  S9150C1 ::v10(){vfunc_called(this, "_ZN7S9150C13v10Ev");}
void  S9150C1 ::v11(){vfunc_called(this, "_ZN7S9150C13v11Ev");}
void  S9150C1 ::v12(){vfunc_called(this, "_ZN7S9150C13v12Ev");}
void  S9150C1 ::v13(){vfunc_called(this, "_ZN7S9150C13v13Ev");}
void  S9150C1 ::v14(){vfunc_called(this, "_ZN7S9150C13v14Ev");}
void  S9150C1 ::v15(){vfunc_called(this, "_ZN7S9150C13v15Ev");}
void  S9150C1 ::v16(){vfunc_called(this, "_ZN7S9150C13v16Ev");}
void  S9150C1 ::v17(){vfunc_called(this, "_ZN7S9150C13v17Ev");}
void  S9150C1 ::v18(){vfunc_called(this, "_ZN7S9150C13v18Ev");}
void  S9150C1 ::v19(){vfunc_called(this, "_ZN7S9150C13v19Ev");}
void  S9150C1 ::v20(){vfunc_called(this, "_ZN7S9150C13v20Ev");}
void  S9150C1 ::v21(){vfunc_called(this, "_ZN7S9150C13v21Ev");}
void  S9150C1 ::v22(){vfunc_called(this, "_ZN7S9150C13v22Ev");}
void  S9150C1 ::v23(){vfunc_called(this, "_ZN7S9150C13v23Ev");}
void  S9150C1 ::v24(){vfunc_called(this, "_ZN7S9150C13v24Ev");}
void  S9150C1 ::v25(){vfunc_called(this, "_ZN7S9150C13v25Ev");}
void  S9150C1 ::v26(){vfunc_called(this, "_ZN7S9150C13v26Ev");}
S9150C1 ::S9150C1(){ note_ctor("S9150C1", this);} // tgen

static void Test_S9150C1()
{
  extern Class_Descriptor cd_S9150C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S9150C1, buf);
    S9150C1 *dp, &lv = *(dp=new (buf) S9150C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S9150C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9150C1)");
    check_base_class_offset(lv, (S9150C2_nt*), 0, "S9150C1");
    check_field_offset(lv, s9150c1f0, ABISELECT(8,4), "S9150C1.s9150c1f0");
    check_field_offset(lv, s9150c1f1, ABISELECT(16,8), "S9150C1.s9150c1f1");
    check_field_offset(lv, s9150c1f2, ABISELECT(40,20), "S9150C1.s9150c1f2");
    check_field_offset(lv, s9150c1f3, ABISELECT(48,28), "S9150C1.s9150c1f3");
    check_field_offset(lv, s9150c1f4, ABISELECT(64,36), "S9150C1.s9150c1f4");
    check_field_offset(lv, s9150c1f5, ABISELECT(72,44), "S9150C1.s9150c1f5");
    test_class_info(&lv, &cd_S9150C1);
    dp->~S9150C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9150C1(Test_S9150C1, "S9150C1", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S9150C1C1Ev();
extern void _ZN7S9150C1D1Ev();
Name_Map name_map_S9150C1[] = {
  NSPAIR(_ZN7S9150C1C1Ev),
  NSPAIR(_ZN7S9150C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9150C2_nt;
extern VTBL_ENTRY _ZTI10S9150C2_nt[];
extern  VTBL_ENTRY _ZTV10S9150C2_nt[];
static Base_Class bases_S9150C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9150C2_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 _ZTI7S9150C1[];
extern void _ZN7S9150C1D1Ev();
extern void _ZN7S9150C1D0Ev();
extern void _ZN10S9150C2_nt3v27Ev();
extern void _ZN10S9150C2_nt3v28Ev();
extern void _ZN10S9150C2_nt3v29Ev();
extern void _ZN10S9150C2_nt3v30Ev();
extern void _ZN10S9150C2_nt3v31Ev();
extern void _ZN10S9150C2_nt3v32Ev();
extern void _ZN10S9150C2_nt3v33Ev();
extern void _ZN10S9150C2_nt3v34Ev();
extern void _ZN10S9150C2_nt3v35Ev();
extern void _ZN10S9150C2_nt3v36Ev();
extern void _ZN10S9150C2_nt3v37Ev();
extern void _ZN10S9150C2_nt3v38Ev();
extern void _ZN10S9150C2_nt3v39Ev();
extern void _ZN10S9150C2_nt3v40Ev();
extern void _ZN10S9150C2_nt3v41Ev();
extern void _ZN10S9150C2_nt3v42Ev();
extern void _ZN10S9150C2_nt3v43Ev();
extern void _ZN10S9150C2_nt3v44Ev();
extern void _ZN10S9150C2_nt3v45Ev();
extern void _ZN10S9150C2_nt3v46Ev();
extern void _ZN10S9150C2_nt3v47Ev();
extern void _ZN10S9150C2_nt3v48Ev();
extern void _ZN10S9150C2_nt3v49Ev();
extern void _ZN10S9150C2_nt3v50Ev();
extern void _ZN10S9150C2_nt3v51Ev();
extern void _ZN10S9150C2_nt3v52Ev();
extern void _ZN7S9150C12v1Ev();
extern void _ZN7S9150C12v2Ev();
extern void _ZN7S9150C12v3Ev();
extern void _ZN7S9150C12v4Ev();
extern void _ZN7S9150C12v5Ev();
extern void _ZN7S9150C12v6Ev();
extern void _ZN7S9150C12v7Ev();
extern void _ZN7S9150C12v8Ev();
extern void _ZN7S9150C12v9Ev();
extern void _ZN7S9150C13v10Ev();
extern void _ZN7S9150C13v11Ev();
extern void _ZN7S9150C13v12Ev();
extern void _ZN7S9150C13v13Ev();
extern void _ZN7S9150C13v14Ev();
extern void _ZN7S9150C13v15Ev();
extern void _ZN7S9150C13v16Ev();
extern void _ZN7S9150C13v17Ev();
extern void _ZN7S9150C13v18Ev();
extern void _ZN7S9150C13v19Ev();
extern void _ZN7S9150C13v20Ev();
extern void _ZN7S9150C13v21Ev();
extern void _ZN7S9150C13v22Ev();
extern void _ZN7S9150C13v23Ev();
extern void _ZN7S9150C13v24Ev();
extern void _ZN7S9150C13v25Ev();
extern void _ZN7S9150C13v26Ev();
static  VTBL_ENTRY vtc_S9150C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9150C1[0]),
  (VTBL_ENTRY)&_ZN7S9150C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9150C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S9150C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN7S9150C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9150C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9150C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9150C12v4Ev,
  (VTBL_ENTRY)&_ZN7S9150C12v5Ev,
  (VTBL_ENTRY)&_ZN7S9150C12v6Ev,
  (VTBL_ENTRY)&_ZN7S9150C12v7Ev,
  (VTBL_ENTRY)&_ZN7S9150C12v8Ev,
  (VTBL_ENTRY)&_ZN7S9150C12v9Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v10Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v11Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v12Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v13Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v14Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v15Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v16Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v17Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v18Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v19Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v20Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v21Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v22Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v23Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v24Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v25Ev,
  (VTBL_ENTRY)&_ZN7S9150C13v26Ev,
};
extern VTBL_ENTRY _ZTI7S9150C1[];
extern  VTBL_ENTRY _ZTV7S9150C1[];
Class_Descriptor cd_S9150C1 = {  "S9150C1", // class name
  bases_S9150C1, 1,
  &(vtc_S9150C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S9150C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9150C1),56, //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  S7925C9  {
  virtual  ~S7925C9(); // _ZN7S7925C9D1Ev
  virtual void  v2(); // _ZN7S7925C92v2Ev
  S7925C9(); // tgen
};
//SIG(-1 S7925C9) C1{ vd v1}


 S7925C9 ::~S7925C9(){ note_dtor("S7925C9", this);}
void  S7925C9 ::v2(){vfunc_called(this, "_ZN7S7925C92v2Ev");}
S7925C9 ::S7925C9(){ note_ctor("S7925C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7925C9C1Ev();
extern void _ZN7S7925C9D1Ev();
Name_Map name_map_S7925C9[] = {
  NSPAIR(_ZN7S7925C9C1Ev),
  NSPAIR(_ZN7S7925C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7925C9[];
extern void _ZN7S7925C9D1Ev();
extern void _ZN7S7925C9D0Ev();
extern void _ZN7S7925C92v2Ev();
static  VTBL_ENTRY vtc_S7925C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7925C9[0]),
  (VTBL_ENTRY)&_ZN7S7925C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7925C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7925C92v2Ev,
};
extern VTBL_ENTRY _ZTI7S7925C9[];
extern  VTBL_ENTRY _ZTV7S7925C9[];
Class_Descriptor cd_S7925C9 = {  "S7925C9", // class name
  0,0,//no base classes
  &(vtc_S7925C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7925C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7925C9),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  S7925C16_nt  {
  char s7925c16f0;
  long s7925c16f1[2];
  short s7925c16f2[12];
  char s7925c16f3[5];
  void  mf7925c16(); // _ZN11S7925C16_nt9mf7925c16Ev
};
//SIG(-1 S7925C16_nt) C1{ m Fc Fl[2] Fs[12] Fc[5]}


void  S7925C16_nt ::mf7925c16(){}

//skip512 S7925C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7925C1  : S10180C17 , S7925C9 {
  ::S10180C37 s7925c1f0;
  ::S10180C136 s7925c1f1;
  int s7925c1f2;
  void *s7925c1f3[10];
  int s7925c1f4[2];
  __tsi64 s7925c1f5;
  int s7925c1f6;
  ::S10180C114 s7925c1f7;
  void *s7925c1f8;
  char s7925c1f9;
  __tsi64 s7925c1f10[2];
  char s7925c1f11[7];
  int s7925c1f12[2];
  ::S7925C16_nt s7925c1f13;
  ::S10180C169 s7925c1f14;
  int s7925c1f15[7];
  char s7925c1f16;
  int s7925c1f17[2];
  __tsi64 s7925c1f18;
  int s7925c1f19[2];
  void *s7925c1f20[4];
  virtual  ~S7925C1(); // _ZN7S7925C1D1Ev
  virtual void  v1(); // _ZN7S7925C12v1Ev
  S7925C1(); // tgen
};
//SIG(1 S7925C1) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC3 Fc} BC6{ vd v2} vd v1 FC7{ m FC8{ FL[4]}} FC9{ m Fp Fi FC10{ m} FC11{ m}} Fi Fp[10] Fi[2] FL Fi FC12{ m Fp} Fp Fc FL[2] Fc[7] Fi[2] FC13{ m Fc Fl[2] Fs[12] Fc[5]} FC14{ m Fi[2]} Fi[7] Fc Fi[2] FL Fi[2] Fp[4]}


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

static void Test_S7925C1()
{
  extern Class_Descriptor cd_S7925C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,79)];
    init_test(&cd_S7925C1, buf);
    S7925C1 *dp, &lv = *(dp=new (buf) S7925C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,312), "sizeof(S7925C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7925C1)");
    check_base_class_offset(lv, (S10180C17*), 0, "S7925C1");
    check_base_class_offset(lv, (S7925C9*), ABISELECT(48,32), "S7925C1");
    check_field_offset(lv, s7925c1f0, ABISELECT(56,36), "S7925C1.s7925c1f0");
    check_field_offset(lv, s7925c1f1, ABISELECT(88,68), "S7925C1.s7925c1f1");
    check_field_offset(lv, s7925c1f2, ABISELECT(104,80), "S7925C1.s7925c1f2");
    check_field_offset(lv, s7925c1f3, ABISELECT(112,84), "S7925C1.s7925c1f3");
    check_field_offset(lv, s7925c1f4, ABISELECT(192,124), "S7925C1.s7925c1f4");
    check_field_offset(lv, s7925c1f5, ABISELECT(200,132), "S7925C1.s7925c1f5");
    check_field_offset(lv, s7925c1f6, ABISELECT(208,140), "S7925C1.s7925c1f6");
    check_field_offset(lv, s7925c1f7, ABISELECT(216,144), "S7925C1.s7925c1f7");
    check_field_offset(lv, s7925c1f8, ABISELECT(224,148), "S7925C1.s7925c1f8");
    check_field_offset(lv, s7925c1f9, ABISELECT(232,152), "S7925C1.s7925c1f9");
    check_field_offset(lv, s7925c1f10, ABISELECT(240,156), "S7925C1.s7925c1f10");
    check_field_offset(lv, s7925c1f11, ABISELECT(256,172), "S7925C1.s7925c1f11");
    check_field_offset(lv, s7925c1f12, ABISELECT(264,180), "S7925C1.s7925c1f12");
    check_field_offset(lv, s7925c1f13, ABISELECT(272,188), "S7925C1.s7925c1f13");
    check_field_offset(lv, s7925c1f14, ABISELECT(328,232), "S7925C1.s7925c1f14");
    check_field_offset(lv, s7925c1f15, ABISELECT(336,240), "S7925C1.s7925c1f15");
    check_field_offset(lv, s7925c1f16, ABISELECT(364,268), "S7925C1.s7925c1f16");
    check_field_offset(lv, s7925c1f17, ABISELECT(368,272), "S7925C1.s7925c1f17");
    check_field_offset(lv, s7925c1f18, ABISELECT(376,280), "S7925C1.s7925c1f18");
    check_field_offset(lv, s7925c1f19, ABISELECT(384,288), "S7925C1.s7925c1f19");
    check_field_offset(lv, s7925c1f20, ABISELECT(392,296), "S7925C1.s7925c1f20");
    test_class_info(&lv, &cd_S7925C1);
    dp->~S7925C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7925C1(Test_S7925C1, "S7925C1", ABISELECT(424,312));

#else // __cplusplus

extern void _ZN7S7925C1C1Ev();
extern void _ZN7S7925C1D1Ev();
Name_Map name_map_S7925C1[] = {
  NSPAIR(_ZN7S7925C1C1Ev),
  NSPAIR(_ZN7S7925C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C17;
extern VTBL_ENTRY _ZTI9S10180C17[];
extern  VTBL_ENTRY _ZTV9S10180C17[];
extern Class_Descriptor cd_S7925C9;
extern VTBL_ENTRY _ZTI7S7925C9[];
extern  VTBL_ENTRY _ZTV7S7925C9[];
static Base_Class bases_S7925C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7925C9,    ABISELECT(48,32), //bcp->offset
    5, //bcp->virtual_function_table_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 _ZTI7S7925C1[];
extern void _ZN7S7925C1D1Ev();
extern void _ZN7S7925C1D0Ev();
extern void _ZN7S7925C12v1Ev();
extern void ABISELECT(_ZThn48_N7S7925C1D1Ev,_ZThn32_N7S7925C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7925C1D0Ev,_ZThn32_N7S7925C1D0Ev)();
extern void _ZN7S7925C92v2Ev();
static  VTBL_ENTRY vtc_S7925C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7925C1[0]),
  (VTBL_ENTRY)&_ZN7S7925C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7925C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7925C12v1Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7925C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7925C1D1Ev,_ZThn32_N7S7925C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7925C1D0Ev,_ZThn32_N7S7925C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7925C92v2Ev,
};
extern VTBL_ENTRY _ZTI7S7925C1[];
extern  VTBL_ENTRY _ZTV7S7925C1[];
Class_Descriptor cd_S7925C1 = {  "S7925C1", // class name
  bases_S7925C1, 2,
  &(vtc_S7925C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,312), // object size
  NSPAIRA(_ZTI7S7925C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7925C1),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  S6277C4_nt  : S10180C133 {
  virtual  ~S6277C4_nt(); // _ZN10S6277C4_ntD1Ev
  S6277C4_nt(); // tgen
};
//SIG(-1 S6277C4_nt) C1{ BC2{ m} vd}


 S6277C4_nt ::~S6277C4_nt(){ note_dtor("S6277C4_nt", this);}
S6277C4_nt ::S6277C4_nt(){ note_ctor("S6277C4_nt", this);} // tgen

//skip512 S6277C4_nt

#else // __cplusplus

extern void _ZN10S6277C4_ntC1Ev();
extern void _ZN10S6277C4_ntD1Ev();
Name_Map name_map_S6277C4_nt[] = {
  NSPAIR(_ZN10S6277C4_ntC1Ev),
  NSPAIR(_ZN10S6277C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
static Base_Class bases_S6277C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S6277C4_nt[];
extern void _ZN10S6277C4_ntD1Ev();
extern void _ZN10S6277C4_ntD0Ev();
static  VTBL_ENTRY vtc_S6277C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6277C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S6277C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6277C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S6277C4_nt[];
VTBL_ENTRY *P__ZTI10S6277C4_nt = _ZTI10S6277C4_nt; 
extern  VTBL_ENTRY _ZTV10S6277C4_nt[];
Class_Descriptor cd_S6277C4_nt = {  "S6277C4_nt", // class name
  bases_S6277C4_nt, 1,
  &(vtc_S6277C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6277C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S6277C4_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  S6277C3  : virtual S6277C4_nt {
  int s6277c3f0;
  ~S6277C3(); // tgen
  S6277C3(); // tgen
};
//SIG(-1 S6277C3) C1{ VBC2{ BC3{ m} vd} Fi}


S6277C3 ::~S6277C3(){ note_dtor("S6277C3", this);} // tgen
S6277C3 ::S6277C3(){ note_ctor("S6277C3", this);} // tgen

static void Test_S6277C3()
{
  extern Class_Descriptor cd_S6277C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6277C3, buf);
    S6277C3 *dp, &lv = *(dp=new (buf) S6277C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6277C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C3)");
    check_base_class_offset(lv, (S10180C133*)(S6277C4_nt*), 0, "S6277C3");
    check_base_class_offset(lv, (S6277C4_nt*), 0, "S6277C3");
    check_field_offset(lv, s6277c3f0, ABISELECT(8,4), "S6277C3.s6277c3f0");
    test_class_info(&lv, &cd_S6277C3);
    dp->~S6277C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C3(Test_S6277C3, "S6277C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6277C3C1Ev();
extern void _ZN7S6277C3D1Ev();
Name_Map name_map_S6277C3[] = {
  NSPAIR(_ZN7S6277C3C1Ev),
  NSPAIR(_ZN7S6277C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S6277C4_nt;
extern VTBL_ENTRY _ZTI10S6277C4_nt[];
extern  VTBL_ENTRY _ZTV10S6277C4_nt[];
static Base_Class bases_S6277C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6277C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6277C3[];
extern void _ZN7S6277C3D1Ev();
extern void _ZN7S6277C3D0Ev();
static  VTBL_ENTRY vtc_S6277C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C3[0]),
  (VTBL_ENTRY)&_ZN7S6277C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6277C3D0Ev,
};
extern VTBL_ENTRY _ZTV7S6277C3[];
static  VTT_ENTRY vtt_S6277C3[] = {
  {&(_ZTV7S6277C3[4]),  4,6},
  {&(_ZTV7S6277C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S6277C3[];
extern  VTBL_ENTRY _ZTV7S6277C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C3[];
Class_Descriptor cd_S6277C3 = {  "S6277C3", // class name
  bases_S6277C3, 2,
  &(vtc_S6277C3[0]), // expected_vtbl_contents
  &(vtt_S6277C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6277C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6277C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6277C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C11  : virtual S10180C20 , S10180C93 {
  ~S6277C11(); // tgen
  S6277C11(); // tgen
};
//SIG(-1 S6277C11) C1{ VBC2{ m} BC3{ m FL}}


S6277C11 ::~S6277C11(){ note_dtor("S6277C11", this);} // tgen
S6277C11 ::S6277C11(){ note_ctor("S6277C11", this);} // tgen

static void Test_S6277C11()
{
  extern Class_Descriptor cd_S6277C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6277C11, buf);
    S6277C11 *dp, &lv = *(dp=new (buf) S6277C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6277C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C11)");
    check_base_class_offset(lv, (S10180C20*), 0, "S6277C11");
    check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S6277C11");
    test_class_info(&lv, &cd_S6277C11);
    dp->~S6277C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C11(Test_S6277C11, "S6277C11", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S6277C11C1Ev();
extern void _ZN8S6277C11D1Ev();
Name_Map name_map_S6277C11[] = {
  NSPAIR(_ZN8S6277C11C1Ev),
  NSPAIR(_ZN8S6277C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S6277C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S6277C11[];
static  VTBL_ENTRY vtc_S6277C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
extern VTBL_ENTRY _ZTV8S6277C11[];
static  VTT_ENTRY vtt_S6277C11[] = {
  {&(_ZTV8S6277C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
Class_Descriptor cd_S6277C11 = {  "S6277C11", // class name
  bases_S6277C11, 2,
  &(vtc_S6277C11[0]), // expected_vtbl_contents
  &(vtt_S6277C11[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S6277C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6277C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6277C11),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C9  : virtual S10180C133 , virtual S10180C93 , S6277C11 {
  ~S6277C9(); // tgen
  S6277C9(); // tgen
};
//SIG(-1 S6277C9) C1{ VBC2{ m} VBC3{ m FL} BC4{ VBC5{ m} BC3}}


S6277C9 ::~S6277C9(){ note_dtor("S6277C9", this);} // tgen
S6277C9 ::S6277C9(){ note_ctor("S6277C9", this);} // tgen

static void Test_S6277C9()
{
  extern Class_Descriptor cd_S6277C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S6277C9, buf);
    S6277C9 *dp, &lv = *(dp=new (buf) S6277C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S6277C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C9)");
    check_base_class_offset(lv, (S10180C133*), 0, "S6277C9");
    /*is_ambiguous_... S6277C9::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S6277C9");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C9");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(8,4), "S6277C9");
    check_base_class_offset(lv, (S6277C11*), 0, "S6277C9");
    test_class_info(&lv, &cd_S6277C9);
    dp->~S6277C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C9(Test_S6277C9, "S6277C9", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S6277C9C1Ev();
extern void _ZN7S6277C9D1Ev();
Name_Map name_map_S6277C9[] = {
  NSPAIR(_ZN7S6277C9C1Ev),
  NSPAIR(_ZN7S6277C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
static Base_Class bases_S6277C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S6277C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6277C9[];
static  VTBL_ENTRY vtc_S6277C9[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
extern VTBL_ENTRY _ZTV7S6277C9[];
static  VTBL_ENTRY _tg__ZTV8S6277C11__7S6277C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C9[] = {
  {&(_ZTV7S6277C9[5]),  5,5},
  {&(_tg__ZTV8S6277C11__7S6277C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
Class_Descriptor cd_S6277C9 = {  "S6277C9", // class name
  bases_S6277C9, 5,
  &(vtc_S6277C9[0]), // expected_vtbl_contents
  &(vtt_S6277C9[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S6277C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6277C9),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6277C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C8  : S6277C9 {
  ~S6277C8(); // tgen
  S6277C8(); // tgen
};
//SIG(-1 S6277C8) C1{ BC2{ VBC3{ m} VBC4{ m FL} BC5{ VBC6{ m} BC4}}}


S6277C8 ::~S6277C8(){ note_dtor("S6277C8", this);} // tgen
S6277C8 ::S6277C8(){ note_ctor("S6277C8", this);} // tgen

static void Test_S6277C8()
{
  extern Class_Descriptor cd_S6277C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S6277C8, buf);
    S6277C8 *dp, &lv = *(dp=new (buf) S6277C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S6277C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C8)");
    check_base_class_offset(lv, (S10180C133*)(S6277C9*), 0, "S6277C8");
    /*is_ambiguous_... S6277C9::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*), ABISELECT(16,12), "S6277C8");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*), 0, "S6277C8");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*), ABISELECT(8,4), "S6277C8");
    check_base_class_offset(lv, (S6277C11*)(S6277C9*), 0, "S6277C8");
    check_base_class_offset(lv, (S6277C9*), 0, "S6277C8");
    test_class_info(&lv, &cd_S6277C8);
    dp->~S6277C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C8(Test_S6277C8, "S6277C8", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S6277C8C1Ev();
extern void _ZN7S6277C8D1Ev();
Name_Map name_map_S6277C8[] = {
  NSPAIR(_ZN7S6277C8C1Ev),
  NSPAIR(_ZN7S6277C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
static Base_Class bases_S6277C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S6277C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6277C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6277C8[];
static  VTBL_ENTRY vtc_S6277C8[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C8[0]),
};
extern VTBL_ENTRY _ZTV7S6277C8[];
static  VTBL_ENTRY _tg__ZTV7S6277C9__7S6277C8[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C9__7S6277C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C8[] = {
  {&(_ZTV7S6277C8[5]),  5,5},
  {&(_tg__ZTV7S6277C9__7S6277C8[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C9__7S6277C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6277C8[];
extern  VTBL_ENTRY _ZTV7S6277C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C8[];
Class_Descriptor cd_S6277C8 = {  "S6277C8", // class name
  bases_S6277C8, 6,
  &(vtc_S6277C8[0]), // expected_vtbl_contents
  &(vtt_S6277C8[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S6277C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6277C8),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6277C8),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C13  : virtual S6277C11 {
  ::S10180C14 s6277c13f0;
  ~S6277C13(); // tgen
  S6277C13(); // tgen
};
//SIG(-1 S6277C13) C1{ VBC2{ VBC3{ m} BC4{ m FL}} FC5{ m}}


S6277C13 ::~S6277C13(){ note_dtor("S6277C13", this);} // tgen
S6277C13 ::S6277C13(){ note_ctor("S6277C13", this);} // tgen

static void Test_S6277C13()
{
  extern Class_Descriptor cd_S6277C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6277C13, buf);
    S6277C13 *dp, &lv = *(dp=new (buf) S6277C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6277C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C13)");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C13");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(24,12), "S6277C13");
    check_base_class_offset(lv, (S6277C11*), ABISELECT(16,8), "S6277C13");
    check_field_offset(lv, s6277c13f0, ABISELECT(8,4), "S6277C13.s6277c13f0");
    test_class_info(&lv, &cd_S6277C13);
    dp->~S6277C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C13(Test_S6277C13, "S6277C13", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S6277C13C1Ev();
extern void _ZN8S6277C13D1Ev();
Name_Map name_map_S6277C13[] = {
  NSPAIR(_ZN8S6277C13C1Ev),
  NSPAIR(_ZN8S6277C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
static Base_Class bases_S6277C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6277C11,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6277C13[];
static  VTBL_ENTRY vtc_S6277C13[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
extern VTBL_ENTRY _ZTV8S6277C13[];
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C13[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C13[] = {
  {&(_ZTV8S6277C13[4]),  4,7},
  {&(_ZTV8S6277C13[7]),  7,7},
  {&(_tg__ZTV8S6277C11__8S6277C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
Class_Descriptor cd_S6277C13 = {  "S6277C13", // class name
  bases_S6277C13, 3,
  &(vtc_S6277C13[0]), // expected_vtbl_contents
  &(vtt_S6277C13[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S6277C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6277C13),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6277C13),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C7  : virtual S6277C8 , virtual S6277C13 {
  int s6277c7f0;
  ~S6277C7(); // tgen
  S6277C7(); // tgen
};
//SIG(-1 S6277C7) C1{ VBC2{ BC3{ VBC4{ m} VBC5{ m FL} BC6{ VBC7{ m} BC5}}} VBC8{ VBC6 FC9{ m}} Fi}


S6277C7 ::~S6277C7(){ note_dtor("S6277C7", this);} // tgen
S6277C7 ::S6277C7(){ note_ctor("S6277C7", this);} // tgen

static void Test_S6277C7()
{
  extern Class_Descriptor cd_S6277C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S6277C7, buf);
    S6277C7 *dp, &lv = *(dp=new (buf) S6277C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S6277C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C7)");
    check_base_class_offset(lv, (S10180C133*)(S6277C9*)(S6277C8*), 0, "S6277C7");
    /*is_ambiguous_... S6277C9::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*)(S6277C8*), ABISELECT(32,20), "S6277C7");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*)(S6277C8*), 0, "S6277C7");
    /*is_ambiguous_... S6277C7::S6277C11 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C7");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*)(S6277C8*), ABISELECT(24,12), "S6277C7");
    check_base_class_offset(lv, (S6277C11*)(S6277C9*)(S6277C8*), ABISELECT(16,8), "S6277C7");
    check_base_class_offset(lv, (S6277C9*)(S6277C8*), ABISELECT(16,8), "S6277C7");
    check_base_class_offset(lv, (S6277C8*), ABISELECT(16,8), "S6277C7");
    /*is_ambiguous_... S6277C7::S6277C11 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(64,40), "S6277C7");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*), ABISELECT(56,36), "S6277C7");
    check_base_class_offset(lv, (S6277C13*), ABISELECT(40,28), "S6277C7");
    check_field_offset(lv, s6277c7f0, ABISELECT(8,4), "S6277C7.s6277c7f0");
    test_class_info(&lv, &cd_S6277C7);
    dp->~S6277C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C7(Test_S6277C7, "S6277C7", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S6277C7C1Ev();
extern void _ZN7S6277C7D1Ev();
Name_Map name_map_S6277C7[] = {
  NSPAIR(_ZN7S6277C7C1Ev),
  NSPAIR(_ZN7S6277C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
extern Class_Descriptor cd_S6277C8;
extern VTBL_ENTRY _ZTI7S6277C8[];
extern  VTBL_ENTRY _ZTV7S6277C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C8[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
static Base_Class bases_S6277C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6277C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6277C8,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C93,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(56,36), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6277C13,    ABISELECT(40,28), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6277C7[];
static  VTBL_ENTRY vtc_S6277C7[] = {
  ABISELECT(56,36),
  ABISELECT(40,28),
  0,
  ABISELECT(32,20),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
  ABISELECT(-40,-28),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
extern VTBL_ENTRY _ZTV7S6277C7[];
static  VTBL_ENTRY _tg__ZTV7S6277C8__7S6277C7[] = {
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C97S6277C8__7S6277C7[] = {
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C97S6277C8__7S6277C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__7S6277C7[] = {
  ABISELECT(-40,-28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C13__7S6277C7[] = {
  ABISELECT(-56,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__7S6277C7[] = {
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C7[] = {
  {&(_ZTV7S6277C7[8]),  8,20},
  {&(_ZTV7S6277C7[13]),  13,20},
  {&(_ZTV7S6277C7[17]),  17,20},
  {&(_ZTV7S6277C7[20]),  20,20},
  {&(_tg__ZTV7S6277C8__7S6277C7[5]),  5,5},
  {&(_tg__ZTV7S6277C97S6277C8__7S6277C7[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C97S6277C8__7S6277C7[3]),  3,3},
  {&(_tg__ZTV8S6277C13__7S6277C7[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C13__7S6277C7[3]),  3,3},
  {&(_tg__ZTV8S6277C11__A1__7S6277C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6277C7[];
extern  VTBL_ENTRY _ZTV7S6277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C7[];
Class_Descriptor cd_S6277C7 = {  "S6277C7", // class name
  bases_S6277C7, 10,
  &(vtc_S6277C7[0]), // expected_vtbl_contents
  &(vtt_S6277C7[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S6277C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6277C7),20, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6277C7),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C6  : virtual S6277C7 {
  virtual  ~S6277C6(); // _ZN7S6277C6D2Ev
  virtual void  v2(); // _ZN7S6277C62v2Ev
  S6277C6(); // tgen
};
//SIG(-1 S6277C6) C1{ VBC2{ VBC3{ BC4{ VBC5{ m} VBC6{ m FL} BC7{ VBC8{ m} BC6}}} VBC9{ VBC7 FC10{ m}} Fi} vd v1}


 S6277C6 ::~S6277C6(){ note_dtor("S6277C6", this);}
void  S6277C6 ::v2(){vfunc_called(this, "_ZN7S6277C62v2Ev");}
S6277C6 ::S6277C6(){ note_ctor("S6277C6", this);} // tgen

static void Test_S6277C6()
{
  extern Class_Descriptor cd_S6277C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S6277C6, buf);
    S6277C6 *dp, &lv = *(dp=new (buf) S6277C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S6277C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C6)");
    check_base_class_offset(lv, (S10180C133*)(S6277C9*)(S6277C8*), 0, "S6277C6");
    /*is_ambiguous_... S6277C9::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*)(S6277C8*), ABISELECT(40,24), "S6277C6");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*)(S6277C8*), 0, "S6277C6");
    /*is_ambiguous_... S6277C6::S6277C11 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C6");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*)(S6277C8*), ABISELECT(32,16), "S6277C6");
    check_base_class_offset(lv, (S6277C11*)(S6277C9*)(S6277C8*), ABISELECT(24,12), "S6277C6");
    check_base_class_offset(lv, (S6277C9*)(S6277C8*), ABISELECT(24,12), "S6277C6");
    check_base_class_offset(lv, (S6277C8*)(S6277C7*), ABISELECT(24,12), "S6277C6");
    /*is_ambiguous_... S6277C6::S6277C11 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(72,44), "S6277C6");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*), ABISELECT(64,40), "S6277C6");
    check_base_class_offset(lv, (S6277C13*)(S6277C7*), ABISELECT(48,32), "S6277C6");
    check_base_class_offset(lv, (S6277C7*), ABISELECT(8,4), "S6277C6");
    test_class_info(&lv, &cd_S6277C6);
    dp->~S6277C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C6(Test_S6277C6, "S6277C6", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S6277C6C1Ev();
extern void _ZN7S6277C6D2Ev();
Name_Map name_map_S6277C6[] = {
  NSPAIR(_ZN7S6277C6C1Ev),
  NSPAIR(_ZN7S6277C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
extern Class_Descriptor cd_S6277C8;
extern VTBL_ENTRY _ZTI7S6277C8[];
extern  VTBL_ENTRY _ZTV7S6277C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C8[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C7;
extern VTBL_ENTRY _ZTI7S6277C7[];
extern  VTBL_ENTRY _ZTV7S6277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C7[];
static Base_Class bases_S6277C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6277C9,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6277C8,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(64,40), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6277C13,    ABISELECT(48,32), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6277C7,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6277C6[];
extern void _ZN7S6277C6D1Ev();
extern void _ZN7S6277C6D0Ev();
extern void _ZN7S6277C62v2Ev();
static  VTBL_ENTRY vtc_S6277C6[] = {
  ABISELECT(64,40),
  ABISELECT(48,32),
  0,
  ABISELECT(40,24),
  0,
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C6[0]),
  (VTBL_ENTRY)&_ZN7S6277C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6277C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6277C62v2Ev,
  ABISELECT(56,36),
  ABISELECT(40,28),
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6277C6[0]),
  ABISELECT(16,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6277C6[0]),
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S6277C6[0]),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S6277C6[0]),
};
extern VTBL_ENTRY _ZTV7S6277C6[];
static  VTBL_ENTRY _tg__ZTV7S6277C7__7S6277C6[] = {
  ABISELECT(56,36),
  ABISELECT(40,28),
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C8__7S6277C7__7S6277C6[] = {
  ABISELECT(16,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__7S6277C7__7S6277C6[] = {
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__7S6277C7__7S6277C6[] = {
  ABISELECT(-64,-40),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C8__7S6277C6[] = {
  ABISELECT(16,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C97S6277C8__7S6277C6[] = {
  ABISELECT(16,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C97S6277C8__7S6277C6[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__7S6277C6[] = {
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C13__7S6277C6[] = {
  ABISELECT(-64,-40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__7S6277C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C6[] = {
  {&(_ZTV7S6277C6[9]),  9,32},
  {&(_ZTV7S6277C6[20]),  20,32},
  {&(_ZTV7S6277C6[25]),  25,32},
  {&(_ZTV7S6277C6[29]),  29,32},
  {&(_ZTV7S6277C6[32]),  32,32},
  {&(_tg__ZTV7S6277C7__7S6277C6[8]),  8,8},
  {&(_tg__ZTV7S6277C8__7S6277C7__7S6277C6[5]),  5,5},
  {&(_tg__ZTV8S6277C13__7S6277C7__7S6277C6[4]),  4,4},
  {&(_tg__ZTV8S6277C11__A1__7S6277C7__7S6277C6[3]),  3,3},
  {&(_tg__ZTV7S6277C8__7S6277C6[5]),  5,5},
  {&(_tg__ZTV7S6277C97S6277C8__7S6277C6[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C97S6277C8__7S6277C6[3]),  3,3},
  {&(_tg__ZTV8S6277C13__7S6277C6[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C13__7S6277C6[3]),  3,3},
  {&(_tg__ZTV8S6277C11__A1__7S6277C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6277C6[];
extern  VTBL_ENTRY _ZTV7S6277C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C6[];
Class_Descriptor cd_S6277C6 = {  "S6277C6", // class name
  bases_S6277C6, 11,
  &(vtc_S6277C6[0]), // expected_vtbl_contents
  &(vtt_S6277C6[0]), // expected_vtt_contents
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S6277C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6277C6),32, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6277C6),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C15  : S6277C11 {
  ~S6277C15(); // tgen
  S6277C15(); // tgen
};
//SIG(-1 S6277C15) C1{ BC2{ VBC3{ m} BC4{ m FL}}}


S6277C15 ::~S6277C15(){ note_dtor("S6277C15", this);} // tgen
S6277C15 ::S6277C15(){ note_ctor("S6277C15", this);} // tgen

static void Test_S6277C15()
{
  extern Class_Descriptor cd_S6277C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6277C15, buf);
    S6277C15 *dp, &lv = *(dp=new (buf) S6277C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6277C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C15)");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C15");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(8,4), "S6277C15");
    check_base_class_offset(lv, (S6277C11*), 0, "S6277C15");
    test_class_info(&lv, &cd_S6277C15);
    dp->~S6277C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C15(Test_S6277C15, "S6277C15", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S6277C15C1Ev();
extern void _ZN8S6277C15D1Ev();
Name_Map name_map_S6277C15[] = {
  NSPAIR(_ZN8S6277C15C1Ev),
  NSPAIR(_ZN8S6277C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
static Base_Class bases_S6277C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    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_S6277C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6277C15[];
static  VTBL_ENTRY vtc_S6277C15[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C15[0]),
};
extern VTBL_ENTRY _ZTV8S6277C15[];
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C15[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C15[] = {
  {&(_ZTV8S6277C15[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6277C15[];
extern  VTBL_ENTRY _ZTV8S6277C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C15[];
Class_Descriptor cd_S6277C15 = {  "S6277C15", // class name
  bases_S6277C15, 3,
  &(vtc_S6277C15[0]), // expected_vtbl_contents
  &(vtt_S6277C15[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S6277C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6277C15),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6277C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C17  : virtual S6277C11 , S6277C13 {
  int s6277c17f0:18;
  virtual  ~S6277C17(); // _ZN8S6277C17D2Ev
  S6277C17(); // tgen
};
//SIG(-1 S6277C17) C1{ VBC2{ VBC3{ m} BC4{ m FL}} BC5{ VBC2 FC6{ m}} vd Fi:18}


 S6277C17 ::~S6277C17(){ note_dtor("S6277C17", this);}
S6277C17 ::S6277C17(){ note_ctor("S6277C17", this);} // tgen

static void Test_S6277C17()
{
  extern Class_Descriptor cd_S6277C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6277C17, buf);
    S6277C17 *dp, &lv = *(dp=new (buf) S6277C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6277C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C17)");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C17");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(24,12), "S6277C17");
    check_base_class_offset(lv, (S6277C11*), ABISELECT(16,8), "S6277C17");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*), ABISELECT(16,8), "S6277C17");
    check_base_class_offset(lv, (S6277C13*), 0, "S6277C17");
    set_bf_and_test(lv, s6277c17f0, ABISELECT(9,5), 0, 18, 1, "S6277C17");
    set_bf_and_test(lv, s6277c17f0, ABISELECT(9,5), 0, 18, hide_sll(1LL<<17), "S6277C17");
    test_class_info(&lv, &cd_S6277C17);
    dp->~S6277C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C17(Test_S6277C17, "S6277C17", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S6277C17C1Ev();
extern void _ZN8S6277C17D2Ev();
Name_Map name_map_S6277C17[] = {
  NSPAIR(_ZN8S6277C17C1Ev),
  NSPAIR(_ZN8S6277C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
static Base_Class bases_S6277C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6277C11,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6277C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6277C17[];
extern void _ZN8S6277C17D1Ev();
extern void _ZN8S6277C17D0Ev();
static  VTBL_ENTRY vtc_S6277C17[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C17[0]),
  (VTBL_ENTRY)&_ZN8S6277C17D1Ev,
  (VTBL_ENTRY)&_ZN8S6277C17D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C17[0]),
};
extern VTBL_ENTRY _ZTV8S6277C17[];
static  VTBL_ENTRY _tg__ZTV8S6277C13__8S6277C17[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C13__8S6277C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C17[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C17[] = {
  {&(_ZTV8S6277C17[4]),  4,9},
  {&(_tg__ZTV8S6277C13__8S6277C17[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C13__8S6277C17[3]),  3,3},
  {&(_ZTV8S6277C17[9]),  9,9},
  {&(_tg__ZTV8S6277C11__8S6277C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6277C17[];
extern  VTBL_ENTRY _ZTV8S6277C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C17[];
Class_Descriptor cd_S6277C17 = {  "S6277C17", // class name
  bases_S6277C17, 4,
  &(vtc_S6277C17[0]), // expected_vtbl_contents
  &(vtt_S6277C17[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S6277C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6277C17),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6277C17),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C19  : S6277C13 {
  void *s6277c19f0;
  ~S6277C19(); // tgen
  S6277C19(); // tgen
};
//SIG(-1 S6277C19) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m FL}} FC6{ m}} Fp}


S6277C19 ::~S6277C19(){ note_dtor("S6277C19", this);} // tgen
S6277C19 ::S6277C19(){ note_ctor("S6277C19", this);} // tgen

static void Test_S6277C19()
{
  extern Class_Descriptor cd_S6277C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S6277C19, buf);
    S6277C19 *dp, &lv = *(dp=new (buf) S6277C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S6277C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C19)");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C19");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(32,16), "S6277C19");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*), ABISELECT(24,12), "S6277C19");
    check_base_class_offset(lv, (S6277C13*), 0, "S6277C19");
    check_field_offset(lv, s6277c19f0, ABISELECT(16,8), "S6277C19.s6277c19f0");
    test_class_info(&lv, &cd_S6277C19);
    dp->~S6277C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C19(Test_S6277C19, "S6277C19", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S6277C19C1Ev();
extern void _ZN8S6277C19D1Ev();
Name_Map name_map_S6277C19[] = {
  NSPAIR(_ZN8S6277C19C1Ev),
  NSPAIR(_ZN8S6277C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
static Base_Class bases_S6277C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6277C11,    ABISELECT(24,12), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6277C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6277C19[];
static  VTBL_ENTRY vtc_S6277C19[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C19[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6277C19[0]),
};
extern VTBL_ENTRY _ZTV8S6277C19[];
static  VTBL_ENTRY _tg__ZTV8S6277C13__8S6277C19[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C13__8S6277C19[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C19[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C19[] = {
  {&(_ZTV8S6277C19[4]),  4,7},
  {&(_tg__ZTV8S6277C13__8S6277C19[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C13__8S6277C19[3]),  3,3},
  {&(_ZTV8S6277C19[7]),  7,7},
  {&(_tg__ZTV8S6277C11__8S6277C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6277C19[];
extern  VTBL_ENTRY _ZTV8S6277C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C19[];
Class_Descriptor cd_S6277C19 = {  "S6277C19", // class name
  bases_S6277C19, 4,
  &(vtc_S6277C19[0]), // expected_vtbl_contents
  &(vtt_S6277C19[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S6277C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6277C19),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6277C19),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C20  : virtual S10180C93 , S10180C133 , S6277C9 {
  ~S6277C20(); // tgen
  S6277C20(); // tgen
};
//SIG(-1 S6277C20) C1{ VBC2{ m FL} BC3{ m} BC4{ VBC3 VBC2 BC5{ VBC6{ m} BC2}}}


S6277C20 ::~S6277C20(){ note_dtor("S6277C20", this);} // tgen
S6277C20 ::S6277C20(){ note_ctor("S6277C20", this);} // tgen

static void Test_S6277C20()
{
  extern Class_Descriptor cd_S6277C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S6277C20, buf);
    S6277C20 *dp, &lv = *(dp=new (buf) S6277C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S6277C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C20)");
    /*is_ambiguous_... S6277C20::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S6277C20");
    /*is_ambiguous_... S6277C9::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*), ABISELECT(16,12), "S6277C20");
    /*is_ambiguous_... S6277C20::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*), 0, "S6277C20");
    check_base_class_offset(lv, (S10180C133*)(S6277C9*), ABISELECT(24,20), "S6277C20");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*), 0, "S6277C20");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*), ABISELECT(8,4), "S6277C20");
    check_base_class_offset(lv, (S6277C11*)(S6277C9*), 0, "S6277C20");
    check_base_class_offset(lv, (S6277C9*), 0, "S6277C20");
    test_class_info(&lv, &cd_S6277C20);
    dp->~S6277C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C20(Test_S6277C20, "S6277C20", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S6277C20C1Ev();
extern void _ZN8S6277C20D1Ev();
Name_Map name_map_S6277C20[] = {
  NSPAIR(_ZN8S6277C20C1Ev),
  NSPAIR(_ZN8S6277C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
static Base_Class bases_S6277C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C133,    ABISELECT(24,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    5, //immediately_derived
  0, 0},
  {&cd_S6277C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6277C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6277C20[];
static  VTBL_ENTRY vtc_S6277C20[] = {
  ABISELECT(16,12),
  ABISELECT(24,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C20[0]),
};
extern VTBL_ENTRY _ZTV8S6277C20[];
static  VTBL_ENTRY _tg__ZTV7S6277C9__8S6277C20[] = {
  ABISELECT(16,12),
  ABISELECT(24,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C9__8S6277C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C20[] = {
  {&(_ZTV8S6277C20[5]),  5,5},
  {&(_tg__ZTV7S6277C9__8S6277C20[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C9__8S6277C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6277C20[];
extern  VTBL_ENTRY _ZTV8S6277C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C20[];
Class_Descriptor cd_S6277C20 = {  "S6277C20", // class name
  bases_S6277C20, 7,
  &(vtc_S6277C20[0]), // expected_vtbl_contents
  &(vtt_S6277C20[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S6277C20),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6277C20),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6277C20),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C18  : virtual S10180C133 , S6277C9 , virtual S6277C13 , S6277C19 , virtual S6277C20 {
  ~S6277C18(); // tgen
  S6277C18(); // tgen
};
//SIG(-1 S6277C18) C1{ VBC2{ m} BC3{ VBC2 VBC4{ m FL} BC5{ VBC6{ m} BC4}} VBC7{ VBC5 FC8{ m}} BC9{ BC7 Fp} VBC10{ VBC4 BC2 BC3}}


S6277C18 ::~S6277C18(){ note_dtor("S6277C18", this);} // tgen
S6277C18 ::S6277C18(){ note_ctor("S6277C18", this);} // tgen

static void Test_S6277C18()
{
  extern Class_Descriptor cd_S6277C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S6277C18, buf);
    S6277C18 *dp, &lv = *(dp=new (buf) S6277C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S6277C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C18)");
    /*is_ambiguous_... S6277C18::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*), 0, "S6277C18");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C133*)(S6277C9*), 0, "S6277C18");
    check_base_class_offset(lv, (S10180C133*)(S6277C9*)(S6277C20*), 0, "S6277C18");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*), ABISELECT(40,24), "S6277C18");
    /*is_ambiguous_... S6277C20::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C20*), ABISELECT(40,24), "S6277C18");
    /*is_ambiguous_... S6277C9::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*)(S6277C20*), ABISELECT(40,24), "S6277C18");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*), 0, "S6277C18");
    /*is_ambiguous_... S6277C18::S6277C11 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C18");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*)(S6277C20*), 0, "S6277C18");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*), ABISELECT(8,4), "S6277C18");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S6277C11*)(S6277C9*), 0, "S6277C18");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S6277C9*), 0, "S6277C18");
    /*is_ambiguous_... S6277C18::S6277C11 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(72,44), "S6277C18");
    /*is_ambiguous_... S6277C18::S6277C13 */ AMB_check_base_class_offset(lv, (S6277C11*)(S6277C13*), ABISELECT(64,40), "S6277C18");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*)(S6277C19*), ABISELECT(64,40), "S6277C18");
    /*is_ambiguous_... S6277C18::S6277C13 */ AMB_check_base_class_offset(lv, (S6277C13*), ABISELECT(48,32), "S6277C18");
    check_base_class_offset(lv, (S6277C13*)(S6277C19*), ABISELECT(16,12), "S6277C18");
    check_base_class_offset(lv, (S6277C19*), ABISELECT(16,12), "S6277C18");
    /*is_ambiguous_... S6277C20::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S6277C20*), ABISELECT(80,52), "S6277C18");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*)(S6277C20*), ABISELECT(88,56), "S6277C18");
    check_base_class_offset(lv, (S6277C11*)(S6277C9*)(S6277C20*), ABISELECT(80,52), "S6277C18");
    check_base_class_offset(lv, (S6277C9*)(S6277C20*), ABISELECT(80,52), "S6277C18");
    check_base_class_offset(lv, (S6277C20*), ABISELECT(80,52), "S6277C18");
    test_class_info(&lv, &cd_S6277C18);
    dp->~S6277C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C18(Test_S6277C18, "S6277C18", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN8S6277C18C1Ev();
extern void _ZN8S6277C18D1Ev();
Name_Map name_map_S6277C18[] = {
  NSPAIR(_ZN8S6277C18C1Ev),
  NSPAIR(_ZN8S6277C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C19;
extern VTBL_ENTRY _ZTI8S6277C19[];
extern  VTBL_ENTRY _ZTV8S6277C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C19[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
extern Class_Descriptor cd_S6277C20;
extern VTBL_ENTRY _ZTI8S6277C20[];
extern  VTBL_ENTRY _ZTV8S6277C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C20[];
static Base_Class bases_S6277C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S6277C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6277C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C93,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(64,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6277C13,    ABISELECT(48,32), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6277C13,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6277C19,    ABISELECT(16,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C133,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6277C9,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6277C20,    ABISELECT(80,52), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6277C18[];
static  VTBL_ENTRY vtc_S6277C18[] = {
  ABISELECT(80,52),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(40,24),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
extern VTBL_ENTRY _ZTV8S6277C18[];
static  VTBL_ENTRY _tg__ZTV7S6277C9__8S6277C18[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C9__8S6277C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C19__8S6277C18[] = {
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C138S6277C19__A1__8S6277C18[] = {
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C138S6277C19__A1__8S6277C18[] = {
  ABISELECT(-64,-40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C19__8S6277C18[] = {
  ABISELECT(-64,-40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S6277C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__8S6277C18[] = {
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C13__8S6277C18[] = {
  ABISELECT(-64,-40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__8S6277C18[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C20__8S6277C18[] = {
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C20[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C98S6277C20__A1__8S6277C18[] = {
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C98S6277C20__A2__8S6277C18[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C18[] = {
  {&(_ZTV8S6277C18[8]),  8,24},
  {&(_tg__ZTV7S6277C9__8S6277C18[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C9__8S6277C18[3]),  3,3},
  {&(_tg__ZTV8S6277C19__8S6277C18[4]),  4,4},
  {&(_tg__ZTV8S6277C138S6277C19__A1__8S6277C18[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C138S6277C19__A1__8S6277C18[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C19__8S6277C18[3]),  3,3},
  {&(_ZTV8S6277C18[16]),  16,24},
  {&(_ZTV8S6277C18[19]),  19,24},
  {&(_ZTV8S6277C18[12]),  12,24},
  {&(_ZTV8S6277C18[24]),  24,24},
  {&(_tg__ZTV8S6277C13__8S6277C18[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C13__8S6277C18[3]),  3,3},
  {&(_tg__ZTV8S6277C11__A1__8S6277C18[3]),  3,3},
  {&(_tg__ZTV8S6277C20__8S6277C18[5]),  5,5},
  {&(_tg__ZTV7S6277C98S6277C20__A1__8S6277C18[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C98S6277C20__A2__8S6277C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6277C18[];
extern  VTBL_ENTRY _ZTV8S6277C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C18[];
Class_Descriptor cd_S6277C18 = {  "S6277C18", // class name
  bases_S6277C18, 16,
  &(vtc_S6277C18[0]), // expected_vtbl_contents
  &(vtt_S6277C18[0]), // expected_vtt_contents
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI8S6277C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6277C18),24, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6277C18),17, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C22  : virtual S6277C11 , S6277C13 {
  virtual void  v3(); // _ZN8S6277C222v3Ev
  ~S6277C22(); // tgen
  S6277C22(); // tgen
};
//SIG(-1 S6277C22) C1{ VBC2{ VBC3{ m} BC4{ m FL}} BC5{ VBC2 FC6{ m}} v1}


void  S6277C22 ::v3(){vfunc_called(this, "_ZN8S6277C222v3Ev");}
S6277C22 ::~S6277C22(){ note_dtor("S6277C22", this);} // tgen
S6277C22 ::S6277C22(){ note_ctor("S6277C22", this);} // tgen

static void Test_S6277C22()
{
  extern Class_Descriptor cd_S6277C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6277C22, buf);
    S6277C22 *dp, &lv = *(dp=new (buf) S6277C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6277C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C22)");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C22");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(24,12), "S6277C22");
    check_base_class_offset(lv, (S6277C11*), ABISELECT(16,8), "S6277C22");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*), ABISELECT(16,8), "S6277C22");
    check_base_class_offset(lv, (S6277C13*), 0, "S6277C22");
    test_class_info(&lv, &cd_S6277C22);
    dp->~S6277C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C22(Test_S6277C22, "S6277C22", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S6277C22C1Ev();
extern void _ZN8S6277C22D1Ev();
Name_Map name_map_S6277C22[] = {
  NSPAIR(_ZN8S6277C22C1Ev),
  NSPAIR(_ZN8S6277C22D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
static Base_Class bases_S6277C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6277C11,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6277C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6277C22[];
extern void _ZN8S6277C222v3Ev();
static  VTBL_ENTRY vtc_S6277C22[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C22[0]),
  (VTBL_ENTRY)&_ZN8S6277C222v3Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C22[0]),
};
extern VTBL_ENTRY _ZTV8S6277C22[];
static  VTBL_ENTRY _tg__ZTV8S6277C13__8S6277C22[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C13__8S6277C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C22[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C22[] = {
  {&(_ZTV8S6277C22[4]),  4,8},
  {&(_tg__ZTV8S6277C13__8S6277C22[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C13__8S6277C22[3]),  3,3},
  {&(_ZTV8S6277C22[8]),  8,8},
  {&(_tg__ZTV8S6277C11__8S6277C22[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6277C22[];
extern  VTBL_ENTRY _ZTV8S6277C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C22[];
Class_Descriptor cd_S6277C22 = {  "S6277C22", // class name
  bases_S6277C22, 4,
  &(vtc_S6277C22[0]), // expected_vtbl_contents
  &(vtt_S6277C22[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S6277C22),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6277C22),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6277C22),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C21  : S6277C22 {
  ~S6277C21(); // tgen
  S6277C21(); // tgen
};
//SIG(-1 S6277C21) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m FL}} BC6{ VBC3 FC7{ m}} v1}}


S6277C21 ::~S6277C21(){ note_dtor("S6277C21", this);} // tgen
S6277C21 ::S6277C21(){ note_ctor("S6277C21", this);} // tgen

static void Test_S6277C21()
{
  extern Class_Descriptor cd_S6277C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6277C21, buf);
    S6277C21 *dp, &lv = *(dp=new (buf) S6277C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6277C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C21)");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C21");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(24,12), "S6277C21");
    check_base_class_offset(lv, (S6277C11*)(S6277C22*), ABISELECT(16,8), "S6277C21");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*)(S6277C22*), ABISELECT(16,8), "S6277C21");
    check_base_class_offset(lv, (S6277C13*)(S6277C22*), 0, "S6277C21");
    check_base_class_offset(lv, (S6277C22*), 0, "S6277C21");
    test_class_info(&lv, &cd_S6277C21);
    dp->~S6277C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C21(Test_S6277C21, "S6277C21", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S6277C21C1Ev();
extern void _ZN8S6277C21D1Ev();
Name_Map name_map_S6277C21[] = {
  NSPAIR(_ZN8S6277C21C1Ev),
  NSPAIR(_ZN8S6277C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C22;
extern VTBL_ENTRY _ZTI8S6277C22[];
extern  VTBL_ENTRY _ZTV8S6277C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C22[];
static Base_Class bases_S6277C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6277C11,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6277C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6277C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6277C21[];
extern void _ZN8S6277C222v3Ev();
static  VTBL_ENTRY vtc_S6277C21[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C21[0]),
  (VTBL_ENTRY)&_ZN8S6277C222v3Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C21[0]),
};
extern VTBL_ENTRY _ZTV8S6277C21[];
extern void _ZN8S6277C222v3Ev();
static  VTBL_ENTRY _tg__ZTV8S6277C22__8S6277C21[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C22[0]),
  (VTBL_ENTRY)&_ZN8S6277C222v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6277C138S6277C22__8S6277C21[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C138S6277C22__8S6277C21[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C22__8S6277C21[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C21[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTT_ENTRY vtt_S6277C21[] = {
  {&(_ZTV8S6277C21[4]),  4,8},
  {&(_tg__ZTV8S6277C22__8S6277C21[4]),  4,5},
  {&(_tg__ZTV8S6277C138S6277C22__8S6277C21[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C138S6277C22__8S6277C21[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C22__8S6277C21[3]),  3,3},
  {&(_ZTV8S6277C21[8]),  8,8},
  {&(_tg__ZTV8S6277C11__8S6277C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6277C21[];
extern  VTBL_ENTRY _ZTV8S6277C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C21[];
Class_Descriptor cd_S6277C21 = {  "S6277C21", // class name
  bases_S6277C21, 5,
  &(vtc_S6277C21[0]), // expected_vtbl_contents
  &(vtt_S6277C21[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S6277C21),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6277C21),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6277C21),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C16  : S6277C7 , S6277C17 , S6277C15 , virtual S6277C18 , virtual S6277C21 {
  virtual  ~S6277C16(); // _ZN8S6277C16D2Ev
  S6277C16(); // tgen
};
//SIG(-1 S6277C16) C1{ BC2{ VBC3{ BC4{ VBC5{ m} VBC6{ m FL} BC7{ VBC8{ m} BC6}}} VBC9{ VBC7 FC10{ m}} Fi} BC11{ VBC7 BC9 vd Fi:18} BC12{ BC7} VBC13{ VBC5 BC4 VBC9 BC14{ BC9 Fp} VBC15{ VBC6 BC5 BC4}} VBC16{ BC17{ VBC7 BC9 v1}} vd}


 S6277C16 ::~S6277C16(){ note_dtor("S6277C16", this);}
S6277C16 ::S6277C16(){ note_ctor("S6277C16", this);} // tgen

static void Test_S6277C16()
{
  extern Class_Descriptor cd_S6277C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,29)];
    init_test(&cd_S6277C16, buf);
    S6277C16 *dp, &lv = *(dp=new (buf) S6277C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,112), "sizeof(S6277C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C16)");
    check_base_class_offset(lv, (S10180C133*)(S6277C9*)(S6277C8*), 0, "S6277C16");
    /*is_ambiguous_... S6277C18::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S6277C18*), 0, "S6277C16");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C133*)(S6277C9*)(S6277C18*), 0, "S6277C16");
    check_base_class_offset(lv, (S10180C133*)(S6277C9*)(S6277C20*), 0, "S6277C16");
    /*is_ambiguous_... S6277C9::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*)(S6277C8*), ABISELECT(64,40), "S6277C16");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*)(S6277C18*), ABISELECT(64,40), "S6277C16");
    /*is_ambiguous_... S6277C20::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C20*), ABISELECT(64,40), "S6277C16");
    /*is_ambiguous_... S6277C9::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*)(S6277C20*), ABISELECT(64,40), "S6277C16");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*)(S6277C8*), 0, "S6277C16");
    /*is_ambiguous_... S6277C16::S6277C11 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C16");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C15*), 0, "S6277C16");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*)(S6277C18*), 0, "S6277C16");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*)(S6277C20*), 0, "S6277C16");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*)(S6277C8*), ABISELECT(56,32), "S6277C16");
    check_base_class_offset(lv, (S6277C11*)(S6277C9*)(S6277C8*), ABISELECT(48,28), "S6277C16");
    check_base_class_offset(lv, (S6277C9*)(S6277C8*), ABISELECT(48,28), "S6277C16");
    check_base_class_offset(lv, (S6277C8*)(S6277C7*), ABISELECT(48,28), "S6277C16");
    /*is_ambiguous_... S6277C16::S6277C11 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(96,60), "S6277C16");
    /*is_ambiguous_... S6277C16::S6277C13 */ AMB_check_base_class_offset(lv, (S6277C11*)(S6277C13*), ABISELECT(88,56), "S6277C16");
    check_base_class_offset(lv, (S6277C11*)(S6277C17*), ABISELECT(88,56), "S6277C16");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*)(S6277C17*), ABISELECT(88,56), "S6277C16");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*)(S6277C19*)(S6277C18*), ABISELECT(88,56), "S6277C16");
    check_base_class_offset(lv, (S6277C11*)(S6277C22*)(S6277C21*), ABISELECT(88,56), "S6277C16");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*)(S6277C22*)(S6277C21*), ABISELECT(88,56), "S6277C16");
    check_base_class_offset(lv, (S6277C13*)(S6277C7*), ABISELECT(72,48), "S6277C16");
    /*is_ambiguous_... S6277C18::S6277C13 */ AMB_check_base_class_offset(lv, (S6277C13*)(S6277C18*), ABISELECT(72,48), "S6277C16");
    check_base_class_offset(lv, (S6277C7*), 0, "S6277C16");
    check_base_class_offset(lv, (S6277C13*)(S6277C17*), ABISELECT(16,8), "S6277C16");
    check_base_class_offset(lv, (S6277C17*), ABISELECT(16,8), "S6277C16");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C15*), ABISELECT(40,20), "S6277C16");
    check_base_class_offset(lv, (S6277C11*)(S6277C15*), ABISELECT(32,16), "S6277C16");
    check_base_class_offset(lv, (S6277C15*), ABISELECT(32,16), "S6277C16");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*)(S6277C18*), ABISELECT(112,72), "S6277C16");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S6277C11*)(S6277C9*)(S6277C18*), ABISELECT(104,68), "S6277C16");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S6277C9*)(S6277C18*), ABISELECT(104,68), "S6277C16");
    check_base_class_offset(lv, (S6277C13*)(S6277C19*)(S6277C18*), ABISELECT(120,80), "S6277C16");
    check_base_class_offset(lv, (S6277C19*)(S6277C18*), ABISELECT(120,80), "S6277C16");
    /*is_ambiguous_... S6277C20::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S6277C20*), ABISELECT(144,92), "S6277C16");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*)(S6277C20*), ABISELECT(152,96), "S6277C16");
    check_base_class_offset(lv, (S6277C11*)(S6277C9*)(S6277C20*), ABISELECT(144,92), "S6277C16");
    check_base_class_offset(lv, (S6277C9*)(S6277C20*), ABISELECT(144,92), "S6277C16");
    check_base_class_offset(lv, (S6277C20*)(S6277C18*), ABISELECT(144,92), "S6277C16");
    check_base_class_offset(lv, (S6277C18*), ABISELECT(104,68), "S6277C16");
    check_base_class_offset(lv, (S6277C13*)(S6277C22*)(S6277C21*), ABISELECT(160,104), "S6277C16");
    check_base_class_offset(lv, (S6277C22*)(S6277C21*), ABISELECT(160,104), "S6277C16");
    check_base_class_offset(lv, (S6277C21*), ABISELECT(160,104), "S6277C16");
    test_class_info(&lv, &cd_S6277C16);
    dp->~S6277C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C16(Test_S6277C16, "S6277C16", ABISELECT(176,112));

#else // __cplusplus

extern void _ZN8S6277C16C1Ev();
extern void _ZN8S6277C16D2Ev();
Name_Map name_map_S6277C16[] = {
  NSPAIR(_ZN8S6277C16C1Ev),
  NSPAIR(_ZN8S6277C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
extern Class_Descriptor cd_S6277C8;
extern VTBL_ENTRY _ZTI7S6277C8[];
extern  VTBL_ENTRY _ZTV7S6277C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C8[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C7;
extern VTBL_ENTRY _ZTI7S6277C7[];
extern  VTBL_ENTRY _ZTV7S6277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C7[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C17;
extern VTBL_ENTRY _ZTI8S6277C17[];
extern  VTBL_ENTRY _ZTV8S6277C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C17[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C15;
extern VTBL_ENTRY _ZTI8S6277C15[];
extern  VTBL_ENTRY _ZTV8S6277C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C15[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C19;
extern VTBL_ENTRY _ZTI8S6277C19[];
extern  VTBL_ENTRY _ZTV8S6277C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C19[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
extern Class_Descriptor cd_S6277C20;
extern VTBL_ENTRY _ZTI8S6277C20[];
extern  VTBL_ENTRY _ZTV8S6277C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C20[];
extern Class_Descriptor cd_S6277C18;
extern VTBL_ENTRY _ZTI8S6277C18[];
extern  VTBL_ENTRY _ZTV8S6277C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C18[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C22;
extern VTBL_ENTRY _ZTI8S6277C22[];
extern  VTBL_ENTRY _ZTV8S6277C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C22[];
extern Class_Descriptor cd_S6277C21;
extern VTBL_ENTRY _ZTI8S6277C21[];
extern  VTBL_ENTRY _ZTV8S6277C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C21[];
static Base_Class bases_S6277C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6277C9,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6277C8,    ABISELECT(48,28), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(88,56), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6277C13,    ABISELECT(72,48), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6277C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6277C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6277C17,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C93,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6277C15,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C93,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6277C9,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6277C13,    ABISELECT(120,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6277C19,    ABISELECT(120,80), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(144,92), //bcp->offset
    -1, //bcp->virtual_function_table_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
    25, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(152,96), //bcp->offset
    -1, //bcp->virtual_function_table_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
    23, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(144,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6277C9,    ABISELECT(144,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6277C20,    ABISELECT(144,92), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S6277C18,    ABISELECT(104,68), //bcp->offset
    34, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6277C13,    ABISELECT(160,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6277C22,    ABISELECT(160,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6277C21,    ABISELECT(160,104), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6277C16[];
extern void _ZN8S6277C16D1Ev();
extern void _ZN8S6277C16D0Ev();
extern void ABISELECT(_ZThn16_N8S6277C16D1Ev,_ZThn8_N8S6277C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S6277C16D0Ev,_ZThn8_N8S6277C16D0Ev)();
extern void _ZN8S6277C222v3Ev();
static  VTBL_ENTRY vtc_S6277C16[] = {
  ABISELECT(160,104),
  ABISELECT(144,92),
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(72,48),
  0,
  ABISELECT(64,40),
  0,
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  (VTBL_ENTRY)&_ZN8S6277C16D1Ev,
  (VTBL_ENTRY)&_ZN8S6277C16D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(72,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6277C16D1Ev,_ZThn8_N8S6277C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6277C16D0Ev,_ZThn8_N8S6277C16D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  ABISELECT(16,12),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  ABISELECT(-72,-48),
  ABISELECT(16,8),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  ABISELECT(40,24),
  ABISELECT(-16,-12),
  ABISELECT(-32,-20),
  ABISELECT(-40,-28),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  ABISELECT(-120,-80),
  ABISELECT(-32,-24),
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  ABISELECT(-80,-52),
  ABISELECT(-144,-92),
  ABISELECT(-144,-92),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  0,
  ABISELECT(-160,-104),
  ABISELECT(-72,-48),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  (VTBL_ENTRY)&_ZN8S6277C222v3Ev,
};
extern VTBL_ENTRY _ZTV8S6277C16[];
static  VTBL_ENTRY _tg__ZTV7S6277C7__8S6277C16[] = {
  ABISELECT(88,56),
  ABISELECT(72,48),
  0,
  ABISELECT(64,40),
  0,
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C8__7S6277C7__8S6277C16[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__7S6277C7__8S6277C16[] = {
  ABISELECT(-72,-48),
  ABISELECT(16,8),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__7S6277C7__8S6277C16[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
extern void _ZN8S6277C17D1Ev();
extern void _ZN8S6277C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6277C17__8S6277C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C17[0]),
  (VTBL_ENTRY)&_ZN8S6277C17D1Ev,
  (VTBL_ENTRY)&_ZN8S6277C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6277C138S6277C17__A1__8S6277C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C138S6277C17__A1__8S6277C16[] = {
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C17__8S6277C16[] = {
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6277C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C15__8S6277C16[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C118S6277C15__A2__8S6277C16[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C8__8S6277C16[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C97S6277C8__8S6277C16[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C97S6277C8__8S6277C16[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__8S6277C16[] = {
  ABISELECT(-72,-48),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C13__8S6277C16[] = {
  ABISELECT(-88,-56),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__8S6277C16[] = {
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C18__8S6277C16[] = {
  ABISELECT(40,24),
  ABISELECT(-16,-12),
  ABISELECT(-32,-20),
  ABISELECT(-40,-28),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C98S6277C18__A1__8S6277C16[] = {
  ABISELECT(-40,-28),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C98S6277C18__A3__8S6277C16[] = {
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C198S6277C18__8S6277C16[] = {
  ABISELECT(-120,-80),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C138S6277C198S6277C18__A2__8S6277C16[] = {
  ABISELECT(-120,-80),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C138S6277C198S6277C18__A2__8S6277C16[] = {
  ABISELECT(-88,-56),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C198S6277C18__8S6277C16[] = {
  ABISELECT(-88,-56),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S6277C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__8S6277C18__8S6277C16[] = {
  ABISELECT(-72,-48),
  ABISELECT(16,8),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__8S6277C18__8S6277C16[] = {
  ABISELECT(-88,-56),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C19__8S6277C18__8S6277C16[] = {
  ABISELECT(-120,-80),
  ABISELECT(-32,-24),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C20__8S6277C18__8S6277C16[] = {
  ABISELECT(-80,-52),
  ABISELECT(-144,-92),
  ABISELECT(-144,-92),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C20__8S6277C16[] = {
  ABISELECT(-80,-52),
  ABISELECT(-144,-92),
  ABISELECT(-144,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C20[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C98S6277C20__A2__8S6277C16[] = {
  ABISELECT(-80,-52),
  ABISELECT(-144,-92),
  ABISELECT(-144,-92),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C98S6277C20__A4__8S6277C16[] = {
  ABISELECT(-144,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
extern void _ZN8S6277C222v3Ev();
static  VTBL_ENTRY _tg__ZTV8S6277C21__8S6277C16[] = {
  ABISELECT(-160,-104),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C21[0]),
  (VTBL_ENTRY)&_ZN8S6277C222v3Ev,
};
extern void _ZN8S6277C222v3Ev();
static  VTBL_ENTRY _tg__ZTV8S6277C228S6277C21__8S6277C16[] = {
  ABISELECT(-160,-104),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C22[0]),
  (VTBL_ENTRY)&_ZN8S6277C222v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6277C138S6277C228S6277C21__A3__8S6277C16[] = {
  ABISELECT(-160,-104),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C138S6277C228S6277C21__A3__8S6277C16[] = {
  ABISELECT(-88,-56),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C228S6277C21__8S6277C16[] = {
  ABISELECT(-88,-56),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S6277C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C21__8S6277C16[] = {
  ABISELECT(-88,-56),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S6277C21[0]),
};
static  VTT_ENTRY vtt_S6277C16[] = {
  {&(_ZTV8S6277C16[11]),  11,57},
  {&(_tg__ZTV7S6277C7__8S6277C16[8]),  8,8},
  {&(_tg__ZTV7S6277C8__7S6277C7__8S6277C16[5]),  5,5},
  {&(_tg__ZTV8S6277C13__7S6277C7__8S6277C16[4]),  4,4},
  {&(_tg__ZTV8S6277C11__A1__7S6277C7__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C17__8S6277C16[4]),  4,6},
  {&(_tg__ZTV8S6277C138S6277C17__A1__8S6277C16[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C138S6277C17__A1__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C17__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C15__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C118S6277C15__A2__8S6277C16[3]),  3,3},
  {&(_ZTV8S6277C16[27]),  27,57},
  {&(_ZTV8S6277C16[31]),  31,57},
  {&(_ZTV8S6277C16[34]),  34,57},
  {&(_ZTV8S6277C16[17]),  17,57},
  {&(_ZTV8S6277C16[22]),  22,57},
  {&(_ZTV8S6277C16[42]),  42,57},
  {&(_ZTV8S6277C16[46]),  46,57},
  {&(_ZTV8S6277C16[51]),  51,57},
  {&(_ZTV8S6277C16[56]),  56,57},
  {&(_tg__ZTV7S6277C8__8S6277C16[5]),  5,5},
  {&(_tg__ZTV7S6277C97S6277C8__8S6277C16[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C97S6277C8__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C13__8S6277C16[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C13__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C11__A1__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C18__8S6277C16[8]),  8,8},
  {&(_tg__ZTV7S6277C98S6277C18__A1__8S6277C16[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C98S6277C18__A3__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C198S6277C18__8S6277C16[4]),  4,4},
  {&(_tg__ZTV8S6277C138S6277C198S6277C18__A2__8S6277C16[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C138S6277C198S6277C18__A2__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C198S6277C18__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C13__8S6277C18__8S6277C16[4]),  4,4},
  {&(_tg__ZTV8S6277C11__A1__8S6277C18__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C19__8S6277C18__8S6277C16[4]),  4,4},
  {&(_tg__ZTV8S6277C20__8S6277C18__8S6277C16[5]),  5,5},
  {&(_tg__ZTV8S6277C20__8S6277C16[5]),  5,5},
  {&(_tg__ZTV7S6277C98S6277C20__A2__8S6277C16[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C98S6277C20__A4__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C21__8S6277C16[4]),  4,5},
  {&(_tg__ZTV8S6277C228S6277C21__8S6277C16[4]),  4,5},
  {&(_tg__ZTV8S6277C138S6277C228S6277C21__A3__8S6277C16[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C138S6277C228S6277C21__A3__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C228S6277C21__8S6277C16[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C21__8S6277C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6277C16[];
extern  VTBL_ENTRY _ZTV8S6277C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C16[];
Class_Descriptor cd_S6277C16 = {  "S6277C16", // class name
  bases_S6277C16, 30,
  &(vtc_S6277C16[0]), // expected_vtbl_contents
  &(vtt_S6277C16[0]), // expected_vtt_contents
  ABISELECT(176,112), // object size
  NSPAIRA(_ZTI8S6277C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6277C16),57, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6277C16),46, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6277C1  : S10180C138 , virtual S6277C3 , S6277C6 , virtual S6277C15 , virtual S6277C16 {
  virtual void  v1(); // _ZN7S6277C12v1Ev
  ~S6277C1(); // tgen
  S6277C1(); // tgen
};
//SIG(1 S6277C1) C1{ BC2{ m} VBC3{ VBC4{ BC5{ m} vd} Fi} BC6{ VBC7{ VBC8{ BC9{ VBC5 VBC10{ m FL} BC11{ VBC12{ m} BC10}}} VBC13{ VBC11 FC14{ m}} Fi} vd v2} VBC15{ BC11} VBC16{ BC7 BC17{ VBC11 BC13 vd Fi:18} BC15 VBC18{ VBC5 BC9 VBC13 BC19{ BC13 Fp} VBC20{ VBC10 BC5 BC9}} VBC21{ BC22{ VBC11 BC13 v3}} vd} v1}


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

static void Test_S6277C1()
{
  extern Class_Descriptor cd_S6277C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,37)];
    init_test(&cd_S6277C1, buf);
    S6277C1 *dp, &lv = *(dp=new (buf) S6277C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,144), "sizeof(S6277C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6277C1)");
    check_base_class_offset(lv, (S10180C138*), 0, "S6277C1");
    check_base_class_offset(lv, (S10180C133*)(S6277C4_nt*), ABISELECT(8,4), "S6277C1");
    check_base_class_offset(lv, (S6277C4_nt*)(S6277C3*), ABISELECT(8,4), "S6277C1");
    check_base_class_offset(lv, (S6277C3*), ABISELECT(8,4), "S6277C1");
    check_base_class_offset(lv, (S10180C133*)(S6277C9*)(S6277C8*), 0, "S6277C1");
    /*is_ambiguous_... S6277C18::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S6277C18*), 0, "S6277C1");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C133*)(S6277C9*)(S6277C18*), 0, "S6277C1");
    check_base_class_offset(lv, (S10180C133*)(S6277C9*)(S6277C20*), 0, "S6277C1");
    /*is_ambiguous_... S6277C9::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*)(S6277C8*), ABISELECT(56,32), "S6277C1");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*)(S6277C18*), ABISELECT(56,32), "S6277C1");
    /*is_ambiguous_... S6277C20::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C20*), ABISELECT(56,32), "S6277C1");
    /*is_ambiguous_... S6277C9::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C9*)(S6277C20*), ABISELECT(56,32), "S6277C1");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*)(S6277C8*), 0, "S6277C1");
    /*is_ambiguous_... S6277C1::S6277C11 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6277C11*), 0, "S6277C1");
    /*is_ambiguous_... S6277C1::S6277C15 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C15*), 0, "S6277C1");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C15*)(S6277C16*), 0, "S6277C1");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*)(S6277C18*), 0, "S6277C1");
    check_base_class_offset(lv, (S10180C20*)(S6277C11*)(S6277C9*)(S6277C20*), 0, "S6277C1");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*)(S6277C8*), ABISELECT(48,24), "S6277C1");
    check_base_class_offset(lv, (S6277C11*)(S6277C9*)(S6277C8*), ABISELECT(40,20), "S6277C1");
    check_base_class_offset(lv, (S6277C9*)(S6277C8*), ABISELECT(40,20), "S6277C1");
    /*is_ambiguous_... S6277C1::S6277C7 */ AMB_check_base_class_offset(lv, (S6277C8*)(S6277C7*), ABISELECT(40,20), "S6277C1");
    check_base_class_offset(lv, (S6277C8*)(S6277C7*)(S6277C16*), ABISELECT(40,20), "S6277C1");
    /*is_ambiguous_... S6277C1::S6277C11 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C11*), ABISELECT(88,52), "S6277C1");
    /*is_ambiguous_... S6277C1::S6277C13 */ AMB_check_base_class_offset(lv, (S6277C11*)(S6277C13*), ABISELECT(80,48), "S6277C1");
    check_base_class_offset(lv, (S6277C11*)(S6277C17*)(S6277C16*), ABISELECT(80,48), "S6277C1");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*)(S6277C17*)(S6277C16*), ABISELECT(80,48), "S6277C1");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*)(S6277C19*)(S6277C18*), ABISELECT(80,48), "S6277C1");
    check_base_class_offset(lv, (S6277C11*)(S6277C22*)(S6277C21*), ABISELECT(80,48), "S6277C1");
    check_base_class_offset(lv, (S6277C11*)(S6277C13*)(S6277C22*)(S6277C21*), ABISELECT(80,48), "S6277C1");
    /*is_ambiguous_... S6277C1::S6277C7 */ AMB_check_base_class_offset(lv, (S6277C13*)(S6277C7*), ABISELECT(64,40), "S6277C1");
    check_base_class_offset(lv, (S6277C13*)(S6277C7*)(S6277C16*), ABISELECT(64,40), "S6277C1");
    /*is_ambiguous_... S6277C18::S6277C13 */ AMB_check_base_class_offset(lv, (S6277C13*)(S6277C18*), ABISELECT(64,40), "S6277C1");
    check_base_class_offset(lv, (S6277C7*)(S6277C6*), ABISELECT(24,12), "S6277C1");
    check_base_class_offset(lv, (S6277C6*), 0, "S6277C1");
    /*is_ambiguous_... S6277C1::S6277C15 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C15*), ABISELECT(104,64), "S6277C1");
    /*is_ambiguous_... S6277C1::S6277C15 */ AMB_check_base_class_offset(lv, (S6277C11*)(S6277C15*), ABISELECT(96,60), "S6277C1");
    /*is_ambiguous_... S6277C1::S6277C15 */ AMB_check_base_class_offset(lv, (S6277C15*), ABISELECT(96,60), "S6277C1");
    check_base_class_offset(lv, (S6277C7*)(S6277C16*), ABISELECT(112,72), "S6277C1");
    check_base_class_offset(lv, (S6277C13*)(S6277C17*)(S6277C16*), ABISELECT(128,80), "S6277C1");
    check_base_class_offset(lv, (S6277C17*)(S6277C16*), ABISELECT(128,80), "S6277C1");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C15*)(S6277C16*), ABISELECT(152,92), "S6277C1");
    check_base_class_offset(lv, (S6277C11*)(S6277C15*)(S6277C16*), ABISELECT(144,88), "S6277C1");
    check_base_class_offset(lv, (S6277C15*)(S6277C16*), ABISELECT(144,88), "S6277C1");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*)(S6277C18*), ABISELECT(168,104), "S6277C1");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S6277C11*)(S6277C9*)(S6277C18*), ABISELECT(160,100), "S6277C1");
    /*is_ambiguous_... S6277C18::S6277C9 */ AMB_check_base_class_offset(lv, (S6277C9*)(S6277C18*), ABISELECT(160,100), "S6277C1");
    check_base_class_offset(lv, (S6277C13*)(S6277C19*)(S6277C18*), ABISELECT(176,112), "S6277C1");
    check_base_class_offset(lv, (S6277C19*)(S6277C18*), ABISELECT(176,112), "S6277C1");
    /*is_ambiguous_... S6277C20::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S6277C20*), ABISELECT(200,124), "S6277C1");
    check_base_class_offset(lv, (S10180C93*)(S6277C11*)(S6277C9*)(S6277C20*), ABISELECT(208,128), "S6277C1");
    check_base_class_offset(lv, (S6277C11*)(S6277C9*)(S6277C20*), ABISELECT(200,124), "S6277C1");
    check_base_class_offset(lv, (S6277C9*)(S6277C20*), ABISELECT(200,124), "S6277C1");
    check_base_class_offset(lv, (S6277C20*)(S6277C18*), ABISELECT(200,124), "S6277C1");
    check_base_class_offset(lv, (S6277C18*)(S6277C16*), ABISELECT(160,100), "S6277C1");
    check_base_class_offset(lv, (S6277C13*)(S6277C22*)(S6277C21*), ABISELECT(216,136), "S6277C1");
    check_base_class_offset(lv, (S6277C22*)(S6277C21*), ABISELECT(216,136), "S6277C1");
    check_base_class_offset(lv, (S6277C21*)(S6277C16*), ABISELECT(216,136), "S6277C1");
    check_base_class_offset(lv, (S6277C16*), ABISELECT(112,72), "S6277C1");
    test_class_info(&lv, &cd_S6277C1);
    dp->~S6277C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6277C1(Test_S6277C1, "S6277C1", ABISELECT(232,144));

#else // __cplusplus

extern void _ZN7S6277C1C1Ev();
extern void _ZN7S6277C1D1Ev();
Name_Map name_map_S6277C1[] = {
  NSPAIR(_ZN7S6277C1C1Ev),
  NSPAIR(_ZN7S6277C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S6277C4_nt;
extern VTBL_ENTRY _ZTI10S6277C4_nt[];
extern  VTBL_ENTRY _ZTV10S6277C4_nt[];
extern Class_Descriptor cd_S6277C3;
extern VTBL_ENTRY _ZTI7S6277C3[];
extern  VTBL_ENTRY _ZTV7S6277C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C3[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
extern Class_Descriptor cd_S6277C8;
extern VTBL_ENTRY _ZTI7S6277C8[];
extern  VTBL_ENTRY _ZTV7S6277C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C8[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C7;
extern VTBL_ENTRY _ZTI7S6277C7[];
extern  VTBL_ENTRY _ZTV7S6277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C7[];
extern Class_Descriptor cd_S6277C6;
extern VTBL_ENTRY _ZTI7S6277C6[];
extern  VTBL_ENTRY _ZTV7S6277C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C6[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C15;
extern VTBL_ENTRY _ZTI8S6277C15[];
extern  VTBL_ENTRY _ZTV8S6277C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C15[];
extern Class_Descriptor cd_S6277C7;
extern VTBL_ENTRY _ZTI7S6277C7[];
extern  VTBL_ENTRY _ZTV7S6277C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C7[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C17;
extern VTBL_ENTRY _ZTI8S6277C17[];
extern  VTBL_ENTRY _ZTV8S6277C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C17[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C15;
extern VTBL_ENTRY _ZTI8S6277C15[];
extern  VTBL_ENTRY _ZTV8S6277C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C15[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C19;
extern VTBL_ENTRY _ZTI8S6277C19[];
extern  VTBL_ENTRY _ZTV8S6277C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C19[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6277C11;
extern VTBL_ENTRY _ZTI8S6277C11[];
extern  VTBL_ENTRY _ZTV8S6277C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C11[];
extern Class_Descriptor cd_S6277C9;
extern VTBL_ENTRY _ZTI7S6277C9[];
extern  VTBL_ENTRY _ZTV7S6277C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C9[];
extern Class_Descriptor cd_S6277C20;
extern VTBL_ENTRY _ZTI8S6277C20[];
extern  VTBL_ENTRY _ZTV8S6277C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C20[];
extern Class_Descriptor cd_S6277C18;
extern VTBL_ENTRY _ZTI8S6277C18[];
extern  VTBL_ENTRY _ZTV8S6277C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C18[];
extern Class_Descriptor cd_S6277C13;
extern VTBL_ENTRY _ZTI8S6277C13[];
extern  VTBL_ENTRY _ZTV8S6277C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C13[];
extern Class_Descriptor cd_S6277C22;
extern VTBL_ENTRY _ZTI8S6277C22[];
extern  VTBL_ENTRY _ZTV8S6277C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C22[];
extern Class_Descriptor cd_S6277C21;
extern VTBL_ENTRY _ZTI8S6277C21[];
extern  VTBL_ENTRY _ZTV8S6277C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C21[];
extern Class_Descriptor cd_S6277C16;
extern VTBL_ENTRY _ZTI8S6277C16[];
extern  VTBL_ENTRY _ZTV8S6277C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6277C16[];
static Base_Class bases_S6277C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C133,    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_S6277C4_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6277C3,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6277C9,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6277C8,    ABISELECT(40,20), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(88,52), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(80,48), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6277C13,    ABISELECT(64,40), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6277C7,    ABISELECT(24,12), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6277C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C93,    ABISELECT(104,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6277C15,    ABISELECT(96,60), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6277C7,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S6277C13,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6277C17,    ABISELECT(128,80), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_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
    23, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(144,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6277C15,    ABISELECT(144,88), //bcp->offset
    69, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(168,104), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6277C9,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6277C13,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6277C19,    ABISELECT(176,112), //bcp->offset
    80, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(200,124), //bcp->offset
    -1, //bcp->virtual_function_table_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
    34, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(208,128), //bcp->offset
    -1, //bcp->virtual_function_table_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
    32, //immediately_derived
  0, 0},
  {&cd_S6277C11,    ABISELECT(200,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S6277C9,    ABISELECT(200,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6277C20,    ABISELECT(200,124), //bcp->offset
    84, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S6277C18,    ABISELECT(160,100), //bcp->offset
    72, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S6277C13,    ABISELECT(216,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6277C22,    ABISELECT(216,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S6277C21,    ABISELECT(216,136), //bcp->offset
    89, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S6277C16,    ABISELECT(112,72), //bcp->offset
    49, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6277C1[];
extern void _ZN7S6277C1D1Ev();
extern void _ZN7S6277C1D0Ev();
extern void _ZN7S6277C62v2Ev();
extern void _ZN7S6277C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S6277C1D1Ev,_ZTv0_n12_N7S6277C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S6277C1D1Ev,_ZThn4_N7S6277C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6277C1D0Ev,_ZTv0_n12_N7S6277C1D0Ev)();
extern void ABISELECT(_ZThn8_N7S6277C1D0Ev,_ZThn4_N7S6277C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S6277C1D1Ev,_ZTv0_n48_N7S6277C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S6277C1D1Ev,_ZThn72_N7S6277C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S6277C1D0Ev,_ZTv0_n48_N7S6277C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S6277C1D0Ev,_ZThn72_N7S6277C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n96_N7S6277C1D1Ev,_ZTvn8_n48_N7S6277C1D1Ev)();
extern void ABISELECT(_ZTvn16_n96_N7S6277C1D0Ev,_ZTvn8_n48_N7S6277C1D0Ev)();
extern void _ZN8S6277C222v3Ev();
static  VTBL_ENTRY vtc_S6277C1[] = {
  ABISELECT(216,136),
  ABISELECT(200,124),
  ABISELECT(160,100),
  ABISELECT(112,72),
  ABISELECT(96,60),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(80,48),
  ABISELECT(64,40),
  0,
  ABISELECT(56,32),
  0,
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  (VTBL_ENTRY)&_ZN7S6277C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6277C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6277C62v2Ev,
  (VTBL_ENTRY)&_ZN7S6277C12v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6277C1D1Ev,_ZTv0_n12_N7S6277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6277C1D0Ev,_ZTv0_n12_N7S6277C1D0Ev),
  ABISELECT(56,36),
  ABISELECT(40,28),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  ABISELECT(-64,-40),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  ABISELECT(-112,-72),
  ABISELECT(104,64),
  ABISELECT(88,52),
  ABISELECT(48,28),
  ABISELECT(-32,-24),
  ABISELECT(-48,-32),
  ABISELECT(-112,-72),
  ABISELECT(-56,-40),
  ABISELECT(-112,-72),
  ABISELECT(-72,-52),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S6277C1D1Ev,_ZTv0_n48_N7S6277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S6277C1D0Ev,_ZTv0_n48_N7S6277C1D0Ev),
  ABISELECT(-128,-80),
  ABISELECT(-48,-32),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n96_N7S6277C1D1Ev,_ZTvn8_n48_N7S6277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n96_N7S6277C1D0Ev,_ZTvn8_n48_N7S6277C1D0Ev),
  ABISELECT(-144,-88),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  ABISELECT(40,24),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-104,-68),
  ABISELECT(-160,-100),
  ABISELECT(-160,-100),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  ABISELECT(-176,-112),
  ABISELECT(-96,-64),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  ABISELECT(-144,-92),
  ABISELECT(-200,-124),
  ABISELECT(-200,-124),
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  0,
  ABISELECT(-216,-136),
  ABISELECT(-136,-88),
  ABISELECT(-216,-136),
  (VTBL_ENTRY)&(_ZTI7S6277C1[0]),
  (VTBL_ENTRY)&_ZN8S6277C222v3Ev,
};
extern VTBL_ENTRY _ZTV7S6277C1[];
extern void _ZN7S6277C6D1Ev();
extern void _ZN7S6277C6D0Ev();
extern void _ZN7S6277C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6277C6__7S6277C1[] = {
  ABISELECT(80,48),
  ABISELECT(64,40),
  0,
  ABISELECT(56,32),
  0,
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C6[0]),
  (VTBL_ENTRY)&_ZN7S6277C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6277C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6277C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6277C7__7S6277C6__7S6277C1[] = {
  ABISELECT(56,36),
  ABISELECT(40,28),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6277C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C8__7S6277C6__7S6277C1[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6277C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__7S6277C6__7S6277C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S6277C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__7S6277C6__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S6277C6[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S6277C3D1Ev,_ZTv0_n12_N7S6277C3D1Ev)();
extern void _ZN7S6277C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6277C3D0Ev,_ZTv0_n12_N7S6277C3D0Ev)();
extern void _ZN7S6277C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6277C3__7S6277C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6277C3D1Ev,_ZTv0_n12_N7S6277C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6277C3D0Ev,_ZTv0_n12_N7S6277C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6277C7__7S6277C1[] = {
  ABISELECT(56,36),
  ABISELECT(40,28),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C8__7S6277C7__7S6277C1[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__7S6277C7__7S6277C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__7S6277C7__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C8__7S6277C1[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C97S6277C8__7S6277C1[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C97S6277C8__7S6277C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__7S6277C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C13__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__7S6277C1[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C15__7S6277C1[] = {
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C118S6277C15__A2__7S6277C1[] = {
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
extern void _ZN8S6277C16D1Ev();
extern void _ZN8S6277C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6277C16__7S6277C1[] = {
  ABISELECT(104,64),
  ABISELECT(88,52),
  ABISELECT(48,28),
  ABISELECT(-32,-24),
  ABISELECT(-48,-32),
  ABISELECT(-112,-72),
  ABISELECT(-56,-40),
  ABISELECT(-112,-72),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  (VTBL_ENTRY)&_ZN8S6277C16D1Ev,
  (VTBL_ENTRY)&_ZN8S6277C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6277C78S6277C16__A1__7S6277C1[] = {
  ABISELECT(-32,-24),
  ABISELECT(-48,-32),
  ABISELECT(-112,-72),
  ABISELECT(-56,-40),
  ABISELECT(-112,-72),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C8__7S6277C78S6277C16__A1__7S6277C1[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__7S6277C78S6277C16__A1__7S6277C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(16,8),
  ABISELECT(48,32),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__7S6277C78S6277C16__A1__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI7S6277C7[0]),
};
extern void _ZN8S6277C17D1Ev();
extern void _ZN8S6277C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6277C178S6277C16__7S6277C1[] = {
  ABISELECT(-128,-80),
  ABISELECT(-48,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C17[0]),
  (VTBL_ENTRY)&_ZN8S6277C17D1Ev,
  (VTBL_ENTRY)&_ZN8S6277C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6277C138S6277C178S6277C16__A1__7S6277C1[] = {
  ABISELECT(-128,-80),
  ABISELECT(-48,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C138S6277C178S6277C16__A1__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(48,32),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C178S6277C16__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(48,32),
  (VTBL_ENTRY)&(_ZTI8S6277C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C158S6277C16__A1__7S6277C1[] = {
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C118S6277C158S6277C16__A3__7S6277C1[] = {
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C8__8S6277C16__7S6277C1[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__8S6277C16__7S6277C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(16,8),
  ABISELECT(48,32),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__8S6277C16__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
};
extern void ABISELECT(_ZThn16_N8S6277C16D1Ev,_ZThn8_N8S6277C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S6277C16D0Ev,_ZThn8_N8S6277C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6277C17__8S6277C16__7S6277C1[] = {
  ABISELECT(-128,-80),
  ABISELECT(-48,-32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6277C16D1Ev,_ZThn8_N8S6277C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6277C16D0Ev,_ZThn8_N8S6277C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6277C15__8S6277C16__7S6277C1[] = {
  ABISELECT(-144,-88),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C18__8S6277C16__7S6277C1[] = {
  ABISELECT(40,24),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-104,-68),
  ABISELECT(-160,-100),
  ABISELECT(-160,-100),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C198S6277C18__8S6277C16__7S6277C1[] = {
  ABISELECT(-176,-112),
  ABISELECT(-96,-64),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C20__8S6277C16__7S6277C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-200,-124),
  ABISELECT(-200,-124),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
};
extern void _ZN8S6277C222v3Ev();
static  VTBL_ENTRY _tg__ZTV8S6277C21__8S6277C16__7S6277C1[] = {
  0,
  ABISELECT(-216,-136),
  ABISELECT(-136,-88),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S6277C16[0]),
  (VTBL_ENTRY)&_ZN8S6277C222v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6277C18__7S6277C1[] = {
  ABISELECT(40,24),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-104,-68),
  ABISELECT(-160,-100),
  ABISELECT(-160,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C98S6277C18__A1__7S6277C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(-160,-100),
  ABISELECT(-160,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C98S6277C18__A4__7S6277C1[] = {
  ABISELECT(-160,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C198S6277C18__7S6277C1[] = {
  ABISELECT(-176,-112),
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C138S6277C198S6277C18__A2__7S6277C1[] = {
  ABISELECT(-176,-112),
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C138S6277C198S6277C18__A2__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C198S6277C18__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI8S6277C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C13__8S6277C18__7S6277C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(16,8),
  ABISELECT(96,60),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__A1__8S6277C18__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C19__8S6277C18__7S6277C1[] = {
  ABISELECT(-176,-112),
  ABISELECT(-96,-64),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C20__8S6277C18__7S6277C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-200,-124),
  ABISELECT(-200,-124),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S6277C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C20__7S6277C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-200,-124),
  ABISELECT(-200,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C20[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6277C98S6277C20__A2__7S6277C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-200,-124),
  ABISELECT(-200,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S6277C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C117S6277C98S6277C20__A5__7S6277C1[] = {
  ABISELECT(-200,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C11[0]),
};
extern void _ZN8S6277C222v3Ev();
static  VTBL_ENTRY _tg__ZTV8S6277C21__7S6277C1[] = {
  ABISELECT(-216,-136),
  ABISELECT(-136,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C21[0]),
  (VTBL_ENTRY)&_ZN8S6277C222v3Ev,
};
extern void _ZN8S6277C222v3Ev();
static  VTBL_ENTRY _tg__ZTV8S6277C228S6277C21__7S6277C1[] = {
  ABISELECT(-216,-136),
  ABISELECT(-136,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C22[0]),
  (VTBL_ENTRY)&_ZN8S6277C222v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6277C138S6277C228S6277C21__A3__7S6277C1[] = {
  ABISELECT(-216,-136),
  ABISELECT(-136,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C138S6277C228S6277C21__A3__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(136,88),
  (VTBL_ENTRY)&(_ZTI8S6277C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C228S6277C21__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(136,88),
  (VTBL_ENTRY)&(_ZTI8S6277C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6277C11__8S6277C21__7S6277C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(136,88),
  (VTBL_ENTRY)&(_ZTI8S6277C21[0]),
};
static  VTT_ENTRY vtt_S6277C1[] = {
  {&(_ZTV7S6277C1[16]),  16,95},
  {&(_tg__ZTV7S6277C6__7S6277C1[9]),  9,12},
  {&(_tg__ZTV7S6277C7__7S6277C6__7S6277C1[8]),  8,8},
  {&(_tg__ZTV7S6277C8__7S6277C6__7S6277C1[5]),  5,5},
  {&(_tg__ZTV8S6277C13__7S6277C6__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C11__A1__7S6277C6__7S6277C1[3]),  3,3},
  {&(_ZTV7S6277C1[24]),  24,95},
  {&(_ZTV7S6277C1[24]),  24,95},
  {&(_ZTV7S6277C1[34]),  34,95},
  {&(_ZTV7S6277C1[39]),  39,95},
  {&(_ZTV7S6277C1[43]),  43,95},
  {&(_ZTV7S6277C1[46]),  46,95},
  {&(_ZTV7S6277C1[49]),  49,95},
  {&(_ZTV7S6277C1[61]),  61,95},
  {&(_ZTV7S6277C1[67]),  67,95},
  {&(_ZTV7S6277C1[72]),  72,95},
  {&(_ZTV7S6277C1[80]),  80,95},
  {&(_ZTV7S6277C1[84]),  84,95},
  {&(_ZTV7S6277C1[89]),  89,95},
  {&(_ZTV7S6277C1[94]),  94,95},
  {&(_tg__ZTV7S6277C3__7S6277C1[4]),  4,6},
  {&(_tg__ZTV7S6277C3__7S6277C1[4]),  4,6},
  {&(_tg__ZTV7S6277C7__7S6277C1[8]),  8,8},
  {&(_tg__ZTV7S6277C8__7S6277C7__7S6277C1[5]),  5,5},
  {&(_tg__ZTV8S6277C13__7S6277C7__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C11__A1__7S6277C7__7S6277C1[3]),  3,3},
  {&(_tg__ZTV7S6277C8__7S6277C1[5]),  5,5},
  {&(_tg__ZTV7S6277C97S6277C8__7S6277C1[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C97S6277C8__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C13__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C13__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C11__A1__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C15__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C118S6277C15__A2__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C16__7S6277C1[11]),  11,13},
  {&(_tg__ZTV7S6277C78S6277C16__A1__7S6277C1[8]),  8,8},
  {&(_tg__ZTV7S6277C8__7S6277C78S6277C16__A1__7S6277C1[5]),  5,5},
  {&(_tg__ZTV8S6277C13__7S6277C78S6277C16__A1__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C11__A1__7S6277C78S6277C16__A1__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C178S6277C16__7S6277C1[4]),  4,6},
  {&(_tg__ZTV8S6277C138S6277C178S6277C16__A1__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C138S6277C178S6277C16__A1__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C178S6277C16__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C158S6277C16__A1__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C118S6277C158S6277C16__A3__7S6277C1[3]),  3,3},
  {&(_tg__ZTV7S6277C8__8S6277C16__7S6277C1[5]),  5,5},
  {&(_tg__ZTV8S6277C13__8S6277C16__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C11__A1__8S6277C16__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C17__8S6277C16__7S6277C1[4]),  4,6},
  {&(_tg__ZTV8S6277C15__8S6277C16__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C18__8S6277C16__7S6277C1[8]),  8,8},
  {&(_tg__ZTV8S6277C198S6277C18__8S6277C16__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C20__8S6277C16__7S6277C1[5]),  5,5},
  {&(_tg__ZTV8S6277C21__8S6277C16__7S6277C1[5]),  5,6},
  {&(_tg__ZTV8S6277C18__7S6277C1[8]),  8,8},
  {&(_tg__ZTV7S6277C98S6277C18__A1__7S6277C1[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C98S6277C18__A4__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C198S6277C18__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C138S6277C198S6277C18__A2__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C138S6277C198S6277C18__A2__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C198S6277C18__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C13__8S6277C18__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C11__A1__8S6277C18__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C19__8S6277C18__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C20__8S6277C18__7S6277C1[5]),  5,5},
  {&(_tg__ZTV8S6277C20__7S6277C1[5]),  5,5},
  {&(_tg__ZTV7S6277C98S6277C20__A2__7S6277C1[5]),  5,5},
  {&(_tg__ZTV8S6277C117S6277C98S6277C20__A5__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C21__7S6277C1[4]),  4,5},
  {&(_tg__ZTV8S6277C228S6277C21__7S6277C1[4]),  4,5},
  {&(_tg__ZTV8S6277C138S6277C228S6277C21__A3__7S6277C1[4]),  4,4},
  {&(_tg__ZTV8S6277C11__8S6277C138S6277C228S6277C21__A3__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C228S6277C21__7S6277C1[3]),  3,3},
  {&(_tg__ZTV8S6277C11__8S6277C21__7S6277C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6277C1[];
extern  VTBL_ENTRY _ZTV7S6277C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6277C1[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6277C3D0Ev,_ZTv0_n12_N7S6277C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S6277C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6277C3D1Ev,_ZTv0_n12_N7S6277C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S6277C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S6277C1D0Ev,_ZTv0_n48_N7S6277C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S6277C1D0Ev,_ZThn72_N7S6277C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S6277C1D1Ev,_ZTv0_n48_N7S6277C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S6277C1D1Ev,_ZThn72_N7S6277C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6277C1D0Ev,_ZTv0_n12_N7S6277C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S6277C1D0Ev,_ZThn4_N7S6277C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6277C1D1Ev,_ZTv0_n12_N7S6277C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S6277C1D1Ev,_ZThn4_N7S6277C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6277C1 = {  "S6277C1", // class name
  bases_S6277C1, 40,
  &(vtc_S6277C1[0]), // expected_vtbl_contents
  &(vtt_S6277C1[0]), // expected_vtt_contents
  ABISELECT(232,144), // object size
  NSPAIRA(_ZTI7S6277C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6277C1),95, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6277C1),74, //virtual table table var
  28, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3455C6  {
  void *s3455c6f0[2];
  virtual void  v3(); // _ZN7S3455C62v3Ev
  virtual void  v4(); // _ZN7S3455C62v4Ev
  virtual void  v5(); // _ZN7S3455C62v5Ev
  virtual void  v6(); // _ZN7S3455C62v6Ev
  virtual void  v7(); // _ZN7S3455C62v7Ev
  ~S3455C6(); // tgen
  S3455C6(); // tgen
};
//SIG(-1 S3455C6) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S3455C6 ::v3(){vfunc_called(this, "_ZN7S3455C62v3Ev");}
void  S3455C6 ::v4(){vfunc_called(this, "_ZN7S3455C62v4Ev");}
void  S3455C6 ::v5(){vfunc_called(this, "_ZN7S3455C62v5Ev");}
void  S3455C6 ::v6(){vfunc_called(this, "_ZN7S3455C62v6Ev");}
void  S3455C6 ::v7(){vfunc_called(this, "_ZN7S3455C62v7Ev");}
S3455C6 ::~S3455C6(){ note_dtor("S3455C6", this);} // tgen
S3455C6 ::S3455C6(){ note_ctor("S3455C6", this);} // tgen

static void Test_S3455C6()
{
  extern Class_Descriptor cd_S3455C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3455C6, buf);
    S3455C6 *dp, &lv = *(dp=new (buf) S3455C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3455C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3455C6)");
    check_field_offset(lv, s3455c6f0, ABISELECT(8,4), "S3455C6.s3455c6f0");
    test_class_info(&lv, &cd_S3455C6);
    dp->~S3455C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3455C6(Test_S3455C6, "S3455C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3455C6C1Ev();
extern void _ZN7S3455C6D1Ev();
Name_Map name_map_S3455C6[] = {
  NSPAIR(_ZN7S3455C6C1Ev),
  NSPAIR(_ZN7S3455C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3455C6[];
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
static  VTBL_ENTRY vtc_S3455C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C6[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
};
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
Class_Descriptor cd_S3455C6 = {  "S3455C6", // class name
  0,0,//no base classes
  &(vtc_S3455C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3455C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3455C6),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  S3455C8  {
  virtual  ~S3455C8(); // _ZN7S3455C8D1Ev
  virtual void  v8(); // _ZN7S3455C82v8Ev
  virtual void  v9(); // _ZN7S3455C82v9Ev
  virtual void  v10(); // _ZN7S3455C83v10Ev
  S3455C8(); // tgen
};
//SIG(-1 S3455C8) C1{ vd v1 v2 v3}


 S3455C8 ::~S3455C8(){ note_dtor("S3455C8", this);}
void  S3455C8 ::v8(){vfunc_called(this, "_ZN7S3455C82v8Ev");}
void  S3455C8 ::v9(){vfunc_called(this, "_ZN7S3455C82v9Ev");}
void  S3455C8 ::v10(){vfunc_called(this, "_ZN7S3455C83v10Ev");}
S3455C8 ::S3455C8(){ note_ctor("S3455C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3455C8C1Ev();
extern void _ZN7S3455C8D1Ev();
Name_Map name_map_S3455C8[] = {
  NSPAIR(_ZN7S3455C8C1Ev),
  NSPAIR(_ZN7S3455C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3455C8[];
extern void _ZN7S3455C8D1Ev();
extern void _ZN7S3455C8D0Ev();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
static  VTBL_ENTRY vtc_S3455C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C8[0]),
  (VTBL_ENTRY)&_ZN7S3455C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
};
extern VTBL_ENTRY _ZTI7S3455C8[];
extern  VTBL_ENTRY _ZTV7S3455C8[];
Class_Descriptor cd_S3455C8 = {  "S3455C8", // class name
  0,0,//no base classes
  &(vtc_S3455C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3455C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3455C8),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  S3455C7  : S3455C8 {
  virtual void  v11(); // _ZN7S3455C73v11Ev
  virtual void  v12(); // _ZN7S3455C73v12Ev
  virtual void  v13(); // _ZN7S3455C73v13Ev
  virtual void  v14(); // _ZN7S3455C73v14Ev
  virtual void  v15(); // _ZN7S3455C73v15Ev
  virtual void  v16(); // _ZN7S3455C73v16Ev
  virtual void  v17(); // _ZN7S3455C73v17Ev
  virtual void  v18(); // _ZN7S3455C73v18Ev
  virtual void  v19(); // _ZN7S3455C73v19Ev
  ~S3455C7(); // tgen
  S3455C7(); // tgen
};
//SIG(-1 S3455C7) C1{ BC2{ vd v10 v11 v12} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S3455C7 ::v11(){vfunc_called(this, "_ZN7S3455C73v11Ev");}
void  S3455C7 ::v12(){vfunc_called(this, "_ZN7S3455C73v12Ev");}
void  S3455C7 ::v13(){vfunc_called(this, "_ZN7S3455C73v13Ev");}
void  S3455C7 ::v14(){vfunc_called(this, "_ZN7S3455C73v14Ev");}
void  S3455C7 ::v15(){vfunc_called(this, "_ZN7S3455C73v15Ev");}
void  S3455C7 ::v16(){vfunc_called(this, "_ZN7S3455C73v16Ev");}
void  S3455C7 ::v17(){vfunc_called(this, "_ZN7S3455C73v17Ev");}
void  S3455C7 ::v18(){vfunc_called(this, "_ZN7S3455C73v18Ev");}
void  S3455C7 ::v19(){vfunc_called(this, "_ZN7S3455C73v19Ev");}
S3455C7 ::~S3455C7(){ note_dtor("S3455C7", this);} // tgen
S3455C7 ::S3455C7(){ note_ctor("S3455C7", this);} // tgen

static void Test_S3455C7()
{
  extern Class_Descriptor cd_S3455C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3455C7, buf);
    S3455C7 *dp, &lv = *(dp=new (buf) S3455C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3455C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3455C7)");
    check_base_class_offset(lv, (S3455C8*), 0, "S3455C7");
    test_class_info(&lv, &cd_S3455C7);
    dp->~S3455C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3455C7(Test_S3455C7, "S3455C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3455C7C1Ev();
extern void _ZN7S3455C7D1Ev();
Name_Map name_map_S3455C7[] = {
  NSPAIR(_ZN7S3455C7C1Ev),
  NSPAIR(_ZN7S3455C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3455C8;
extern VTBL_ENTRY _ZTI7S3455C8[];
extern  VTBL_ENTRY _ZTV7S3455C8[];
static Base_Class bases_S3455C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3455C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3455C7[];
extern void _ZN7S3455C7D1Ev();
extern void _ZN7S3455C7D0Ev();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY vtc_S3455C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C7[0]),
  (VTBL_ENTRY)&_ZN7S3455C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
extern VTBL_ENTRY _ZTI7S3455C7[];
extern  VTBL_ENTRY _ZTV7S3455C7[];
Class_Descriptor cd_S3455C7 = {  "S3455C7", // class name
  bases_S3455C7, 1,
  &(vtc_S3455C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3455C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3455C7),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3455C5  : S3455C6 , virtual S3455C7 {
  ::S20442C8_nt s3455c5f0[9];
  virtual void  v20(); // _ZN7S3455C53v20Ev
  virtual void  v21(); // _ZN7S3455C53v21Ev
  virtual void  v22(); // _ZN7S3455C53v22Ev
  virtual void  v23(); // _ZN7S3455C53v23Ev
  virtual void  v24(); // _ZN7S3455C53v24Ev
  virtual void  v25(); // _ZN7S3455C53v25Ev
  virtual void  v26(); // _ZN7S3455C53v26Ev
  virtual void  v27(); // _ZN7S3455C53v27Ev
  virtual void  v28(); // _ZN7S3455C53v28Ev
  ~S3455C5(); // tgen
  S3455C5(); // tgen
};
//SIG(-1 S3455C5) C1{ BC2{ v10 v11 v12 v13 v14 Fp[2]} VBC3{ BC4{ vd v15 v16 v17} v18 v19 v20 v21 v22 v23 v24 v25 v26} v1 v2 v3 v4 v5 v6 v7 v8 v9 FC5{ v27 v28 FL}[9]}


void  S3455C5 ::v20(){vfunc_called(this, "_ZN7S3455C53v20Ev");}
void  S3455C5 ::v21(){vfunc_called(this, "_ZN7S3455C53v21Ev");}
void  S3455C5 ::v22(){vfunc_called(this, "_ZN7S3455C53v22Ev");}
void  S3455C5 ::v23(){vfunc_called(this, "_ZN7S3455C53v23Ev");}
void  S3455C5 ::v24(){vfunc_called(this, "_ZN7S3455C53v24Ev");}
void  S3455C5 ::v25(){vfunc_called(this, "_ZN7S3455C53v25Ev");}
void  S3455C5 ::v26(){vfunc_called(this, "_ZN7S3455C53v26Ev");}
void  S3455C5 ::v27(){vfunc_called(this, "_ZN7S3455C53v27Ev");}
void  S3455C5 ::v28(){vfunc_called(this, "_ZN7S3455C53v28Ev");}
S3455C5 ::~S3455C5(){ note_dtor("S3455C5", this);} // tgen
S3455C5 ::S3455C5(){ note_ctor("S3455C5", this);} // tgen

static void Test_S3455C5()
{
  extern Class_Descriptor cd_S3455C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,32)];
    init_test(&cd_S3455C5, buf);
    S3455C5 *dp, &lv = *(dp=new (buf) S3455C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S3455C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3455C5)");
    check_base_class_offset(lv, (S3455C6*), 0, "S3455C5");
    check_base_class_offset(lv, (S3455C8*)(S3455C7*), ABISELECT(168,120), "S3455C5");
    check_base_class_offset(lv, (S3455C7*), ABISELECT(168,120), "S3455C5");
    check_field_offset(lv, s3455c5f0, ABISELECT(24,12), "S3455C5.s3455c5f0");
    test_class_info(&lv, &cd_S3455C5);
    dp->~S3455C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3455C5(Test_S3455C5, "S3455C5", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN7S3455C5C1Ev();
extern void _ZN7S3455C5D1Ev();
Name_Map name_map_S3455C5[] = {
  NSPAIR(_ZN7S3455C5C1Ev),
  NSPAIR(_ZN7S3455C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3455C6;
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
extern Class_Descriptor cd_S3455C8;
extern VTBL_ENTRY _ZTI7S3455C8[];
extern  VTBL_ENTRY _ZTV7S3455C8[];
extern Class_Descriptor cd_S3455C7;
extern VTBL_ENTRY _ZTI7S3455C7[];
extern  VTBL_ENTRY _ZTV7S3455C7[];
static Base_Class bases_S3455C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3455C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3455C8,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3455C7,    ABISELECT(168,120), //bcp->offset
    19, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3455C5[];
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C5D1Ev();
extern void _ZN7S3455C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev)();
extern void ABISELECT(_ZThn168_N7S3455C5D1Ev,_ZThn120_N7S3455C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev)();
extern void ABISELECT(_ZThn168_N7S3455C5D0Ev,_ZThn120_N7S3455C5D0Ev)() __attribute__((weak));
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY vtc_S3455C5[] = {
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-120),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
extern VTBL_ENTRY _ZTV7S3455C5[];
static  VTT_ENTRY vtt_S3455C5[] = {
  {&(_ZTV7S3455C5[3]),  3,48},
  {&(_ZTV7S3455C5[34]),  34,48},
};
extern VTBL_ENTRY _ZTI7S3455C5[];
extern  VTBL_ENTRY _ZTV7S3455C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C5[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S3455C5D0Ev,_ZThn120_N7S3455C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S3455C5D1Ev,_ZThn120_N7S3455C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3455C5 = {  "S3455C5", // class name
  bases_S3455C5, 3,
  &(vtc_S3455C5[0]), // expected_vtbl_contents
  &(vtt_S3455C5[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI7S3455C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3455C5),48, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3455C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3455C4  : S3455C5 {
  virtual  ~S3455C4(); // _ZN7S3455C4D2Ev
  virtual void  v29(); // _ZN7S3455C43v29Ev
  S3455C4(); // tgen
};
//SIG(-1 S3455C4) C1{ BC2{ BC3{ v2 v3 v4 v5 v6 Fp[2]} VBC4{ BC5{ vd v7 v8 v9} v10 v11 v12 v13 v14 v15 v16 v17 v18} v19 v20 v21 v22 v23 v24 v25 v26 v27 FC6{ v28 v29 FL}[9]} vd v1}


 S3455C4 ::~S3455C4(){ note_dtor("S3455C4", this);}
void  S3455C4 ::v29(){vfunc_called(this, "_ZN7S3455C43v29Ev");}
S3455C4 ::S3455C4(){ note_ctor("S3455C4", this);} // tgen

static void Test_S3455C4()
{
  extern Class_Descriptor cd_S3455C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,32)];
    init_test(&cd_S3455C4, buf);
    S3455C4 *dp, &lv = *(dp=new (buf) S3455C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S3455C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3455C4)");
    check_base_class_offset(lv, (S3455C6*)(S3455C5*), 0, "S3455C4");
    check_base_class_offset(lv, (S3455C8*)(S3455C7*), ABISELECT(168,120), "S3455C4");
    check_base_class_offset(lv, (S3455C7*)(S3455C5*), ABISELECT(168,120), "S3455C4");
    check_base_class_offset(lv, (S3455C5*), 0, "S3455C4");
    test_class_info(&lv, &cd_S3455C4);
    dp->~S3455C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3455C4(Test_S3455C4, "S3455C4", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN7S3455C4C1Ev();
extern void _ZN7S3455C4D2Ev();
Name_Map name_map_S3455C4[] = {
  NSPAIR(_ZN7S3455C4C1Ev),
  NSPAIR(_ZN7S3455C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3455C6;
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
extern Class_Descriptor cd_S3455C8;
extern VTBL_ENTRY _ZTI7S3455C8[];
extern  VTBL_ENTRY _ZTV7S3455C8[];
extern Class_Descriptor cd_S3455C7;
extern VTBL_ENTRY _ZTI7S3455C7[];
extern  VTBL_ENTRY _ZTV7S3455C7[];
extern Class_Descriptor cd_S3455C5;
extern VTBL_ENTRY _ZTI7S3455C5[];
extern  VTBL_ENTRY _ZTV7S3455C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C5[];
static Base_Class bases_S3455C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3455C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3455C8,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3455C7,    ABISELECT(168,120), //bcp->offset
    20, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3455C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3455C4[];
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C4D1Ev();
extern void _ZN7S3455C4D0Ev();
extern void _ZN7S3455C43v29Ev();
extern void ABISELECT(_ZTv0_n24_N7S3455C4D1Ev,_ZTv0_n12_N7S3455C4D1Ev)();
extern void ABISELECT(_ZThn168_N7S3455C4D1Ev,_ZThn120_N7S3455C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3455C4D0Ev,_ZTv0_n12_N7S3455C4D0Ev)();
extern void ABISELECT(_ZThn168_N7S3455C4D0Ev,_ZThn120_N7S3455C4D0Ev)() __attribute__((weak));
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY vtc_S3455C4[] = {
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C4[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C43v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-120),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI7S3455C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C4D1Ev,_ZTv0_n12_N7S3455C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C4D0Ev,_ZTv0_n12_N7S3455C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
extern VTBL_ENTRY _ZTV7S3455C4[];
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C5D1Ev();
extern void _ZN7S3455C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C5__7S3455C4[] = {
  ABISELECT(168,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev)();
extern void ABISELECT(_ZThn168_N7S3455C5D1Ev,_ZThn120_N7S3455C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev)();
extern void ABISELECT(_ZThn168_N7S3455C5D0Ev,_ZThn120_N7S3455C5D0Ev)() __attribute__((weak));
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C7__7S3455C5__7S3455C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-120),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
static  VTT_ENTRY vtt_S3455C4[] = {
  {&(_ZTV7S3455C4[3]),  3,49},
  {&(_tg__ZTV7S3455C5__7S3455C4[3]),  3,19},
  {&(_tg__ZTV7S3455C7__7S3455C5__7S3455C4[15]),  15,29},
  {&(_ZTV7S3455C4[35]),  35,49},
};
extern VTBL_ENTRY _ZTI7S3455C4[];
extern  VTBL_ENTRY _ZTV7S3455C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C4[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S3455C5D0Ev,_ZThn120_N7S3455C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S3455C5D1Ev,_ZThn120_N7S3455C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3455C4D0Ev,_ZTv0_n12_N7S3455C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S3455C4D0Ev,_ZThn120_N7S3455C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3455C4D1Ev,_ZTv0_n12_N7S3455C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S3455C4D1Ev,_ZThn120_N7S3455C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3455C4 = {  "S3455C4", // class name
  bases_S3455C4, 4,
  &(vtc_S3455C4[0]), // expected_vtbl_contents
  &(vtt_S3455C4[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI7S3455C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3455C4),49, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3455C4),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3455C3  : virtual S3455C4 , virtual S3455C5 {
  virtual void  v30(); // _ZN7S3455C33v30Ev
  ~S3455C3(); // tgen
  S3455C3(); // tgen
};
//SIG(-1 S3455C3) C1{ VBC2{ BC3{ BC4{ v2 v3 v4 v5 v6 Fp[2]} VBC5{ BC6{ vd v7 v8 v9} v10 v11 v12 v13 v14 v15 v16 v17 v18} v19 v20 v21 v22 v23 v24 v25 v26 v27 FC7{ v29 v30 FL}[9]} vd v28} VBC3 v1}


void  S3455C3 ::v30(){vfunc_called(this, "_ZN7S3455C33v30Ev");}
S3455C3 ::~S3455C3(){ note_dtor("S3455C3", this);} // tgen
S3455C3 ::S3455C3(){ note_ctor("S3455C3", this);} // tgen

static void Test_S3455C3()
{
  extern Class_Descriptor cd_S3455C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,62)];
    init_test(&cd_S3455C3, buf);
    S3455C3 *dp, &lv = *(dp=new (buf) S3455C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,244), "sizeof(S3455C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3455C3)");
    check_base_class_offset(lv, (S3455C6*)(S3455C5*)(S3455C4*), ABISELECT(8,4), "S3455C3");
    check_base_class_offset(lv, (S3455C8*)(S3455C7*), 0, "S3455C3");
    check_base_class_offset(lv, (S3455C7*)(S3455C5*)(S3455C4*), 0, "S3455C3");
    /*is_ambiguous_... S3455C3::S3455C5 */ AMB_check_base_class_offset(lv, (S3455C7*)(S3455C5*), 0, "S3455C3");
    check_base_class_offset(lv, (S3455C5*)(S3455C4*), ABISELECT(8,4), "S3455C3");
    check_base_class_offset(lv, (S3455C4*), ABISELECT(8,4), "S3455C3");
    /*is_ambiguous_... S3455C3::S3455C5 */ AMB_check_base_class_offset(lv, (S3455C6*)(S3455C5*), ABISELECT(176,124), "S3455C3");
    /*is_ambiguous_... S3455C3::S3455C5 */ AMB_check_base_class_offset(lv, (S3455C5*), ABISELECT(176,124), "S3455C3");
    test_class_info(&lv, &cd_S3455C3);
    dp->~S3455C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3455C3(Test_S3455C3, "S3455C3", ABISELECT(344,244));

#else // __cplusplus

extern void _ZN7S3455C3C1Ev();
extern void _ZN7S3455C3D1Ev();
Name_Map name_map_S3455C3[] = {
  NSPAIR(_ZN7S3455C3C1Ev),
  NSPAIR(_ZN7S3455C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3455C6;
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
extern Class_Descriptor cd_S3455C8;
extern VTBL_ENTRY _ZTI7S3455C8[];
extern  VTBL_ENTRY _ZTV7S3455C8[];
extern Class_Descriptor cd_S3455C7;
extern VTBL_ENTRY _ZTI7S3455C7[];
extern  VTBL_ENTRY _ZTV7S3455C7[];
extern Class_Descriptor cd_S3455C5;
extern VTBL_ENTRY _ZTI7S3455C5[];
extern  VTBL_ENTRY _ZTV7S3455C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C5[];
extern Class_Descriptor cd_S3455C4;
extern VTBL_ENTRY _ZTI7S3455C4[];
extern  VTBL_ENTRY _ZTV7S3455C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C4[];
extern Class_Descriptor cd_S3455C6;
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
extern Class_Descriptor cd_S3455C5;
extern VTBL_ENTRY _ZTI7S3455C5[];
extern  VTBL_ENTRY _ZTV7S3455C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C5[];
static Base_Class bases_S3455C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3455C6,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3455C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3455C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3455C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3455C4,    ABISELECT(8,4), //bcp->offset
    33, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3455C6,    ABISELECT(176,124), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3455C5,    ABISELECT(176,124), //bcp->offset
    69, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3455C3[];
extern void _ZN7S3455C3D1Ev();
extern void _ZN7S3455C3D0Ev();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
extern void _ZN7S3455C33v30Ev();
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3455C3D1Ev,_ZThn4_N7S3455C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3455C3D0Ev,_ZThn4_N7S3455C3D0Ev)() __attribute__((weak));
extern void _ZN7S3455C43v29Ev();
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev)();
extern void ABISELECT(_ZThn176_N7S3455C3D1Ev,_ZThn124_N7S3455C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev)();
extern void ABISELECT(_ZThn176_N7S3455C3D0Ev,_ZThn124_N7S3455C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3455C3[] = {
  ABISELECT(176,124),
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C3[0]),
  (VTBL_ENTRY)&_ZN7S3455C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
  (VTBL_ENTRY)&_ZN7S3455C33v30Ev,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3455C3[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C43v29Ev,
  ABISELECT(-176,-124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-124),
  ABISELECT(-176,-124),
  (VTBL_ENTRY)&(_ZTI7S3455C3[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S3455C3[];
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C4D1Ev();
extern void _ZN7S3455C4D0Ev();
extern void _ZN7S3455C43v29Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C4__7S3455C3[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C4[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C43v29Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C5D1Ev();
extern void _ZN7S3455C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C57S3455C4__7S3455C3[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev)();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C7__7S3455C57S3455C4__7S3455C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C4D1Ev,_ZTv0_n12_N7S3455C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3455C4D0Ev,_ZTv0_n12_N7S3455C4D0Ev)();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C7__7S3455C4__7S3455C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3455C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C4D1Ev,_ZTv0_n12_N7S3455C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C4D0Ev,_ZTv0_n12_N7S3455C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C5D1Ev();
extern void _ZN7S3455C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C5__A1__7S3455C3[] = {
  ABISELECT(-176,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev)();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C7__7S3455C5__A1__7S3455C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(176,124),
  ABISELECT(176,124),
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
static  VTT_ENTRY vtt_S3455C3[] = {
  {&(_ZTV7S3455C3[18]),  18,103},
  {&(_ZTV7S3455C3[52]),  52,103},
  {&(_ZTV7S3455C3[18]),  18,103},
  {&(_ZTV7S3455C3[87]),  87,103},
  {&(_tg__ZTV7S3455C4__7S3455C3[3]),  3,20},
  {&(_tg__ZTV7S3455C57S3455C4__7S3455C3[3]),  3,19},
  {&(_tg__ZTV7S3455C7__7S3455C57S3455C4__7S3455C3[15]),  15,29},
  {&(_tg__ZTV7S3455C7__7S3455C4__7S3455C3[15]),  15,29},
  {&(_tg__ZTV7S3455C5__A1__7S3455C3[3]),  3,19},
  {&(_tg__ZTV7S3455C7__7S3455C5__A1__7S3455C3[15]),  15,29},
};
extern VTBL_ENTRY _ZTI7S3455C3[];
extern  VTBL_ENTRY _ZTV7S3455C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C3[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3455C3D0Ev,_ZThn124_N7S3455C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3455C3D0Ev,_ZThn4_N7S3455C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3455C3D1Ev,_ZThn124_N7S3455C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3455C3D1Ev,_ZThn4_N7S3455C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3455C3 = {  "S3455C3", // class name
  bases_S3455C3, 7,
  &(vtc_S3455C3[0]), // expected_vtbl_contents
  &(vtt_S3455C3[0]), // expected_vtt_contents
  ABISELECT(344,244), // object size
  NSPAIRA(_ZTI7S3455C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3455C3),103, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3455C3),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3455C10_nt  {
  char s3455c10f0;
  virtual void  v31(); // _ZN11S3455C10_nt3v31Ev
  virtual void  v32(); // _ZN11S3455C10_nt3v32Ev
  ~S3455C10_nt(); // tgen
  S3455C10_nt(); // tgen
};
//SIG(-1 S3455C10_nt) C1{ v1 v2 Fc}


void  S3455C10_nt ::v31(){vfunc_called(this, "_ZN11S3455C10_nt3v31Ev");}
void  S3455C10_nt ::v32(){vfunc_called(this, "_ZN11S3455C10_nt3v32Ev");}
S3455C10_nt ::~S3455C10_nt(){ note_dtor("S3455C10_nt", this);} // tgen
S3455C10_nt ::S3455C10_nt(){ note_ctor("S3455C10_nt", this);} // tgen

//skip512 S3455C10_nt

#else // __cplusplus

extern void _ZN11S3455C10_ntC1Ev();
extern void _ZN11S3455C10_ntD1Ev();
Name_Map name_map_S3455C10_nt[] = {
  NSPAIR(_ZN11S3455C10_ntC1Ev),
  NSPAIR(_ZN11S3455C10_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3455C10_nt[];
extern void _ZN11S3455C10_nt3v31Ev();
extern void _ZN11S3455C10_nt3v32Ev();
static  VTBL_ENTRY vtc_S3455C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3455C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v32Ev,
};
extern VTBL_ENTRY _ZTI11S3455C10_nt[];
VTBL_ENTRY *P__ZTI11S3455C10_nt = _ZTI11S3455C10_nt; 
extern  VTBL_ENTRY _ZTV11S3455C10_nt[];
Class_Descriptor cd_S3455C10_nt = {  "S3455C10_nt", // class name
  0,0,//no base classes
  &(vtc_S3455C10_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S3455C10_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3455C10_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  S3455C2  : S3455C3 , virtual S3455C10_nt {
  int s3455c2f0;
  virtual  ~S3455C2(); // _ZN7S3455C2D2Ev
  virtual void  v33(); // _ZN7S3455C23v33Ev
  virtual void  v34(); // _ZN7S3455C23v34Ev
  S3455C2(); // tgen
};
//SIG(-1 S3455C2) C1{ BC2{ VBC3{ BC4{ BC5{ v3 v4 v5 v6 v7 Fp[2]} VBC6{ BC7{ vd v8 v9 v10} v11 v12 v13 v14 v15 v16 v17 v18 v19} v20 v21 v22 v23 v24 v25 v26 v27 v28 FC8{ v33 v34 FL}[9]} vd v29} VBC4 v30} VBC9{ v31 v32 Fc} vd v1 v2 Fi}


 S3455C2 ::~S3455C2(){ note_dtor("S3455C2", this);}
void  S3455C2 ::v33(){vfunc_called(this, "_ZN7S3455C23v33Ev");}
void  S3455C2 ::v34(){vfunc_called(this, "_ZN7S3455C23v34Ev");}
S3455C2 ::S3455C2(){ note_ctor("S3455C2", this);} // tgen

static void Test_S3455C2()
{
  extern Class_Descriptor cd_S3455C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,65)];
    init_test(&cd_S3455C2, buf);
    S3455C2 *dp, &lv = *(dp=new (buf) S3455C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,256), "sizeof(S3455C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3455C2)");
    check_base_class_offset(lv, (S3455C6*)(S3455C5*)(S3455C4*), ABISELECT(16,8), "S3455C2");
    check_base_class_offset(lv, (S3455C8*)(S3455C7*), 0, "S3455C2");
    check_base_class_offset(lv, (S3455C7*)(S3455C5*)(S3455C4*), 0, "S3455C2");
    /*is_ambiguous_... S3455C2::S3455C5 */ AMB_check_base_class_offset(lv, (S3455C7*)(S3455C5*), 0, "S3455C2");
    check_base_class_offset(lv, (S3455C5*)(S3455C4*), ABISELECT(16,8), "S3455C2");
    check_base_class_offset(lv, (S3455C4*)(S3455C3*), ABISELECT(16,8), "S3455C2");
    /*is_ambiguous_... S3455C2::S3455C5 */ AMB_check_base_class_offset(lv, (S3455C6*)(S3455C5*), ABISELECT(184,128), "S3455C2");
    /*is_ambiguous_... S3455C3::S3455C5 */ AMB_check_base_class_offset(lv, (S3455C5*)(S3455C3*), ABISELECT(184,128), "S3455C2");
    check_base_class_offset(lv, (S3455C3*), 0, "S3455C2");
    check_base_class_offset(lv, (S3455C10_nt*), ABISELECT(352,248), "S3455C2");
    check_field_offset(lv, s3455c2f0, ABISELECT(8,4), "S3455C2.s3455c2f0");
    test_class_info(&lv, &cd_S3455C2);
    dp->~S3455C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3455C2(Test_S3455C2, "S3455C2", ABISELECT(368,256));

#else // __cplusplus

extern void _ZN7S3455C2C1Ev();
extern void _ZN7S3455C2D2Ev();
Name_Map name_map_S3455C2[] = {
  NSPAIR(_ZN7S3455C2C1Ev),
  NSPAIR(_ZN7S3455C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3455C6;
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
extern Class_Descriptor cd_S3455C8;
extern VTBL_ENTRY _ZTI7S3455C8[];
extern  VTBL_ENTRY _ZTV7S3455C8[];
extern Class_Descriptor cd_S3455C7;
extern VTBL_ENTRY _ZTI7S3455C7[];
extern  VTBL_ENTRY _ZTV7S3455C7[];
extern Class_Descriptor cd_S3455C5;
extern VTBL_ENTRY _ZTI7S3455C5[];
extern  VTBL_ENTRY _ZTV7S3455C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C5[];
extern Class_Descriptor cd_S3455C4;
extern VTBL_ENTRY _ZTI7S3455C4[];
extern  VTBL_ENTRY _ZTV7S3455C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C4[];
extern Class_Descriptor cd_S3455C6;
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
extern Class_Descriptor cd_S3455C5;
extern VTBL_ENTRY _ZTI7S3455C5[];
extern  VTBL_ENTRY _ZTV7S3455C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C5[];
extern Class_Descriptor cd_S3455C3;
extern VTBL_ENTRY _ZTI7S3455C3[];
extern  VTBL_ENTRY _ZTV7S3455C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C3[];
extern Class_Descriptor cd_S3455C10_nt;
extern VTBL_ENTRY _ZTI11S3455C10_nt[];
extern  VTBL_ENTRY _ZTV11S3455C10_nt[];
static Base_Class bases_S3455C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3455C6,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3455C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3455C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3455C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3455C4,    ABISELECT(16,8), //bcp->offset
    36, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3455C6,    ABISELECT(184,128), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3455C5,    ABISELECT(184,128), //bcp->offset
    72, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3455C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3455C10_nt,    ABISELECT(352,248), //bcp->offset
    106, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3455C2[];
extern void _ZN7S3455C2D1Ev();
extern void _ZN7S3455C2D0Ev();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
extern void _ZN7S3455C33v30Ev();
extern void _ZN7S3455C23v33Ev();
extern void _ZN7S3455C23v34Ev();
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C2D1Ev,_ZTv0_n72_N7S3455C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3455C2D1Ev,_ZThn8_N7S3455C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C2D0Ev,_ZTv0_n72_N7S3455C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3455C2D0Ev,_ZThn8_N7S3455C2D0Ev)() __attribute__((weak));
extern void _ZN7S3455C43v29Ev();
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C2D1Ev,_ZTv0_n72_N7S3455C2D1Ev)();
extern void ABISELECT(_ZThn184_N7S3455C2D1Ev,_ZThn128_N7S3455C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C2D0Ev,_ZTv0_n72_N7S3455C2D0Ev)();
extern void ABISELECT(_ZThn184_N7S3455C2D0Ev,_ZThn128_N7S3455C2D0Ev)() __attribute__((weak));
extern void _ZN11S3455C10_nt3v31Ev();
extern void _ZN11S3455C10_nt3v32Ev();
static  VTBL_ENTRY vtc_S3455C2[] = {
  ABISELECT(352,248),
  ABISELECT(184,128),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C2[0]),
  (VTBL_ENTRY)&_ZN7S3455C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
  (VTBL_ENTRY)&_ZN7S3455C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3455C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3455C23v34Ev,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3455C2[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C2D1Ev,_ZTv0_n72_N7S3455C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C2D0Ev,_ZTv0_n72_N7S3455C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C43v29Ev,
  ABISELECT(-184,-128),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-128),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI7S3455C2[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C2D1Ev,_ZTv0_n72_N7S3455C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C2D0Ev,_ZTv0_n72_N7S3455C2D0Ev),
  0,
  0,
  ABISELECT(-352,-248),
  (VTBL_ENTRY)&(_ZTI7S3455C2[0]),
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v32Ev,
};
extern VTBL_ENTRY _ZTV7S3455C2[];
extern void _ZN7S3455C3D1Ev();
extern void _ZN7S3455C3D0Ev();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
extern void _ZN7S3455C33v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C3__7S3455C2[] = {
  ABISELECT(184,128),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C3[0]),
  (VTBL_ENTRY)&_ZN7S3455C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
  (VTBL_ENTRY)&_ZN7S3455C33v30Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S3455C3D1Ev,_ZThn8_N7S3455C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S3455C3D0Ev,_ZThn8_N7S3455C3D0Ev)() __attribute__((weak));
extern void _ZN7S3455C43v29Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C4__7S3455C3__7S3455C2[] = {
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3455C3[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C43v29Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev)();
extern void ABISELECT(_ZThn184_N7S3455C3D1Ev,_ZThn128_N7S3455C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev)();
extern void ABISELECT(_ZThn184_N7S3455C3D0Ev,_ZThn128_N7S3455C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3455C5__A1__7S3455C3__7S3455C2[] = {
  ABISELECT(-184,-128),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-128),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI7S3455C3[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev),
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C4D1Ev();
extern void _ZN7S3455C4D0Ev();
extern void _ZN7S3455C43v29Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C4__7S3455C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C4[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C43v29Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C5D1Ev();
extern void _ZN7S3455C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C57S3455C4__7S3455C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev)();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C7__7S3455C57S3455C4__7S3455C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C4D1Ev,_ZTv0_n12_N7S3455C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3455C4D0Ev,_ZTv0_n12_N7S3455C4D0Ev)();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C7__7S3455C4__7S3455C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3455C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C4D1Ev,_ZTv0_n12_N7S3455C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C4D0Ev,_ZTv0_n12_N7S3455C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C5D1Ev();
extern void _ZN7S3455C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C5__A1__7S3455C2[] = {
  ABISELECT(-184,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev)();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C7__7S3455C5__A1__7S3455C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(184,128),
  ABISELECT(184,128),
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
static  VTT_ENTRY vtt_S3455C2[] = {
  {&(_ZTV7S3455C2[19]),  19,112},
  {&(_tg__ZTV7S3455C3__7S3455C2[18]),  18,33},
  {&(_tg__ZTV7S3455C4__7S3455C3__7S3455C2[19]),  19,36},
  {&(_tg__ZTV7S3455C3__7S3455C2[18]),  18,33},
  {&(_tg__ZTV7S3455C5__A1__7S3455C3__7S3455C2[18]),  18,34},
  {&(_ZTV7S3455C2[55]),  55,112},
  {&(_ZTV7S3455C2[19]),  19,112},
  {&(_ZTV7S3455C2[90]),  90,112},
  {&(_ZTV7S3455C2[110]),  110,112},
  {&(_tg__ZTV7S3455C4__7S3455C2[3]),  3,20},
  {&(_tg__ZTV7S3455C57S3455C4__7S3455C2[3]),  3,19},
  {&(_tg__ZTV7S3455C7__7S3455C57S3455C4__7S3455C2[15]),  15,29},
  {&(_tg__ZTV7S3455C7__7S3455C4__7S3455C2[15]),  15,29},
  {&(_tg__ZTV7S3455C5__A1__7S3455C2[3]),  3,19},
  {&(_tg__ZTV7S3455C7__7S3455C5__A1__7S3455C2[15]),  15,29},
};
extern VTBL_ENTRY _ZTI7S3455C2[];
extern  VTBL_ENTRY _ZTV7S3455C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C2[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S3455C3D0Ev,_ZThn128_N7S3455C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3455C3D0Ev,_ZThn8_N7S3455C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S3455C3D1Ev,_ZThn128_N7S3455C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3455C3D1Ev,_ZThn8_N7S3455C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C2D0Ev,_ZTv0_n72_N7S3455C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S3455C2D0Ev,_ZThn128_N7S3455C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3455C2D0Ev,_ZThn8_N7S3455C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C2D1Ev,_ZTv0_n72_N7S3455C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S3455C2D1Ev,_ZThn128_N7S3455C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3455C2D1Ev,_ZThn8_N7S3455C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3455C2 = {  "S3455C2", // class name
  bases_S3455C2, 9,
  &(vtc_S3455C2[0]), // expected_vtbl_contents
  &(vtt_S3455C2[0]), // expected_vtt_contents
  ABISELECT(368,256), // object size
  NSPAIRA(_ZTI7S3455C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3455C2),112, //virtual function table var
  19, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3455C2),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3455C12  : virtual S3455C10_nt {
  void *s3455c12f0;
  virtual void  v35(); // _ZN8S3455C123v35Ev
  virtual void  v36(); // _ZN8S3455C123v36Ev
  ~S3455C12(); // tgen
  S3455C12(); // tgen
};
//SIG(-1 S3455C12) C1{ VBC2{ v3 v4 Fc} v1 v2 Fp}


void  S3455C12 ::v35(){vfunc_called(this, "_ZN8S3455C123v35Ev");}
void  S3455C12 ::v36(){vfunc_called(this, "_ZN8S3455C123v36Ev");}
S3455C12 ::~S3455C12(){ note_dtor("S3455C12", this);} // tgen
S3455C12 ::S3455C12(){ note_ctor("S3455C12", this);} // tgen

static void Test_S3455C12()
{
  extern Class_Descriptor cd_S3455C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3455C12, buf);
    S3455C12 *dp, &lv = *(dp=new (buf) S3455C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3455C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3455C12)");
    check_base_class_offset(lv, (S3455C10_nt*), ABISELECT(16,8), "S3455C12");
    check_field_offset(lv, s3455c12f0, ABISELECT(8,4), "S3455C12.s3455c12f0");
    test_class_info(&lv, &cd_S3455C12);
    dp->~S3455C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3455C12(Test_S3455C12, "S3455C12", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S3455C12C1Ev();
extern void _ZN8S3455C12D1Ev();
Name_Map name_map_S3455C12[] = {
  NSPAIR(_ZN8S3455C12C1Ev),
  NSPAIR(_ZN8S3455C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3455C10_nt;
extern VTBL_ENTRY _ZTI11S3455C10_nt[];
extern  VTBL_ENTRY _ZTV11S3455C10_nt[];
static Base_Class bases_S3455C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3455C10_nt,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3455C12[];
extern void _ZN8S3455C123v35Ev();
extern void _ZN8S3455C123v36Ev();
extern void _ZN11S3455C10_nt3v31Ev();
extern void _ZN11S3455C10_nt3v32Ev();
static  VTBL_ENTRY vtc_S3455C12[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3455C12[0]),
  (VTBL_ENTRY)&_ZN8S3455C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3455C123v36Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3455C12[0]),
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v32Ev,
};
extern VTBL_ENTRY _ZTV8S3455C12[];
static  VTT_ENTRY vtt_S3455C12[] = {
  {&(_ZTV8S3455C12[3]),  3,11},
  {&(_ZTV8S3455C12[9]),  9,11},
};
extern VTBL_ENTRY _ZTI8S3455C12[];
extern  VTBL_ENTRY _ZTV8S3455C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3455C12[];
Class_Descriptor cd_S3455C12 = {  "S3455C12", // class name
  bases_S3455C12, 1,
  &(vtc_S3455C12[0]), // expected_vtbl_contents
  &(vtt_S3455C12[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S3455C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3455C12),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3455C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3455C11  : S3455C6 , S3455C12 {
  virtual void  v37(); // _ZN8S3455C113v37Ev
  ~S3455C11(); // tgen
  S3455C11(); // tgen
};
//SIG(-1 S3455C11) C1{ BC2{ v2 v3 v4 v5 v6 Fp[2]} BC3{ VBC4{ v7 v8 Fc} v9 v10 Fp} v1}


void  S3455C11 ::v37(){vfunc_called(this, "_ZN8S3455C113v37Ev");}
S3455C11 ::~S3455C11(){ note_dtor("S3455C11", this);} // tgen
S3455C11 ::S3455C11(){ note_ctor("S3455C11", this);} // tgen

static void Test_S3455C11()
{
  extern Class_Descriptor cd_S3455C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3455C11, buf);
    S3455C11 *dp, &lv = *(dp=new (buf) S3455C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3455C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3455C11)");
    check_base_class_offset(lv, (S3455C6*), 0, "S3455C11");
    check_base_class_offset(lv, (S3455C10_nt*)(S3455C12*), ABISELECT(40,20), "S3455C11");
    check_base_class_offset(lv, (S3455C12*), ABISELECT(24,12), "S3455C11");
    test_class_info(&lv, &cd_S3455C11);
    dp->~S3455C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3455C11(Test_S3455C11, "S3455C11", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S3455C11C1Ev();
extern void _ZN8S3455C11D1Ev();
Name_Map name_map_S3455C11[] = {
  NSPAIR(_ZN8S3455C11C1Ev),
  NSPAIR(_ZN8S3455C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3455C6;
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
extern Class_Descriptor cd_S3455C10_nt;
extern VTBL_ENTRY _ZTI11S3455C10_nt[];
extern  VTBL_ENTRY _ZTV11S3455C10_nt[];
extern Class_Descriptor cd_S3455C12;
extern VTBL_ENTRY _ZTI8S3455C12[];
extern  VTBL_ENTRY _ZTV8S3455C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3455C12[];
static Base_Class bases_S3455C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3455C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3455C10_nt,    ABISELECT(40,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3455C12,    ABISELECT(24,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3455C11[];
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN8S3455C113v37Ev();
extern void _ZN8S3455C123v35Ev();
extern void _ZN8S3455C123v36Ev();
extern void _ZN11S3455C10_nt3v31Ev();
extern void _ZN11S3455C10_nt3v32Ev();
static  VTBL_ENTRY vtc_S3455C11[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S3455C11[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN8S3455C113v37Ev,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S3455C11[0]),
  (VTBL_ENTRY)&_ZN8S3455C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3455C123v36Ev,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S3455C11[0]),
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v32Ev,
};
extern VTBL_ENTRY _ZTV8S3455C11[];
extern void _ZN8S3455C123v35Ev();
extern void _ZN8S3455C123v36Ev();
static  VTBL_ENTRY _tg__ZTV8S3455C12__8S3455C11[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3455C12[0]),
  (VTBL_ENTRY)&_ZN8S3455C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3455C123v36Ev,
};
extern void _ZN11S3455C10_nt3v31Ev();
extern void _ZN11S3455C10_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV11S3455C10_nt__8S3455C12__8S3455C11[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3455C12[0]),
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v32Ev,
};
static  VTT_ENTRY vtt_S3455C11[] = {
  {&(_ZTV8S3455C11[3]),  3,20},
  {&(_tg__ZTV8S3455C12__8S3455C11[3]),  3,5},
  {&(_tg__ZTV11S3455C10_nt__8S3455C12__8S3455C11[4]),  4,6},
  {&(_ZTV8S3455C11[12]),  12,20},
  {&(_ZTV8S3455C11[18]),  18,20},
};
extern VTBL_ENTRY _ZTI8S3455C11[];
extern  VTBL_ENTRY _ZTV8S3455C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3455C11[];
Class_Descriptor cd_S3455C11 = {  "S3455C11", // class name
  bases_S3455C11, 3,
  &(vtc_S3455C11[0]), // expected_vtbl_contents
  &(vtt_S3455C11[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S3455C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3455C11),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3455C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3455C1  : S3455C2 , virtual S3455C11 {
  short s3455c1f0;
  virtual void  v1(); // _ZN7S3455C12v1Ev
  virtual void  v2(); // _ZN7S3455C12v2Ev
  ~S3455C1(); // tgen
  S3455C1(); // tgen
};
//SIG(1 S3455C1) C1{ BC2{ BC3{ VBC4{ BC5{ BC6{ v3 v4 v5 v6 v7 Fp[2]} VBC7{ BC8{ vd v8 v9 v10} v11 v12 v13 v14 v15 v16 v17 v18 v19} v20 v21 v22 v23 v24 v25 v26 v27 v28 FC9{ v38 v39 FL}[9]} vd v29} VBC5 v30} VBC10{ v31 v32 Fc} vd v33 v34 Fi} VBC11{ BC6 BC12{ VBC10 v35 v36 Fp} v37} v1 v2 Fs}


void  S3455C1 ::v1(){vfunc_called(this, "_ZN7S3455C12v1Ev");}
void  S3455C1 ::v2(){vfunc_called(this, "_ZN7S3455C12v2Ev");}
S3455C1 ::~S3455C1(){ note_dtor("S3455C1", this);} // tgen
S3455C1 ::S3455C1(){ note_ctor("S3455C1", this);} // tgen

static void Test_S3455C1()
{
  extern Class_Descriptor cd_S3455C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,71)];
    init_test(&cd_S3455C1, buf);
    S3455C1 *dp, &lv = *(dp=new (buf) S3455C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,280), "sizeof(S3455C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3455C1)");
    check_base_class_offset(lv, (S3455C6*)(S3455C5*)(S3455C4*), ABISELECT(16,12), "S3455C1");
    check_base_class_offset(lv, (S3455C8*)(S3455C7*), 0, "S3455C1");
    check_base_class_offset(lv, (S3455C7*)(S3455C5*)(S3455C4*), 0, "S3455C1");
    /*is_ambiguous_... S3455C1::S3455C5 */ AMB_check_base_class_offset(lv, (S3455C7*)(S3455C5*), 0, "S3455C1");
    check_base_class_offset(lv, (S3455C5*)(S3455C4*), ABISELECT(16,12), "S3455C1");
    check_base_class_offset(lv, (S3455C4*)(S3455C3*)(S3455C2*), ABISELECT(16,12), "S3455C1");
    /*is_ambiguous_... S3455C1::S3455C5 */ AMB_check_base_class_offset(lv, (S3455C6*)(S3455C5*), ABISELECT(184,132), "S3455C1");
    /*is_ambiguous_... S3455C3::S3455C5 */ AMB_check_base_class_offset(lv, (S3455C5*)(S3455C3*)(S3455C2*), ABISELECT(184,132), "S3455C1");
    check_base_class_offset(lv, (S3455C3*)(S3455C2*), 0, "S3455C1");
    check_base_class_offset(lv, (S3455C10_nt*)(S3455C2*), ABISELECT(352,252), "S3455C1");
    check_base_class_offset(lv, (S3455C10_nt*)(S3455C12*)(S3455C11*), ABISELECT(352,252), "S3455C1");
    check_base_class_offset(lv, (S3455C2*), 0, "S3455C1");
    check_base_class_offset(lv, (S3455C6*)(S3455C11*), ABISELECT(368,260), "S3455C1");
    check_base_class_offset(lv, (S3455C12*)(S3455C11*), ABISELECT(392,272), "S3455C1");
    check_base_class_offset(lv, (S3455C11*), ABISELECT(368,260), "S3455C1");
    check_field_offset(lv, s3455c1f0, ABISELECT(12,8), "S3455C1.s3455c1f0");
    test_class_info(&lv, &cd_S3455C1);
    dp->~S3455C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3455C1(Test_S3455C1, "S3455C1", ABISELECT(408,280));

#else // __cplusplus

extern void _ZN7S3455C1C1Ev();
extern void _ZN7S3455C1D1Ev();
Name_Map name_map_S3455C1[] = {
  NSPAIR(_ZN7S3455C1C1Ev),
  NSPAIR(_ZN7S3455C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3455C6;
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
extern Class_Descriptor cd_S3455C8;
extern VTBL_ENTRY _ZTI7S3455C8[];
extern  VTBL_ENTRY _ZTV7S3455C8[];
extern Class_Descriptor cd_S3455C7;
extern VTBL_ENTRY _ZTI7S3455C7[];
extern  VTBL_ENTRY _ZTV7S3455C7[];
extern Class_Descriptor cd_S3455C5;
extern VTBL_ENTRY _ZTI7S3455C5[];
extern  VTBL_ENTRY _ZTV7S3455C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C5[];
extern Class_Descriptor cd_S3455C4;
extern VTBL_ENTRY _ZTI7S3455C4[];
extern  VTBL_ENTRY _ZTV7S3455C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C4[];
extern Class_Descriptor cd_S3455C6;
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
extern Class_Descriptor cd_S3455C5;
extern VTBL_ENTRY _ZTI7S3455C5[];
extern  VTBL_ENTRY _ZTV7S3455C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C5[];
extern Class_Descriptor cd_S3455C3;
extern VTBL_ENTRY _ZTI7S3455C3[];
extern  VTBL_ENTRY _ZTV7S3455C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C3[];
extern Class_Descriptor cd_S3455C10_nt;
extern VTBL_ENTRY _ZTI11S3455C10_nt[];
extern  VTBL_ENTRY _ZTV11S3455C10_nt[];
extern Class_Descriptor cd_S3455C2;
extern VTBL_ENTRY _ZTI7S3455C2[];
extern  VTBL_ENTRY _ZTV7S3455C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C2[];
extern Class_Descriptor cd_S3455C6;
extern VTBL_ENTRY _ZTI7S3455C6[];
extern  VTBL_ENTRY _ZTV7S3455C6[];
extern Class_Descriptor cd_S3455C12;
extern VTBL_ENTRY _ZTI8S3455C12[];
extern  VTBL_ENTRY _ZTV8S3455C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3455C12[];
extern Class_Descriptor cd_S3455C11;
extern VTBL_ENTRY _ZTI8S3455C11[];
extern  VTBL_ENTRY _ZTV8S3455C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3455C11[];
static Base_Class bases_S3455C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3455C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3455C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3455C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3455C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3455C4,    ABISELECT(16,12), //bcp->offset
    39, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3455C6,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3455C5,    ABISELECT(184,132), //bcp->offset
    75, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3455C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3455C10_nt,    ABISELECT(352,252), //bcp->offset
    109, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3455C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3455C6,    ABISELECT(368,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3455C12,    ABISELECT(392,272), //bcp->offset
    132, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3455C11,    ABISELECT(368,260), //bcp->offset
    115, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3455C1[];
extern void _ZN7S3455C1D1Ev();
extern void _ZN7S3455C1D0Ev();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
extern void _ZN7S3455C33v30Ev();
extern void _ZN7S3455C23v33Ev();
extern void _ZN7S3455C23v34Ev();
extern void _ZN7S3455C12v1Ev();
extern void _ZN7S3455C12v2Ev();
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C1D1Ev,_ZTv0_n72_N7S3455C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3455C1D1Ev,_ZThn12_N7S3455C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C1D0Ev,_ZTv0_n72_N7S3455C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S3455C1D0Ev,_ZThn12_N7S3455C1D0Ev)() __attribute__((weak));
extern void _ZN7S3455C43v29Ev();
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C1D1Ev,_ZTv0_n72_N7S3455C1D1Ev)();
extern void ABISELECT(_ZThn184_N7S3455C1D1Ev,_ZThn132_N7S3455C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C1D0Ev,_ZTv0_n72_N7S3455C1D0Ev)();
extern void ABISELECT(_ZThn184_N7S3455C1D0Ev,_ZThn132_N7S3455C1D0Ev)() __attribute__((weak));
extern void _ZN11S3455C10_nt3v31Ev();
extern void _ZN11S3455C10_nt3v32Ev();
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN8S3455C113v37Ev();
extern void _ZN8S3455C123v35Ev();
extern void _ZN8S3455C123v36Ev();
static  VTBL_ENTRY vtc_S3455C1[] = {
  ABISELECT(368,260),
  ABISELECT(352,252),
  ABISELECT(184,132),
  0,
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C1[0]),
  (VTBL_ENTRY)&_ZN7S3455C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
  (VTBL_ENTRY)&_ZN7S3455C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3455C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3455C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3455C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3455C12v2Ev,
  0,
  ABISELECT(-16,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3455C1[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C1D1Ev,_ZTv0_n72_N7S3455C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C1D0Ev,_ZTv0_n72_N7S3455C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C43v29Ev,
  ABISELECT(-184,-132),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-132),
  ABISELECT(-184,-132),
  (VTBL_ENTRY)&(_ZTI7S3455C1[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C1D1Ev,_ZTv0_n72_N7S3455C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C1D0Ev,_ZTv0_n72_N7S3455C1D0Ev),
  0,
  0,
  ABISELECT(-352,-252),
  (VTBL_ENTRY)&(_ZTI7S3455C1[0]),
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v32Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-260),
  (VTBL_ENTRY)&(_ZTI7S3455C1[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN8S3455C113v37Ev,
  ABISELECT(-40,-20),
  ABISELECT(-392,-272),
  (VTBL_ENTRY)&(_ZTI7S3455C1[0]),
  (VTBL_ENTRY)&_ZN8S3455C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3455C123v36Ev,
};
extern VTBL_ENTRY _ZTV7S3455C1[];
extern void _ZN7S3455C2D1Ev();
extern void _ZN7S3455C2D0Ev();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
extern void _ZN7S3455C33v30Ev();
extern void _ZN7S3455C23v33Ev();
extern void _ZN7S3455C23v34Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C2__7S3455C1[] = {
  ABISELECT(352,252),
  ABISELECT(184,132),
  0,
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C2[0]),
  (VTBL_ENTRY)&_ZN7S3455C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
  (VTBL_ENTRY)&_ZN7S3455C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3455C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3455C23v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C3D1Ev,_ZTv0_n12_N7S3455C3D1Ev)();
extern void _ZN7S3455C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3455C3D0Ev,_ZTv0_n12_N7S3455C3D0Ev)();
extern void _ZN7S3455C3D0Ev() __attribute__((weak));
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
extern void _ZN7S3455C33v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C37S3455C2__7S3455C1[] = {
  ABISELECT(184,132),
  0,
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C3D1Ev,_ZTv0_n12_N7S3455C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C3D0Ev,_ZTv0_n12_N7S3455C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
  (VTBL_ENTRY)&_ZN7S3455C33v30Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S3455C3D1Ev,_ZThn12_N7S3455C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S3455C3D0Ev,_ZThn12_N7S3455C3D0Ev)() __attribute__((weak));
extern void _ZN7S3455C43v29Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C4__7S3455C37S3455C2__7S3455C1[] = {
  0,
  ABISELECT(-16,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3455C3[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C43v29Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev)();
extern void ABISELECT(_ZThn184_N7S3455C3D1Ev,_ZThn132_N7S3455C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev)();
extern void ABISELECT(_ZThn184_N7S3455C3D0Ev,_ZThn132_N7S3455C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3455C5__A1__7S3455C37S3455C2__7S3455C1[] = {
  ABISELECT(-184,-132),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-132),
  ABISELECT(-184,-132),
  (VTBL_ENTRY)&(_ZTI7S3455C3[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev),
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C2D1Ev,_ZTv0_n72_N7S3455C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3455C2D1Ev,_ZThn12_N7S3455C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C2D0Ev,_ZTv0_n72_N7S3455C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3455C2D0Ev,_ZThn12_N7S3455C2D0Ev)() __attribute__((weak));
extern void _ZN7S3455C43v29Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C4__7S3455C2__7S3455C1[] = {
  0,
  ABISELECT(-16,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3455C2[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C2D1Ev,_ZTv0_n72_N7S3455C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C2D0Ev,_ZTv0_n72_N7S3455C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C43v29Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void ABISELECT(_ZTv0_n144_N7S3455C2D1Ev,_ZTv0_n72_N7S3455C2D1Ev)();
extern void ABISELECT(_ZThn184_N7S3455C2D1Ev,_ZThn132_N7S3455C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n144_N7S3455C2D0Ev,_ZTv0_n72_N7S3455C2D0Ev)();
extern void ABISELECT(_ZThn184_N7S3455C2D0Ev,_ZThn132_N7S3455C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3455C5__A1__7S3455C2__7S3455C1[] = {
  ABISELECT(-184,-132),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-132),
  ABISELECT(-184,-132),
  (VTBL_ENTRY)&(_ZTI7S3455C2[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C2D1Ev,_ZTv0_n72_N7S3455C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n144_N7S3455C2D0Ev,_ZTv0_n72_N7S3455C2D0Ev),
};
extern void _ZN11S3455C10_nt3v31Ev();
extern void _ZN11S3455C10_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV11S3455C10_nt__7S3455C2__7S3455C1[] = {
  0,
  0,
  ABISELECT(-352,-252),
  (VTBL_ENTRY)&(_ZTI7S3455C2[0]),
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v32Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C4D1Ev();
extern void _ZN7S3455C4D0Ev();
extern void _ZN7S3455C43v29Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C4__7S3455C1[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C4[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3455C43v29Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C5D1Ev();
extern void _ZN7S3455C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C57S3455C4__7S3455C1[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev)();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C7__7S3455C57S3455C4__7S3455C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C4D1Ev,_ZTv0_n12_N7S3455C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3455C4D0Ev,_ZTv0_n12_N7S3455C4D0Ev)();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C7__7S3455C4__7S3455C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S3455C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C4D1Ev,_ZTv0_n12_N7S3455C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C4D0Ev,_ZTv0_n12_N7S3455C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN7S3455C53v20Ev();
extern void _ZN7S3455C53v21Ev();
extern void _ZN7S3455C53v22Ev();
extern void _ZN7S3455C53v23Ev();
extern void _ZN7S3455C53v24Ev();
extern void _ZN7S3455C53v25Ev();
extern void _ZN7S3455C53v26Ev();
extern void _ZN7S3455C53v27Ev();
extern void _ZN7S3455C53v28Ev();
extern void _ZN7S3455C5D1Ev();
extern void _ZN7S3455C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C5__A1__7S3455C1[] = {
  ABISELECT(-184,-132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v25Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v26Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v27Ev,
  (VTBL_ENTRY)&_ZN7S3455C53v28Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3455C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev)();
extern void _ZN7S3455C82v8Ev();
extern void _ZN7S3455C82v9Ev();
extern void _ZN7S3455C83v10Ev();
extern void _ZN7S3455C73v11Ev();
extern void _ZN7S3455C73v12Ev();
extern void _ZN7S3455C73v13Ev();
extern void _ZN7S3455C73v14Ev();
extern void _ZN7S3455C73v15Ev();
extern void _ZN7S3455C73v16Ev();
extern void _ZN7S3455C73v17Ev();
extern void _ZN7S3455C73v18Ev();
extern void _ZN7S3455C73v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3455C7__7S3455C5__A1__7S3455C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(184,132),
  ABISELECT(184,132),
  (VTBL_ENTRY)&(_ZTI7S3455C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D1Ev,_ZTv0_n12_N7S3455C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3455C5D0Ev,_ZTv0_n12_N7S3455C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3455C82v8Ev,
  (VTBL_ENTRY)&_ZN7S3455C82v9Ev,
  (VTBL_ENTRY)&_ZN7S3455C83v10Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v11Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v12Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v13Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v14Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v15Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v16Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v17Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v18Ev,
  (VTBL_ENTRY)&_ZN7S3455C73v19Ev,
};
extern void _ZN7S3455C62v3Ev();
extern void _ZN7S3455C62v4Ev();
extern void _ZN7S3455C62v5Ev();
extern void _ZN7S3455C62v6Ev();
extern void _ZN7S3455C62v7Ev();
extern void _ZN8S3455C113v37Ev();
static  VTBL_ENTRY _tg__ZTV8S3455C11__7S3455C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3455C11[0]),
  (VTBL_ENTRY)&_ZN7S3455C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3455C62v7Ev,
  (VTBL_ENTRY)&_ZN8S3455C113v37Ev,
};
extern void _ZN8S3455C123v35Ev();
extern void _ZN8S3455C123v36Ev();
static  VTBL_ENTRY _tg__ZTV8S3455C128S3455C11__7S3455C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S3455C12[0]),
  (VTBL_ENTRY)&_ZN8S3455C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3455C123v36Ev,
};
extern void _ZN11S3455C10_nt3v31Ev();
extern void _ZN11S3455C10_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV11S3455C10_nt__8S3455C128S3455C11__7S3455C1[] = {
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S3455C12[0]),
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v32Ev,
};
extern void _ZN8S3455C123v35Ev();
extern void _ZN8S3455C123v36Ev();
static  VTBL_ENTRY _tg__ZTV8S3455C12__8S3455C11__7S3455C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S3455C11[0]),
  (VTBL_ENTRY)&_ZN8S3455C123v35Ev,
  (VTBL_ENTRY)&_ZN8S3455C123v36Ev,
};
extern void _ZN11S3455C10_nt3v31Ev();
extern void _ZN11S3455C10_nt3v32Ev();
static  VTBL_ENTRY _tg__ZTV11S3455C10_nt__8S3455C11__7S3455C1[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S3455C11[0]),
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S3455C10_nt3v32Ev,
};
static  VTT_ENTRY vtt_S3455C1[] = {
  {&(_ZTV7S3455C1[20]),  20,137},
  {&(_tg__ZTV7S3455C2__7S3455C1[19]),  19,36},
  {&(_tg__ZTV7S3455C37S3455C2__7S3455C1[18]),  18,33},
  {&(_tg__ZTV7S3455C4__7S3455C37S3455C2__7S3455C1[19]),  19,36},
  {&(_tg__ZTV7S3455C37S3455C2__7S3455C1[18]),  18,33},
  {&(_tg__ZTV7S3455C5__A1__7S3455C37S3455C2__7S3455C1[18]),  18,34},
  {&(_tg__ZTV7S3455C4__7S3455C2__7S3455C1[19]),  19,36},
  {&(_tg__ZTV7S3455C2__7S3455C1[19]),  19,36},
  {&(_tg__ZTV7S3455C5__A1__7S3455C2__7S3455C1[18]),  18,34},
  {&(_tg__ZTV11S3455C10_nt__7S3455C2__7S3455C1[4]),  4,6},
  {&(_ZTV7S3455C1[58]),  58,137},
  {&(_ZTV7S3455C1[20]),  20,137},
  {&(_ZTV7S3455C1[93]),  93,137},
  {&(_ZTV7S3455C1[113]),  113,137},
  {&(_ZTV7S3455C1[126]),  126,137},
  {&(_ZTV7S3455C1[135]),  135,137},
  {&(_tg__ZTV7S3455C4__7S3455C1[3]),  3,20},
  {&(_tg__ZTV7S3455C57S3455C4__7S3455C1[3]),  3,19},
  {&(_tg__ZTV7S3455C7__7S3455C57S3455C4__7S3455C1[15]),  15,29},
  {&(_tg__ZTV7S3455C7__7S3455C4__7S3455C1[15]),  15,29},
  {&(_tg__ZTV7S3455C5__A1__7S3455C1[3]),  3,19},
  {&(_tg__ZTV7S3455C7__7S3455C5__A1__7S3455C1[15]),  15,29},
  {&(_tg__ZTV8S3455C11__7S3455C1[3]),  3,9},
  {&(_tg__ZTV8S3455C128S3455C11__7S3455C1[3]),  3,5},
  {&(_tg__ZTV11S3455C10_nt__8S3455C128S3455C11__7S3455C1[4]),  4,6},
  {&(_tg__ZTV8S3455C12__8S3455C11__7S3455C1[3]),  3,5},
  {&(_tg__ZTV11S3455C10_nt__8S3455C11__7S3455C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3455C1[];
extern  VTBL_ENTRY _ZTV7S3455C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3455C1[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C2D0Ev,_ZTv0_n72_N7S3455C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S3455C2D0Ev,_ZThn132_N7S3455C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3455C2D0Ev,_ZThn12_N7S3455C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C2D1Ev,_ZTv0_n72_N7S3455C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S3455C2D1Ev,_ZThn132_N7S3455C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3455C2D1Ev,_ZThn12_N7S3455C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C3D0Ev,_ZTv0_n72_N7S3455C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S3455C3D0Ev,_ZThn132_N7S3455C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3455C3D0Ev,_ZThn12_N7S3455C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C3D1Ev,_ZTv0_n72_N7S3455C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S3455C3D1Ev,_ZThn132_N7S3455C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3455C3D1Ev,_ZThn12_N7S3455C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3455C3D0Ev,_ZTv0_n12_N7S3455C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3455C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3455C3D1Ev,_ZTv0_n12_N7S3455C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3455C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C1D0Ev,_ZTv0_n72_N7S3455C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S3455C1D0Ev,_ZThn132_N7S3455C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3455C1D0Ev,_ZThn12_N7S3455C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n144_N7S3455C1D1Ev,_ZTv0_n72_N7S3455C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S3455C1D1Ev,_ZThn132_N7S3455C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3455C1D1Ev,_ZThn12_N7S3455C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3455C1 = {  "S3455C1", // class name
  bases_S3455C1, 13,
  &(vtc_S3455C1[0]), // expected_vtbl_contents
  &(vtt_S3455C1[0]), // expected_vtt_contents
  ABISELECT(408,280), // object size
  NSPAIRA(_ZTI7S3455C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3455C1),137, //virtual function table var
  20, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3455C1),27, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15696C5_nt  {
  ::S10180C38 s15696c5f0;
  void  mf15696c5(); // _ZN11S15696C5_nt9mf15696c5Ev
};
//SIG(-1 S15696C5_nt) C1{ m FC2{ FL[4]}}


void  S15696C5_nt ::mf15696c5(){}

//skip512 S15696C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15696C4  {
  int s15696c4f0[2];
  ::S15696C5_nt s15696c4f1;
  void *s15696c4f2[2];
  ::S1168C5 s15696c4f3;
  void  mf15696c4(); // _ZN8S15696C49mf15696c4Ev
};
//SIG(-1 S15696C4) C1{ m Fi[2] FC2{ m FC3{ FL[4]}} Fp[2] FC4{ BC5{ m Fp Fi[2] FC6{ m}}}}


void  S15696C4 ::mf15696c4(){}

static void Test_S15696C4()
{
  {
    init_simple_test("S15696C4");
    S15696C4 lv;
    check2(sizeof(lv), ABISELECT(80,64), "sizeof(S15696C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15696C4)");
    check_field_offset(lv, s15696c4f0, 0, "S15696C4.s15696c4f0");
    check_field_offset(lv, s15696c4f1, 8, "S15696C4.s15696c4f1");
    check_field_offset(lv, s15696c4f2, 40, "S15696C4.s15696c4f2");
    check_field_offset(lv, s15696c4f3, ABISELECT(56,48), "S15696C4.s15696c4f3");
  }
}
static Arrange_To_Call_Me vS15696C4(Test_S15696C4, "S15696C4", ABISELECT(80,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15696C13  {
  int s15696c13f0:4;
  int s15696c13f1:6;
  int s15696c13f2:22;
};
//SIG(1 S15696C13) C1{ Fi:4 Fi:6 Fi:22}



static void Test_S15696C13()
{
  {
    init_simple_test("S15696C13");
    static S15696C13 lv;
    check2(sizeof(lv), 4, "sizeof(S15696C13)");
    check2(__alignof__(lv), 4, "__alignof__(S15696C13)");
    set_bf_and_test(lv, s15696c13f0, 0, 0, 4, 1, "S15696C13");
    set_bf_and_test(lv, s15696c13f0, 0, 0, 4, hide_sll(1LL<<3), "S15696C13");
    set_bf_and_test(lv, s15696c13f1, 0, 4, 6, 1, "S15696C13");
    set_bf_and_test(lv, s15696c13f1, 0, 4, 6, hide_sll(1LL<<5), "S15696C13");
    set_bf_and_test(lv, s15696c13f2, 1, 2, 22, 1, "S15696C13");
    set_bf_and_test(lv, s15696c13f2, 1, 2, 22, hide_sll(1LL<<21), "S15696C13");
  }
}
static Arrange_To_Call_Me vS15696C13(Test_S15696C13, "S15696C13", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S15696C12  {
  int s15696c12f0;
  ::S15696C13 s15696c12f1;
  void  mf15696c12(); // _ZN9S15696C1210mf15696c12Ev
};
//SIG(1 S15696C12) U1{ m Fi FC2{ Fi:4 Fi:6 Fi:22}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S15696C9  {
  int s15696c9f0[2];
  ::S10180C37 s15696c9f1;
  ::S10180C37 s15696c9f2;
  ::S10180C37 s15696c9f3;
  ::S10180C13 s15696c9f4;
  int s15696c9f5;
  __tsi64 s15696c9f6[2];
  ::S15696C12 s15696c9f7[16];
  void  mf15696c9(); // _ZN8S15696C99mf15696c9Ev
};
//SIG(-1 S15696C9) C1{ m Fi[2] FC2{ m FC3{ FL[4]}} FC2 FC2 FC4{ m Fp Fi FC5{ m}} Fi FL[2] FU6{ m Fi FC7{ Fi:4 Fi:6 Fi:22}}[16]}


void  S15696C9 ::mf15696c9(){}

static void Test_S15696C9()
{
  {
    init_simple_test("S15696C9");
    S15696C9 lv;
    check2(sizeof(lv), ABISELECT(208,200), "sizeof(S15696C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15696C9)");
    check_field_offset(lv, s15696c9f0, 0, "S15696C9.s15696c9f0");
    check_field_offset(lv, s15696c9f1, 8, "S15696C9.s15696c9f1");
    check_field_offset(lv, s15696c9f2, 40, "S15696C9.s15696c9f2");
    check_field_offset(lv, s15696c9f3, 72, "S15696C9.s15696c9f3");
    check_field_offset(lv, s15696c9f4, 104, "S15696C9.s15696c9f4");
    check_field_offset(lv, s15696c9f5, ABISELECT(120,116), "S15696C9.s15696c9f5");
    check_field_offset(lv, s15696c9f6, ABISELECT(128,120), "S15696C9.s15696c9f6");
    check_field_offset(lv, s15696c9f7, ABISELECT(144,136), "S15696C9.s15696c9f7");
  }
}
static Arrange_To_Call_Me vS15696C9(Test_S15696C9, "S15696C9", ABISELECT(208,200));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15696C17_nt  {
  void *s15696c17f0;
  int s15696c17f1;
  int s15696c17f2;
  ::S10180C133 s15696c17f3;
  void  mf15696c17(); // _ZN12S15696C17_nt10mf15696c17Ev
};
//SIG(-1 S15696C17_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S15696C17_nt ::mf15696c17(){}

//skip512 S15696C17_nt

#else // __cplusplus

Class_Descriptor cd_S15696C17_nt = {  "S15696C17_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  S15696C16  : S15696C17_nt {
};
//SIG(-1 S15696C16) C1{ BC2{ m Fp Fi[2] FC3{ m}}}



static void Test_S15696C16()
{
  extern Class_Descriptor cd_S15696C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S15696C16, buf);
    S15696C16 &lv = *(new (buf) S15696C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S15696C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15696C16)");
    check_base_class_offset(lv, (S15696C17_nt*), 0, "S15696C16");
    test_class_info(&lv, &cd_S15696C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15696C16(Test_S15696C16, "S15696C16", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S15696C17_nt;
static Base_Class bases_S15696C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15696C17_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_S15696C16 = {  "S15696C16", // class name
  bases_S15696C16, 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  S15696C14  : S10180C138 {
  int s15696c14f0;
  int s15696c14f1;
  ::S15696C16 s15696c14f2;
  void *s15696c14f3;
};
//SIG(-1 S15696C14) C1{ BC2{ m} Fi[2] FC3{ BC4{ m Fp Fi[2] FC5{ m}}} Fp}



static void Test_S15696C14()
{
  extern Class_Descriptor cd_S15696C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S15696C14, buf);
    S15696C14 &lv = *(new (buf) S15696C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S15696C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15696C14)");
    check_base_class_offset(lv, (S10180C138*), 0, "S15696C14");
    check_field_offset(lv, s15696c14f0, 0, "S15696C14.s15696c14f0");
    check_field_offset(lv, s15696c14f1, 4, "S15696C14.s15696c14f1");
    check_field_offset(lv, s15696c14f2, 8, "S15696C14.s15696c14f2");
    check_field_offset(lv, s15696c14f3, ABISELECT(32,24), "S15696C14.s15696c14f3");
    test_class_info(&lv, &cd_S15696C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15696C14(Test_S15696C14, "S15696C14", ABISELECT(40,28));

#else // __cplusplus

extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S15696C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S15696C14 = {  "S15696C14", // class name
  bases_S15696C14, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15696C1  {
  ::S10180C37 s15696c1f0;
  ::S10180C37 s15696c1f1;
  ::S15696C4 s15696c1f2;
  ::S15696C9 s15696c1f3;
  void *s15696c1f4;
  ::S10180C37 s15696c1f5;
  ::S15696C14 s15696c1f6;
  ::S10180C37 s15696c1f7;
  ::S15696C14 s15696c1f8;
  int s15696c1f9;
  int s15696c1f10;
  void  mf15696c1(); // _ZN8S15696C19mf15696c1Ev
};
//SIG(1 S15696C1) C1{ m FC2{ m FC3{ FL[4]}} FC2 FC4{ m Fi[2] FC5{ m FC3} Fp[2] FC6{ BC7{ m Fp Fi[2] FC8{ m}}}} FC9{ m Fi[2] FC2 FC2 FC2 FC10{ m Fp Fi FC11{ m}} Fi FL[2] FU12{ m Fi FC13{ Fi:4 Fi:6 Fi:22}}[16]} Fp FC2 FC14{ BC8 Fi Fi FC15{ BC16{ m Fp Fi Fi FC17{ m}}} Fp} FC2 FC14 Fi Fi}


void  S15696C1 ::mf15696c1(){}

static void Test_S15696C1()
{
  {
    init_simple_test("S15696C1");
    S15696C1 lv;
    check2(sizeof(lv), ABISELECT(512,460), "sizeof(S15696C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15696C1)");
    check_field_offset(lv, s15696c1f0, 0, "S15696C1.s15696c1f0");
    check_field_offset(lv, s15696c1f1, 32, "S15696C1.s15696c1f1");
    check_field_offset(lv, s15696c1f2, 64, "S15696C1.s15696c1f2");
    check_field_offset(lv, s15696c1f3, ABISELECT(144,128), "S15696C1.s15696c1f3");
    check_field_offset(lv, s15696c1f4, ABISELECT(352,328), "S15696C1.s15696c1f4");
    check_field_offset(lv, s15696c1f5, ABISELECT(360,332), "S15696C1.s15696c1f5");
    check_field_offset(lv, s15696c1f6, ABISELECT(392,364), "S15696C1.s15696c1f6");
    check_field_offset(lv, s15696c1f7, ABISELECT(432,392), "S15696C1.s15696c1f7");
    check_field_offset(lv, s15696c1f8, ABISELECT(464,424), "S15696C1.s15696c1f8");
    check_field_offset(lv, s15696c1f9, ABISELECT(504,452), "S15696C1.s15696c1f9");
    check_field_offset(lv, s15696c1f10, ABISELECT(508,456), "S15696C1.s15696c1f10");
  }
}
static Arrange_To_Call_Me vS15696C1(Test_S15696C1, "S15696C1", ABISELECT(512,460));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15695C5_nt  {
  ::S10179C38 s15695c5f0;
  void  mf15695c5(); // _ZN11S15695C5_nt9mf15695c5Ev
};
//SIG(-1 S15695C5_nt) C1{ m FC2{ Fl[4]}}


void  S15695C5_nt ::mf15695c5(){}

//skip512 S15695C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15695C4  {
  int s15695c4f0[2];
  ::S15695C5_nt s15695c4f1;
  void *s15695c4f2[2];
  ::S1168C5 s15695c4f3;
  void  mf15695c4(); // _ZN8S15695C49mf15695c4Ev
};
//SIG(-1 S15695C4) C1{ m Fi[2] FC2{ m FC3{ Fl[4]}} Fp[2] FC4{ BC5{ m Fp Fi[2] FC6{ m}}}}


void  S15695C4 ::mf15695c4(){}

static void Test_S15695C4()
{
  {
    init_simple_test("S15695C4");
    S15695C4 lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S15695C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15695C4)");
    check_field_offset(lv, s15695c4f0, 0, "S15695C4.s15695c4f0");
    check_field_offset(lv, s15695c4f1, 8, "S15695C4.s15695c4f1");
    check_field_offset(lv, s15695c4f2, ABISELECT(40,24), "S15695C4.s15695c4f2");
    check_field_offset(lv, s15695c4f3, ABISELECT(56,32), "S15695C4.s15695c4f3");
  }
}
static Arrange_To_Call_Me vS15695C4(Test_S15695C4, "S15695C4", ABISELECT(80,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15695C9  {
  int s15695c9f0[2];
  ::S10179C37 s15695c9f1;
  ::S10179C37 s15695c9f2;
  ::S10179C37 s15695c9f3;
  ::S10180C13 s15695c9f4;
  int s15695c9f5;
  long s15695c9f6;
  __tsi64 s15695c9f7;
  ::S15696C12 s15695c9f8[16];
  void  mf15695c9(); // _ZN8S15695C99mf15695c9Ev
};
//SIG(-1 S15695C9) C1{ m Fi[2] FC2{ m FC3{ Fl[4]}} FC2 FC2 FC4{ m Fp Fi FC5{ m}} Fi Fl FL FU6{ m Fi FC7{ Fi:4 Fi:6 Fi:22}}[16]}


void  S15695C9 ::mf15695c9(){}

static void Test_S15695C9()
{
  {
    init_simple_test("S15695C9");
    S15695C9 lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S15695C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15695C9)");
    check_field_offset(lv, s15695c9f0, 0, "S15695C9.s15695c9f0");
    check_field_offset(lv, s15695c9f1, 8, "S15695C9.s15695c9f1");
    check_field_offset(lv, s15695c9f2, ABISELECT(40,24), "S15695C9.s15695c9f2");
    check_field_offset(lv, s15695c9f3, ABISELECT(72,40), "S15695C9.s15695c9f3");
    check_field_offset(lv, s15695c9f4, ABISELECT(104,56), "S15695C9.s15695c9f4");
    check_field_offset(lv, s15695c9f5, ABISELECT(120,68), "S15695C9.s15695c9f5");
    check_field_offset(lv, s15695c9f6, ABISELECT(128,72), "S15695C9.s15695c9f6");
    check_field_offset(lv, s15695c9f7, ABISELECT(136,76), "S15695C9.s15695c9f7");
    check_field_offset(lv, s15695c9f8, ABISELECT(144,84), "S15695C9.s15695c9f8");
  }
}
static Arrange_To_Call_Me vS15695C9(Test_S15695C9, "S15695C9", ABISELECT(208,148));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15695C1  {
  ::S10179C37 s15695c1f0;
  ::S10179C37 s15695c1f1;
  ::S15695C4 s15695c1f2;
  ::S15695C9 s15695c1f3;
  void *s15695c1f4;
  ::S10179C37 s15695c1f5;
  ::S15696C14 s15695c1f6;
  ::S10179C37 s15695c1f7;
  ::S15696C14 s15695c1f8;
  int s15695c1f9;
  int s15695c1f10;
  void  mf15695c1(); // _ZN8S15695C19mf15695c1Ev
};
//SIG(1 S15695C1) C1{ m FC2{ m FC3{ Fl[4]}} FC2 FC4{ m Fi[2] FC5{ m FC3} Fp[2] FC6{ BC7{ m Fp Fi[2] FC8{ m}}}} FC9{ m Fi[2] FC2 FC2 FC2 FC10{ m Fp Fi FC11{ m}} Fi Fl FL FU12{ m Fi FC13{ Fi:4 Fi:6 Fi:22}}[16]} Fp FC2 FC14{ BC8 Fi Fi FC15{ BC16{ m Fp Fi Fi FC17{ m}}} Fp} FC2 FC14 Fi Fi}


void  S15695C1 ::mf15695c1(){}

static void Test_S15695C1()
{
  {
    init_simple_test("S15695C1");
    S15695C1 lv;
    check2(sizeof(lv), ABISELECT(512,328), "sizeof(S15695C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15695C1)");
    check_field_offset(lv, s15695c1f0, 0, "S15695C1.s15695c1f0");
    check_field_offset(lv, s15695c1f1, ABISELECT(32,16), "S15695C1.s15695c1f1");
    check_field_offset(lv, s15695c1f2, ABISELECT(64,32), "S15695C1.s15695c1f2");
    check_field_offset(lv, s15695c1f3, ABISELECT(144,80), "S15695C1.s15695c1f3");
    check_field_offset(lv, s15695c1f4, ABISELECT(352,228), "S15695C1.s15695c1f4");
    check_field_offset(lv, s15695c1f5, ABISELECT(360,232), "S15695C1.s15695c1f5");
    check_field_offset(lv, s15695c1f6, ABISELECT(392,248), "S15695C1.s15695c1f6");
    check_field_offset(lv, s15695c1f7, ABISELECT(432,276), "S15695C1.s15695c1f7");
    check_field_offset(lv, s15695c1f8, ABISELECT(464,292), "S15695C1.s15695c1f8");
    check_field_offset(lv, s15695c1f9, ABISELECT(504,320), "S15695C1.s15695c1f9");
    check_field_offset(lv, s15695c1f10, ABISELECT(508,324), "S15695C1.s15695c1f10");
  }
}
static Arrange_To_Call_Me vS15695C1(Test_S15695C1, "S15695C1", ABISELECT(512,328));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7821C7  {
  virtual void  v6(); // _ZN7S7821C72v6Ev
  virtual void  v7(); // _ZN7S7821C72v7Ev
  virtual void  v8(); // _ZN7S7821C72v8Ev
  virtual void  v9(); // _ZN7S7821C72v9Ev
  ~S7821C7(); // tgen
  S7821C7(); // tgen
};
//SIG(-1 S7821C7) C1{ v1 v2 v3 v4}


void  S7821C7 ::v6(){vfunc_called(this, "_ZN7S7821C72v6Ev");}
void  S7821C7 ::v7(){vfunc_called(this, "_ZN7S7821C72v7Ev");}
void  S7821C7 ::v8(){vfunc_called(this, "_ZN7S7821C72v8Ev");}
void  S7821C7 ::v9(){vfunc_called(this, "_ZN7S7821C72v9Ev");}
S7821C7 ::~S7821C7(){ note_dtor("S7821C7", this);} // tgen
S7821C7 ::S7821C7(){ note_ctor("S7821C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7821C7C1Ev();
extern void _ZN7S7821C7D1Ev();
Name_Map name_map_S7821C7[] = {
  NSPAIR(_ZN7S7821C7C1Ev),
  NSPAIR(_ZN7S7821C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7821C7[];
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
static  VTBL_ENTRY vtc_S7821C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C7[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
};
extern VTBL_ENTRY _ZTI7S7821C7[];
extern  VTBL_ENTRY _ZTV7S7821C7[];
Class_Descriptor cd_S7821C7 = {  "S7821C7", // class name
  0,0,//no base classes
  &(vtc_S7821C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7821C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7821C7),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  S7821C6  : S7821C7 {
  virtual void  v10(); // _ZN7S7821C63v10Ev
  virtual void  v11(); // _ZN7S7821C63v11Ev
  ~S7821C6(); // tgen
  S7821C6(); // tgen
};
//SIG(-1 S7821C6) C1{ BC2{ v3 v4 v5 v6} v1 v2}


void  S7821C6 ::v10(){vfunc_called(this, "_ZN7S7821C63v10Ev");}
void  S7821C6 ::v11(){vfunc_called(this, "_ZN7S7821C63v11Ev");}
S7821C6 ::~S7821C6(){ note_dtor("S7821C6", this);} // tgen
S7821C6 ::S7821C6(){ note_ctor("S7821C6", this);} // tgen

static void Test_S7821C6()
{
  extern Class_Descriptor cd_S7821C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7821C6, buf);
    S7821C6 *dp, &lv = *(dp=new (buf) S7821C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7821C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7821C6)");
    check_base_class_offset(lv, (S7821C7*), 0, "S7821C6");
    test_class_info(&lv, &cd_S7821C6);
    dp->~S7821C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7821C6(Test_S7821C6, "S7821C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7821C6C1Ev();
extern void _ZN7S7821C6D1Ev();
Name_Map name_map_S7821C6[] = {
  NSPAIR(_ZN7S7821C6C1Ev),
  NSPAIR(_ZN7S7821C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7821C7;
extern VTBL_ENTRY _ZTI7S7821C7[];
extern  VTBL_ENTRY _ZTV7S7821C7[];
static Base_Class bases_S7821C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7821C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7821C6[];
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
static  VTBL_ENTRY vtc_S7821C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C6[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
};
extern VTBL_ENTRY _ZTI7S7821C6[];
extern  VTBL_ENTRY _ZTV7S7821C6[];
Class_Descriptor cd_S7821C6 = {  "S7821C6", // class name
  bases_S7821C6, 1,
  &(vtc_S7821C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7821C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7821C6),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7821C9  {
  virtual void  v12(); // _ZN7S7821C93v12Ev
  ~S7821C9(); // tgen
  S7821C9(); // tgen
};
//SIG(-1 S7821C9) C1{ v1}


void  S7821C9 ::v12(){vfunc_called(this, "_ZN7S7821C93v12Ev");}
S7821C9 ::~S7821C9(){ note_dtor("S7821C9", this);} // tgen
S7821C9 ::S7821C9(){ note_ctor("S7821C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7821C9C1Ev();
extern void _ZN7S7821C9D1Ev();
Name_Map name_map_S7821C9[] = {
  NSPAIR(_ZN7S7821C9C1Ev),
  NSPAIR(_ZN7S7821C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7821C9[];
extern void _ZN7S7821C93v12Ev();
static  VTBL_ENTRY vtc_S7821C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C9[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
};
extern VTBL_ENTRY _ZTI7S7821C9[];
extern  VTBL_ENTRY _ZTV7S7821C9[];
Class_Descriptor cd_S7821C9 = {  "S7821C9", // class name
  0,0,//no base classes
  &(vtc_S7821C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7821C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7821C9),3, //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  S7821C8  : S7821C9 {
  void *s7821c8f0;
  virtual void  v13(); // _ZN7S7821C83v13Ev
  virtual void  v14(); // _ZN7S7821C83v14Ev
  virtual void  v15(); // _ZN7S7821C83v15Ev
  virtual void  v16(); // _ZN7S7821C83v16Ev
  virtual void  v17(); // _ZN7S7821C83v17Ev
  virtual void  v18(); // _ZN7S7821C83v18Ev
  virtual void  v19(); // _ZN7S7821C83v19Ev
  ~S7821C8(); // tgen
  S7821C8(); // tgen
};
//SIG(-1 S7821C8) C1{ BC2{ v8} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S7821C8 ::v13(){vfunc_called(this, "_ZN7S7821C83v13Ev");}
void  S7821C8 ::v14(){vfunc_called(this, "_ZN7S7821C83v14Ev");}
void  S7821C8 ::v15(){vfunc_called(this, "_ZN7S7821C83v15Ev");}
void  S7821C8 ::v16(){vfunc_called(this, "_ZN7S7821C83v16Ev");}
void  S7821C8 ::v17(){vfunc_called(this, "_ZN7S7821C83v17Ev");}
void  S7821C8 ::v18(){vfunc_called(this, "_ZN7S7821C83v18Ev");}
void  S7821C8 ::v19(){vfunc_called(this, "_ZN7S7821C83v19Ev");}
S7821C8 ::~S7821C8(){ note_dtor("S7821C8", this);} // tgen
S7821C8 ::S7821C8(){ note_ctor("S7821C8", this);} // tgen

static void Test_S7821C8()
{
  extern Class_Descriptor cd_S7821C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7821C8, buf);
    S7821C8 *dp, &lv = *(dp=new (buf) S7821C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7821C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7821C8)");
    check_base_class_offset(lv, (S7821C9*), 0, "S7821C8");
    check_field_offset(lv, s7821c8f0, ABISELECT(8,4), "S7821C8.s7821c8f0");
    test_class_info(&lv, &cd_S7821C8);
    dp->~S7821C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7821C8(Test_S7821C8, "S7821C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7821C8C1Ev();
extern void _ZN7S7821C8D1Ev();
Name_Map name_map_S7821C8[] = {
  NSPAIR(_ZN7S7821C8C1Ev),
  NSPAIR(_ZN7S7821C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7821C9;
extern VTBL_ENTRY _ZTI7S7821C9[];
extern  VTBL_ENTRY _ZTV7S7821C9[];
static Base_Class bases_S7821C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7821C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7821C8[];
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY vtc_S7821C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C8[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern VTBL_ENTRY _ZTI7S7821C8[];
extern  VTBL_ENTRY _ZTV7S7821C8[];
Class_Descriptor cd_S7821C8 = {  "S7821C8", // class name
  bases_S7821C8, 1,
  &(vtc_S7821C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7821C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7821C8),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7821C5  : S7821C6 , virtual S7821C8 {
  char s7821c5f0[10];
  virtual  ~S7821C5(); // _ZN7S7821C5D2Ev
  virtual void  v20(); // _ZN7S7821C53v20Ev
  virtual void  v21(); // _ZN7S7821C53v21Ev
  S7821C5(); // tgen
};
//SIG(-1 S7821C5) C1{ BC2{ BC3{ v3 v4 v5 v6} v7 v8} VBC4{ BC5{ v9} v10 v11 v12 v13 v14 v15 v16 Fp} vd v1 v2 Fc[10]}


 S7821C5 ::~S7821C5(){ note_dtor("S7821C5", this);}
void  S7821C5 ::v20(){vfunc_called(this, "_ZN7S7821C53v20Ev");}
void  S7821C5 ::v21(){vfunc_called(this, "_ZN7S7821C53v21Ev");}
S7821C5 ::S7821C5(){ note_ctor("S7821C5", this);} // tgen

static void Test_S7821C5()
{
  extern Class_Descriptor cd_S7821C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S7821C5, buf);
    S7821C5 *dp, &lv = *(dp=new (buf) S7821C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S7821C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7821C5)");
    check_base_class_offset(lv, (S7821C7*)(S7821C6*), 0, "S7821C5");
    check_base_class_offset(lv, (S7821C6*), 0, "S7821C5");
    check_base_class_offset(lv, (S7821C9*)(S7821C8*), ABISELECT(24,16), "S7821C5");
    check_base_class_offset(lv, (S7821C8*), ABISELECT(24,16), "S7821C5");
    check_field_offset(lv, s7821c5f0, ABISELECT(8,4), "S7821C5.s7821c5f0");
    test_class_info(&lv, &cd_S7821C5);
    dp->~S7821C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7821C5(Test_S7821C5, "S7821C5", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S7821C5C1Ev();
extern void _ZN7S7821C5D2Ev();
Name_Map name_map_S7821C5[] = {
  NSPAIR(_ZN7S7821C5C1Ev),
  NSPAIR(_ZN7S7821C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7821C7;
extern VTBL_ENTRY _ZTI7S7821C7[];
extern  VTBL_ENTRY _ZTV7S7821C7[];
extern Class_Descriptor cd_S7821C6;
extern VTBL_ENTRY _ZTI7S7821C6[];
extern  VTBL_ENTRY _ZTV7S7821C6[];
extern Class_Descriptor cd_S7821C9;
extern VTBL_ENTRY _ZTI7S7821C9[];
extern  VTBL_ENTRY _ZTV7S7821C9[];
extern Class_Descriptor cd_S7821C8;
extern VTBL_ENTRY _ZTI7S7821C8[];
extern  VTBL_ENTRY _ZTV7S7821C8[];
static Base_Class bases_S7821C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7821C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S7821C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S7821C9,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7821C8,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7821C5[];
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void _ZN7S7821C5D1Ev();
extern void _ZN7S7821C5D0Ev();
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY vtc_S7821C5[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C5[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7821C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7821C5[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern VTBL_ENTRY _ZTV7S7821C5[];
static  VTT_ENTRY vtt_S7821C5[] = {
  {&(_ZTV7S7821C5[3]),  3,31},
  {&(_ZTV7S7821C5[23]),  23,31},
};
extern VTBL_ENTRY _ZTI7S7821C5[];
extern  VTBL_ENTRY _ZTV7S7821C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C5[];
Class_Descriptor cd_S7821C5 = {  "S7821C5", // class name
  bases_S7821C5, 4,
  &(vtc_S7821C5[0]), // expected_vtbl_contents
  &(vtt_S7821C5[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S7821C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7821C5),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7821C5),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7821C11  {
  void *s7821c11f0[2];
  virtual void  v30(); // _ZN8S7821C113v30Ev
  virtual void  v31(); // _ZN8S7821C113v31Ev
  virtual void  v32(); // _ZN8S7821C113v32Ev
  virtual void  v33(); // _ZN8S7821C113v33Ev
  virtual void  v34(); // _ZN8S7821C113v34Ev
  ~S7821C11(); // tgen
  S7821C11(); // tgen
};
//SIG(-1 S7821C11) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S7821C11 ::v30(){vfunc_called(this, "_ZN8S7821C113v30Ev");}
void  S7821C11 ::v31(){vfunc_called(this, "_ZN8S7821C113v31Ev");}
void  S7821C11 ::v32(){vfunc_called(this, "_ZN8S7821C113v32Ev");}
void  S7821C11 ::v33(){vfunc_called(this, "_ZN8S7821C113v33Ev");}
void  S7821C11 ::v34(){vfunc_called(this, "_ZN8S7821C113v34Ev");}
S7821C11 ::~S7821C11(){ note_dtor("S7821C11", this);} // tgen
S7821C11 ::S7821C11(){ note_ctor("S7821C11", this);} // tgen

static void Test_S7821C11()
{
  extern Class_Descriptor cd_S7821C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7821C11, buf);
    S7821C11 *dp, &lv = *(dp=new (buf) S7821C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7821C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7821C11)");
    check_field_offset(lv, s7821c11f0, ABISELECT(8,4), "S7821C11.s7821c11f0");
    test_class_info(&lv, &cd_S7821C11);
    dp->~S7821C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7821C11(Test_S7821C11, "S7821C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S7821C11C1Ev();
extern void _ZN8S7821C11D1Ev();
Name_Map name_map_S7821C11[] = {
  NSPAIR(_ZN8S7821C11C1Ev),
  NSPAIR(_ZN8S7821C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7821C11[];
extern void _ZN8S7821C113v30Ev();
extern void _ZN8S7821C113v31Ev();
extern void _ZN8S7821C113v32Ev();
extern void _ZN8S7821C113v33Ev();
extern void _ZN8S7821C113v34Ev();
static  VTBL_ENTRY vtc_S7821C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7821C11[0]),
  (VTBL_ENTRY)&_ZN8S7821C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v34Ev,
};
extern VTBL_ENTRY _ZTI8S7821C11[];
extern  VTBL_ENTRY _ZTV8S7821C11[];
Class_Descriptor cd_S7821C11 = {  "S7821C11", // class name
  0,0,//no base classes
  &(vtc_S7821C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S7821C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7821C11),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  S7821C10  : S7821C11 {
  int s7821c10f0;
  virtual  ~S7821C10(); // _ZN8S7821C10D1Ev
  virtual void  v35(); // _ZN8S7821C103v35Ev
  S7821C10(); // tgen
};
//SIG(-1 S7821C10) C1{ BC2{ v2 v3 v4 v5 v6 Fp[2]} vd v1 Fi}


 S7821C10 ::~S7821C10(){ note_dtor("S7821C10", this);}
void  S7821C10 ::v35(){vfunc_called(this, "_ZN8S7821C103v35Ev");}
S7821C10 ::S7821C10(){ note_ctor("S7821C10", this);} // tgen

static void Test_S7821C10()
{
  extern Class_Descriptor cd_S7821C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7821C10, buf);
    S7821C10 *dp, &lv = *(dp=new (buf) S7821C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7821C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7821C10)");
    check_base_class_offset(lv, (S7821C11*), 0, "S7821C10");
    check_field_offset(lv, s7821c10f0, ABISELECT(24,12), "S7821C10.s7821c10f0");
    test_class_info(&lv, &cd_S7821C10);
    dp->~S7821C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7821C10(Test_S7821C10, "S7821C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7821C10C1Ev();
extern void _ZN8S7821C10D1Ev();
Name_Map name_map_S7821C10[] = {
  NSPAIR(_ZN8S7821C10C1Ev),
  NSPAIR(_ZN8S7821C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7821C11;
extern VTBL_ENTRY _ZTI8S7821C11[];
extern  VTBL_ENTRY _ZTV8S7821C11[];
static Base_Class bases_S7821C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7821C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S7821C10[];
extern void _ZN8S7821C113v30Ev();
extern void _ZN8S7821C113v31Ev();
extern void _ZN8S7821C113v32Ev();
extern void _ZN8S7821C113v33Ev();
extern void _ZN8S7821C113v34Ev();
extern void _ZN8S7821C10D1Ev();
extern void _ZN8S7821C10D0Ev();
extern void _ZN8S7821C103v35Ev();
static  VTBL_ENTRY vtc_S7821C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7821C10[0]),
  (VTBL_ENTRY)&_ZN8S7821C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7821C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7821C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7821C103v35Ev,
};
extern VTBL_ENTRY _ZTI8S7821C10[];
extern  VTBL_ENTRY _ZTV8S7821C10[];
Class_Descriptor cd_S7821C10 = {  "S7821C10", // class name
  bases_S7821C10, 1,
  &(vtc_S7821C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7821C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7821C10),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7821C4  : virtual S7821C5 {
  int s7821c4f0;
  ::S7821C10 s7821c4f1[9];
  virtual  ~S7821C4(); // _ZN7S7821C4D2Ev
  virtual void  v22(); // _ZN7S7821C43v22Ev
  virtual void  v23(); // _ZN7S7821C43v23Ev
  virtual void  v24(); // _ZN7S7821C43v24Ev
  virtual void  v25(); // _ZN7S7821C43v25Ev
  S7821C4(); // tgen
};
//SIG(-1 S7821C4) C1{ VBC2{ BC3{ BC4{ v5 v6 v7 v8} v9 v10} VBC5{ BC6{ v11} v12 v13 v14 v15 v16 v17 v18 Fp} vd v19 v20 Fc[10]} vd v1 v2 v3 v4 Fi FC7{ BC8{ v22 v23 v24 v25 v26 Fp[2]} vd v21 Fi}[9]}


 S7821C4 ::~S7821C4(){ note_dtor("S7821C4", this);}
void  S7821C4 ::v22(){vfunc_called(this, "_ZN7S7821C43v22Ev");}
void  S7821C4 ::v23(){vfunc_called(this, "_ZN7S7821C43v23Ev");}
void  S7821C4 ::v24(){vfunc_called(this, "_ZN7S7821C43v24Ev");}
void  S7821C4 ::v25(){vfunc_called(this, "_ZN7S7821C43v25Ev");}
S7821C4 ::S7821C4(){ note_ctor("S7821C4", this);} // tgen

static void Test_S7821C4()
{
  extern Class_Descriptor cd_S7821C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,45)];
    init_test(&cd_S7821C4, buf);
    S7821C4 *dp, &lv = *(dp=new (buf) S7821C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,176), "sizeof(S7821C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7821C4)");
    check_base_class_offset(lv, (S7821C7*)(S7821C6*)(S7821C5*), ABISELECT(304,152), "S7821C4");
    check_base_class_offset(lv, (S7821C6*)(S7821C5*), ABISELECT(304,152), "S7821C4");
    check_base_class_offset(lv, (S7821C9*)(S7821C8*), ABISELECT(328,168), "S7821C4");
    check_base_class_offset(lv, (S7821C8*)(S7821C5*), ABISELECT(328,168), "S7821C4");
    check_base_class_offset(lv, (S7821C5*), ABISELECT(304,152), "S7821C4");
    check_field_offset(lv, s7821c4f0, ABISELECT(8,4), "S7821C4.s7821c4f0");
    check_field_offset(lv, s7821c4f1, ABISELECT(16,8), "S7821C4.s7821c4f1");
    test_class_info(&lv, &cd_S7821C4);
    dp->~S7821C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7821C4(Test_S7821C4, "S7821C4", ABISELECT(344,176));

#else // __cplusplus

extern void _ZN7S7821C4C1Ev();
extern void _ZN7S7821C4D2Ev();
Name_Map name_map_S7821C4[] = {
  NSPAIR(_ZN7S7821C4C1Ev),
  NSPAIR(_ZN7S7821C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7821C7;
extern VTBL_ENTRY _ZTI7S7821C7[];
extern  VTBL_ENTRY _ZTV7S7821C7[];
extern Class_Descriptor cd_S7821C6;
extern VTBL_ENTRY _ZTI7S7821C6[];
extern  VTBL_ENTRY _ZTV7S7821C6[];
extern Class_Descriptor cd_S7821C9;
extern VTBL_ENTRY _ZTI7S7821C9[];
extern  VTBL_ENTRY _ZTV7S7821C9[];
extern Class_Descriptor cd_S7821C8;
extern VTBL_ENTRY _ZTI7S7821C8[];
extern  VTBL_ENTRY _ZTV7S7821C8[];
extern Class_Descriptor cd_S7821C5;
extern VTBL_ENTRY _ZTI7S7821C5[];
extern  VTBL_ENTRY _ZTV7S7821C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C5[];
static Base_Class bases_S7821C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7821C7,    ABISELECT(304,152), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S7821C6,    ABISELECT(304,152), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7821C9,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7821C8,    ABISELECT(328,168), //bcp->offset
    32, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7821C5,    ABISELECT(304,152), //bcp->offset
    10, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7821C4[];
extern void _ZN7S7821C4D1Ev();
extern void _ZN7S7821C4D0Ev();
extern void _ZN7S7821C43v22Ev();
extern void _ZN7S7821C43v23Ev();
extern void _ZN7S7821C43v24Ev();
extern void _ZN7S7821C43v25Ev();
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev)();
extern void ABISELECT(_ZThn304_N7S7821C4D1Ev,_ZThn152_N7S7821C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev)();
extern void ABISELECT(_ZThn304_N7S7821C4D0Ev,_ZThn152_N7S7821C4D0Ev)() __attribute__((weak));
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY vtc_S7821C4[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v25Ev,
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern VTBL_ENTRY _ZTV7S7821C4[];
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void _ZN7S7821C5D1Ev();
extern void _ZN7S7821C5D0Ev();
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C5__7S7821C4[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C5[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7821C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
};
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C8__7S7821C5__7S7821C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7821C5[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
static  VTT_ENTRY vtt_S7821C4[] = {
  {&(_ZTV7S7821C4[4]),  4,50},
  {&(_ZTV7S7821C4[22]),  22,50},
  {&(_ZTV7S7821C4[42]),  42,50},
  {&(_tg__ZTV7S7821C5__7S7821C4[3]),  3,13},
  {&(_tg__ZTV7S7821C8__7S7821C5__7S7821C4[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7821C4[];
extern  VTBL_ENTRY _ZTV7S7821C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C4[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7821C4D0Ev,_ZThn152_N7S7821C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7821C4D1Ev,_ZThn152_N7S7821C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7821C4 = {  "S7821C4", // class name
  bases_S7821C4, 5,
  &(vtc_S7821C4[0]), // expected_vtbl_contents
  &(vtt_S7821C4[0]), // expected_vtt_contents
  ABISELECT(344,176), // object size
  NSPAIRA(_ZTI7S7821C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7821C4),50, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7821C4),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7821C3  : virtual S7821C4 {
  __tsi64 s7821c3f0;
  long s7821c3f1;
  virtual void  v26(); // _ZN7S7821C33v26Ev
  virtual void  v27(); // _ZN7S7821C33v27Ev
  virtual void  v28(); // _ZN7S7821C33v28Ev
  ~S7821C3(); // tgen
  S7821C3(); // tgen
};
//SIG(-1 S7821C3) C1{ VBC2{ VBC3{ BC4{ BC5{ v4 v5 v6 v7} v8 v9} VBC6{ BC7{ v10} v11 v12 v13 v14 v15 v16 v17 Fp} vd v18 v19 Fc[10]} vd v20 v21 v22 v23 Fi FC8{ BC9{ v25 v26 v27 v28 v29 Fp[2]} vd v24 Fi}[9]} v1 v2 v3 FL Fl}


void  S7821C3 ::v26(){vfunc_called(this, "_ZN7S7821C33v26Ev");}
void  S7821C3 ::v27(){vfunc_called(this, "_ZN7S7821C33v27Ev");}
void  S7821C3 ::v28(){vfunc_called(this, "_ZN7S7821C33v28Ev");}
S7821C3 ::~S7821C3(){ note_dtor("S7821C3", this);} // tgen
S7821C3 ::S7821C3(){ note_ctor("S7821C3", this);} // tgen

static void Test_S7821C3()
{
  extern Class_Descriptor cd_S7821C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,49)];
    init_test(&cd_S7821C3, buf);
    S7821C3 *dp, &lv = *(dp=new (buf) S7821C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,192), "sizeof(S7821C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7821C3)");
    check_base_class_offset(lv, (S7821C7*)(S7821C6*)(S7821C5*), ABISELECT(328,168), "S7821C3");
    check_base_class_offset(lv, (S7821C6*)(S7821C5*), ABISELECT(328,168), "S7821C3");
    check_base_class_offset(lv, (S7821C9*)(S7821C8*), ABISELECT(352,184), "S7821C3");
    check_base_class_offset(lv, (S7821C8*)(S7821C5*), ABISELECT(352,184), "S7821C3");
    check_base_class_offset(lv, (S7821C5*)(S7821C4*), ABISELECT(328,168), "S7821C3");
    check_base_class_offset(lv, (S7821C4*), ABISELECT(24,16), "S7821C3");
    check_field_offset(lv, s7821c3f0, ABISELECT(8,4), "S7821C3.s7821c3f0");
    check_field_offset(lv, s7821c3f1, ABISELECT(16,12), "S7821C3.s7821c3f1");
    test_class_info(&lv, &cd_S7821C3);
    dp->~S7821C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7821C3(Test_S7821C3, "S7821C3", ABISELECT(368,192));

#else // __cplusplus

extern void _ZN7S7821C3C1Ev();
extern void _ZN7S7821C3D1Ev();
Name_Map name_map_S7821C3[] = {
  NSPAIR(_ZN7S7821C3C1Ev),
  NSPAIR(_ZN7S7821C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7821C7;
extern VTBL_ENTRY _ZTI7S7821C7[];
extern  VTBL_ENTRY _ZTV7S7821C7[];
extern Class_Descriptor cd_S7821C6;
extern VTBL_ENTRY _ZTI7S7821C6[];
extern  VTBL_ENTRY _ZTV7S7821C6[];
extern Class_Descriptor cd_S7821C9;
extern VTBL_ENTRY _ZTI7S7821C9[];
extern  VTBL_ENTRY _ZTV7S7821C9[];
extern Class_Descriptor cd_S7821C8;
extern VTBL_ENTRY _ZTI7S7821C8[];
extern  VTBL_ENTRY _ZTV7S7821C8[];
extern Class_Descriptor cd_S7821C5;
extern VTBL_ENTRY _ZTI7S7821C5[];
extern  VTBL_ENTRY _ZTV7S7821C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C5[];
extern Class_Descriptor cd_S7821C4;
extern VTBL_ENTRY _ZTI7S7821C4[];
extern  VTBL_ENTRY _ZTV7S7821C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C4[];
static Base_Class bases_S7821C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7821C7,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S7821C6,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7821C9,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7821C8,    ABISELECT(352,184), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7821C5,    ABISELECT(328,168), //bcp->offset
    25, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7821C4,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7821C3[];
extern void _ZN7S7821C33v26Ev();
extern void _ZN7S7821C33v27Ev();
extern void _ZN7S7821C33v28Ev();
extern void _ZN7S7821C3D1Ev();
extern void _ZN7S7821C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7821C3D1Ev,_ZTv0_n20_N7S7821C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S7821C3D1Ev,_ZThn16_N7S7821C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7821C3D0Ev,_ZTv0_n20_N7S7821C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S7821C3D0Ev,_ZThn16_N7S7821C3D0Ev)() __attribute__((weak));
extern void _ZN7S7821C43v22Ev();
extern void _ZN7S7821C43v23Ev();
extern void _ZN7S7821C43v24Ev();
extern void _ZN7S7821C43v25Ev();
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S7821C3D1Ev,_ZTv0_n40_N7S7821C3D1Ev)();
extern void ABISELECT(_ZThn328_N7S7821C3D1Ev,_ZThn168_N7S7821C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7821C3D0Ev,_ZTv0_n40_N7S7821C3D0Ev)();
extern void ABISELECT(_ZThn328_N7S7821C3D0Ev,_ZThn168_N7S7821C3D0Ev)() __attribute__((weak));
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY vtc_S7821C3[] = {
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&_ZN7S7821C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7821C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C3D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C3D1Ev,_ZTv0_n20_N7S7821C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C3D0Ev,_ZTv0_n20_N7S7821C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v25Ev,
  0,
  0,
  ABISELECT(-328,-168),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C3D1Ev,_ZTv0_n40_N7S7821C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C3D0Ev,_ZTv0_n40_N7S7821C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern VTBL_ENTRY _ZTV7S7821C3[];
extern void _ZN7S7821C4D1Ev();
extern void _ZN7S7821C4D0Ev();
extern void _ZN7S7821C43v22Ev();
extern void _ZN7S7821C43v23Ev();
extern void _ZN7S7821C43v24Ev();
extern void _ZN7S7821C43v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C4__7S7821C3[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v25Ev,
};
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev)();
extern void ABISELECT(_ZThn304_N7S7821C4D1Ev,_ZThn152_N7S7821C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev)();
extern void ABISELECT(_ZThn304_N7S7821C4D0Ev,_ZThn152_N7S7821C4D0Ev)() __attribute__((weak));
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C5__7S7821C4__7S7821C3[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
};
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C8__7S7821C4__7S7821C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void _ZN7S7821C5D1Ev();
extern void _ZN7S7821C5D0Ev();
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C5__7S7821C3[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C5[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7821C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
};
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C8__7S7821C5__7S7821C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7821C5[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
static  VTT_ENTRY vtt_S7821C3[] = {
  {&(_ZTV7S7821C3[5]),  5,65},
  {&(_ZTV7S7821C3[19]),  19,65},
  {&(_ZTV7S7821C3[37]),  37,65},
  {&(_ZTV7S7821C3[57]),  57,65},
  {&(_tg__ZTV7S7821C4__7S7821C3[4]),  4,10},
  {&(_tg__ZTV7S7821C5__7S7821C4__7S7821C3[12]),  12,22},
  {&(_tg__ZTV7S7821C8__7S7821C4__7S7821C3[10]),  10,18},
  {&(_tg__ZTV7S7821C5__7S7821C3[3]),  3,13},
  {&(_tg__ZTV7S7821C8__7S7821C5__7S7821C3[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7821C3[];
extern  VTBL_ENTRY _ZTV7S7821C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C3[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7821C4D0Ev,_ZThn152_N7S7821C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7821C4D1Ev,_ZThn152_N7S7821C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C3D0Ev,_ZTv0_n40_N7S7821C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7821C3D0Ev,_ZThn168_N7S7821C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C3D1Ev,_ZTv0_n40_N7S7821C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7821C3D1Ev,_ZThn168_N7S7821C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C3D0Ev,_ZTv0_n20_N7S7821C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7821C3D0Ev,_ZThn16_N7S7821C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C3D1Ev,_ZTv0_n20_N7S7821C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7821C3D1Ev,_ZThn16_N7S7821C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7821C3 = {  "S7821C3", // class name
  bases_S7821C3, 6,
  &(vtc_S7821C3[0]), // expected_vtbl_contents
  &(vtt_S7821C3[0]), // expected_vtt_contents
  ABISELECT(368,192), // object size
  NSPAIRA(_ZTI7S7821C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7821C3),65, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7821C3),9, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7821C2  : virtual S7821C3 {
  int s7821c2f0;
  virtual void  v29(); // _ZN7S7821C23v29Ev
  ~S7821C2(); // tgen
  S7821C2(); // tgen
};
//SIG(-1 S7821C2) C1{ VBC2{ VBC3{ VBC4{ BC5{ BC6{ v2 v3 v4 v5} v6 v7} VBC7{ BC8{ v8} v9 v10 v11 v12 v13 v14 v15 Fp} vd v16 v17 Fc[10]} vd v18 v19 v20 v21 Fi FC9{ BC10{ v26 v27 v28 v29 v30 Fp[2]} vd v25 Fi}[9]} v22 v23 v24 FL Fl} v1 Fi}


void  S7821C2 ::v29(){vfunc_called(this, "_ZN7S7821C23v29Ev");}
S7821C2 ::~S7821C2(){ note_dtor("S7821C2", this);} // tgen
S7821C2 ::S7821C2(){ note_ctor("S7821C2", this);} // tgen

static void Test_S7821C2()
{
  extern Class_Descriptor cd_S7821C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,51)];
    init_test(&cd_S7821C2, buf);
    S7821C2 *dp, &lv = *(dp=new (buf) S7821C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,200), "sizeof(S7821C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7821C2)");
    check_base_class_offset(lv, (S7821C7*)(S7821C6*)(S7821C5*), ABISELECT(344,176), "S7821C2");
    check_base_class_offset(lv, (S7821C6*)(S7821C5*), ABISELECT(344,176), "S7821C2");
    check_base_class_offset(lv, (S7821C9*)(S7821C8*), ABISELECT(368,192), "S7821C2");
    check_base_class_offset(lv, (S7821C8*)(S7821C5*), ABISELECT(368,192), "S7821C2");
    check_base_class_offset(lv, (S7821C5*)(S7821C4*), ABISELECT(344,176), "S7821C2");
    check_base_class_offset(lv, (S7821C4*)(S7821C3*), ABISELECT(40,24), "S7821C2");
    check_base_class_offset(lv, (S7821C3*), ABISELECT(16,8), "S7821C2");
    check_field_offset(lv, s7821c2f0, ABISELECT(8,4), "S7821C2.s7821c2f0");
    test_class_info(&lv, &cd_S7821C2);
    dp->~S7821C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7821C2(Test_S7821C2, "S7821C2", ABISELECT(384,200));

#else // __cplusplus

extern void _ZN7S7821C2C1Ev();
extern void _ZN7S7821C2D1Ev();
Name_Map name_map_S7821C2[] = {
  NSPAIR(_ZN7S7821C2C1Ev),
  NSPAIR(_ZN7S7821C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7821C7;
extern VTBL_ENTRY _ZTI7S7821C7[];
extern  VTBL_ENTRY _ZTV7S7821C7[];
extern Class_Descriptor cd_S7821C6;
extern VTBL_ENTRY _ZTI7S7821C6[];
extern  VTBL_ENTRY _ZTV7S7821C6[];
extern Class_Descriptor cd_S7821C9;
extern VTBL_ENTRY _ZTI7S7821C9[];
extern  VTBL_ENTRY _ZTV7S7821C9[];
extern Class_Descriptor cd_S7821C8;
extern VTBL_ENTRY _ZTI7S7821C8[];
extern  VTBL_ENTRY _ZTV7S7821C8[];
extern Class_Descriptor cd_S7821C5;
extern VTBL_ENTRY _ZTI7S7821C5[];
extern  VTBL_ENTRY _ZTV7S7821C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C5[];
extern Class_Descriptor cd_S7821C4;
extern VTBL_ENTRY _ZTI7S7821C4[];
extern  VTBL_ENTRY _ZTV7S7821C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C4[];
extern Class_Descriptor cd_S7821C3;
extern VTBL_ENTRY _ZTI7S7821C3[];
extern  VTBL_ENTRY _ZTV7S7821C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C3[];
static Base_Class bases_S7821C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7821C7,    ABISELECT(344,176), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S7821C6,    ABISELECT(344,176), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7821C9,    ABISELECT(368,192), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7821C8,    ABISELECT(368,192), //bcp->offset
    60, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7821C5,    ABISELECT(344,176), //bcp->offset
    38, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7821C4,    ABISELECT(40,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7821C3,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7821C2[];
extern void _ZN7S7821C23v29Ev();
extern void _ZN7S7821C2D1Ev();
extern void _ZN7S7821C2D0Ev();
extern void _ZN7S7821C33v26Ev();
extern void _ZN7S7821C33v27Ev();
extern void _ZN7S7821C33v28Ev();
extern void ABISELECT(_ZTv0_n72_N7S7821C2D1Ev,_ZTv0_n36_N7S7821C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7821C2D1Ev,_ZThn8_N7S7821C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7821C2D0Ev,_ZTv0_n36_N7S7821C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7821C2D0Ev,_ZThn8_N7S7821C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7821C2D1Ev,_ZTv0_n20_N7S7821C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7821C2D1Ev,_ZThn24_N7S7821C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7821C2D0Ev,_ZTv0_n20_N7S7821C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S7821C2D0Ev,_ZThn24_N7S7821C2D0Ev)() __attribute__((weak));
extern void _ZN7S7821C43v22Ev();
extern void _ZN7S7821C43v23Ev();
extern void _ZN7S7821C43v24Ev();
extern void _ZN7S7821C43v25Ev();
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S7821C2D1Ev,_ZTv0_n40_N7S7821C2D1Ev)();
extern void ABISELECT(_ZThn344_N7S7821C2D1Ev,_ZThn176_N7S7821C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7821C2D0Ev,_ZTv0_n40_N7S7821C2D0Ev)();
extern void ABISELECT(_ZThn344_N7S7821C2D0Ev,_ZThn176_N7S7821C2D0Ev)() __attribute__((weak));
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY vtc_S7821C2[] = {
  ABISELECT(368,192),
  ABISELECT(344,176),
  ABISELECT(40,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C2[0]),
  (VTBL_ENTRY)&_ZN7S7821C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7821C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C2D0Ev,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7821C2[0]),
  (VTBL_ENTRY)&_ZN7S7821C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7821C2D1Ev,_ZTv0_n36_N7S7821C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7821C2D0Ev,_ZTv0_n36_N7S7821C2D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7821C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C2D1Ev,_ZTv0_n20_N7S7821C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C2D0Ev,_ZTv0_n20_N7S7821C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v25Ev,
  0,
  0,
  ABISELECT(-344,-176),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-344,-176),
  (VTBL_ENTRY)&(_ZTI7S7821C2[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C2D1Ev,_ZTv0_n40_N7S7821C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C2D0Ev,_ZTv0_n40_N7S7821C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI7S7821C2[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern VTBL_ENTRY _ZTV7S7821C2[];
extern void _ZN7S7821C33v26Ev();
extern void _ZN7S7821C33v27Ev();
extern void _ZN7S7821C33v28Ev();
extern void _ZN7S7821C3D1Ev();
extern void _ZN7S7821C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C3__7S7821C2[] = {
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&_ZN7S7821C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7821C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7821C3D1Ev,_ZTv0_n20_N7S7821C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S7821C3D1Ev,_ZThn16_N7S7821C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7821C3D0Ev,_ZTv0_n20_N7S7821C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S7821C3D0Ev,_ZThn16_N7S7821C3D0Ev)() __attribute__((weak));
extern void _ZN7S7821C43v22Ev();
extern void _ZN7S7821C43v23Ev();
extern void _ZN7S7821C43v24Ev();
extern void _ZN7S7821C43v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C4__7S7821C3__7S7821C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C3D1Ev,_ZTv0_n20_N7S7821C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C3D0Ev,_ZTv0_n20_N7S7821C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v25Ev,
};
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S7821C3D1Ev,_ZTv0_n40_N7S7821C3D1Ev)();
extern void ABISELECT(_ZThn328_N7S7821C3D1Ev,_ZThn168_N7S7821C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7821C3D0Ev,_ZTv0_n40_N7S7821C3D0Ev)();
extern void ABISELECT(_ZThn328_N7S7821C3D0Ev,_ZThn168_N7S7821C3D0Ev)() __attribute__((weak));
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C5__7S7821C3__7S7821C2[] = {
  0,
  0,
  ABISELECT(-328,-168),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C3D1Ev,_ZTv0_n40_N7S7821C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C3D0Ev,_ZTv0_n40_N7S7821C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
};
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C8__7S7821C3__7S7821C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern void _ZN7S7821C4D1Ev();
extern void _ZN7S7821C4D0Ev();
extern void _ZN7S7821C43v22Ev();
extern void _ZN7S7821C43v23Ev();
extern void _ZN7S7821C43v24Ev();
extern void _ZN7S7821C43v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C4__7S7821C2[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v25Ev,
};
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev)();
extern void ABISELECT(_ZThn304_N7S7821C4D1Ev,_ZThn152_N7S7821C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev)();
extern void ABISELECT(_ZThn304_N7S7821C4D0Ev,_ZThn152_N7S7821C4D0Ev)() __attribute__((weak));
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C5__7S7821C4__7S7821C2[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
};
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C8__7S7821C4__7S7821C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void _ZN7S7821C5D1Ev();
extern void _ZN7S7821C5D0Ev();
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C5__7S7821C2[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C5[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7821C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
};
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C8__7S7821C5__7S7821C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7821C5[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
static  VTT_ENTRY vtt_S7821C2[] = {
  {&(_ZTV7S7821C2[6]),  6,78},
  {&(_ZTV7S7821C2[18]),  18,78},
  {&(_ZTV7S7821C2[32]),  32,78},
  {&(_ZTV7S7821C2[50]),  50,78},
  {&(_ZTV7S7821C2[70]),  70,78},
  {&(_tg__ZTV7S7821C3__7S7821C2[5]),  5,10},
  {&(_tg__ZTV7S7821C4__7S7821C3__7S7821C2[9]),  9,15},
  {&(_tg__ZTV7S7821C5__7S7821C3__7S7821C2[12]),  12,22},
  {&(_tg__ZTV7S7821C8__7S7821C3__7S7821C2[10]),  10,18},
  {&(_tg__ZTV7S7821C4__7S7821C2[4]),  4,10},
  {&(_tg__ZTV7S7821C5__7S7821C4__7S7821C2[12]),  12,22},
  {&(_tg__ZTV7S7821C8__7S7821C4__7S7821C2[10]),  10,18},
  {&(_tg__ZTV7S7821C5__7S7821C2[3]),  3,13},
  {&(_tg__ZTV7S7821C8__7S7821C5__7S7821C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7821C2[];
extern  VTBL_ENTRY _ZTV7S7821C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C2[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7821C4D0Ev,_ZThn152_N7S7821C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7821C4D1Ev,_ZThn152_N7S7821C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C3D0Ev,_ZTv0_n40_N7S7821C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7821C3D0Ev,_ZThn168_N7S7821C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C3D1Ev,_ZTv0_n40_N7S7821C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7821C3D1Ev,_ZThn168_N7S7821C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C3D0Ev,_ZTv0_n20_N7S7821C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7821C3D0Ev,_ZThn16_N7S7821C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C3D1Ev,_ZTv0_n20_N7S7821C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7821C3D1Ev,_ZThn16_N7S7821C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C2D0Ev,_ZTv0_n40_N7S7821C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S7821C2D0Ev,_ZThn176_N7S7821C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C2D1Ev,_ZTv0_n40_N7S7821C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S7821C2D1Ev,_ZThn176_N7S7821C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C2D0Ev,_ZTv0_n20_N7S7821C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7821C2D0Ev,_ZThn24_N7S7821C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C2D1Ev,_ZTv0_n20_N7S7821C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7821C2D1Ev,_ZThn24_N7S7821C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7821C2D0Ev,_ZTv0_n36_N7S7821C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7821C2D0Ev,_ZThn8_N7S7821C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7821C2D1Ev,_ZTv0_n36_N7S7821C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7821C2D1Ev,_ZThn8_N7S7821C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7821C2 = {  "S7821C2", // class name
  bases_S7821C2, 7,
  &(vtc_S7821C2[0]), // expected_vtbl_contents
  &(vtt_S7821C2[0]), // expected_vtt_contents
  ABISELECT(384,200), // object size
  NSPAIRA(_ZTI7S7821C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7821C2),78, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7821C2),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7821C1  : S7821C2 , virtual S7821C10 {
  int s7821c1f0;
  void *s7821c1f1[6];
  int s7821c1f2;
  virtual  ~S7821C1(); // _ZN7S7821C1D2Ev
  virtual void  v1(); // _ZN7S7821C12v1Ev
  virtual void  v2(); // _ZN7S7821C12v2Ev
  virtual void  v3(); // _ZN7S7821C12v3Ev
  virtual void  v4(); // _ZN7S7821C12v4Ev
  virtual void  v5(); // _ZN7S7821C12v5Ev
  S7821C1(); // tgen
};
//SIG(1 S7821C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ BC6{ BC7{ v6 v7 v8 v9} v10 v11} VBC8{ BC9{ v12} v13 v14 v15 v16 v17 v18 v19 Fp} vd v20 v21 Fc[10]} vd v22 v23 v24 v25 Fi FC10{ BC11{ v30 v31 v32 v33 v34 Fp[2]} vd v35 Fi}[9]} v26 v27 v28 FL Fl} v29 Fi} VBC10 vd v1 v2 v3 v4 v5 Fi Fp[6] Fi}


 S7821C1 ::~S7821C1(){ note_dtor("S7821C1", this);}
void  S7821C1 ::v1(){vfunc_called(this, "_ZN7S7821C12v1Ev");}
void  S7821C1 ::v2(){vfunc_called(this, "_ZN7S7821C12v2Ev");}
void  S7821C1 ::v3(){vfunc_called(this, "_ZN7S7821C12v3Ev");}
void  S7821C1 ::v4(){vfunc_called(this, "_ZN7S7821C12v4Ev");}
void  S7821C1 ::v5(){vfunc_called(this, "_ZN7S7821C12v5Ev");}
S7821C1 ::S7821C1(){ note_ctor("S7821C1", this);} // tgen

static void Test_S7821C1()
{
  extern Class_Descriptor cd_S7821C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(60,63)];
    init_test(&cd_S7821C1, buf);
    S7821C1 *dp, &lv = *(dp=new (buf) S7821C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(472,248), "sizeof(S7821C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7821C1)");
    check_base_class_offset(lv, (S7821C7*)(S7821C6*)(S7821C5*), ABISELECT(400,208), "S7821C1");
    check_base_class_offset(lv, (S7821C6*)(S7821C5*), ABISELECT(400,208), "S7821C1");
    check_base_class_offset(lv, (S7821C9*)(S7821C8*), ABISELECT(424,224), "S7821C1");
    check_base_class_offset(lv, (S7821C8*)(S7821C5*), ABISELECT(424,224), "S7821C1");
    check_base_class_offset(lv, (S7821C5*)(S7821C4*), ABISELECT(400,208), "S7821C1");
    check_base_class_offset(lv, (S7821C4*)(S7821C3*), ABISELECT(96,56), "S7821C1");
    check_base_class_offset(lv, (S7821C3*)(S7821C2*), ABISELECT(72,40), "S7821C1");
    check_base_class_offset(lv, (S7821C2*), 0, "S7821C1");
    check_base_class_offset(lv, (S7821C11*)(S7821C10*), ABISELECT(440,232), "S7821C1");
    check_base_class_offset(lv, (S7821C10*), ABISELECT(440,232), "S7821C1");
    check_field_offset(lv, s7821c1f0, ABISELECT(12,8), "S7821C1.s7821c1f0");
    check_field_offset(lv, s7821c1f1, ABISELECT(16,12), "S7821C1.s7821c1f1");
    check_field_offset(lv, s7821c1f2, ABISELECT(64,36), "S7821C1.s7821c1f2");
    test_class_info(&lv, &cd_S7821C1);
    dp->~S7821C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7821C1(Test_S7821C1, "S7821C1", ABISELECT(472,248));

#else // __cplusplus

extern void _ZN7S7821C1C1Ev();
extern void _ZN7S7821C1D2Ev();
Name_Map name_map_S7821C1[] = {
  NSPAIR(_ZN7S7821C1C1Ev),
  NSPAIR(_ZN7S7821C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7821C7;
extern VTBL_ENTRY _ZTI7S7821C7[];
extern  VTBL_ENTRY _ZTV7S7821C7[];
extern Class_Descriptor cd_S7821C6;
extern VTBL_ENTRY _ZTI7S7821C6[];
extern  VTBL_ENTRY _ZTV7S7821C6[];
extern Class_Descriptor cd_S7821C9;
extern VTBL_ENTRY _ZTI7S7821C9[];
extern  VTBL_ENTRY _ZTV7S7821C9[];
extern Class_Descriptor cd_S7821C8;
extern VTBL_ENTRY _ZTI7S7821C8[];
extern  VTBL_ENTRY _ZTV7S7821C8[];
extern Class_Descriptor cd_S7821C5;
extern VTBL_ENTRY _ZTI7S7821C5[];
extern  VTBL_ENTRY _ZTV7S7821C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C5[];
extern Class_Descriptor cd_S7821C4;
extern VTBL_ENTRY _ZTI7S7821C4[];
extern  VTBL_ENTRY _ZTV7S7821C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C4[];
extern Class_Descriptor cd_S7821C3;
extern VTBL_ENTRY _ZTI7S7821C3[];
extern  VTBL_ENTRY _ZTV7S7821C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C3[];
extern Class_Descriptor cd_S7821C2;
extern VTBL_ENTRY _ZTI7S7821C2[];
extern  VTBL_ENTRY _ZTV7S7821C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C2[];
extern Class_Descriptor cd_S7821C11;
extern VTBL_ENTRY _ZTI8S7821C11[];
extern  VTBL_ENTRY _ZTV8S7821C11[];
extern Class_Descriptor cd_S7821C10;
extern VTBL_ENTRY _ZTI8S7821C10[];
extern  VTBL_ENTRY _ZTV8S7821C10[];
static Base_Class bases_S7821C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7821C7,    ABISELECT(400,208), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S7821C6,    ABISELECT(400,208), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7821C9,    ABISELECT(424,224), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7821C8,    ABISELECT(424,224), //bcp->offset
    66, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7821C5,    ABISELECT(400,208), //bcp->offset
    44, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7821C4,    ABISELECT(96,56), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7821C3,    ABISELECT(72,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7821C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7821C11,    ABISELECT(440,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7821C10,    ABISELECT(440,232), //bcp->offset
    84, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7821C1[];
extern void _ZN7S7821C23v29Ev();
extern void _ZN7S7821C1D1Ev();
extern void _ZN7S7821C1D0Ev();
extern void _ZN7S7821C12v1Ev();
extern void _ZN7S7821C12v2Ev();
extern void _ZN7S7821C12v3Ev();
extern void _ZN7S7821C12v4Ev();
extern void _ZN7S7821C12v5Ev();
extern void _ZN7S7821C33v26Ev();
extern void _ZN7S7821C33v27Ev();
extern void _ZN7S7821C33v28Ev();
extern void ABISELECT(_ZTv0_n72_N7S7821C1D1Ev,_ZTv0_n36_N7S7821C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S7821C1D1Ev,_ZThn40_N7S7821C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7821C1D0Ev,_ZTv0_n36_N7S7821C1D0Ev)();
extern void ABISELECT(_ZThn72_N7S7821C1D0Ev,_ZThn40_N7S7821C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7821C1D1Ev,_ZTv0_n20_N7S7821C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S7821C1D1Ev,_ZThn56_N7S7821C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7821C1D0Ev,_ZTv0_n20_N7S7821C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S7821C1D0Ev,_ZThn56_N7S7821C1D0Ev)() __attribute__((weak));
extern void _ZN7S7821C43v22Ev();
extern void _ZN7S7821C43v23Ev();
extern void _ZN7S7821C43v24Ev();
extern void _ZN7S7821C43v25Ev();
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S7821C1D1Ev,_ZTv0_n40_N7S7821C1D1Ev)();
extern void ABISELECT(_ZThn400_N7S7821C1D1Ev,_ZThn208_N7S7821C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7821C1D0Ev,_ZTv0_n40_N7S7821C1D0Ev)();
extern void ABISELECT(_ZThn400_N7S7821C1D0Ev,_ZThn208_N7S7821C1D0Ev)() __attribute__((weak));
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
extern void _ZN8S7821C113v30Ev();
extern void _ZN8S7821C113v31Ev();
extern void _ZN8S7821C113v32Ev();
extern void _ZN8S7821C113v33Ev();
extern void _ZN8S7821C113v34Ev();
extern void ABISELECT(_ZTv0_n64_N7S7821C1D1Ev,_ZTv0_n32_N7S7821C1D1Ev)();
extern void ABISELECT(_ZThn440_N7S7821C1D1Ev,_ZThn232_N7S7821C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7821C1D0Ev,_ZTv0_n32_N7S7821C1D0Ev)();
extern void ABISELECT(_ZThn440_N7S7821C1D0Ev,_ZThn232_N7S7821C1D0Ev)() __attribute__((weak));
extern void _ZN8S7821C103v35Ev();
static  VTBL_ENTRY vtc_S7821C1[] = {
  ABISELECT(440,232),
  ABISELECT(424,224),
  ABISELECT(400,208),
  ABISELECT(96,56),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C1[0]),
  (VTBL_ENTRY)&_ZN7S7821C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7821C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7821C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7821C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7821C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7821C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7821C12v5Ev,
  ABISELECT(-72,-40),
  0,
  0,
  0,
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7821C1[0]),
  (VTBL_ENTRY)&_ZN7S7821C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7821C1D1Ev,_ZTv0_n36_N7S7821C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7821C1D0Ev,_ZTv0_n36_N7S7821C1D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7821C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C1D1Ev,_ZTv0_n20_N7S7821C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C1D0Ev,_ZTv0_n20_N7S7821C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v25Ev,
  0,
  0,
  ABISELECT(-400,-208),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-400,-208),
  (VTBL_ENTRY)&(_ZTI7S7821C1[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C1D1Ev,_ZTv0_n40_N7S7821C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C1D0Ev,_ZTv0_n40_N7S7821C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-424,-224),
  (VTBL_ENTRY)&(_ZTI7S7821C1[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
  0,
  ABISELECT(-440,-232),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-440,-232),
  (VTBL_ENTRY)&(_ZTI7S7821C1[0]),
  (VTBL_ENTRY)&_ZN8S7821C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7821C113v34Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7821C1D1Ev,_ZTv0_n32_N7S7821C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7821C1D0Ev,_ZTv0_n32_N7S7821C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7821C103v35Ev,
};
extern VTBL_ENTRY _ZTV7S7821C1[];
extern void _ZN7S7821C23v29Ev();
extern void _ZN7S7821C2D1Ev();
extern void _ZN7S7821C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C2__7S7821C1[] = {
  ABISELECT(424,224),
  ABISELECT(400,208),
  ABISELECT(96,56),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C2[0]),
  (VTBL_ENTRY)&_ZN7S7821C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7821C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C2D0Ev,
};
extern void _ZN7S7821C33v26Ev();
extern void _ZN7S7821C33v27Ev();
extern void _ZN7S7821C33v28Ev();
extern void ABISELECT(_ZTv0_n72_N7S7821C2D1Ev,_ZTv0_n36_N7S7821C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S7821C2D1Ev,_ZThn40_N7S7821C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7821C2D0Ev,_ZTv0_n36_N7S7821C2D0Ev)();
extern void ABISELECT(_ZThn72_N7S7821C2D0Ev,_ZThn40_N7S7821C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7821C3__7S7821C2__7S7821C1[] = {
  ABISELECT(-72,-40),
  0,
  0,
  0,
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7821C2[0]),
  (VTBL_ENTRY)&_ZN7S7821C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7821C2D1Ev,_ZTv0_n36_N7S7821C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7821C2D0Ev,_ZTv0_n36_N7S7821C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7821C2D1Ev,_ZTv0_n20_N7S7821C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S7821C2D1Ev,_ZThn56_N7S7821C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7821C2D0Ev,_ZTv0_n20_N7S7821C2D0Ev)();
extern void ABISELECT(_ZThn96_N7S7821C2D0Ev,_ZThn56_N7S7821C2D0Ev)() __attribute__((weak));
extern void _ZN7S7821C43v22Ev();
extern void _ZN7S7821C43v23Ev();
extern void _ZN7S7821C43v24Ev();
extern void _ZN7S7821C43v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C4__7S7821C2__7S7821C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7821C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C2D1Ev,_ZTv0_n20_N7S7821C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C2D0Ev,_ZTv0_n20_N7S7821C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v25Ev,
};
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S7821C2D1Ev,_ZTv0_n40_N7S7821C2D1Ev)();
extern void ABISELECT(_ZThn400_N7S7821C2D1Ev,_ZThn208_N7S7821C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7821C2D0Ev,_ZTv0_n40_N7S7821C2D0Ev)();
extern void ABISELECT(_ZThn400_N7S7821C2D0Ev,_ZThn208_N7S7821C2D0Ev)() __attribute__((weak));
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C5__7S7821C2__7S7821C1[] = {
  0,
  0,
  ABISELECT(-400,-208),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-400,-208),
  (VTBL_ENTRY)&(_ZTI7S7821C2[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C2D1Ev,_ZTv0_n40_N7S7821C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C2D0Ev,_ZTv0_n40_N7S7821C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
};
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C8__7S7821C2__7S7821C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-424,-224),
  (VTBL_ENTRY)&(_ZTI7S7821C2[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern void _ZN7S7821C33v26Ev();
extern void _ZN7S7821C33v27Ev();
extern void _ZN7S7821C33v28Ev();
extern void _ZN7S7821C3D1Ev();
extern void _ZN7S7821C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C3__7S7821C1[] = {
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&_ZN7S7821C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7821C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7821C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7821C3D1Ev,_ZTv0_n20_N7S7821C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S7821C3D1Ev,_ZThn16_N7S7821C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7821C3D0Ev,_ZTv0_n20_N7S7821C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S7821C3D0Ev,_ZThn16_N7S7821C3D0Ev)() __attribute__((weak));
extern void _ZN7S7821C43v22Ev();
extern void _ZN7S7821C43v23Ev();
extern void _ZN7S7821C43v24Ev();
extern void _ZN7S7821C43v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C4__7S7821C3__7S7821C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C3D1Ev,_ZTv0_n20_N7S7821C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7821C3D0Ev,_ZTv0_n20_N7S7821C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v25Ev,
};
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S7821C3D1Ev,_ZTv0_n40_N7S7821C3D1Ev)();
extern void ABISELECT(_ZThn328_N7S7821C3D1Ev,_ZThn168_N7S7821C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7821C3D0Ev,_ZTv0_n40_N7S7821C3D0Ev)();
extern void ABISELECT(_ZThn328_N7S7821C3D0Ev,_ZThn168_N7S7821C3D0Ev)() __attribute__((weak));
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C5__7S7821C3__7S7821C1[] = {
  0,
  0,
  ABISELECT(-328,-168),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C3D1Ev,_ZTv0_n40_N7S7821C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C3D0Ev,_ZTv0_n40_N7S7821C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
};
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C8__7S7821C3__7S7821C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI7S7821C3[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern void _ZN7S7821C4D1Ev();
extern void _ZN7S7821C4D0Ev();
extern void _ZN7S7821C43v22Ev();
extern void _ZN7S7821C43v23Ev();
extern void _ZN7S7821C43v24Ev();
extern void _ZN7S7821C43v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C4__7S7821C1[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7821C43v25Ev,
};
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev)();
extern void ABISELECT(_ZThn304_N7S7821C4D1Ev,_ZThn152_N7S7821C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev)();
extern void ABISELECT(_ZThn304_N7S7821C4D0Ev,_ZThn152_N7S7821C4D0Ev)() __attribute__((weak));
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C5__7S7821C4__7S7821C1[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
};
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C8__7S7821C4__7S7821C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI7S7821C4[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
extern void _ZN7S7821C72v6Ev();
extern void _ZN7S7821C72v7Ev();
extern void _ZN7S7821C72v8Ev();
extern void _ZN7S7821C72v9Ev();
extern void _ZN7S7821C63v10Ev();
extern void _ZN7S7821C63v11Ev();
extern void _ZN7S7821C5D1Ev();
extern void _ZN7S7821C5D0Ev();
extern void _ZN7S7821C53v20Ev();
extern void _ZN7S7821C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C5__7S7821C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7821C5[0]),
  (VTBL_ENTRY)&_ZN7S7821C72v6Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v7Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v8Ev,
  (VTBL_ENTRY)&_ZN7S7821C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7821C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7821C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7821C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v20Ev,
  (VTBL_ENTRY)&_ZN7S7821C53v21Ev,
};
extern void _ZN7S7821C93v12Ev();
extern void _ZN7S7821C83v13Ev();
extern void _ZN7S7821C83v14Ev();
extern void _ZN7S7821C83v15Ev();
extern void _ZN7S7821C83v16Ev();
extern void _ZN7S7821C83v17Ev();
extern void _ZN7S7821C83v18Ev();
extern void _ZN7S7821C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7821C8__7S7821C5__7S7821C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7821C5[0]),
  (VTBL_ENTRY)&_ZN7S7821C93v12Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7821C83v19Ev,
};
static  VTT_ENTRY vtt_S7821C1[] = {
  {&(_ZTV7S7821C1[7]),  7,101},
  {&(_tg__ZTV7S7821C2__7S7821C1[6]),  6,9},
  {&(_tg__ZTV7S7821C3__7S7821C2__7S7821C1[9]),  9,14},
  {&(_tg__ZTV7S7821C4__7S7821C2__7S7821C1[9]),  9,15},
  {&(_tg__ZTV7S7821C5__7S7821C2__7S7821C1[12]),  12,22},
  {&(_tg__ZTV7S7821C8__7S7821C2__7S7821C1[10]),  10,18},
  {&(_ZTV7S7821C1[24]),  24,101},
  {&(_ZTV7S7821C1[38]),  38,101},
  {&(_ZTV7S7821C1[56]),  56,101},
  {&(_ZTV7S7821C1[76]),  76,101},
  {&(_ZTV7S7821C1[93]),  93,101},
  {&(_tg__ZTV7S7821C3__7S7821C1[5]),  5,10},
  {&(_tg__ZTV7S7821C4__7S7821C3__7S7821C1[9]),  9,15},
  {&(_tg__ZTV7S7821C5__7S7821C3__7S7821C1[12]),  12,22},
  {&(_tg__ZTV7S7821C8__7S7821C3__7S7821C1[10]),  10,18},
  {&(_tg__ZTV7S7821C4__7S7821C1[4]),  4,10},
  {&(_tg__ZTV7S7821C5__7S7821C4__7S7821C1[12]),  12,22},
  {&(_tg__ZTV7S7821C8__7S7821C4__7S7821C1[10]),  10,18},
  {&(_tg__ZTV7S7821C5__7S7821C1[3]),  3,13},
  {&(_tg__ZTV7S7821C8__7S7821C5__7S7821C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI7S7821C1[];
extern  VTBL_ENTRY _ZTV7S7821C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7821C1[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C4D0Ev,_ZTv0_n40_N7S7821C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7821C4D0Ev,_ZThn152_N7S7821C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C4D1Ev,_ZTv0_n40_N7S7821C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7821C4D1Ev,_ZThn152_N7S7821C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C3D0Ev,_ZTv0_n40_N7S7821C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7821C3D0Ev,_ZThn168_N7S7821C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C3D1Ev,_ZTv0_n40_N7S7821C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7821C3D1Ev,_ZThn168_N7S7821C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C3D0Ev,_ZTv0_n20_N7S7821C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7821C3D0Ev,_ZThn16_N7S7821C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C3D1Ev,_ZTv0_n20_N7S7821C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7821C3D1Ev,_ZThn16_N7S7821C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C2D0Ev,_ZTv0_n40_N7S7821C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7821C2D0Ev,_ZThn208_N7S7821C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C2D1Ev,_ZTv0_n40_N7S7821C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7821C2D1Ev,_ZThn208_N7S7821C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C2D0Ev,_ZTv0_n20_N7S7821C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7821C2D0Ev,_ZThn56_N7S7821C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C2D1Ev,_ZTv0_n20_N7S7821C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7821C2D1Ev,_ZThn56_N7S7821C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7821C2D0Ev,_ZTv0_n36_N7S7821C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7821C2D0Ev,_ZThn40_N7S7821C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7821C2D1Ev,_ZTv0_n36_N7S7821C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7821C2D1Ev,_ZThn40_N7S7821C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7821C1D0Ev,_ZTv0_n32_N7S7821C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S7821C1D0Ev,_ZThn232_N7S7821C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7821C1D1Ev,_ZTv0_n32_N7S7821C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S7821C1D1Ev,_ZThn232_N7S7821C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C1D0Ev,_ZTv0_n40_N7S7821C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7821C1D0Ev,_ZThn208_N7S7821C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7821C1D1Ev,_ZTv0_n40_N7S7821C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7821C1D1Ev,_ZThn208_N7S7821C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C1D0Ev,_ZTv0_n20_N7S7821C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7821C1D0Ev,_ZThn56_N7S7821C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7821C1D1Ev,_ZTv0_n20_N7S7821C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7821C1D1Ev,_ZThn56_N7S7821C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7821C1D0Ev,_ZTv0_n36_N7S7821C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7821C1D0Ev,_ZThn40_N7S7821C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7821C1D1Ev,_ZTv0_n36_N7S7821C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7821C1D1Ev,_ZThn40_N7S7821C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7821C1 = {  "S7821C1", // class name
  bases_S7821C1, 10,
  &(vtc_S7821C1[0]), // expected_vtbl_contents
  &(vtt_S7821C1[0]), // expected_vtt_contents
  ABISELECT(472,248), // object size
  NSPAIRA(_ZTI7S7821C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7821C1),101, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7821C1),20, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19072C4  {
  virtual void  v6(); // _ZN8S19072C42v6Ev
  virtual void  v7(); // _ZN8S19072C42v7Ev
  virtual void  v8(); // _ZN8S19072C42v8Ev
  virtual void  v9(); // _ZN8S19072C42v9Ev
  ~S19072C4(); // tgen
  S19072C4(); // tgen
};
//SIG(-1 S19072C4) C1{ v1 v2 v3 v4}


void  S19072C4 ::v6(){vfunc_called(this, "_ZN8S19072C42v6Ev");}
void  S19072C4 ::v7(){vfunc_called(this, "_ZN8S19072C42v7Ev");}
void  S19072C4 ::v8(){vfunc_called(this, "_ZN8S19072C42v8Ev");}
void  S19072C4 ::v9(){vfunc_called(this, "_ZN8S19072C42v9Ev");}
S19072C4 ::~S19072C4(){ note_dtor("S19072C4", this);} // tgen
S19072C4 ::S19072C4(){ note_ctor("S19072C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19072C4C1Ev();
extern void _ZN8S19072C4D1Ev();
Name_Map name_map_S19072C4[] = {
  NSPAIR(_ZN8S19072C4C1Ev),
  NSPAIR(_ZN8S19072C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19072C4[];
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
static  VTBL_ENTRY vtc_S19072C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C4[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
};
extern VTBL_ENTRY _ZTI8S19072C4[];
extern  VTBL_ENTRY _ZTV8S19072C4[];
Class_Descriptor cd_S19072C4 = {  "S19072C4", // class name
  0,0,//no base classes
  &(vtc_S19072C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19072C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19072C4),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  S19072C3  : S19072C4 {
  virtual void  v10(); // _ZN8S19072C33v10Ev
  virtual void  v11(); // _ZN8S19072C33v11Ev
  ~S19072C3(); // tgen
  S19072C3(); // tgen
};
//SIG(-1 S19072C3) C1{ BC2{ v3 v4 v5 v6} v1 v2}


void  S19072C3 ::v10(){vfunc_called(this, "_ZN8S19072C33v10Ev");}
void  S19072C3 ::v11(){vfunc_called(this, "_ZN8S19072C33v11Ev");}
S19072C3 ::~S19072C3(){ note_dtor("S19072C3", this);} // tgen
S19072C3 ::S19072C3(){ note_ctor("S19072C3", this);} // tgen

static void Test_S19072C3()
{
  extern Class_Descriptor cd_S19072C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19072C3, buf);
    S19072C3 *dp, &lv = *(dp=new (buf) S19072C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19072C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19072C3)");
    check_base_class_offset(lv, (S19072C4*), 0, "S19072C3");
    test_class_info(&lv, &cd_S19072C3);
    dp->~S19072C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19072C3(Test_S19072C3, "S19072C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19072C3C1Ev();
extern void _ZN8S19072C3D1Ev();
Name_Map name_map_S19072C3[] = {
  NSPAIR(_ZN8S19072C3C1Ev),
  NSPAIR(_ZN8S19072C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19072C4;
extern VTBL_ENTRY _ZTI8S19072C4[];
extern  VTBL_ENTRY _ZTV8S19072C4[];
static Base_Class bases_S19072C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19072C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19072C3[];
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
static  VTBL_ENTRY vtc_S19072C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C3[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
};
extern VTBL_ENTRY _ZTI8S19072C3[];
extern  VTBL_ENTRY _ZTV8S19072C3[];
Class_Descriptor cd_S19072C3 = {  "S19072C3", // class name
  bases_S19072C3, 1,
  &(vtc_S19072C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19072C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19072C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19072C6  {
  virtual void  v12(); // _ZN8S19072C63v12Ev
  ~S19072C6(); // tgen
  S19072C6(); // tgen
};
//SIG(-1 S19072C6) C1{ v1}


void  S19072C6 ::v12(){vfunc_called(this, "_ZN8S19072C63v12Ev");}
S19072C6 ::~S19072C6(){ note_dtor("S19072C6", this);} // tgen
S19072C6 ::S19072C6(){ note_ctor("S19072C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19072C6C1Ev();
extern void _ZN8S19072C6D1Ev();
Name_Map name_map_S19072C6[] = {
  NSPAIR(_ZN8S19072C6C1Ev),
  NSPAIR(_ZN8S19072C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19072C6[];
extern void _ZN8S19072C63v12Ev();
static  VTBL_ENTRY vtc_S19072C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C6[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
};
extern VTBL_ENTRY _ZTI8S19072C6[];
extern  VTBL_ENTRY _ZTV8S19072C6[];
Class_Descriptor cd_S19072C6 = {  "S19072C6", // class name
  0,0,//no base classes
  &(vtc_S19072C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19072C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19072C6),3, //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  S19072C5  : S19072C6 {
  void *s19072c5f0;
  virtual void  v13(); // _ZN8S19072C53v13Ev
  virtual void  v14(); // _ZN8S19072C53v14Ev
  virtual void  v15(); // _ZN8S19072C53v15Ev
  virtual void  v16(); // _ZN8S19072C53v16Ev
  virtual void  v17(); // _ZN8S19072C53v17Ev
  virtual void  v18(); // _ZN8S19072C53v18Ev
  virtual void  v19(); // _ZN8S19072C53v19Ev
  ~S19072C5(); // tgen
  S19072C5(); // tgen
};
//SIG(-1 S19072C5) C1{ BC2{ v8} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S19072C5 ::v13(){vfunc_called(this, "_ZN8S19072C53v13Ev");}
void  S19072C5 ::v14(){vfunc_called(this, "_ZN8S19072C53v14Ev");}
void  S19072C5 ::v15(){vfunc_called(this, "_ZN8S19072C53v15Ev");}
void  S19072C5 ::v16(){vfunc_called(this, "_ZN8S19072C53v16Ev");}
void  S19072C5 ::v17(){vfunc_called(this, "_ZN8S19072C53v17Ev");}
void  S19072C5 ::v18(){vfunc_called(this, "_ZN8S19072C53v18Ev");}
void  S19072C5 ::v19(){vfunc_called(this, "_ZN8S19072C53v19Ev");}
S19072C5 ::~S19072C5(){ note_dtor("S19072C5", this);} // tgen
S19072C5 ::S19072C5(){ note_ctor("S19072C5", this);} // tgen

static void Test_S19072C5()
{
  extern Class_Descriptor cd_S19072C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19072C5, buf);
    S19072C5 *dp, &lv = *(dp=new (buf) S19072C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19072C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19072C5)");
    check_base_class_offset(lv, (S19072C6*), 0, "S19072C5");
    check_field_offset(lv, s19072c5f0, ABISELECT(8,4), "S19072C5.s19072c5f0");
    test_class_info(&lv, &cd_S19072C5);
    dp->~S19072C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19072C5(Test_S19072C5, "S19072C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19072C5C1Ev();
extern void _ZN8S19072C5D1Ev();
Name_Map name_map_S19072C5[] = {
  NSPAIR(_ZN8S19072C5C1Ev),
  NSPAIR(_ZN8S19072C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19072C6;
extern VTBL_ENTRY _ZTI8S19072C6[];
extern  VTBL_ENTRY _ZTV8S19072C6[];
static Base_Class bases_S19072C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19072C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19072C5[];
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY vtc_S19072C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C5[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern VTBL_ENTRY _ZTI8S19072C5[];
extern  VTBL_ENTRY _ZTV8S19072C5[];
Class_Descriptor cd_S19072C5 = {  "S19072C5", // class name
  bases_S19072C5, 1,
  &(vtc_S19072C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19072C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19072C5),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19072C2  : S19072C3 , virtual S19072C5 {
  char s19072c2f0[10];
  virtual  ~S19072C2(); // _ZN8S19072C2D2Ev
  virtual void  v20(); // _ZN8S19072C23v20Ev
  virtual void  v21(); // _ZN8S19072C23v21Ev
  S19072C2(); // tgen
};
//SIG(-1 S19072C2) C1{ BC2{ BC3{ v3 v4 v5 v6} v7 v8} VBC4{ BC5{ v9} v10 v11 v12 v13 v14 v15 v16 Fp} vd v1 v2 Fc[10]}


 S19072C2 ::~S19072C2(){ note_dtor("S19072C2", this);}
void  S19072C2 ::v20(){vfunc_called(this, "_ZN8S19072C23v20Ev");}
void  S19072C2 ::v21(){vfunc_called(this, "_ZN8S19072C23v21Ev");}
S19072C2 ::S19072C2(){ note_ctor("S19072C2", this);} // tgen

static void Test_S19072C2()
{
  extern Class_Descriptor cd_S19072C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19072C2, buf);
    S19072C2 *dp, &lv = *(dp=new (buf) S19072C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19072C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19072C2)");
    check_base_class_offset(lv, (S19072C4*)(S19072C3*), 0, "S19072C2");
    check_base_class_offset(lv, (S19072C3*), 0, "S19072C2");
    check_base_class_offset(lv, (S19072C6*)(S19072C5*), ABISELECT(24,16), "S19072C2");
    check_base_class_offset(lv, (S19072C5*), ABISELECT(24,16), "S19072C2");
    check_field_offset(lv, s19072c2f0, ABISELECT(8,4), "S19072C2.s19072c2f0");
    test_class_info(&lv, &cd_S19072C2);
    dp->~S19072C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19072C2(Test_S19072C2, "S19072C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19072C2C1Ev();
extern void _ZN8S19072C2D2Ev();
Name_Map name_map_S19072C2[] = {
  NSPAIR(_ZN8S19072C2C1Ev),
  NSPAIR(_ZN8S19072C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19072C4;
extern VTBL_ENTRY _ZTI8S19072C4[];
extern  VTBL_ENTRY _ZTV8S19072C4[];
extern Class_Descriptor cd_S19072C3;
extern VTBL_ENTRY _ZTI8S19072C3[];
extern  VTBL_ENTRY _ZTV8S19072C3[];
extern Class_Descriptor cd_S19072C6;
extern VTBL_ENTRY _ZTI8S19072C6[];
extern  VTBL_ENTRY _ZTV8S19072C6[];
extern Class_Descriptor cd_S19072C5;
extern VTBL_ENTRY _ZTI8S19072C5[];
extern  VTBL_ENTRY _ZTV8S19072C5[];
static Base_Class bases_S19072C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19072C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19072C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19072C6,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19072C5,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19072C2[];
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void _ZN8S19072C2D1Ev();
extern void _ZN8S19072C2D0Ev();
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY vtc_S19072C2[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C2[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19072C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19072C2[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern VTBL_ENTRY _ZTV8S19072C2[];
static  VTT_ENTRY vtt_S19072C2[] = {
  {&(_ZTV8S19072C2[3]),  3,31},
  {&(_ZTV8S19072C2[23]),  23,31},
};
extern VTBL_ENTRY _ZTI8S19072C2[];
extern  VTBL_ENTRY _ZTV8S19072C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C2[];
Class_Descriptor cd_S19072C2 = {  "S19072C2", // class name
  bases_S19072C2, 4,
  &(vtc_S19072C2[0]), // expected_vtbl_contents
  &(vtt_S19072C2[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19072C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19072C2),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19072C2),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19072C9  : virtual S19072C2 {
  int s19072c9f0;
  ::S18992C10 s19072c9f1[9];
  virtual  ~S19072C9(); // _ZN8S19072C9D2Ev
  virtual void  v22(); // _ZN8S19072C93v22Ev
  virtual void  v23(); // _ZN8S19072C93v23Ev
  virtual void  v24(); // _ZN8S19072C93v24Ev
  virtual void  v25(); // _ZN8S19072C93v25Ev
  S19072C9(); // tgen
};
//SIG(-1 S19072C9) C1{ VBC2{ BC3{ BC4{ v5 v6 v7 v8} v9 v10} VBC5{ BC6{ v11} v12 v13 v14 v15 v16 v17 v18 Fp} vd v19 v20 Fc[10]} vd v1 v2 v3 v4 Fi FC7{ BC8{ v22 v23 v24 v25 v26 Fp[2]} vd v21 Fi}[9]}


 S19072C9 ::~S19072C9(){ note_dtor("S19072C9", this);}
void  S19072C9 ::v22(){vfunc_called(this, "_ZN8S19072C93v22Ev");}
void  S19072C9 ::v23(){vfunc_called(this, "_ZN8S19072C93v23Ev");}
void  S19072C9 ::v24(){vfunc_called(this, "_ZN8S19072C93v24Ev");}
void  S19072C9 ::v25(){vfunc_called(this, "_ZN8S19072C93v25Ev");}
S19072C9 ::S19072C9(){ note_ctor("S19072C9", this);} // tgen

static void Test_S19072C9()
{
  extern Class_Descriptor cd_S19072C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,45)];
    init_test(&cd_S19072C9, buf);
    S19072C9 *dp, &lv = *(dp=new (buf) S19072C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,176), "sizeof(S19072C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19072C9)");
    check_base_class_offset(lv, (S19072C4*)(S19072C3*)(S19072C2*), ABISELECT(304,152), "S19072C9");
    check_base_class_offset(lv, (S19072C3*)(S19072C2*), ABISELECT(304,152), "S19072C9");
    check_base_class_offset(lv, (S19072C6*)(S19072C5*), ABISELECT(328,168), "S19072C9");
    check_base_class_offset(lv, (S19072C5*)(S19072C2*), ABISELECT(328,168), "S19072C9");
    check_base_class_offset(lv, (S19072C2*), ABISELECT(304,152), "S19072C9");
    check_field_offset(lv, s19072c9f0, ABISELECT(8,4), "S19072C9.s19072c9f0");
    check_field_offset(lv, s19072c9f1, ABISELECT(16,8), "S19072C9.s19072c9f1");
    test_class_info(&lv, &cd_S19072C9);
    dp->~S19072C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19072C9(Test_S19072C9, "S19072C9", ABISELECT(344,176));

#else // __cplusplus

extern void _ZN8S19072C9C1Ev();
extern void _ZN8S19072C9D2Ev();
Name_Map name_map_S19072C9[] = {
  NSPAIR(_ZN8S19072C9C1Ev),
  NSPAIR(_ZN8S19072C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19072C4;
extern VTBL_ENTRY _ZTI8S19072C4[];
extern  VTBL_ENTRY _ZTV8S19072C4[];
extern Class_Descriptor cd_S19072C3;
extern VTBL_ENTRY _ZTI8S19072C3[];
extern  VTBL_ENTRY _ZTV8S19072C3[];
extern Class_Descriptor cd_S19072C6;
extern VTBL_ENTRY _ZTI8S19072C6[];
extern  VTBL_ENTRY _ZTV8S19072C6[];
extern Class_Descriptor cd_S19072C5;
extern VTBL_ENTRY _ZTI8S19072C5[];
extern  VTBL_ENTRY _ZTV8S19072C5[];
extern Class_Descriptor cd_S19072C2;
extern VTBL_ENTRY _ZTI8S19072C2[];
extern  VTBL_ENTRY _ZTV8S19072C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C2[];
static Base_Class bases_S19072C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19072C4,    ABISELECT(304,152), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19072C3,    ABISELECT(304,152), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19072C6,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19072C5,    ABISELECT(328,168), //bcp->offset
    32, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19072C2,    ABISELECT(304,152), //bcp->offset
    10, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19072C9[];
extern void _ZN8S19072C9D1Ev();
extern void _ZN8S19072C9D0Ev();
extern void _ZN8S19072C93v22Ev();
extern void _ZN8S19072C93v23Ev();
extern void _ZN8S19072C93v24Ev();
extern void _ZN8S19072C93v25Ev();
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S19072C9D1Ev,_ZThn152_N8S19072C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S19072C9D0Ev,_ZThn152_N8S19072C9D0Ev)() __attribute__((weak));
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY vtc_S19072C9[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v23Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v24Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v25Ev,
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern VTBL_ENTRY _ZTV8S19072C9[];
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void _ZN8S19072C2D1Ev();
extern void _ZN8S19072C2D0Ev();
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C2__8S19072C9[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C2[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19072C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
};
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C5__8S19072C2__8S19072C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19072C2[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
static  VTT_ENTRY vtt_S19072C9[] = {
  {&(_ZTV8S19072C9[4]),  4,50},
  {&(_ZTV8S19072C9[22]),  22,50},
  {&(_ZTV8S19072C9[42]),  42,50},
  {&(_tg__ZTV8S19072C2__8S19072C9[3]),  3,13},
  {&(_tg__ZTV8S19072C5__8S19072C2__8S19072C9[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S19072C9[];
extern  VTBL_ENTRY _ZTV8S19072C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C9[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19072C9D0Ev,_ZThn152_N8S19072C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19072C9D1Ev,_ZThn152_N8S19072C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19072C9 = {  "S19072C9", // class name
  bases_S19072C9, 5,
  &(vtc_S19072C9[0]), // expected_vtbl_contents
  &(vtt_S19072C9[0]), // expected_vtt_contents
  ABISELECT(344,176), // object size
  NSPAIRA(_ZTI8S19072C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19072C9),50, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19072C9),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19072C8  : virtual S19072C9 {
  __tsi64 s19072c8f0;
  long s19072c8f1;
  virtual void  v26(); // _ZN8S19072C83v26Ev
  virtual void  v27(); // _ZN8S19072C83v27Ev
  virtual void  v28(); // _ZN8S19072C83v28Ev
  ~S19072C8(); // tgen
  S19072C8(); // tgen
};
//SIG(-1 S19072C8) C1{ VBC2{ VBC3{ BC4{ BC5{ v4 v5 v6 v7} v8 v9} VBC6{ BC7{ v10} v11 v12 v13 v14 v15 v16 v17 Fp} vd v18 v19 Fc[10]} vd v20 v21 v22 v23 Fi FC8{ BC9{ v25 v26 v27 v28 v29 Fp[2]} vd v24 Fi}[9]} v1 v2 v3 FL Fl}


void  S19072C8 ::v26(){vfunc_called(this, "_ZN8S19072C83v26Ev");}
void  S19072C8 ::v27(){vfunc_called(this, "_ZN8S19072C83v27Ev");}
void  S19072C8 ::v28(){vfunc_called(this, "_ZN8S19072C83v28Ev");}
S19072C8 ::~S19072C8(){ note_dtor("S19072C8", this);} // tgen
S19072C8 ::S19072C8(){ note_ctor("S19072C8", this);} // tgen

static void Test_S19072C8()
{
  extern Class_Descriptor cd_S19072C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,49)];
    init_test(&cd_S19072C8, buf);
    S19072C8 *dp, &lv = *(dp=new (buf) S19072C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,192), "sizeof(S19072C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19072C8)");
    check_base_class_offset(lv, (S19072C4*)(S19072C3*)(S19072C2*), ABISELECT(328,168), "S19072C8");
    check_base_class_offset(lv, (S19072C3*)(S19072C2*), ABISELECT(328,168), "S19072C8");
    check_base_class_offset(lv, (S19072C6*)(S19072C5*), ABISELECT(352,184), "S19072C8");
    check_base_class_offset(lv, (S19072C5*)(S19072C2*), ABISELECT(352,184), "S19072C8");
    check_base_class_offset(lv, (S19072C2*)(S19072C9*), ABISELECT(328,168), "S19072C8");
    check_base_class_offset(lv, (S19072C9*), ABISELECT(24,16), "S19072C8");
    check_field_offset(lv, s19072c8f0, ABISELECT(8,4), "S19072C8.s19072c8f0");
    check_field_offset(lv, s19072c8f1, ABISELECT(16,12), "S19072C8.s19072c8f1");
    test_class_info(&lv, &cd_S19072C8);
    dp->~S19072C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19072C8(Test_S19072C8, "S19072C8", ABISELECT(368,192));

#else // __cplusplus

extern void _ZN8S19072C8C1Ev();
extern void _ZN8S19072C8D1Ev();
Name_Map name_map_S19072C8[] = {
  NSPAIR(_ZN8S19072C8C1Ev),
  NSPAIR(_ZN8S19072C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19072C4;
extern VTBL_ENTRY _ZTI8S19072C4[];
extern  VTBL_ENTRY _ZTV8S19072C4[];
extern Class_Descriptor cd_S19072C3;
extern VTBL_ENTRY _ZTI8S19072C3[];
extern  VTBL_ENTRY _ZTV8S19072C3[];
extern Class_Descriptor cd_S19072C6;
extern VTBL_ENTRY _ZTI8S19072C6[];
extern  VTBL_ENTRY _ZTV8S19072C6[];
extern Class_Descriptor cd_S19072C5;
extern VTBL_ENTRY _ZTI8S19072C5[];
extern  VTBL_ENTRY _ZTV8S19072C5[];
extern Class_Descriptor cd_S19072C2;
extern VTBL_ENTRY _ZTI8S19072C2[];
extern  VTBL_ENTRY _ZTV8S19072C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C2[];
extern Class_Descriptor cd_S19072C9;
extern VTBL_ENTRY _ZTI8S19072C9[];
extern  VTBL_ENTRY _ZTV8S19072C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C9[];
static Base_Class bases_S19072C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19072C4,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19072C3,    ABISELECT(328,168), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19072C6,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19072C5,    ABISELECT(352,184), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19072C2,    ABISELECT(328,168), //bcp->offset
    25, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19072C9,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19072C8[];
extern void _ZN8S19072C83v26Ev();
extern void _ZN8S19072C83v27Ev();
extern void _ZN8S19072C83v28Ev();
extern void _ZN8S19072C8D1Ev();
extern void _ZN8S19072C8D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19072C8D1Ev,_ZTv0_n20_N8S19072C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19072C8D1Ev,_ZThn16_N8S19072C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19072C8D0Ev,_ZTv0_n20_N8S19072C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S19072C8D0Ev,_ZThn16_N8S19072C8D0Ev)() __attribute__((weak));
extern void _ZN8S19072C93v22Ev();
extern void _ZN8S19072C93v23Ev();
extern void _ZN8S19072C93v24Ev();
extern void _ZN8S19072C93v25Ev();
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void ABISELECT(_ZTv0_n80_N8S19072C8D1Ev,_ZTv0_n40_N8S19072C8D1Ev)();
extern void ABISELECT(_ZThn328_N8S19072C8D1Ev,_ZThn168_N8S19072C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19072C8D0Ev,_ZTv0_n40_N8S19072C8D0Ev)();
extern void ABISELECT(_ZThn328_N8S19072C8D0Ev,_ZThn168_N8S19072C8D0Ev)() __attribute__((weak));
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY vtc_S19072C8[] = {
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&_ZN8S19072C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19072C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C8D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C8D1Ev,_ZTv0_n20_N8S19072C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C8D0Ev,_ZTv0_n20_N8S19072C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v23Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v24Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v25Ev,
  0,
  0,
  ABISELECT(-328,-168),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C8D1Ev,_ZTv0_n40_N8S19072C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C8D0Ev,_ZTv0_n40_N8S19072C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern VTBL_ENTRY _ZTV8S19072C8[];
extern void _ZN8S19072C9D1Ev();
extern void _ZN8S19072C9D0Ev();
extern void _ZN8S19072C93v22Ev();
extern void _ZN8S19072C93v23Ev();
extern void _ZN8S19072C93v24Ev();
extern void _ZN8S19072C93v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C9__8S19072C8[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v23Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v24Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v25Ev,
};
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S19072C9D1Ev,_ZThn152_N8S19072C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S19072C9D0Ev,_ZThn152_N8S19072C9D0Ev)() __attribute__((weak));
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C2__8S19072C9__8S19072C8[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
};
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C5__8S19072C9__8S19072C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void _ZN8S19072C2D1Ev();
extern void _ZN8S19072C2D0Ev();
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C2__8S19072C8[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C2[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19072C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
};
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C5__8S19072C2__8S19072C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19072C2[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
static  VTT_ENTRY vtt_S19072C8[] = {
  {&(_ZTV8S19072C8[5]),  5,65},
  {&(_ZTV8S19072C8[19]),  19,65},
  {&(_ZTV8S19072C8[37]),  37,65},
  {&(_ZTV8S19072C8[57]),  57,65},
  {&(_tg__ZTV8S19072C9__8S19072C8[4]),  4,10},
  {&(_tg__ZTV8S19072C2__8S19072C9__8S19072C8[12]),  12,22},
  {&(_tg__ZTV8S19072C5__8S19072C9__8S19072C8[10]),  10,18},
  {&(_tg__ZTV8S19072C2__8S19072C8[3]),  3,13},
  {&(_tg__ZTV8S19072C5__8S19072C2__8S19072C8[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S19072C8[];
extern  VTBL_ENTRY _ZTV8S19072C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C8[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19072C9D0Ev,_ZThn152_N8S19072C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19072C9D1Ev,_ZThn152_N8S19072C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C8D0Ev,_ZTv0_n40_N8S19072C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S19072C8D0Ev,_ZThn168_N8S19072C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C8D1Ev,_ZTv0_n40_N8S19072C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S19072C8D1Ev,_ZThn168_N8S19072C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C8D0Ev,_ZTv0_n20_N8S19072C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19072C8D0Ev,_ZThn16_N8S19072C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C8D1Ev,_ZTv0_n20_N8S19072C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19072C8D1Ev,_ZThn16_N8S19072C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19072C8 = {  "S19072C8", // class name
  bases_S19072C8, 6,
  &(vtc_S19072C8[0]), // expected_vtbl_contents
  &(vtt_S19072C8[0]), // expected_vtt_contents
  ABISELECT(368,192), // object size
  NSPAIRA(_ZTI8S19072C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19072C8),65, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19072C8),9, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19072C7  : virtual S19072C8 {
  int s19072c7f0;
  virtual void  v29(); // _ZN8S19072C73v29Ev
  ~S19072C7(); // tgen
  S19072C7(); // tgen
};
//SIG(-1 S19072C7) C1{ VBC2{ VBC3{ VBC4{ BC5{ BC6{ v2 v3 v4 v5} v6 v7} VBC7{ BC8{ v8} v9 v10 v11 v12 v13 v14 v15 Fp} vd v16 v17 Fc[10]} vd v18 v19 v20 v21 Fi FC9{ BC10{ v26 v27 v28 v29 v30 Fp[2]} vd v25 Fi}[9]} v22 v23 v24 FL Fl} v1 Fi}


void  S19072C7 ::v29(){vfunc_called(this, "_ZN8S19072C73v29Ev");}
S19072C7 ::~S19072C7(){ note_dtor("S19072C7", this);} // tgen
S19072C7 ::S19072C7(){ note_ctor("S19072C7", this);} // tgen

static void Test_S19072C7()
{
  extern Class_Descriptor cd_S19072C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,51)];
    init_test(&cd_S19072C7, buf);
    S19072C7 *dp, &lv = *(dp=new (buf) S19072C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,200), "sizeof(S19072C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19072C7)");
    check_base_class_offset(lv, (S19072C4*)(S19072C3*)(S19072C2*), ABISELECT(344,176), "S19072C7");
    check_base_class_offset(lv, (S19072C3*)(S19072C2*), ABISELECT(344,176), "S19072C7");
    check_base_class_offset(lv, (S19072C6*)(S19072C5*), ABISELECT(368,192), "S19072C7");
    check_base_class_offset(lv, (S19072C5*)(S19072C2*), ABISELECT(368,192), "S19072C7");
    check_base_class_offset(lv, (S19072C2*)(S19072C9*), ABISELECT(344,176), "S19072C7");
    check_base_class_offset(lv, (S19072C9*)(S19072C8*), ABISELECT(40,24), "S19072C7");
    check_base_class_offset(lv, (S19072C8*), ABISELECT(16,8), "S19072C7");
    check_field_offset(lv, s19072c7f0, ABISELECT(8,4), "S19072C7.s19072c7f0");
    test_class_info(&lv, &cd_S19072C7);
    dp->~S19072C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19072C7(Test_S19072C7, "S19072C7", ABISELECT(384,200));

#else // __cplusplus

extern void _ZN8S19072C7C1Ev();
extern void _ZN8S19072C7D1Ev();
Name_Map name_map_S19072C7[] = {
  NSPAIR(_ZN8S19072C7C1Ev),
  NSPAIR(_ZN8S19072C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19072C4;
extern VTBL_ENTRY _ZTI8S19072C4[];
extern  VTBL_ENTRY _ZTV8S19072C4[];
extern Class_Descriptor cd_S19072C3;
extern VTBL_ENTRY _ZTI8S19072C3[];
extern  VTBL_ENTRY _ZTV8S19072C3[];
extern Class_Descriptor cd_S19072C6;
extern VTBL_ENTRY _ZTI8S19072C6[];
extern  VTBL_ENTRY _ZTV8S19072C6[];
extern Class_Descriptor cd_S19072C5;
extern VTBL_ENTRY _ZTI8S19072C5[];
extern  VTBL_ENTRY _ZTV8S19072C5[];
extern Class_Descriptor cd_S19072C2;
extern VTBL_ENTRY _ZTI8S19072C2[];
extern  VTBL_ENTRY _ZTV8S19072C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C2[];
extern Class_Descriptor cd_S19072C9;
extern VTBL_ENTRY _ZTI8S19072C9[];
extern  VTBL_ENTRY _ZTV8S19072C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C9[];
extern Class_Descriptor cd_S19072C8;
extern VTBL_ENTRY _ZTI8S19072C8[];
extern  VTBL_ENTRY _ZTV8S19072C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C8[];
static Base_Class bases_S19072C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19072C4,    ABISELECT(344,176), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19072C3,    ABISELECT(344,176), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19072C6,    ABISELECT(368,192), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19072C5,    ABISELECT(368,192), //bcp->offset
    60, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19072C2,    ABISELECT(344,176), //bcp->offset
    38, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19072C9,    ABISELECT(40,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19072C8,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19072C7[];
extern void _ZN8S19072C73v29Ev();
extern void _ZN8S19072C7D1Ev();
extern void _ZN8S19072C7D0Ev();
extern void _ZN8S19072C83v26Ev();
extern void _ZN8S19072C83v27Ev();
extern void _ZN8S19072C83v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S19072C7D1Ev,_ZTv0_n36_N8S19072C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19072C7D1Ev,_ZThn8_N8S19072C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19072C7D0Ev,_ZTv0_n36_N8S19072C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19072C7D0Ev,_ZThn8_N8S19072C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19072C7D1Ev,_ZTv0_n20_N8S19072C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S19072C7D1Ev,_ZThn24_N8S19072C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19072C7D0Ev,_ZTv0_n20_N8S19072C7D0Ev)();
extern void ABISELECT(_ZThn40_N8S19072C7D0Ev,_ZThn24_N8S19072C7D0Ev)() __attribute__((weak));
extern void _ZN8S19072C93v22Ev();
extern void _ZN8S19072C93v23Ev();
extern void _ZN8S19072C93v24Ev();
extern void _ZN8S19072C93v25Ev();
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void ABISELECT(_ZTv0_n80_N8S19072C7D1Ev,_ZTv0_n40_N8S19072C7D1Ev)();
extern void ABISELECT(_ZThn344_N8S19072C7D1Ev,_ZThn176_N8S19072C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19072C7D0Ev,_ZTv0_n40_N8S19072C7D0Ev)();
extern void ABISELECT(_ZThn344_N8S19072C7D0Ev,_ZThn176_N8S19072C7D0Ev)() __attribute__((weak));
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY vtc_S19072C7[] = {
  ABISELECT(368,192),
  ABISELECT(344,176),
  ABISELECT(40,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C7[0]),
  (VTBL_ENTRY)&_ZN8S19072C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19072C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C7D0Ev,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19072C7[0]),
  (VTBL_ENTRY)&_ZN8S19072C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19072C7D1Ev,_ZTv0_n36_N8S19072C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19072C7D0Ev,_ZTv0_n36_N8S19072C7D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19072C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C7D1Ev,_ZTv0_n20_N8S19072C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C7D0Ev,_ZTv0_n20_N8S19072C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v23Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v24Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v25Ev,
  0,
  0,
  ABISELECT(-344,-176),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-344,-176),
  (VTBL_ENTRY)&(_ZTI8S19072C7[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C7D1Ev,_ZTv0_n40_N8S19072C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C7D0Ev,_ZTv0_n40_N8S19072C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI8S19072C7[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern VTBL_ENTRY _ZTV8S19072C7[];
extern void _ZN8S19072C83v26Ev();
extern void _ZN8S19072C83v27Ev();
extern void _ZN8S19072C83v28Ev();
extern void _ZN8S19072C8D1Ev();
extern void _ZN8S19072C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C8__8S19072C7[] = {
  ABISELECT(352,184),
  ABISELECT(328,168),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&_ZN8S19072C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19072C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19072C8D1Ev,_ZTv0_n20_N8S19072C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19072C8D1Ev,_ZThn16_N8S19072C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19072C8D0Ev,_ZTv0_n20_N8S19072C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S19072C8D0Ev,_ZThn16_N8S19072C8D0Ev)() __attribute__((weak));
extern void _ZN8S19072C93v22Ev();
extern void _ZN8S19072C93v23Ev();
extern void _ZN8S19072C93v24Ev();
extern void _ZN8S19072C93v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C9__8S19072C8__8S19072C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(328,168),
  ABISELECT(304,152),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C8D1Ev,_ZTv0_n20_N8S19072C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C8D0Ev,_ZTv0_n20_N8S19072C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v23Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v24Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v25Ev,
};
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void ABISELECT(_ZTv0_n80_N8S19072C8D1Ev,_ZTv0_n40_N8S19072C8D1Ev)();
extern void ABISELECT(_ZThn328_N8S19072C8D1Ev,_ZThn168_N8S19072C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19072C8D0Ev,_ZTv0_n40_N8S19072C8D0Ev)();
extern void ABISELECT(_ZThn328_N8S19072C8D0Ev,_ZThn168_N8S19072C8D0Ev)() __attribute__((weak));
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C2__8S19072C8__8S19072C7[] = {
  0,
  0,
  ABISELECT(-328,-168),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C8D1Ev,_ZTv0_n40_N8S19072C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C8D0Ev,_ZTv0_n40_N8S19072C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
};
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C5__8S19072C8__8S19072C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern void _ZN8S19072C9D1Ev();
extern void _ZN8S19072C9D0Ev();
extern void _ZN8S19072C93v22Ev();
extern void _ZN8S19072C93v23Ev();
extern void _ZN8S19072C93v24Ev();
extern void _ZN8S19072C93v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C9__8S19072C7[] = {
  ABISELECT(328,168),
  ABISELECT(304,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v23Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v24Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v25Ev,
};
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S19072C9D1Ev,_ZThn152_N8S19072C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S19072C9D0Ev,_ZThn152_N8S19072C9D0Ev)() __attribute__((weak));
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C2__8S19072C9__8S19072C7[] = {
  0,
  0,
  ABISELECT(-304,-152),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
};
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C5__8S19072C9__8S19072C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-168),
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void _ZN8S19072C2D1Ev();
extern void _ZN8S19072C2D0Ev();
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C2__8S19072C7[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C2[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19072C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
};
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C5__8S19072C2__8S19072C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19072C2[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
static  VTT_ENTRY vtt_S19072C7[] = {
  {&(_ZTV8S19072C7[6]),  6,78},
  {&(_ZTV8S19072C7[18]),  18,78},
  {&(_ZTV8S19072C7[32]),  32,78},
  {&(_ZTV8S19072C7[50]),  50,78},
  {&(_ZTV8S19072C7[70]),  70,78},
  {&(_tg__ZTV8S19072C8__8S19072C7[5]),  5,10},
  {&(_tg__ZTV8S19072C9__8S19072C8__8S19072C7[9]),  9,15},
  {&(_tg__ZTV8S19072C2__8S19072C8__8S19072C7[12]),  12,22},
  {&(_tg__ZTV8S19072C5__8S19072C8__8S19072C7[10]),  10,18},
  {&(_tg__ZTV8S19072C9__8S19072C7[4]),  4,10},
  {&(_tg__ZTV8S19072C2__8S19072C9__8S19072C7[12]),  12,22},
  {&(_tg__ZTV8S19072C5__8S19072C9__8S19072C7[10]),  10,18},
  {&(_tg__ZTV8S19072C2__8S19072C7[3]),  3,13},
  {&(_tg__ZTV8S19072C5__8S19072C2__8S19072C7[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S19072C7[];
extern  VTBL_ENTRY _ZTV8S19072C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C7[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19072C9D0Ev,_ZThn152_N8S19072C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19072C9D1Ev,_ZThn152_N8S19072C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C8D0Ev,_ZTv0_n40_N8S19072C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S19072C8D0Ev,_ZThn168_N8S19072C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C8D1Ev,_ZTv0_n40_N8S19072C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S19072C8D1Ev,_ZThn168_N8S19072C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C8D0Ev,_ZTv0_n20_N8S19072C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19072C8D0Ev,_ZThn16_N8S19072C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C8D1Ev,_ZTv0_n20_N8S19072C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19072C8D1Ev,_ZThn16_N8S19072C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C7D0Ev,_ZTv0_n40_N8S19072C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S19072C7D0Ev,_ZThn176_N8S19072C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C7D1Ev,_ZTv0_n40_N8S19072C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S19072C7D1Ev,_ZThn176_N8S19072C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C7D0Ev,_ZTv0_n20_N8S19072C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19072C7D0Ev,_ZThn24_N8S19072C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C7D1Ev,_ZTv0_n20_N8S19072C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19072C7D1Ev,_ZThn24_N8S19072C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19072C7D0Ev,_ZTv0_n36_N8S19072C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19072C7D0Ev,_ZThn8_N8S19072C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19072C7D1Ev,_ZTv0_n36_N8S19072C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19072C7D1Ev,_ZThn8_N8S19072C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19072C7 = {  "S19072C7", // class name
  bases_S19072C7, 7,
  &(vtc_S19072C7[0]), // expected_vtbl_contents
  &(vtt_S19072C7[0]), // expected_vtt_contents
  ABISELECT(384,200), // object size
  NSPAIRA(_ZTI8S19072C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19072C7),78, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19072C7),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19072C11  {
  void *s19072c11f0[2];
  virtual void  v30(); // _ZN9S19072C113v30Ev
  virtual void  v31(); // _ZN9S19072C113v31Ev
  virtual void  v32(); // _ZN9S19072C113v32Ev
  virtual void  v33(); // _ZN9S19072C113v33Ev
  virtual void  v34(); // _ZN9S19072C113v34Ev
  ~S19072C11(); // tgen
  S19072C11(); // tgen
};
//SIG(1 S19072C11) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S19072C11 ::v30(){vfunc_called(this, "_ZN9S19072C113v30Ev");}
void  S19072C11 ::v31(){vfunc_called(this, "_ZN9S19072C113v31Ev");}
void  S19072C11 ::v32(){vfunc_called(this, "_ZN9S19072C113v32Ev");}
void  S19072C11 ::v33(){vfunc_called(this, "_ZN9S19072C113v33Ev");}
void  S19072C11 ::v34(){vfunc_called(this, "_ZN9S19072C113v34Ev");}
S19072C11 ::~S19072C11(){ note_dtor("S19072C11", this);} // tgen
S19072C11 ::S19072C11(){ note_ctor("S19072C11", this);} // tgen

static void Test_S19072C11()
{
  extern Class_Descriptor cd_S19072C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19072C11, buf);
    S19072C11 *dp, &lv = *(dp=new (buf) S19072C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19072C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19072C11)");
    check_field_offset(lv, s19072c11f0, ABISELECT(8,4), "S19072C11.s19072c11f0");
    test_class_info(&lv, &cd_S19072C11);
    dp->~S19072C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19072C11(Test_S19072C11, "S19072C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19072C11C1Ev();
extern void _ZN9S19072C11D1Ev();
Name_Map name_map_S19072C11[] = {
  NSPAIR(_ZN9S19072C11C1Ev),
  NSPAIR(_ZN9S19072C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19072C11[];
extern void _ZN9S19072C113v30Ev();
extern void _ZN9S19072C113v31Ev();
extern void _ZN9S19072C113v32Ev();
extern void _ZN9S19072C113v33Ev();
extern void _ZN9S19072C113v34Ev();
static  VTBL_ENTRY vtc_S19072C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19072C11[0]),
  (VTBL_ENTRY)&_ZN9S19072C113v30Ev,
  (VTBL_ENTRY)&_ZN9S19072C113v31Ev,
  (VTBL_ENTRY)&_ZN9S19072C113v32Ev,
  (VTBL_ENTRY)&_ZN9S19072C113v33Ev,
  (VTBL_ENTRY)&_ZN9S19072C113v34Ev,
};
extern VTBL_ENTRY _ZTI9S19072C11[];
extern  VTBL_ENTRY _ZTV9S19072C11[];
Class_Descriptor cd_S19072C11 = {  "S19072C11", // class name
  0,0,//no base classes
  &(vtc_S19072C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19072C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19072C11),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  S19072C1  : virtual S19072C2 , virtual S19072C7 {
  char s19072c1f0;
  ::S19072C11 s19072c1f1[7];
  virtual  ~S19072C1(); // _ZN8S19072C1D2Ev
  virtual void  v1(); // _ZN8S19072C12v1Ev
  virtual void  v2(); // _ZN8S19072C12v2Ev
  virtual void  v3(); // _ZN8S19072C12v3Ev
  virtual void  v4(); // _ZN8S19072C12v4Ev
  virtual void  v5(); // _ZN8S19072C12v5Ev
  S19072C1(); // tgen
};
//SIG(1 S19072C1) C1{ VBC2{ BC3{ BC4{ v6 v7 v8 v9} v10 v11} VBC5{ BC6{ v12} v13 v14 v15 v16 v17 v18 v19 Fp} vd v20 v21 Fc[10]} VBC7{ VBC8{ VBC9{ VBC2 vd v22 v23 v24 v25 Fi FC10{ BC11{ v36 v37 v38 v39 v40 Fp[2]} vd v35 Fi}[9]} v26 v27 v28 FL Fl} v29 Fi} vd v1 v2 v3 v4 v5 Fc FC12{ v30 v31 v32 v33 v34 Fp[2]}[7]}


 S19072C1 ::~S19072C1(){ note_dtor("S19072C1", this);}
void  S19072C1 ::v1(){vfunc_called(this, "_ZN8S19072C12v1Ev");}
void  S19072C1 ::v2(){vfunc_called(this, "_ZN8S19072C12v2Ev");}
void  S19072C1 ::v3(){vfunc_called(this, "_ZN8S19072C12v3Ev");}
void  S19072C1 ::v4(){vfunc_called(this, "_ZN8S19072C12v4Ev");}
void  S19072C1 ::v5(){vfunc_called(this, "_ZN8S19072C12v5Ev");}
S19072C1 ::S19072C1(){ note_ctor("S19072C1", this);} // tgen

static void Test_S19072C1()
{
  extern Class_Descriptor cd_S19072C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(72,74)];
    init_test(&cd_S19072C1, buf);
    S19072C1 *dp, &lv = *(dp=new (buf) S19072C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(568,292), "sizeof(S19072C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19072C1)");
    check_base_class_offset(lv, (S19072C4*)(S19072C3*)(S19072C2*), ABISELECT(184,92), "S19072C1");
    check_base_class_offset(lv, (S19072C3*)(S19072C2*), ABISELECT(184,92), "S19072C1");
    check_base_class_offset(lv, (S19072C6*)(S19072C5*), ABISELECT(208,108), "S19072C1");
    check_base_class_offset(lv, (S19072C5*)(S19072C2*), ABISELECT(208,108), "S19072C1");
    check_base_class_offset(lv, (S19072C2*), ABISELECT(184,92), "S19072C1");
    check_base_class_offset(lv, (S19072C2*)(S19072C9*), ABISELECT(184,92), "S19072C1");
    check_base_class_offset(lv, (S19072C9*)(S19072C8*), ABISELECT(264,140), "S19072C1");
    check_base_class_offset(lv, (S19072C8*)(S19072C7*), ABISELECT(240,124), "S19072C1");
    check_base_class_offset(lv, (S19072C7*), ABISELECT(224,116), "S19072C1");
    check_field_offset(lv, s19072c1f0, ABISELECT(8,4), "S19072C1.s19072c1f0");
    check_field_offset(lv, s19072c1f1, ABISELECT(16,8), "S19072C1.s19072c1f1");
    test_class_info(&lv, &cd_S19072C1);
    dp->~S19072C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19072C1(Test_S19072C1, "S19072C1", ABISELECT(568,292));

#else // __cplusplus

extern void _ZN8S19072C1C1Ev();
extern void _ZN8S19072C1D2Ev();
Name_Map name_map_S19072C1[] = {
  NSPAIR(_ZN8S19072C1C1Ev),
  NSPAIR(_ZN8S19072C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19072C4;
extern VTBL_ENTRY _ZTI8S19072C4[];
extern  VTBL_ENTRY _ZTV8S19072C4[];
extern Class_Descriptor cd_S19072C3;
extern VTBL_ENTRY _ZTI8S19072C3[];
extern  VTBL_ENTRY _ZTV8S19072C3[];
extern Class_Descriptor cd_S19072C6;
extern VTBL_ENTRY _ZTI8S19072C6[];
extern  VTBL_ENTRY _ZTV8S19072C6[];
extern Class_Descriptor cd_S19072C5;
extern VTBL_ENTRY _ZTI8S19072C5[];
extern  VTBL_ENTRY _ZTV8S19072C5[];
extern Class_Descriptor cd_S19072C2;
extern VTBL_ENTRY _ZTI8S19072C2[];
extern  VTBL_ENTRY _ZTV8S19072C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C2[];
extern Class_Descriptor cd_S19072C9;
extern VTBL_ENTRY _ZTI8S19072C9[];
extern  VTBL_ENTRY _ZTV8S19072C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C9[];
extern Class_Descriptor cd_S19072C8;
extern VTBL_ENTRY _ZTI8S19072C8[];
extern  VTBL_ENTRY _ZTV8S19072C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C8[];
extern Class_Descriptor cd_S19072C7;
extern VTBL_ENTRY _ZTI8S19072C7[];
extern  VTBL_ENTRY _ZTV8S19072C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C7[];
static Base_Class bases_S19072C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19072C4,    ABISELECT(184,92), //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19072C3,    ABISELECT(184,92), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19072C6,    ABISELECT(208,108), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19072C5,    ABISELECT(208,108), //bcp->offset
    36, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19072C2,    ABISELECT(184,92), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19072C9,    ABISELECT(264,140), //bcp->offset
    79, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19072C8,    ABISELECT(240,124), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19072C7,    ABISELECT(224,116), //bcp->offset
    54, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19072C1[];
extern void _ZN8S19072C1D1Ev();
extern void _ZN8S19072C1D0Ev();
extern void _ZN8S19072C12v1Ev();
extern void _ZN8S19072C12v2Ev();
extern void _ZN8S19072C12v3Ev();
extern void _ZN8S19072C12v4Ev();
extern void _ZN8S19072C12v5Ev();
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void ABISELECT(_ZTv0_n80_N8S19072C1D1Ev,_ZTv0_n40_N8S19072C1D1Ev)();
extern void ABISELECT(_ZThn184_N8S19072C1D1Ev,_ZThn92_N8S19072C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19072C1D0Ev,_ZTv0_n40_N8S19072C1D0Ev)();
extern void ABISELECT(_ZThn184_N8S19072C1D0Ev,_ZThn92_N8S19072C1D0Ev)() __attribute__((weak));
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
extern void _ZN8S19072C73v29Ev();
extern void ABISELECT(_ZTv0_n64_N8S19072C1D1Ev,_ZTv0_n32_N8S19072C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19072C1D1Ev,_ZThn116_N8S19072C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19072C1D0Ev,_ZTv0_n32_N8S19072C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S19072C1D0Ev,_ZThn116_N8S19072C1D0Ev)() __attribute__((weak));
extern void _ZN8S19072C83v26Ev();
extern void _ZN8S19072C83v27Ev();
extern void _ZN8S19072C83v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S19072C1D1Ev,_ZTv0_n36_N8S19072C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S19072C1D1Ev,_ZThn124_N8S19072C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19072C1D0Ev,_ZTv0_n36_N8S19072C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S19072C1D0Ev,_ZThn124_N8S19072C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19072C1D1Ev,_ZTv0_n20_N8S19072C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19072C1D1Ev,_ZThn140_N8S19072C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19072C1D0Ev,_ZTv0_n20_N8S19072C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19072C1D0Ev,_ZThn140_N8S19072C1D0Ev)() __attribute__((weak));
extern void _ZN8S19072C93v22Ev();
extern void _ZN8S19072C93v23Ev();
extern void _ZN8S19072C93v24Ev();
extern void _ZN8S19072C93v25Ev();
static  VTBL_ENTRY vtc_S19072C1[] = {
  ABISELECT(264,140),
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(208,108),
  ABISELECT(184,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C1[0]),
  (VTBL_ENTRY)&_ZN8S19072C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19072C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19072C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19072C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19072C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19072C12v5Ev,
  0,
  0,
  ABISELECT(-184,-92),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI8S19072C1[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C1D1Ev,_ZTv0_n40_N8S19072C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C1D0Ev,_ZTv0_n40_N8S19072C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-108),
  (VTBL_ENTRY)&(_ZTI8S19072C1[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
  ABISELECT(-224,-116),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-40,-24),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI8S19072C1[0]),
  (VTBL_ENTRY)&_ZN8S19072C73v29Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19072C1D1Ev,_ZTv0_n32_N8S19072C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19072C1D0Ev,_ZTv0_n32_N8S19072C1D0Ev),
  ABISELECT(-240,-124),
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-56,-32),
  ABISELECT(24,16),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI8S19072C1[0]),
  (VTBL_ENTRY)&_ZN8S19072C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19072C1D1Ev,_ZTv0_n36_N8S19072C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19072C1D0Ev,_ZTv0_n36_N8S19072C1D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-264,-140),
  ABISELECT(-56,-32),
  ABISELECT(-80,-48),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI8S19072C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C1D1Ev,_ZTv0_n20_N8S19072C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C1D0Ev,_ZTv0_n20_N8S19072C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v23Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v24Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v25Ev,
};
extern VTBL_ENTRY _ZTV8S19072C1[];
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void _ZN8S19072C2D1Ev();
extern void _ZN8S19072C2D0Ev();
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C2__8S19072C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C2[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19072C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
};
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C5__8S19072C2__8S19072C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19072C2[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern void _ZN8S19072C73v29Ev();
extern void _ZN8S19072C7D1Ev();
extern void _ZN8S19072C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C7__8S19072C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-40,-24),
  ABISELECT(40,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C7[0]),
  (VTBL_ENTRY)&_ZN8S19072C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19072C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C7D0Ev,
};
extern void _ZN8S19072C83v26Ev();
extern void _ZN8S19072C83v27Ev();
extern void _ZN8S19072C83v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S19072C7D1Ev,_ZTv0_n36_N8S19072C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19072C7D1Ev,_ZThn8_N8S19072C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19072C7D0Ev,_ZTv0_n36_N8S19072C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19072C7D0Ev,_ZThn8_N8S19072C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19072C8__8S19072C7__8S19072C1[] = {
  ABISELECT(-16,-8),
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-56,-32),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19072C7[0]),
  (VTBL_ENTRY)&_ZN8S19072C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19072C7D1Ev,_ZTv0_n36_N8S19072C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19072C7D0Ev,_ZTv0_n36_N8S19072C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19072C7D1Ev,_ZTv0_n20_N8S19072C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S19072C7D1Ev,_ZThn24_N8S19072C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19072C7D0Ev,_ZTv0_n20_N8S19072C7D0Ev)();
extern void ABISELECT(_ZThn40_N8S19072C7D0Ev,_ZThn24_N8S19072C7D0Ev)() __attribute__((weak));
extern void _ZN8S19072C93v22Ev();
extern void _ZN8S19072C93v23Ev();
extern void _ZN8S19072C93v24Ev();
extern void _ZN8S19072C93v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C9__8S19072C7__8S19072C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-56,-32),
  ABISELECT(-80,-48),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19072C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C7D1Ev,_ZTv0_n20_N8S19072C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C7D0Ev,_ZTv0_n20_N8S19072C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v23Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v24Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v25Ev,
};
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void ABISELECT(_ZTv0_n80_N8S19072C7D1Ev,_ZTv0_n40_N8S19072C7D1Ev)();
extern void ABISELECT(_ZTv0_n80_N8S19072C7D0Ev,_ZTv0_n40_N8S19072C7D0Ev)();
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C2__8S19072C7__8S19072C1[] = {
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19072C7[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C7D1Ev,_ZTv0_n40_N8S19072C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C7D0Ev,_ZTv0_n40_N8S19072C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
};
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C5__8S19072C7__8S19072C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19072C7[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern void _ZN8S19072C83v26Ev();
extern void _ZN8S19072C83v27Ev();
extern void _ZN8S19072C83v28Ev();
extern void _ZN8S19072C8D1Ev();
extern void _ZN8S19072C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C8__8S19072C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-56,-32),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&_ZN8S19072C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19072C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19072C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19072C8D1Ev,_ZTv0_n20_N8S19072C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19072C8D1Ev,_ZThn16_N8S19072C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19072C8D0Ev,_ZTv0_n20_N8S19072C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S19072C8D0Ev,_ZThn16_N8S19072C8D0Ev)() __attribute__((weak));
extern void _ZN8S19072C93v22Ev();
extern void _ZN8S19072C93v23Ev();
extern void _ZN8S19072C93v24Ev();
extern void _ZN8S19072C93v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C9__8S19072C8__8S19072C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-56,-32),
  ABISELECT(-80,-48),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C8D1Ev,_ZTv0_n20_N8S19072C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19072C8D0Ev,_ZTv0_n20_N8S19072C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v23Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v24Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v25Ev,
};
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void ABISELECT(_ZTv0_n80_N8S19072C8D1Ev,_ZTv0_n40_N8S19072C8D1Ev)();
extern void ABISELECT(_ZTv0_n80_N8S19072C8D0Ev,_ZTv0_n40_N8S19072C8D0Ev)();
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C2__8S19072C8__8S19072C1[] = {
  0,
  0,
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C8D1Ev,_ZTv0_n40_N8S19072C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C8D0Ev,_ZTv0_n40_N8S19072C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
};
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C5__8S19072C8__8S19072C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19072C8[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
extern void _ZN8S19072C9D1Ev();
extern void _ZN8S19072C9D0Ev();
extern void _ZN8S19072C93v22Ev();
extern void _ZN8S19072C93v23Ev();
extern void _ZN8S19072C93v24Ev();
extern void _ZN8S19072C93v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C9__8S19072C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19072C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v23Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v24Ev,
  (VTBL_ENTRY)&_ZN8S19072C93v25Ev,
};
extern void _ZN8S19072C42v6Ev();
extern void _ZN8S19072C42v7Ev();
extern void _ZN8S19072C42v8Ev();
extern void _ZN8S19072C42v9Ev();
extern void _ZN8S19072C33v10Ev();
extern void _ZN8S19072C33v11Ev();
extern void ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev)();
extern void ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev)();
extern void _ZN8S19072C23v20Ev();
extern void _ZN8S19072C23v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C2__8S19072C9__8S19072C1[] = {
  0,
  0,
  ABISELECT(80,48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19072C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19072C33v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C9D1Ev,_ZTv0_n40_N8S19072C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19072C9D0Ev,_ZTv0_n40_N8S19072C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19072C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19072C23v21Ev,
};
extern void _ZN8S19072C63v12Ev();
extern void _ZN8S19072C53v13Ev();
extern void _ZN8S19072C53v14Ev();
extern void _ZN8S19072C53v15Ev();
extern void _ZN8S19072C53v16Ev();
extern void _ZN8S19072C53v17Ev();
extern void _ZN8S19072C53v18Ev();
extern void _ZN8S19072C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19072C5__8S19072C9__8S19072C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S19072C9[0]),
  (VTBL_ENTRY)&_ZN8S19072C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v17Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v18Ev,
  (VTBL_ENTRY)&_ZN8S19072C53v19Ev,
};
static  VTT_ENTRY vtt_S19072C1[] = {
  {&(_ZTV8S19072C1[7]),  7,94},
  {&(_ZTV8S19072C1[26]),  26,94},
  {&(_ZTV8S19072C1[46]),  46,94},
  {&(_ZTV8S19072C1[62]),  62,94},
  {&(_ZTV8S19072C1[74]),  74,94},
  {&(_ZTV8S19072C1[88]),  88,94},
  {&(_tg__ZTV8S19072C2__8S19072C1[3]),  3,13},
  {&(_tg__ZTV8S19072C5__8S19072C2__8S19072C1[10]),  10,18},
  {&(_tg__ZTV8S19072C7__8S19072C1[6]),  6,9},
  {&(_tg__ZTV8S19072C8__8S19072C7__8S19072C1[9]),  9,14},
  {&(_tg__ZTV8S19072C9__8S19072C7__8S19072C1[9]),  9,15},
  {&(_tg__ZTV8S19072C2__8S19072C7__8S19072C1[12]),  12,22},
  {&(_tg__ZTV8S19072C5__8S19072C7__8S19072C1[10]),  10,18},
  {&(_tg__ZTV8S19072C8__8S19072C1[5]),  5,10},
  {&(_tg__ZTV8S19072C9__8S19072C8__8S19072C1[9]),  9,15},
  {&(_tg__ZTV8S19072C2__8S19072C8__8S19072C1[12]),  12,22},
  {&(_tg__ZTV8S19072C5__8S19072C8__8S19072C1[10]),  10,18},
  {&(_tg__ZTV8S19072C9__8S19072C1[4]),  4,10},
  {&(_tg__ZTV8S19072C2__8S19072C9__8S19072C1[12]),  12,22},
  {&(_tg__ZTV8S19072C5__8S19072C9__8S19072C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S19072C1[];
extern  VTBL_ENTRY _ZTV8S19072C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19072C1[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C8D0Ev,_ZTv0_n20_N8S19072C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19072C8D0Ev,_ZThn16_N8S19072C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C8D1Ev,_ZTv0_n20_N8S19072C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19072C8D1Ev,_ZThn16_N8S19072C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C7D0Ev,_ZTv0_n20_N8S19072C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19072C7D0Ev,_ZThn24_N8S19072C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C7D1Ev,_ZTv0_n20_N8S19072C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19072C7D1Ev,_ZThn24_N8S19072C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19072C7D0Ev,_ZTv0_n36_N8S19072C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19072C7D0Ev,_ZThn8_N8S19072C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19072C7D1Ev,_ZTv0_n36_N8S19072C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19072C7D1Ev,_ZThn8_N8S19072C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C1D0Ev,_ZTv0_n20_N8S19072C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19072C1D0Ev,_ZThn140_N8S19072C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19072C1D1Ev,_ZTv0_n20_N8S19072C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19072C1D1Ev,_ZThn140_N8S19072C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19072C1D0Ev,_ZTv0_n36_N8S19072C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19072C1D0Ev,_ZThn124_N8S19072C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19072C1D1Ev,_ZTv0_n36_N8S19072C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19072C1D1Ev,_ZThn124_N8S19072C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19072C1D0Ev,_ZTv0_n32_N8S19072C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19072C1D0Ev,_ZThn116_N8S19072C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19072C1D1Ev,_ZTv0_n32_N8S19072C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19072C1D1Ev,_ZThn116_N8S19072C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C1D0Ev,_ZTv0_n40_N8S19072C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19072C1D0Ev,_ZThn92_N8S19072C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19072C1D1Ev,_ZTv0_n40_N8S19072C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19072C1D1Ev,_ZThn92_N8S19072C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19072C1 = {  "S19072C1", // class name
  bases_S19072C1, 8,
  &(vtc_S19072C1[0]), // expected_vtbl_contents
  &(vtt_S19072C1[0]), // expected_vtt_contents
  ABISELECT(568,292), // object size
  NSPAIRA(_ZTI8S19072C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19072C1),94, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19072C1),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C3  : virtual S10180C138 , S10180C93 {
  ~S21015C3(); // tgen
  S21015C3(); // tgen
};
//SIG(-1 S21015C3) C1{ VBC2{ m} BC3{ m FL}}


S21015C3 ::~S21015C3(){ note_dtor("S21015C3", this);} // tgen
S21015C3 ::S21015C3(){ note_ctor("S21015C3", this);} // tgen

static void Test_S21015C3()
{
  extern Class_Descriptor cd_S21015C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S21015C3, buf);
    S21015C3 *dp, &lv = *(dp=new (buf) S21015C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S21015C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S21015C3");
    check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S21015C3");
    test_class_info(&lv, &cd_S21015C3);
    dp->~S21015C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C3(Test_S21015C3, "S21015C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S21015C3C1Ev();
extern void _ZN8S21015C3D1Ev();
Name_Map name_map_S21015C3[] = {
  NSPAIR(_ZN8S21015C3C1Ev),
  NSPAIR(_ZN8S21015C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S21015C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S21015C3[];
static  VTBL_ENTRY vtc_S21015C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
extern VTBL_ENTRY _ZTV8S21015C3[];
static  VTT_ENTRY vtt_S21015C3[] = {
  {&(_ZTV8S21015C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
Class_Descriptor cd_S21015C3 = {  "S21015C3", // class name
  bases_S21015C3, 2,
  &(vtc_S21015C3[0]), // expected_vtbl_contents
  &(vtt_S21015C3[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S21015C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21015C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21015C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C6  : virtual S21015C3 {
  ::S10180C133 s21015c6f0;
  ~S21015C6(); // tgen
  S21015C6(); // tgen
};
//SIG(-1 S21015C6) C1{ VBC2{ VBC3{ m} BC4{ m FL}} FC5{ m}}


S21015C6 ::~S21015C6(){ note_dtor("S21015C6", this);} // tgen
S21015C6 ::S21015C6(){ note_ctor("S21015C6", this);} // tgen

static void Test_S21015C6()
{
  extern Class_Descriptor cd_S21015C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S21015C6, buf);
    S21015C6 *dp, &lv = *(dp=new (buf) S21015C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S21015C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C6)");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*), 0, "S21015C6");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*), ABISELECT(24,12), "S21015C6");
    check_base_class_offset(lv, (S21015C3*), ABISELECT(16,8), "S21015C6");
    check_field_offset(lv, s21015c6f0, ABISELECT(8,4), "S21015C6.s21015c6f0");
    test_class_info(&lv, &cd_S21015C6);
    dp->~S21015C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C6(Test_S21015C6, "S21015C6", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S21015C6C1Ev();
extern void _ZN8S21015C6D1Ev();
Name_Map name_map_S21015C6[] = {
  NSPAIR(_ZN8S21015C6C1Ev),
  NSPAIR(_ZN8S21015C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
static Base_Class bases_S21015C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21015C3,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21015C6[];
static  VTBL_ENTRY vtc_S21015C6[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
extern VTBL_ENTRY _ZTV8S21015C6[];
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C6[] = {
  {&(_ZTV8S21015C6[4]),  4,7},
  {&(_ZTV8S21015C6[7]),  7,7},
  {&(_tg__ZTV8S21015C3__8S21015C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
Class_Descriptor cd_S21015C6 = {  "S21015C6", // class name
  bases_S21015C6, 3,
  &(vtc_S21015C6[0]), // expected_vtbl_contents
  &(vtt_S21015C6[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S21015C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21015C6),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21015C6),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C2  : virtual S21015C3 , S21015C6 {
  int s21015c2f0:18;
  virtual  ~S21015C2(); // _ZN8S21015C2D2Ev
  S21015C2(); // tgen
};
//SIG(-1 S21015C2) C1{ VBC2{ VBC3{ m} BC4{ m FL}} BC5{ VBC2 FC6{ m}} vd Fi:18}


 S21015C2 ::~S21015C2(){ note_dtor("S21015C2", this);}
S21015C2 ::S21015C2(){ note_ctor("S21015C2", this);} // tgen

static void Test_S21015C2()
{
  extern Class_Descriptor cd_S21015C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S21015C2, buf);
    S21015C2 *dp, &lv = *(dp=new (buf) S21015C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S21015C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C2)");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*), 0, "S21015C2");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*), ABISELECT(24,12), "S21015C2");
    check_base_class_offset(lv, (S21015C3*), ABISELECT(16,8), "S21015C2");
    check_base_class_offset(lv, (S21015C3*)(S21015C6*), ABISELECT(16,8), "S21015C2");
    check_base_class_offset(lv, (S21015C6*), 0, "S21015C2");
    set_bf_and_test(lv, s21015c2f0, ABISELECT(9,5), 0, 18, 1, "S21015C2");
    set_bf_and_test(lv, s21015c2f0, ABISELECT(9,5), 0, 18, hide_sll(1LL<<17), "S21015C2");
    test_class_info(&lv, &cd_S21015C2);
    dp->~S21015C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C2(Test_S21015C2, "S21015C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S21015C2C1Ev();
extern void _ZN8S21015C2D2Ev();
Name_Map name_map_S21015C2[] = {
  NSPAIR(_ZN8S21015C2C1Ev),
  NSPAIR(_ZN8S21015C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C6;
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
static Base_Class bases_S21015C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21015C3,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21015C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21015C2[];
extern void _ZN8S21015C2D1Ev();
extern void _ZN8S21015C2D0Ev();
static  VTBL_ENTRY vtc_S21015C2[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C2[0]),
  (VTBL_ENTRY)&_ZN8S21015C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21015C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21015C2[0]),
};
extern VTBL_ENTRY _ZTV8S21015C2[];
static  VTBL_ENTRY _tg__ZTV8S21015C6__8S21015C2[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C6__8S21015C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C2[] = {
  {&(_ZTV8S21015C2[4]),  4,9},
  {&(_tg__ZTV8S21015C6__8S21015C2[4]),  4,4},
  {&(_tg__ZTV8S21015C3__8S21015C6__8S21015C2[3]),  3,3},
  {&(_ZTV8S21015C2[9]),  9,9},
  {&(_tg__ZTV8S21015C3__8S21015C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21015C2[];
extern  VTBL_ENTRY _ZTV8S21015C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C2[];
Class_Descriptor cd_S21015C2 = {  "S21015C2", // class name
  bases_S21015C2, 4,
  &(vtc_S21015C2[0]), // expected_vtbl_contents
  &(vtt_S21015C2[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S21015C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21015C2),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21015C2),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C10  : virtual S10180C20 , virtual S10180C93 , S21015C3 {
  ~S21015C10(); // tgen
  S21015C10(); // tgen
};
//SIG(-1 S21015C10) C1{ VBC2{ m} VBC3{ m FL} BC4{ VBC5{ m} BC3}}


S21015C10 ::~S21015C10(){ note_dtor("S21015C10", this);} // tgen
S21015C10 ::S21015C10(){ note_ctor("S21015C10", this);} // tgen

static void Test_S21015C10()
{
  extern Class_Descriptor cd_S21015C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S21015C10, buf);
    S21015C10 *dp, &lv = *(dp=new (buf) S21015C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S21015C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C10)");
    check_base_class_offset(lv, (S10180C20*), 0, "S21015C10");
    /*is_ambiguous_... S21015C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S21015C10");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*), 0, "S21015C10");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*), ABISELECT(8,4), "S21015C10");
    check_base_class_offset(lv, (S21015C3*), 0, "S21015C10");
    test_class_info(&lv, &cd_S21015C10);
    dp->~S21015C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C10(Test_S21015C10, "S21015C10", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN9S21015C10C1Ev();
extern void _ZN9S21015C10D1Ev();
Name_Map name_map_S21015C10[] = {
  NSPAIR(_ZN9S21015C10C1Ev),
  NSPAIR(_ZN9S21015C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
static Base_Class bases_S21015C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S21015C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21015C10[];
static  VTBL_ENTRY vtc_S21015C10[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C10[0]),
};
extern VTBL_ENTRY _ZTV9S21015C10[];
static  VTBL_ENTRY _tg__ZTV8S21015C3__9S21015C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C10[] = {
  {&(_ZTV9S21015C10[5]),  5,5},
  {&(_tg__ZTV8S21015C3__9S21015C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S21015C10[];
extern  VTBL_ENTRY _ZTV9S21015C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C10[];
Class_Descriptor cd_S21015C10 = {  "S21015C10", // class name
  bases_S21015C10, 5,
  &(vtc_S21015C10[0]), // expected_vtbl_contents
  &(vtt_S21015C10[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI9S21015C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21015C10),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21015C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C11  : S21015C6 {
  void *s21015c11f0;
  ~S21015C11(); // tgen
  S21015C11(); // tgen
};
//SIG(-1 S21015C11) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m FL}} FC6{ m}} Fp}


S21015C11 ::~S21015C11(){ note_dtor("S21015C11", this);} // tgen
S21015C11 ::S21015C11(){ note_ctor("S21015C11", this);} // tgen

static void Test_S21015C11()
{
  extern Class_Descriptor cd_S21015C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S21015C11, buf);
    S21015C11 *dp, &lv = *(dp=new (buf) S21015C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S21015C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C11)");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*), 0, "S21015C11");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*), ABISELECT(32,16), "S21015C11");
    check_base_class_offset(lv, (S21015C3*)(S21015C6*), ABISELECT(24,12), "S21015C11");
    check_base_class_offset(lv, (S21015C6*), 0, "S21015C11");
    check_field_offset(lv, s21015c11f0, ABISELECT(16,8), "S21015C11.s21015c11f0");
    test_class_info(&lv, &cd_S21015C11);
    dp->~S21015C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C11(Test_S21015C11, "S21015C11", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S21015C11C1Ev();
extern void _ZN9S21015C11D1Ev();
Name_Map name_map_S21015C11[] = {
  NSPAIR(_ZN9S21015C11C1Ev),
  NSPAIR(_ZN9S21015C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C6;
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
static Base_Class bases_S21015C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21015C3,    ABISELECT(24,12), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21015C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21015C11[];
static  VTBL_ENTRY vtc_S21015C11[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C11[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S21015C11[0]),
};
extern VTBL_ENTRY _ZTV9S21015C11[];
static  VTBL_ENTRY _tg__ZTV8S21015C6__9S21015C11[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C6__9S21015C11[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__9S21015C11[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C11[] = {
  {&(_ZTV9S21015C11[4]),  4,7},
  {&(_tg__ZTV8S21015C6__9S21015C11[4]),  4,4},
  {&(_tg__ZTV8S21015C3__8S21015C6__9S21015C11[3]),  3,3},
  {&(_ZTV9S21015C11[7]),  7,7},
  {&(_tg__ZTV8S21015C3__9S21015C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S21015C11[];
extern  VTBL_ENTRY _ZTV9S21015C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C11[];
Class_Descriptor cd_S21015C11 = {  "S21015C11", // class name
  bases_S21015C11, 4,
  &(vtc_S21015C11[0]), // expected_vtbl_contents
  &(vtt_S21015C11[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S21015C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21015C11),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21015C11),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C12  : virtual S10180C93 , S10180C20 , S21015C10 {
  ~S21015C12(); // tgen
  S21015C12(); // tgen
};
//SIG(-1 S21015C12) C1{ VBC2{ m FL} BC3{ m} BC4{ VBC3 VBC2 BC5{ VBC6{ m} BC2}}}


S21015C12 ::~S21015C12(){ note_dtor("S21015C12", this);} // tgen
S21015C12 ::S21015C12(){ note_ctor("S21015C12", this);} // tgen

static void Test_S21015C12()
{
  extern Class_Descriptor cd_S21015C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S21015C12, buf);
    S21015C12 *dp, &lv = *(dp=new (buf) S21015C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S21015C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C12)");
    /*is_ambiguous_... S21015C12::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S21015C12");
    /*is_ambiguous_... S21015C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C10*), ABISELECT(16,12), "S21015C12");
    /*is_ambiguous_... S21015C12::S10180C20 */ AMB_check_base_class_offset(lv, (S10180C20*), 0, "S21015C12");
    check_base_class_offset(lv, (S10180C20*)(S21015C10*), ABISELECT(24,20), "S21015C12");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*)(S21015C10*), 0, "S21015C12");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*)(S21015C10*), ABISELECT(8,4), "S21015C12");
    check_base_class_offset(lv, (S21015C3*)(S21015C10*), 0, "S21015C12");
    check_base_class_offset(lv, (S21015C10*), 0, "S21015C12");
    test_class_info(&lv, &cd_S21015C12);
    dp->~S21015C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C12(Test_S21015C12, "S21015C12", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN9S21015C12C1Ev();
extern void _ZN9S21015C12D1Ev();
Name_Map name_map_S21015C12[] = {
  NSPAIR(_ZN9S21015C12C1Ev),
  NSPAIR(_ZN9S21015C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C10;
extern VTBL_ENTRY _ZTI9S21015C10[];
extern  VTBL_ENTRY _ZTV9S21015C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C10[];
static Base_Class bases_S21015C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C20,    ABISELECT(24,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    5, //immediately_derived
  0, 0},
  {&cd_S21015C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21015C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21015C12[];
static  VTBL_ENTRY vtc_S21015C12[] = {
  ABISELECT(16,12),
  ABISELECT(24,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C12[0]),
};
extern VTBL_ENTRY _ZTV9S21015C12[];
static  VTBL_ENTRY _tg__ZTV9S21015C10__9S21015C12[] = {
  ABISELECT(16,12),
  ABISELECT(24,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C39S21015C10__9S21015C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C12[] = {
  {&(_ZTV9S21015C12[5]),  5,5},
  {&(_tg__ZTV9S21015C10__9S21015C12[5]),  5,5},
  {&(_tg__ZTV8S21015C39S21015C10__9S21015C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S21015C12[];
extern  VTBL_ENTRY _ZTV9S21015C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C12[];
Class_Descriptor cd_S21015C12 = {  "S21015C12", // class name
  bases_S21015C12, 7,
  &(vtc_S21015C12[0]), // expected_vtbl_contents
  &(vtt_S21015C12[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI9S21015C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21015C12),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21015C12),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C8  : virtual S10180C20 , S21015C10 , virtual S21015C6 , S21015C11 , virtual S21015C12 {
  ~S21015C8(); // tgen
  S21015C8(); // tgen
};
//SIG(-1 S21015C8) C1{ VBC2{ m} BC3{ VBC2 VBC4{ m FL} BC5{ VBC6{ m} BC4}} VBC7{ VBC5 FC8{ m}} BC9{ BC7 Fp} VBC10{ VBC4 BC2 BC3}}


S21015C8 ::~S21015C8(){ note_dtor("S21015C8", this);} // tgen
S21015C8 ::S21015C8(){ note_ctor("S21015C8", this);} // tgen

static void Test_S21015C8()
{
  extern Class_Descriptor cd_S21015C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S21015C8, buf);
    S21015C8 *dp, &lv = *(dp=new (buf) S21015C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S21015C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C8)");
    /*is_ambiguous_... S21015C8::S10180C20 */ AMB_check_base_class_offset(lv, (S10180C20*), 0, "S21015C8");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S10180C20*)(S21015C10*), 0, "S21015C8");
    check_base_class_offset(lv, (S10180C20*)(S21015C10*)(S21015C12*), 0, "S21015C8");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C10*), ABISELECT(40,24), "S21015C8");
    /*is_ambiguous_... S21015C12::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C12*), ABISELECT(40,24), "S21015C8");
    /*is_ambiguous_... S21015C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C10*)(S21015C12*), ABISELECT(40,24), "S21015C8");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S10180C138*)(S21015C3*)(S21015C10*), 0, "S21015C8");
    /*is_ambiguous_... S21015C8::S21015C3 */ AMB_check_base_class_offset(lv, (S10180C138*)(S21015C3*), 0, "S21015C8");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*)(S21015C10*)(S21015C12*), 0, "S21015C8");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C3*)(S21015C10*), ABISELECT(8,4), "S21015C8");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S21015C3*)(S21015C10*), 0, "S21015C8");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S21015C10*), 0, "S21015C8");
    /*is_ambiguous_... S21015C8::S21015C3 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C3*), ABISELECT(72,44), "S21015C8");
    /*is_ambiguous_... S21015C8::S21015C6 */ AMB_check_base_class_offset(lv, (S21015C3*)(S21015C6*), ABISELECT(64,40), "S21015C8");
    check_base_class_offset(lv, (S21015C3*)(S21015C6*)(S21015C11*), ABISELECT(64,40), "S21015C8");
    /*is_ambiguous_... S21015C8::S21015C6 */ AMB_check_base_class_offset(lv, (S21015C6*), ABISELECT(48,32), "S21015C8");
    check_base_class_offset(lv, (S21015C6*)(S21015C11*), ABISELECT(16,12), "S21015C8");
    check_base_class_offset(lv, (S21015C11*), ABISELECT(16,12), "S21015C8");
    /*is_ambiguous_... S21015C12::S10180C20 */ AMB_check_base_class_offset(lv, (S10180C20*)(S21015C12*), ABISELECT(80,52), "S21015C8");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*)(S21015C10*)(S21015C12*), ABISELECT(88,56), "S21015C8");
    check_base_class_offset(lv, (S21015C3*)(S21015C10*)(S21015C12*), ABISELECT(80,52), "S21015C8");
    check_base_class_offset(lv, (S21015C10*)(S21015C12*), ABISELECT(80,52), "S21015C8");
    check_base_class_offset(lv, (S21015C12*), ABISELECT(80,52), "S21015C8");
    test_class_info(&lv, &cd_S21015C8);
    dp->~S21015C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C8(Test_S21015C8, "S21015C8", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN8S21015C8C1Ev();
extern void _ZN8S21015C8D1Ev();
Name_Map name_map_S21015C8[] = {
  NSPAIR(_ZN8S21015C8C1Ev),
  NSPAIR(_ZN8S21015C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C10;
extern VTBL_ENTRY _ZTI9S21015C10[];
extern  VTBL_ENTRY _ZTV9S21015C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C10[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C6;
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
extern Class_Descriptor cd_S21015C6;
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
extern Class_Descriptor cd_S21015C11;
extern VTBL_ENTRY _ZTI9S21015C11[];
extern  VTBL_ENTRY _ZTV9S21015C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C11[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C10;
extern VTBL_ENTRY _ZTI9S21015C10[];
extern  VTBL_ENTRY _ZTV9S21015C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C10[];
extern Class_Descriptor cd_S21015C12;
extern VTBL_ENTRY _ZTI9S21015C12[];
extern  VTBL_ENTRY _ZTV9S21015C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C12[];
static Base_Class bases_S21015C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S21015C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21015C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C93,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S21015C3,    ABISELECT(64,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21015C6,    ABISELECT(48,32), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21015C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21015C11,    ABISELECT(16,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C20,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S21015C3,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21015C10,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21015C12,    ABISELECT(80,52), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21015C8[];
static  VTBL_ENTRY vtc_S21015C8[] = {
  ABISELECT(80,52),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(40,24),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C8[0]),
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21015C8[0]),
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21015C8[0]),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21015C8[0]),
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S21015C8[0]),
};
extern VTBL_ENTRY _ZTV8S21015C8[];
static  VTBL_ENTRY _tg__ZTV9S21015C10__8S21015C8[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C39S21015C10__8S21015C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C11__8S21015C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C69S21015C11__A1__8S21015C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C69S21015C11__A1__8S21015C8[] = {
  ABISELECT(-64,-40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__9S21015C11__8S21015C8[] = {
  ABISELECT(-64,-40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S21015C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C6__8S21015C8[] = {
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C6__8S21015C8[] = {
  ABISELECT(-64,-40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__A1__8S21015C8[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C12__8S21015C8[] = {
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C109S21015C12__A1__8S21015C8[] = {
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C39S21015C109S21015C12__A2__8S21015C8[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C8[] = {
  {&(_ZTV8S21015C8[8]),  8,24},
  {&(_tg__ZTV9S21015C10__8S21015C8[5]),  5,5},
  {&(_tg__ZTV8S21015C39S21015C10__8S21015C8[3]),  3,3},
  {&(_tg__ZTV9S21015C11__8S21015C8[4]),  4,4},
  {&(_tg__ZTV8S21015C69S21015C11__A1__8S21015C8[4]),  4,4},
  {&(_tg__ZTV8S21015C3__8S21015C69S21015C11__A1__8S21015C8[3]),  3,3},
  {&(_tg__ZTV8S21015C3__9S21015C11__8S21015C8[3]),  3,3},
  {&(_ZTV8S21015C8[16]),  16,24},
  {&(_ZTV8S21015C8[19]),  19,24},
  {&(_ZTV8S21015C8[12]),  12,24},
  {&(_ZTV8S21015C8[24]),  24,24},
  {&(_tg__ZTV8S21015C6__8S21015C8[4]),  4,4},
  {&(_tg__ZTV8S21015C3__8S21015C6__8S21015C8[3]),  3,3},
  {&(_tg__ZTV8S21015C3__A1__8S21015C8[3]),  3,3},
  {&(_tg__ZTV9S21015C12__8S21015C8[5]),  5,5},
  {&(_tg__ZTV9S21015C109S21015C12__A1__8S21015C8[5]),  5,5},
  {&(_tg__ZTV8S21015C39S21015C109S21015C12__A2__8S21015C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21015C8[];
extern  VTBL_ENTRY _ZTV8S21015C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C8[];
Class_Descriptor cd_S21015C8 = {  "S21015C8", // class name
  bases_S21015C8, 16,
  &(vtc_S21015C8[0]), // expected_vtbl_contents
  &(vtt_S21015C8[0]), // expected_vtt_contents
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI8S21015C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21015C8),24, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21015C8),17, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C16  : virtual S10180C133 , S10180C138 , virtual S21015C2 , S10180C93 {
  ~S21015C16(); // tgen
  S21015C16(); // tgen
};
//SIG(-1 S21015C16) C1{ VBC2{ m} BC3{ m} VBC4{ VBC5{ VBC3 BC6{ m FL}} BC7{ VBC5 FC2} vd Fi:18} BC6}


S21015C16 ::~S21015C16(){ note_dtor("S21015C16", this);} // tgen
S21015C16 ::S21015C16(){ note_ctor("S21015C16", this);} // tgen

static void Test_S21015C16()
{
  extern Class_Descriptor cd_S21015C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S21015C16, buf);
    S21015C16 *dp, &lv = *(dp=new (buf) S21015C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S21015C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C16)");
    check_base_class_offset(lv, (S10180C133*), 0, "S21015C16");
    /*is_ambiguous_... S21015C16::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*), 0, "S21015C16");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*), ABISELECT(48,32), "S21015C16");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*), ABISELECT(40,24), "S21015C16");
    check_base_class_offset(lv, (S21015C3*)(S21015C2*), ABISELECT(32,20), "S21015C16");
    check_base_class_offset(lv, (S21015C3*)(S21015C6*)(S21015C2*), ABISELECT(32,20), "S21015C16");
    check_base_class_offset(lv, (S21015C6*)(S21015C2*), ABISELECT(16,12), "S21015C16");
    check_base_class_offset(lv, (S21015C2*), ABISELECT(16,12), "S21015C16");
    /*is_ambiguous_... S21015C16::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S21015C16");
    test_class_info(&lv, &cd_S21015C16);
    dp->~S21015C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C16(Test_S21015C16, "S21015C16", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN9S21015C16C1Ev();
extern void _ZN9S21015C16D1Ev();
Name_Map name_map_S21015C16[] = {
  NSPAIR(_ZN9S21015C16C1Ev),
  NSPAIR(_ZN9S21015C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C6;
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
extern Class_Descriptor cd_S21015C2;
extern VTBL_ENTRY _ZTI8S21015C2[];
extern  VTBL_ENTRY _ZTV8S21015C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C2[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S21015C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C138,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S21015C3,    ABISELECT(32,20), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21015C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21015C2,    ABISELECT(16,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S21015C16[];
extern void _ZN9S21015C16D1Ev();
extern void _ZN9S21015C16D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S21015C16D1Ev,_ZTv0_n20_N9S21015C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S21015C16D1Ev,_ZThn12_N9S21015C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21015C16D0Ev,_ZTv0_n20_N9S21015C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S21015C16D0Ev,_ZThn12_N9S21015C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21015C16[] = {
  ABISELECT(48,32),
  ABISELECT(32,20),
  ABISELECT(16,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C16[0]),
  (VTBL_ENTRY)&_ZN9S21015C16D1Ev,
  (VTBL_ENTRY)&_ZN9S21015C16D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(32,20),
  ABISELECT(16,8),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21015C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21015C16D1Ev,_ZTv0_n20_N9S21015C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21015C16D0Ev,_ZTv0_n20_N9S21015C16D0Ev),
  ABISELECT(16,12),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S21015C16[0]),
};
extern VTBL_ENTRY _ZTV9S21015C16[];
extern void _ZN8S21015C2D1Ev();
extern void _ZN8S21015C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21015C2__9S21015C16[] = {
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C2[0]),
  (VTBL_ENTRY)&_ZN8S21015C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21015C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21015C68S21015C2__9S21015C16[] = {
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C68S21015C2__9S21015C16[] = {
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C2__9S21015C16[] = {
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21015C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__9S21015C16[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C16[] = {
  {&(_ZTV9S21015C16[6]),  6,18},
  {&(_ZTV9S21015C16[13]),  13,18},
  {&(_ZTV9S21015C16[18]),  18,18},
  {&(_tg__ZTV8S21015C2__9S21015C16[4]),  4,6},
  {&(_tg__ZTV8S21015C68S21015C2__9S21015C16[4]),  4,4},
  {&(_tg__ZTV8S21015C3__8S21015C68S21015C2__9S21015C16[3]),  3,3},
  {&(_tg__ZTV8S21015C3__8S21015C2__9S21015C16[3]),  3,3},
  {&(_tg__ZTV8S21015C3__9S21015C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S21015C16[];
extern  VTBL_ENTRY _ZTV9S21015C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C16[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21015C16D0Ev,_ZTv0_n20_N9S21015C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21015C16D0Ev,_ZThn12_N9S21015C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21015C16D1Ev,_ZTv0_n20_N9S21015C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21015C16D1Ev,_ZThn12_N9S21015C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21015C16 = {  "S21015C16", // class name
  bases_S21015C16, 8,
  &(vtc_S21015C16[0]), // expected_vtbl_contents
  &(vtt_S21015C16[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI9S21015C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21015C16),18, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21015C16),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C15  : S10180C20 , virtual S21015C3 , virtual S21015C2 , virtual S21015C16 , virtual S21015C10 {
  void *s21015c15f0[9];
  ~S21015C15(); // tgen
  S21015C15(); // tgen
};
//SIG(-1 S21015C15) C1{ BC2{ m} VBC3{ VBC4{ m} BC5{ m FL}} VBC6{ VBC3 BC7{ VBC3 FC8{ m}} vd Fi:18} VBC9{ VBC8 BC4 VBC6 BC5} VBC10{ VBC2 VBC5 BC3} Fp[9]}


S21015C15 ::~S21015C15(){ note_dtor("S21015C15", this);} // tgen
S21015C15 ::S21015C15(){ note_ctor("S21015C15", this);} // tgen

static void Test_S21015C15()
{
  extern Class_Descriptor cd_S21015C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,24)];
    init_test(&cd_S21015C15, buf);
    S21015C15 *dp, &lv = *(dp=new (buf) S21015C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,92), "sizeof(S21015C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C15)");
    /*is_ambiguous_... S21015C15::S10180C20 */ AMB_check_base_class_offset(lv, (S10180C20*), 0, "S21015C15");
    /*is_ambiguous_... S21015C15::S21015C3 */ AMB_check_base_class_offset(lv, (S10180C138*)(S21015C3*), 0, "S21015C15");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*)(S21015C10*), 0, "S21015C15");
    /*is_ambiguous_... S21015C15::S21015C3 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C3*), ABISELECT(88,44), "S21015C15");
    /*is_ambiguous_... S21015C15::S21015C3 */ AMB_check_base_class_offset(lv, (S21015C3*), ABISELECT(80,40), "S21015C15");
    check_base_class_offset(lv, (S21015C3*)(S21015C2*), ABISELECT(80,40), "S21015C15");
    check_base_class_offset(lv, (S21015C3*)(S21015C6*)(S21015C2*), ABISELECT(80,40), "S21015C15");
    check_base_class_offset(lv, (S21015C6*)(S21015C2*), ABISELECT(96,52), "S21015C15");
    check_base_class_offset(lv, (S21015C2*), ABISELECT(96,52), "S21015C15");
    check_base_class_offset(lv, (S21015C2*)(S21015C16*), ABISELECT(96,52), "S21015C15");
    check_base_class_offset(lv, (S10180C133*)(S21015C16*), 0, "S21015C15");
    /*is_ambiguous_... S21015C16::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S21015C16*), ABISELECT(112,60), "S21015C15");
    /*is_ambiguous_... S21015C16::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C16*), ABISELECT(120,64), "S21015C15");
    check_base_class_offset(lv, (S21015C16*), ABISELECT(112,60), "S21015C15");
    check_base_class_offset(lv, (S10180C20*)(S21015C10*), ABISELECT(144,84), "S21015C15");
    /*is_ambiguous_... S21015C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C10*), ABISELECT(144,84), "S21015C15");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*)(S21015C10*), ABISELECT(136,76), "S21015C15");
    check_base_class_offset(lv, (S21015C3*)(S21015C10*), ABISELECT(128,72), "S21015C15");
    check_base_class_offset(lv, (S21015C10*), ABISELECT(128,72), "S21015C15");
    check_field_offset(lv, s21015c15f0, ABISELECT(8,4), "S21015C15.s21015c15f0");
    test_class_info(&lv, &cd_S21015C15);
    dp->~S21015C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C15(Test_S21015C15, "S21015C15", ABISELECT(152,92));

#else // __cplusplus

extern void _ZN9S21015C15C1Ev();
extern void _ZN9S21015C15D1Ev();
Name_Map name_map_S21015C15[] = {
  NSPAIR(_ZN9S21015C15C1Ev),
  NSPAIR(_ZN9S21015C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C6;
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
extern Class_Descriptor cd_S21015C2;
extern VTBL_ENTRY _ZTI8S21015C2[];
extern  VTBL_ENTRY _ZTV8S21015C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C2[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C16;
extern VTBL_ENTRY _ZTI9S21015C16[];
extern  VTBL_ENTRY _ZTV9S21015C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C16[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C10;
extern VTBL_ENTRY _ZTI9S21015C10[];
extern  VTBL_ENTRY _ZTV9S21015C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C10[];
static Base_Class bases_S21015C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21015C3,    ABISELECT(80,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21015C6,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21015C2,    ABISELECT(96,52), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S21015C16,    ABISELECT(112,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C20,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(136,76), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S21015C3,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21015C10,    ABISELECT(128,72), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21015C15[];
extern void _ZN9S21015C15D1Ev();
extern void _ZN9S21015C15D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S21015C15D1Ev,_ZTv0_n20_N9S21015C15D1Ev)();
extern void ABISELECT(_ZThn96_N9S21015C15D1Ev,_ZThn52_N9S21015C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21015C15D0Ev,_ZTv0_n20_N9S21015C15D0Ev)();
extern void ABISELECT(_ZThn96_N9S21015C15D0Ev,_ZThn52_N9S21015C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S21015C15D1Ev,_ZTv0_n28_N9S21015C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S21015C15D1Ev,_ZThn60_N9S21015C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S21015C15D0Ev,_ZTv0_n28_N9S21015C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S21015C15D0Ev,_ZThn60_N9S21015C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21015C15[] = {
  ABISELECT(144,84),
  ABISELECT(144,84),
  ABISELECT(128,72),
  0,
  ABISELECT(112,60),
  ABISELECT(96,52),
  0,
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C15[0]),
  (VTBL_ENTRY)&_ZN9S21015C15D1Ev,
  (VTBL_ENTRY)&_ZN9S21015C15D0Ev,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S21015C15[0]),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S21015C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21015C15D1Ev,_ZTv0_n20_N9S21015C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21015C15D0Ev,_ZTv0_n20_N9S21015C15D0Ev),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S21015C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21015C15D1Ev,_ZTv0_n28_N9S21015C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S21015C15D0Ev,_ZTv0_n28_N9S21015C15D0Ev),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI9S21015C15[0]),
};
extern VTBL_ENTRY _ZTV9S21015C15[];
static  VTBL_ENTRY _tg__ZTV8S21015C3__9S21015C15[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
extern void _ZN8S21015C2D1Ev();
extern void _ZN8S21015C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21015C2__9S21015C15[] = {
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C2[0]),
  (VTBL_ENTRY)&_ZN8S21015C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21015C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21015C68S21015C2__9S21015C15[] = {
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C68S21015C2__9S21015C15[] = {
  ABISELECT(-80,-40),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C2__9S21015C15[] = {
  ABISELECT(-80,-40),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21015C2[0]),
};
extern void _ZN9S21015C16D1Ev();
extern void _ZN9S21015C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21015C16__9S21015C15[] = {
  ABISELECT(-112,-60),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C16[0]),
  (VTBL_ENTRY)&_ZN9S21015C16D1Ev,
  (VTBL_ENTRY)&_ZN9S21015C16D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21015C16D1Ev,_ZTv0_n20_N9S21015C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21015C16D0Ev,_ZTv0_n20_N9S21015C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21015C2__9S21015C16__9S21015C15[] = {
  ABISELECT(16,8),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S21015C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21015C16D1Ev,_ZTv0_n20_N9S21015C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21015C16D0Ev,_ZTv0_n20_N9S21015C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__9S21015C16__9S21015C15[] = {
  ABISELECT(-80,-40),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S21015C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C10__9S21015C15[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C39S21015C10__A1__9S21015C15[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C15[] = {
  {&(_ZTV9S21015C15[10]),  10,36},
  {&(_ZTV9S21015C15[15]),  15,36},
  {&(_ZTV9S21015C15[20]),  20,36},
  {&(_ZTV9S21015C15[29]),  29,36},
  {&(_ZTV9S21015C15[36]),  36,36},
  {&(_tg__ZTV8S21015C3__9S21015C15[3]),  3,3},
  {&(_tg__ZTV8S21015C2__9S21015C15[4]),  4,6},
  {&(_tg__ZTV8S21015C68S21015C2__9S21015C15[4]),  4,4},
  {&(_tg__ZTV8S21015C3__8S21015C68S21015C2__9S21015C15[3]),  3,3},
  {&(_tg__ZTV8S21015C3__8S21015C2__9S21015C15[3]),  3,3},
  {&(_tg__ZTV9S21015C16__9S21015C15[6]),  6,8},
  {&(_tg__ZTV8S21015C2__9S21015C16__9S21015C15[5]),  5,7},
  {&(_tg__ZTV8S21015C3__9S21015C16__9S21015C15[3]),  3,3},
  {&(_tg__ZTV9S21015C10__9S21015C15[5]),  5,5},
  {&(_tg__ZTV8S21015C39S21015C10__A1__9S21015C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S21015C15[];
extern  VTBL_ENTRY _ZTV9S21015C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C15[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S21015C15D0Ev,_ZTv0_n28_N9S21015C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21015C15D0Ev,_ZThn60_N9S21015C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S21015C15D1Ev,_ZTv0_n28_N9S21015C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S21015C15D1Ev,_ZThn60_N9S21015C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21015C15D0Ev,_ZTv0_n20_N9S21015C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S21015C15D0Ev,_ZThn52_N9S21015C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21015C15D1Ev,_ZTv0_n20_N9S21015C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S21015C15D1Ev,_ZThn52_N9S21015C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21015C15 = {  "S21015C15", // class name
  bases_S21015C15, 15,
  &(vtc_S21015C15[0]), // expected_vtbl_contents
  &(vtt_S21015C15[0]), // expected_vtt_contents
  ABISELECT(152,92), // object size
  NSPAIRA(_ZTI9S21015C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S21015C15),36, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21015C15),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C14  {
  ::S21015C15 s21015c14f0;
  void  mf21015c14(); // _ZN9S21015C1410mf21015c14Ev
};
//SIG(-1 S21015C14) C1{ m FC2{ BC3{ m} VBC4{ VBC5{ m} BC6{ m FL}} VBC7{ VBC4 BC8{ VBC4 FC9{ m}} vd Fi:18} VBC10{ VBC9 BC5 VBC7 BC6} VBC11{ VBC3 VBC6 BC4} Fp[9]}}


void  S21015C14 ::mf21015c14(){}

static void Test_S21015C14()
{
  {
    init_simple_test("S21015C14");
    static S21015C14 lv;
    check2(sizeof(lv), ABISELECT(152,92), "sizeof(S21015C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C14)");
    check_field_offset(lv, s21015c14f0, 0, "S21015C14.s21015c14f0");
  }
}
static Arrange_To_Call_Me vS21015C14(Test_S21015C14, "S21015C14", ABISELECT(152,92));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S21015C14[];
VTBL_ENTRY *P__ZTI9S21015C14 = _ZTI9S21015C14; 
Class_Descriptor cd_S21015C14 = {  "S21015C14", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(152,92), // object size
  NSPAIRA(_ZTI9S21015C14),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C18  : S21015C10 {
  ~S21015C18(); // tgen
  S21015C18(); // tgen
};
//SIG(-1 S21015C18) C1{ BC2{ VBC3{ m} VBC4{ m FL} BC5{ VBC6{ m} BC4}}}


S21015C18 ::~S21015C18(){ note_dtor("S21015C18", this);} // tgen
S21015C18 ::S21015C18(){ note_ctor("S21015C18", this);} // tgen

static void Test_S21015C18()
{
  extern Class_Descriptor cd_S21015C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S21015C18, buf);
    S21015C18 *dp, &lv = *(dp=new (buf) S21015C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S21015C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C18)");
    check_base_class_offset(lv, (S10180C20*)(S21015C10*), 0, "S21015C18");
    /*is_ambiguous_... S21015C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C10*), ABISELECT(16,12), "S21015C18");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*)(S21015C10*), 0, "S21015C18");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*)(S21015C10*), ABISELECT(8,4), "S21015C18");
    check_base_class_offset(lv, (S21015C3*)(S21015C10*), 0, "S21015C18");
    check_base_class_offset(lv, (S21015C10*), 0, "S21015C18");
    test_class_info(&lv, &cd_S21015C18);
    dp->~S21015C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C18(Test_S21015C18, "S21015C18", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN9S21015C18C1Ev();
extern void _ZN9S21015C18D1Ev();
Name_Map name_map_S21015C18[] = {
  NSPAIR(_ZN9S21015C18C1Ev),
  NSPAIR(_ZN9S21015C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C10;
extern VTBL_ENTRY _ZTI9S21015C10[];
extern  VTBL_ENTRY _ZTV9S21015C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C10[];
static Base_Class bases_S21015C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S21015C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21015C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21015C18[];
static  VTBL_ENTRY vtc_S21015C18[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C18[0]),
};
extern VTBL_ENTRY _ZTV9S21015C18[];
static  VTBL_ENTRY _tg__ZTV9S21015C10__9S21015C18[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C39S21015C10__9S21015C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C18[] = {
  {&(_ZTV9S21015C18[5]),  5,5},
  {&(_tg__ZTV9S21015C10__9S21015C18[5]),  5,5},
  {&(_tg__ZTV8S21015C39S21015C10__9S21015C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S21015C18[];
extern  VTBL_ENTRY _ZTV9S21015C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C18[];
Class_Descriptor cd_S21015C18 = {  "S21015C18", // class name
  bases_S21015C18, 6,
  &(vtc_S21015C18[0]), // expected_vtbl_contents
  &(vtt_S21015C18[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI9S21015C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21015C18),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21015C18),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C17  : virtual S21015C18 , virtual S21015C6 {
  int s21015c17f0;
  ~S21015C17(); // tgen
  S21015C17(); // tgen
};
//SIG(-1 S21015C17) C1{ VBC2{ BC3{ VBC4{ m} VBC5{ m FL} BC6{ VBC7{ m} BC5}}} VBC8{ VBC6 FC9{ m}} Fi}


S21015C17 ::~S21015C17(){ note_dtor("S21015C17", this);} // tgen
S21015C17 ::S21015C17(){ note_ctor("S21015C17", this);} // tgen

static void Test_S21015C17()
{
  extern Class_Descriptor cd_S21015C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S21015C17, buf);
    S21015C17 *dp, &lv = *(dp=new (buf) S21015C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S21015C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C17)");
    check_base_class_offset(lv, (S10180C20*)(S21015C10*)(S21015C18*), 0, "S21015C17");
    /*is_ambiguous_... S21015C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C10*)(S21015C18*), ABISELECT(32,20), "S21015C17");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*)(S21015C10*)(S21015C18*), 0, "S21015C17");
    /*is_ambiguous_... S21015C17::S21015C3 */ AMB_check_base_class_offset(lv, (S10180C138*)(S21015C3*), 0, "S21015C17");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*)(S21015C10*)(S21015C18*), ABISELECT(24,12), "S21015C17");
    check_base_class_offset(lv, (S21015C3*)(S21015C10*)(S21015C18*), ABISELECT(16,8), "S21015C17");
    check_base_class_offset(lv, (S21015C10*)(S21015C18*), ABISELECT(16,8), "S21015C17");
    check_base_class_offset(lv, (S21015C18*), ABISELECT(16,8), "S21015C17");
    /*is_ambiguous_... S21015C17::S21015C3 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C3*), ABISELECT(64,40), "S21015C17");
    check_base_class_offset(lv, (S21015C3*)(S21015C6*), ABISELECT(56,36), "S21015C17");
    check_base_class_offset(lv, (S21015C6*), ABISELECT(40,28), "S21015C17");
    check_field_offset(lv, s21015c17f0, ABISELECT(8,4), "S21015C17.s21015c17f0");
    test_class_info(&lv, &cd_S21015C17);
    dp->~S21015C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C17(Test_S21015C17, "S21015C17", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN9S21015C17C1Ev();
extern void _ZN9S21015C17D1Ev();
Name_Map name_map_S21015C17[] = {
  NSPAIR(_ZN9S21015C17C1Ev),
  NSPAIR(_ZN9S21015C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C10;
extern VTBL_ENTRY _ZTI9S21015C10[];
extern  VTBL_ENTRY _ZTV9S21015C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C10[];
extern Class_Descriptor cd_S21015C18;
extern VTBL_ENTRY _ZTI9S21015C18[];
extern  VTBL_ENTRY _ZTV9S21015C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C18[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C6;
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
static Base_Class bases_S21015C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S21015C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21015C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21015C18,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C93,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S21015C3,    ABISELECT(56,36), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21015C6,    ABISELECT(40,28), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21015C17[];
static  VTBL_ENTRY vtc_S21015C17[] = {
  ABISELECT(56,36),
  ABISELECT(40,28),
  0,
  ABISELECT(32,20),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C17[0]),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21015C17[0]),
  ABISELECT(-40,-28),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI9S21015C17[0]),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S21015C17[0]),
};
extern VTBL_ENTRY _ZTV9S21015C17[];
static  VTBL_ENTRY _tg__ZTV9S21015C18__9S21015C17[] = {
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C109S21015C18__9S21015C17[] = {
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C39S21015C109S21015C18__9S21015C17[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C6__9S21015C17[] = {
  ABISELECT(-40,-28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C6__9S21015C17[] = {
  ABISELECT(-56,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__A1__9S21015C17[] = {
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C17[] = {
  {&(_ZTV9S21015C17[8]),  8,20},
  {&(_ZTV9S21015C17[13]),  13,20},
  {&(_ZTV9S21015C17[17]),  17,20},
  {&(_ZTV9S21015C17[20]),  20,20},
  {&(_tg__ZTV9S21015C18__9S21015C17[5]),  5,5},
  {&(_tg__ZTV9S21015C109S21015C18__9S21015C17[5]),  5,5},
  {&(_tg__ZTV8S21015C39S21015C109S21015C18__9S21015C17[3]),  3,3},
  {&(_tg__ZTV8S21015C6__9S21015C17[4]),  4,4},
  {&(_tg__ZTV8S21015C3__8S21015C6__9S21015C17[3]),  3,3},
  {&(_tg__ZTV8S21015C3__A1__9S21015C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S21015C17[];
extern  VTBL_ENTRY _ZTV9S21015C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C17[];
Class_Descriptor cd_S21015C17 = {  "S21015C17", // class name
  bases_S21015C17, 10,
  &(vtc_S21015C17[0]), // expected_vtbl_contents
  &(vtt_S21015C17[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI9S21015C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21015C17),20, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21015C17),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21015C1  : virtual S21015C2 , virtual S21015C8 , S10180C114 , virtual S21015C14 , S21015C17 {
  void *s21015c1f0;
  ::S21015C12 s21015c1f1;
  ~S21015C1(); // tgen
  S21015C1(); // tgen
};
//SIG(1 S21015C1) C1{ VBC2{ VBC3{ VBC4{ m} BC5{ m FL}} BC6{ VBC3 FC7{ m}} vd Fi:18} VBC8{ VBC9{ m} BC10{ VBC9 VBC5 BC3} VBC6 BC11{ BC6 Fp} VBC12{ VBC5 BC9 BC10}} BC13{ m Fp} VBC14{ m FC15{ BC9 VBC3 VBC2 VBC16{ VBC7 BC4 VBC2 BC5} VBC10 Fp[9]}} BC17{ VBC18{ BC10} VBC6 Fi} Fp FC12}


S21015C1 ::~S21015C1(){ note_dtor("S21015C1", this);} // tgen
S21015C1 ::S21015C1(){ note_ctor("S21015C1", this);} // tgen

static void Test_S21015C1()
{
  extern Class_Descriptor cd_S21015C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,55)];
    init_test(&cd_S21015C1, buf);
    S21015C1 *dp, &lv = *(dp=new (buf) S21015C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,216), "sizeof(S21015C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21015C1)");
    /*is_ambiguous_... S21015C1::S21015C3 */ AMB_check_base_class_offset(lv, (S10180C138*)(S21015C3*), 0, "S21015C1");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S10180C138*)(S21015C3*)(S21015C10*)(S21015C8*), 0, "S21015C1");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*)(S21015C10*)(S21015C12*), 0, "S21015C1");
    check_base_class_offset(lv, (S10180C138*)(S21015C3*)(S21015C10*)(S21015C18*), 0, "S21015C1");
    /*is_ambiguous_... S21015C1::S21015C3 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C3*), ABISELECT(88,52), "S21015C1");
    check_base_class_offset(lv, (S21015C3*)(S21015C2*), ABISELECT(80,48), "S21015C1");
    check_base_class_offset(lv, (S21015C3*)(S21015C6*)(S21015C2*), ABISELECT(80,48), "S21015C1");
    /*is_ambiguous_... S21015C1::S21015C6 */ AMB_check_base_class_offset(lv, (S21015C3*)(S21015C6*), ABISELECT(80,48), "S21015C1");
    check_base_class_offset(lv, (S21015C3*)(S21015C6*)(S21015C11*)(S21015C8*), ABISELECT(80,48), "S21015C1");
    check_base_class_offset(lv, (S21015C6*)(S21015C2*), ABISELECT(64,40), "S21015C1");
    check_base_class_offset(lv, (S21015C2*), ABISELECT(64,40), "S21015C1");
    /*is_ambiguous_... S21015C8::S10180C20 */ AMB_check_base_class_offset(lv, (S10180C20*)(S21015C8*), 0, "S21015C1");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S10180C20*)(S21015C10*)(S21015C8*), 0, "S21015C1");
    check_base_class_offset(lv, (S10180C20*)(S21015C10*)(S21015C12*), 0, "S21015C1");
    check_base_class_offset(lv, (S10180C20*)(S21015C10*)(S21015C18*), 0, "S21015C1");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C10*)(S21015C8*), ABISELECT(136,84), "S21015C1");
    /*is_ambiguous_... S21015C12::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C12*), ABISELECT(136,84), "S21015C1");
    /*is_ambiguous_... S21015C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C10*)(S21015C12*), ABISELECT(136,84), "S21015C1");
    /*is_ambiguous_... S21015C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C10*)(S21015C18*), ABISELECT(136,84), "S21015C1");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S10180C93*)(S21015C3*)(S21015C10*)(S21015C8*), ABISELECT(104,64), "S21015C1");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S21015C3*)(S21015C10*)(S21015C8*), ABISELECT(96,60), "S21015C1");
    /*is_ambiguous_... S21015C8::S21015C10 */ AMB_check_base_class_offset(lv, (S21015C10*)(S21015C8*), ABISELECT(96,60), "S21015C1");
    /*is_ambiguous_... S21015C8::S21015C6 */ AMB_check_base_class_offset(lv, (S21015C6*)(S21015C8*), ABISELECT(144,92), "S21015C1");
    check_base_class_offset(lv, (S21015C6*)(S21015C17*), ABISELECT(144,92), "S21015C1");
    check_base_class_offset(lv, (S21015C6*)(S21015C11*)(S21015C8*), ABISELECT(112,72), "S21015C1");
    check_base_class_offset(lv, (S21015C11*)(S21015C8*), ABISELECT(112,72), "S21015C1");
    /*is_ambiguous_... S21015C12::S10180C20 */ AMB_check_base_class_offset(lv, (S10180C20*)(S21015C12*), ABISELECT(160,100), "S21015C1");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*)(S21015C10*)(S21015C12*), ABISELECT(168,104), "S21015C1");
    check_base_class_offset(lv, (S21015C3*)(S21015C10*)(S21015C12*), ABISELECT(160,100), "S21015C1");
    check_base_class_offset(lv, (S21015C10*)(S21015C12*), ABISELECT(160,100), "S21015C1");
    check_base_class_offset(lv, (S21015C12*)(S21015C8*), ABISELECT(160,100), "S21015C1");
    check_base_class_offset(lv, (S21015C8*), ABISELECT(96,60), "S21015C1");
    check_base_class_offset(lv, (S10180C114*), ABISELECT(16,8), "S21015C1");
    check_base_class_offset(lv, (S21015C14*), ABISELECT(176,112), "S21015C1");
    check_base_class_offset(lv, (S10180C93*)(S21015C3*)(S21015C10*)(S21015C18*), ABISELECT(336,208), "S21015C1");
    check_base_class_offset(lv, (S21015C3*)(S21015C10*)(S21015C18*), ABISELECT(328,204), "S21015C1");
    check_base_class_offset(lv, (S21015C10*)(S21015C18*), ABISELECT(328,204), "S21015C1");
    check_base_class_offset(lv, (S21015C18*)(S21015C17*), ABISELECT(328,204), "S21015C1");
    check_base_class_offset(lv, (S21015C17*), 0, "S21015C1");
    check_field_offset(lv, s21015c1f0, ABISELECT(24,12), "S21015C1.s21015c1f0");
    check_field_offset(lv, s21015c1f1, ABISELECT(32,16), "S21015C1.s21015c1f1");
    test_class_info(&lv, &cd_S21015C1);
    dp->~S21015C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21015C1(Test_S21015C1, "S21015C1", ABISELECT(344,216));

#else // __cplusplus

extern void _ZN8S21015C1C1Ev();
extern void _ZN8S21015C1D1Ev();
Name_Map name_map_S21015C1[] = {
  NSPAIR(_ZN8S21015C1C1Ev),
  NSPAIR(_ZN8S21015C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C6;
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
extern Class_Descriptor cd_S21015C2;
extern VTBL_ENTRY _ZTI8S21015C2[];
extern  VTBL_ENTRY _ZTV8S21015C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C2[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C10;
extern VTBL_ENTRY _ZTI9S21015C10[];
extern  VTBL_ENTRY _ZTV9S21015C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C10[];
extern Class_Descriptor cd_S21015C6;
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
extern Class_Descriptor cd_S21015C6;
extern VTBL_ENTRY _ZTI8S21015C6[];
extern  VTBL_ENTRY _ZTV8S21015C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C6[];
extern Class_Descriptor cd_S21015C11;
extern VTBL_ENTRY _ZTI9S21015C11[];
extern  VTBL_ENTRY _ZTV9S21015C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C11[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C10;
extern VTBL_ENTRY _ZTI9S21015C10[];
extern  VTBL_ENTRY _ZTV9S21015C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C10[];
extern Class_Descriptor cd_S21015C12;
extern VTBL_ENTRY _ZTI9S21015C12[];
extern  VTBL_ENTRY _ZTV9S21015C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C12[];
extern Class_Descriptor cd_S21015C8;
extern VTBL_ENTRY _ZTI8S21015C8[];
extern  VTBL_ENTRY _ZTV8S21015C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C8[];
extern Class_Descriptor cd_S10180C114;
extern VTBL_ENTRY _ZTI10S10180C114[];
extern Class_Descriptor cd_S21015C14;
extern VTBL_ENTRY _ZTI9S21015C14[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S21015C3;
extern VTBL_ENTRY _ZTI8S21015C3[];
extern  VTBL_ENTRY _ZTV8S21015C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C3[];
extern Class_Descriptor cd_S21015C10;
extern VTBL_ENTRY _ZTI9S21015C10[];
extern  VTBL_ENTRY _ZTV9S21015C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C10[];
extern Class_Descriptor cd_S21015C18;
extern VTBL_ENTRY _ZTI9S21015C18[];
extern  VTBL_ENTRY _ZTV9S21015C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C18[];
extern Class_Descriptor cd_S21015C17;
extern VTBL_ENTRY _ZTI9S21015C17[];
extern  VTBL_ENTRY _ZTV9S21015C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21015C17[];
static Base_Class bases_S21015C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(88,52), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21015C3,    ABISELECT(80,48), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21015C6,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21015C2,    ABISELECT(64,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(104,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S21015C3,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21015C10,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21015C6,    ABISELECT(144,92), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S21015C6,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21015C11,    ABISELECT(112,72), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S10180C20,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(168,104), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S21015C3,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S21015C10,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S21015C12,    ABISELECT(160,100), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S21015C8,    ABISELECT(96,60), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C114,    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},
  {&cd_S21015C14,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(336,208), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S21015C3,    ABISELECT(328,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S21015C10,    ABISELECT(328,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S21015C18,    ABISELECT(328,204), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S21015C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21015C1[];
extern void _ZN8S21015C1D1Ev();
extern void _ZN8S21015C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21015C1D1Ev,_ZTv0_n20_N8S21015C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S21015C1D1Ev,_ZThn40_N8S21015C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21015C1D0Ev,_ZTv0_n20_N8S21015C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S21015C1D0Ev,_ZThn40_N8S21015C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21015C1[] = {
  ABISELECT(176,112),
  ABISELECT(160,100),
  ABISELECT(96,60),
  ABISELECT(64,40),
  ABISELECT(80,48),
  ABISELECT(144,92),
  0,
  ABISELECT(136,84),
  0,
  ABISELECT(328,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C1[0]),
  (VTBL_ENTRY)&_ZN8S21015C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21015C1D0Ev,
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21015C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21015C1D1Ev,_ZTv0_n20_N8S21015C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21015C1D0Ev,_ZTv0_n20_N8S21015C1D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S21015C1[0]),
  ABISELECT(64,40),
  ABISELECT(-16,-12),
  ABISELECT(48,32),
  ABISELECT(40,24),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S21015C1[0]),
  ABISELECT(-112,-72),
  ABISELECT(-32,-24),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S21015C1[0]),
  ABISELECT(-144,-92),
  ABISELECT(-64,-44),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S21015C1[0]),
  ABISELECT(-24,-16),
  ABISELECT(-160,-100),
  ABISELECT(-160,-100),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI8S21015C1[0]),
  ABISELECT(-192,-120),
  ABISELECT(-328,-204),
  ABISELECT(-328,-204),
  ABISELECT(-328,-204),
  (VTBL_ENTRY)&(_ZTI8S21015C1[0]),
};
extern VTBL_ENTRY _ZTV8S21015C1[];
static  VTBL_ENTRY _tg__ZTV9S21015C17__8S21015C1[] = {
  ABISELECT(80,48),
  ABISELECT(144,92),
  0,
  ABISELECT(136,84),
  0,
  ABISELECT(328,204),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C18__9S21015C17__8S21015C1[] = {
  ABISELECT(-192,-120),
  ABISELECT(-328,-204),
  ABISELECT(-328,-204),
  ABISELECT(-328,-204),
  (VTBL_ENTRY)&(_ZTI9S21015C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C6__9S21015C17__8S21015C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-64,-44),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI9S21015C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__A1__9S21015C17__8S21015C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI9S21015C17[0]),
};
extern void _ZN8S21015C2D1Ev();
extern void _ZN8S21015C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21015C2__8S21015C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C2[0]),
  (VTBL_ENTRY)&_ZN8S21015C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21015C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21015C68S21015C2__8S21015C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C68S21015C2__8S21015C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C2__8S21015C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21015C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C1[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C8__8S21015C1[] = {
  ABISELECT(64,40),
  ABISELECT(-16,-12),
  ABISELECT(48,32),
  ABISELECT(40,24),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C108S21015C8__8S21015C1[] = {
  ABISELECT(40,24),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C39S21015C108S21015C8__A1__8S21015C1[] = {
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C118S21015C8__8S21015C1[] = {
  ABISELECT(-112,-72),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C69S21015C118S21015C8__A2__8S21015C1[] = {
  ABISELECT(-112,-72),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C69S21015C118S21015C8__A2__8S21015C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__9S21015C118S21015C8__8S21015C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI9S21015C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C6__8S21015C8__8S21015C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-64,-44),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21015C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__A1__8S21015C8__8S21015C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21015C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C11__8S21015C8__8S21015C1[] = {
  ABISELECT(-112,-72),
  ABISELECT(-32,-24),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21015C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C12__8S21015C8__8S21015C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-160,-100),
  ABISELECT(-160,-100),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S21015C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C6__A1__8S21015C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C3__8S21015C6__A1__8S21015C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(64,44),
  (VTBL_ENTRY)&(_ZTI8S21015C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C12__8S21015C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-160,-100),
  ABISELECT(-160,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C109S21015C12__A1__8S21015C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-160,-100),
  ABISELECT(-160,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C39S21015C109S21015C12__A2__8S21015C1[] = {
  ABISELECT(-160,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C18__8S21015C1[] = {
  ABISELECT(-192,-120),
  ABISELECT(-328,-204),
  ABISELECT(-328,-204),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S21015C109S21015C18__A2__8S21015C1[] = {
  ABISELECT(-192,-120),
  ABISELECT(-328,-204),
  ABISELECT(-328,-204),
  0,
  (VTBL_ENTRY)&(_ZTI9S21015C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S21015C39S21015C109S21015C18__A3__8S21015C1[] = {
  ABISELECT(-328,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S21015C3[0]),
};
static  VTT_ENTRY vtt_S21015C1[] = {
  {&(_ZTV8S21015C1[12]),  12,50},
  {&(_tg__ZTV9S21015C17__8S21015C1[8]),  8,8},
  {&(_tg__ZTV9S21015C18__9S21015C17__8S21015C1[5]),  5,5},
  {&(_tg__ZTV8S21015C6__9S21015C17__8S21015C1[4]),  4,4},
  {&(_tg__ZTV8S21015C3__A1__9S21015C17__8S21015C1[3]),  3,3},
  {&(_ZTV8S21015C1[19]),  19,50},
  {&(_ZTV8S21015C1[24]),  24,50},
  {&(_ZTV8S21015C1[32]),  32,50},
  {&(_ZTV8S21015C1[40]),  40,50},
  {&(_ZTV8S21015C1[36]),  36,50},
  {&(_ZTV8S21015C1[45]),  45,50},
  {&(_ZTV8S21015C1[50]),  50,50},
  {&(_tg__ZTV8S21015C2__8S21015C1[4]),  4,6},
  {&(_tg__ZTV8S21015C68S21015C2__8S21015C1[4]),  4,4},
  {&(_tg__ZTV8S21015C3__8S21015C68S21015C2__8S21015C1[3]),  3,3},
  {&(_tg__ZTV8S21015C3__8S21015C2__8S21015C1[3]),  3,3},
  {&(_tg__ZTV8S21015C3__8S21015C1[3]),  3,3},
  {&(_tg__ZTV8S21015C8__8S21015C1[8]),  8,8},
  {&(_tg__ZTV9S21015C108S21015C8__8S21015C1[5]),  5,5},
  {&(_tg__ZTV8S21015C39S21015C108S21015C8__A1__8S21015C1[3]),  3,3},
  {&(_tg__ZTV9S21015C118S21015C8__8S21015C1[4]),  4,4},
  {&(_tg__ZTV8S21015C69S21015C118S21015C8__A2__8S21015C1[4]),  4,4},
  {&(_tg__ZTV8S21015C3__8S21015C69S21015C118S21015C8__A2__8S21015C1[3]),  3,3},
  {&(_tg__ZTV8S21015C3__9S21015C118S21015C8__8S21015C1[3]),  3,3},
  {&(_tg__ZTV8S21015C6__8S21015C8__8S21015C1[4]),  4,4},
  {&(_tg__ZTV8S21015C3__A1__8S21015C8__8S21015C1[3]),  3,3},
  {&(_tg__ZTV9S21015C11__8S21015C8__8S21015C1[4]),  4,4},
  {&(_tg__ZTV9S21015C12__8S21015C8__8S21015C1[5]),  5,5},
  {&(_tg__ZTV8S21015C6__A1__8S21015C1[4]),  4,4},
  {&(_tg__ZTV8S21015C3__8S21015C6__A1__8S21015C1[3]),  3,3},
  {&(_tg__ZTV9S21015C12__8S21015C1[5]),  5,5},
  {&(_tg__ZTV9S21015C109S21015C12__A1__8S21015C1[5]),  5,5},
  {&(_tg__ZTV8S21015C39S21015C109S21015C12__A2__8S21015C1[3]),  3,3},
  {&(_tg__ZTV9S21015C18__8S21015C1[5]),  5,5},
  {&(_tg__ZTV9S21015C109S21015C18__A2__8S21015C1[5]),  5,5},
  {&(_tg__ZTV8S21015C39S21015C109S21015C18__A3__8S21015C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21015C1[];
extern  VTBL_ENTRY _ZTV8S21015C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21015C1[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21015C1D0Ev,_ZTv0_n20_N8S21015C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21015C1D0Ev,_ZThn40_N8S21015C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21015C1D1Ev,_ZTv0_n20_N8S21015C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21015C1D1Ev,_ZThn40_N8S21015C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21015C1 = {  "S21015C1", // class name
  bases_S21015C1, 26,
  &(vtc_S21015C1[0]), // expected_vtbl_contents
  &(vtt_S21015C1[0]), // expected_vtt_contents
  ABISELECT(344,216), // object size
  NSPAIRA(_ZTI8S21015C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21015C1),50, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21015C1),36, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1242C3_nt  : S10180C138 {
  virtual  ~S1242C3_nt(); // _ZN10S1242C3_ntD1Ev
  virtual void  v6(); // _ZN10S1242C3_nt2v6Ev
  S1242C3_nt(); // tgen
};
//SIG(-1 S1242C3_nt) C1{ BC2{ m} vd v1}


 S1242C3_nt ::~S1242C3_nt(){ note_dtor("S1242C3_nt", this);}
void  S1242C3_nt ::v6(){vfunc_called(this, "_ZN10S1242C3_nt2v6Ev");}
S1242C3_nt ::S1242C3_nt(){ note_ctor("S1242C3_nt", this);} // tgen

//skip512 S1242C3_nt

#else // __cplusplus

extern void _ZN10S1242C3_ntC1Ev();
extern void _ZN10S1242C3_ntD1Ev();
Name_Map name_map_S1242C3_nt[] = {
  NSPAIR(_ZN10S1242C3_ntC1Ev),
  NSPAIR(_ZN10S1242C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S1242C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S1242C3_nt[];
extern void _ZN10S1242C3_ntD1Ev();
extern void _ZN10S1242C3_ntD0Ev();
extern void _ZN10S1242C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S1242C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1242C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1242C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1242C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1242C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S1242C3_nt[];
VTBL_ENTRY *P__ZTI10S1242C3_nt = _ZTI10S1242C3_nt; 
extern  VTBL_ENTRY _ZTV10S1242C3_nt[];
Class_Descriptor cd_S1242C3_nt = {  "S1242C3_nt", // class name
  bases_S1242C3_nt, 1,
  &(vtc_S1242C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1242C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1242C3_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  S1242C2_nt  : S1242C3_nt {
  char s1242c2f0[112];
  virtual  ~S1242C2_nt(); // _ZN10S1242C2_ntD1Ev
  virtual void  v7(); // _ZN10S1242C2_nt2v7Ev
  virtual void  v8(); // _ZN10S1242C2_nt2v8Ev
  virtual void  v9(); // _ZN10S1242C2_nt2v9Ev
  virtual void  v10(); // _ZN10S1242C2_nt3v10Ev
  virtual void  v11(); // _ZN10S1242C2_nt3v11Ev
  S1242C2_nt(); // tgen
};
//SIG(-1 S1242C2_nt) C1{ BC2{ BC3{ m} vd v6} vd v1 v2 v3 v4 v5 Fc[112]}


 S1242C2_nt ::~S1242C2_nt(){ note_dtor("S1242C2_nt", this);}
void  S1242C2_nt ::v7(){vfunc_called(this, "_ZN10S1242C2_nt2v7Ev");}
void  S1242C2_nt ::v8(){vfunc_called(this, "_ZN10S1242C2_nt2v8Ev");}
void  S1242C2_nt ::v9(){vfunc_called(this, "_ZN10S1242C2_nt2v9Ev");}
void  S1242C2_nt ::v10(){vfunc_called(this, "_ZN10S1242C2_nt3v10Ev");}
void  S1242C2_nt ::v11(){vfunc_called(this, "_ZN10S1242C2_nt3v11Ev");}
S1242C2_nt ::S1242C2_nt(){ note_ctor("S1242C2_nt", this);} // tgen

//skip512 S1242C2_nt

#else // __cplusplus

extern void _ZN10S1242C2_ntC1Ev();
extern void _ZN10S1242C2_ntD1Ev();
Name_Map name_map_S1242C2_nt[] = {
  NSPAIR(_ZN10S1242C2_ntC1Ev),
  NSPAIR(_ZN10S1242C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1242C3_nt;
extern VTBL_ENTRY _ZTI10S1242C3_nt[];
extern  VTBL_ENTRY _ZTV10S1242C3_nt[];
static Base_Class bases_S1242C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1242C3_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 _ZTI10S1242C2_nt[];
extern void _ZN10S1242C2_ntD1Ev();
extern void _ZN10S1242C2_ntD0Ev();
extern void _ZN10S1242C3_nt2v6Ev();
extern void _ZN10S1242C2_nt2v7Ev();
extern void _ZN10S1242C2_nt2v8Ev();
extern void _ZN10S1242C2_nt2v9Ev();
extern void _ZN10S1242C2_nt3v10Ev();
extern void _ZN10S1242C2_nt3v11Ev();
static  VTBL_ENTRY vtc_S1242C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1242C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1242C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1242C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI10S1242C2_nt[];
VTBL_ENTRY *P__ZTI10S1242C2_nt = _ZTI10S1242C2_nt; 
extern  VTBL_ENTRY _ZTV10S1242C2_nt[];
Class_Descriptor cd_S1242C2_nt = {  "S1242C2_nt", // class name
  bases_S1242C2_nt, 2,
  &(vtc_S1242C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,116), // object size
  NSPAIRA(_ZTI10S1242C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1242C2_nt),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1242C6_nt  : S1242C3_nt {
  virtual  ~S1242C6_nt(); // _ZN10S1242C6_ntD1Ev
  virtual void  v21(); // _ZN10S1242C6_nt3v21Ev
  virtual void  v22(); // _ZN10S1242C6_nt3v22Ev
  virtual void  v23(); // _ZN10S1242C6_nt3v23Ev
  virtual void  v24(); // _ZN10S1242C6_nt3v24Ev
  virtual void  v25(); // _ZN10S1242C6_nt3v25Ev
  virtual void  v26(); // _ZN10S1242C6_nt3v26Ev
  virtual void  v27(); // _ZN10S1242C6_nt3v27Ev
  virtual void  v28(); // _ZN10S1242C6_nt3v28Ev
  S1242C6_nt(); // tgen
};
//SIG(-1 S1242C6_nt) C1{ BC2{ BC3{ m} vd v9} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S1242C6_nt ::~S1242C6_nt(){ note_dtor("S1242C6_nt", this);}
void  S1242C6_nt ::v21(){vfunc_called(this, "_ZN10S1242C6_nt3v21Ev");}
void  S1242C6_nt ::v22(){vfunc_called(this, "_ZN10S1242C6_nt3v22Ev");}
void  S1242C6_nt ::v23(){vfunc_called(this, "_ZN10S1242C6_nt3v23Ev");}
void  S1242C6_nt ::v24(){vfunc_called(this, "_ZN10S1242C6_nt3v24Ev");}
void  S1242C6_nt ::v25(){vfunc_called(this, "_ZN10S1242C6_nt3v25Ev");}
void  S1242C6_nt ::v26(){vfunc_called(this, "_ZN10S1242C6_nt3v26Ev");}
void  S1242C6_nt ::v27(){vfunc_called(this, "_ZN10S1242C6_nt3v27Ev");}
void  S1242C6_nt ::v28(){vfunc_called(this, "_ZN10S1242C6_nt3v28Ev");}
S1242C6_nt ::S1242C6_nt(){ note_ctor("S1242C6_nt", this);} // tgen

//skip512 S1242C6_nt

#else // __cplusplus

extern void _ZN10S1242C6_ntC1Ev();
extern void _ZN10S1242C6_ntD1Ev();
Name_Map name_map_S1242C6_nt[] = {
  NSPAIR(_ZN10S1242C6_ntC1Ev),
  NSPAIR(_ZN10S1242C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1242C3_nt;
extern VTBL_ENTRY _ZTI10S1242C3_nt[];
extern  VTBL_ENTRY _ZTV10S1242C3_nt[];
static Base_Class bases_S1242C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1242C3_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 _ZTI10S1242C6_nt[];
extern void _ZN10S1242C6_ntD1Ev();
extern void _ZN10S1242C6_ntD0Ev();
extern void _ZN10S1242C3_nt2v6Ev();
extern void _ZN10S1242C6_nt3v21Ev();
extern void _ZN10S1242C6_nt3v22Ev();
extern void _ZN10S1242C6_nt3v23Ev();
extern void _ZN10S1242C6_nt3v24Ev();
extern void _ZN10S1242C6_nt3v25Ev();
extern void _ZN10S1242C6_nt3v26Ev();
extern void _ZN10S1242C6_nt3v27Ev();
extern void _ZN10S1242C6_nt3v28Ev();
static  VTBL_ENTRY vtc_S1242C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1242C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S1242C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1242C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v28Ev,
};
extern VTBL_ENTRY _ZTI10S1242C6_nt[];
VTBL_ENTRY *P__ZTI10S1242C6_nt = _ZTI10S1242C6_nt; 
extern  VTBL_ENTRY _ZTV10S1242C6_nt[];
Class_Descriptor cd_S1242C6_nt = {  "S1242C6_nt", // class name
  bases_S1242C6_nt, 2,
  &(vtc_S1242C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1242C6_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1242C6_nt),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1242C8_nt  {
  short s1242c8f0;
  int s1242c8f1;
  void *s1242c8f2;
  int s1242c8f3;
};
//SIG(1 S1242C8_nt) C1{ Fs Fi Fp Fi}



//skip512 S1242C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S1242C7_nt  {
  short s1242c7f0[13];
  ::S1242C8_nt s1242c7f1;
};
//SIG(1 S1242C7_nt) U1{ Fs[13] FC2{ Fs Fi Fp Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S1242C5_nt  : S1242C6_nt {
  char s1242c5f0[2];
  ::S1242C7_nt s1242c5f1;
  virtual  ~S1242C5_nt(); // _ZN10S1242C5_ntD1Ev
  virtual void  v12(); // _ZN10S1242C5_nt3v12Ev
  virtual void  v13(); // _ZN10S1242C5_nt3v13Ev
  virtual void  v14(); // _ZN10S1242C5_nt3v14Ev
  virtual void  v15(); // _ZN10S1242C5_nt3v15Ev
  virtual void  v16(); // _ZN10S1242C5_nt3v16Ev
  virtual void  v17(); // _ZN10S1242C5_nt3v17Ev
  virtual void  v18(); // _ZN10S1242C5_nt3v18Ev
  virtual void  v19(); // _ZN10S1242C5_nt3v19Ev
  virtual void  v20(); // _ZN10S1242C5_nt3v20Ev
  S1242C5_nt(); // tgen
};
//SIG(-1 S1242C5_nt) C1{ BC2{ BC3{ BC4{ m} vd v10} vd v11 v12 v13 v14 v15 v16 v17 v18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fc[2] FU5{ Fs[13] FC6{ Fs Fi Fp Fi}}}


 S1242C5_nt ::~S1242C5_nt(){ note_dtor("S1242C5_nt", this);}
void  S1242C5_nt ::v12(){vfunc_called(this, "_ZN10S1242C5_nt3v12Ev");}
void  S1242C5_nt ::v13(){vfunc_called(this, "_ZN10S1242C5_nt3v13Ev");}
void  S1242C5_nt ::v14(){vfunc_called(this, "_ZN10S1242C5_nt3v14Ev");}
void  S1242C5_nt ::v15(){vfunc_called(this, "_ZN10S1242C5_nt3v15Ev");}
void  S1242C5_nt ::v16(){vfunc_called(this, "_ZN10S1242C5_nt3v16Ev");}
void  S1242C5_nt ::v17(){vfunc_called(this, "_ZN10S1242C5_nt3v17Ev");}
void  S1242C5_nt ::v18(){vfunc_called(this, "_ZN10S1242C5_nt3v18Ev");}
void  S1242C5_nt ::v19(){vfunc_called(this, "_ZN10S1242C5_nt3v19Ev");}
void  S1242C5_nt ::v20(){vfunc_called(this, "_ZN10S1242C5_nt3v20Ev");}
S1242C5_nt ::S1242C5_nt(){ note_ctor("S1242C5_nt", this);} // tgen

//skip512 S1242C5_nt

#else // __cplusplus

extern void _ZN10S1242C5_ntC1Ev();
extern void _ZN10S1242C5_ntD1Ev();
Name_Map name_map_S1242C5_nt[] = {
  NSPAIR(_ZN10S1242C5_ntC1Ev),
  NSPAIR(_ZN10S1242C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1242C3_nt;
extern VTBL_ENTRY _ZTI10S1242C3_nt[];
extern  VTBL_ENTRY _ZTV10S1242C3_nt[];
extern Class_Descriptor cd_S1242C6_nt;
extern VTBL_ENTRY _ZTI10S1242C6_nt[];
extern  VTBL_ENTRY _ZTV10S1242C6_nt[];
static Base_Class bases_S1242C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1242C3_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_S1242C6_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 _ZTI10S1242C5_nt[];
extern void _ZN10S1242C5_ntD1Ev();
extern void _ZN10S1242C5_ntD0Ev();
extern void _ZN10S1242C3_nt2v6Ev();
extern void _ZN10S1242C6_nt3v21Ev();
extern void _ZN10S1242C6_nt3v22Ev();
extern void _ZN10S1242C6_nt3v23Ev();
extern void _ZN10S1242C6_nt3v24Ev();
extern void _ZN10S1242C6_nt3v25Ev();
extern void _ZN10S1242C6_nt3v26Ev();
extern void _ZN10S1242C6_nt3v27Ev();
extern void _ZN10S1242C6_nt3v28Ev();
extern void _ZN10S1242C5_nt3v12Ev();
extern void _ZN10S1242C5_nt3v13Ev();
extern void _ZN10S1242C5_nt3v14Ev();
extern void _ZN10S1242C5_nt3v15Ev();
extern void _ZN10S1242C5_nt3v16Ev();
extern void _ZN10S1242C5_nt3v17Ev();
extern void _ZN10S1242C5_nt3v18Ev();
extern void _ZN10S1242C5_nt3v19Ev();
extern void _ZN10S1242C5_nt3v20Ev();
static  VTBL_ENTRY vtc_S1242C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1242C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S1242C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1242C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1242C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1242C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1242C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1242C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1242C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1242C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1242C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1242C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1242C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1242C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1242C5_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S1242C5_nt[];
VTBL_ENTRY *P__ZTI10S1242C5_nt = _ZTI10S1242C5_nt; 
extern  VTBL_ENTRY _ZTV10S1242C5_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1242C9  {
  ::S1242C5_nt s1242c9f0;
  ::S1242C5_nt s1242c9f1;
  char s1242c9f2;
};
//SIG(1 S1242C9) C1{ FC2{ BC3{ BC4{ BC5{ m} vd v10} vd v11 v12 v13 v14 v15 v16 v17 v18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fc[2] FU6{ Fs[13] FC7{ Fs Fi Fp Fi}}} FC2 Fc}



static void Test_S1242C9()
{
  {
    init_simple_test("S1242C9");
    S1242C9 lv;
    check2(sizeof(lv), ABISELECT(104,76), "sizeof(S1242C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1242C9)");
    check_field_offset(lv, s1242c9f0, 0, "S1242C9.s1242c9f0");
    check_field_offset(lv, s1242c9f1, ABISELECT(48,36), "S1242C9.s1242c9f1");
    check_field_offset(lv, s1242c9f2, ABISELECT(96,72), "S1242C9.s1242c9f2");
  }
}
static Arrange_To_Call_Me vS1242C9(Test_S1242C9, "S1242C9", ABISELECT(104,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1242C1  : S1242C2_nt {
  void *s1242c1f0[4];
  ::S1242C5_nt s1242c1f1;
  ::S1242C9 s1242c1f2[7];
  virtual  ~S1242C1(); // _ZN7S1242C1D1Ev
  virtual void  v1(); // _ZN7S1242C12v1Ev
  virtual void  v2(); // _ZN7S1242C12v2Ev
  virtual void  v3(); // _ZN7S1242C12v3Ev
  virtual void  v4(); // _ZN7S1242C12v4Ev
  virtual void  v5(); // _ZN7S1242C12v5Ev
  S1242C1(); // tgen
};
//SIG(1 S1242C1) C1{ BC2{ BC3{ BC4{ m} vd v6} vd v7 v8 v9 v10 v11 Fc[112]} vd v1 v2 v3 v4 v5 Fp[4] FC5{ BC6{ BC3 vd v21 v22 v23 v24 v25 v26 v27 v28} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 Fc[2] FU7{ Fs[13] FC8{ Fs Fi Fp Fi}}} FC9{ FC5 FC5 Fc}[7]}


 S1242C1 ::~S1242C1(){ note_dtor("S1242C1", this);}
void  S1242C1 ::v1(){vfunc_called(this, "_ZN7S1242C12v1Ev");}
void  S1242C1 ::v2(){vfunc_called(this, "_ZN7S1242C12v2Ev");}
void  S1242C1 ::v3(){vfunc_called(this, "_ZN7S1242C12v3Ev");}
void  S1242C1 ::v4(){vfunc_called(this, "_ZN7S1242C12v4Ev");}
void  S1242C1 ::v5(){vfunc_called(this, "_ZN7S1242C12v5Ev");}
S1242C1 ::S1242C1(){ note_ctor("S1242C1", this);} // tgen

static void Test_S1242C1()
{
  extern Class_Descriptor cd_S1242C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(117,176)];
    init_test(&cd_S1242C1, buf);
    S1242C1 *dp, &lv = *(dp=new (buf) S1242C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,700), "sizeof(S1242C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1242C1)");
    check_base_class_offset(lv, (S10180C138*)(S1242C3_nt*)(S1242C2_nt*), 0, "S1242C1");
    check_base_class_offset(lv, (S1242C3_nt*)(S1242C2_nt*), 0, "S1242C1");
    check_base_class_offset(lv, (S1242C2_nt*), 0, "S1242C1");
    check_field_offset(lv, s1242c1f0, ABISELECT(120,116), "S1242C1.s1242c1f0");
    check_field_offset(lv, s1242c1f1, ABISELECT(152,132), "S1242C1.s1242c1f1");
    check_field_offset(lv, s1242c1f2, ABISELECT(200,168), "S1242C1.s1242c1f2");
    test_class_info(&lv, &cd_S1242C1);
    dp->~S1242C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1242C1(Test_S1242C1, "S1242C1", ABISELECT(928,700));

#else // __cplusplus

extern void _ZN7S1242C1C1Ev();
extern void _ZN7S1242C1D1Ev();
Name_Map name_map_S1242C1[] = {
  NSPAIR(_ZN7S1242C1C1Ev),
  NSPAIR(_ZN7S1242C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1242C3_nt;
extern VTBL_ENTRY _ZTI10S1242C3_nt[];
extern  VTBL_ENTRY _ZTV10S1242C3_nt[];
extern Class_Descriptor cd_S1242C2_nt;
extern VTBL_ENTRY _ZTI10S1242C2_nt[];
extern  VTBL_ENTRY _ZTV10S1242C2_nt[];
static Base_Class bases_S1242C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1242C3_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_S1242C2_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 _ZTI7S1242C1[];
extern void _ZN7S1242C1D1Ev();
extern void _ZN7S1242C1D0Ev();
extern void _ZN10S1242C3_nt2v6Ev();
extern void _ZN10S1242C2_nt2v7Ev();
extern void _ZN10S1242C2_nt2v8Ev();
extern void _ZN10S1242C2_nt2v9Ev();
extern void _ZN10S1242C2_nt3v10Ev();
extern void _ZN10S1242C2_nt3v11Ev();
extern void _ZN7S1242C12v1Ev();
extern void _ZN7S1242C12v2Ev();
extern void _ZN7S1242C12v3Ev();
extern void _ZN7S1242C12v4Ev();
extern void _ZN7S1242C12v5Ev();
static  VTBL_ENTRY vtc_S1242C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1242C1[0]),
  (VTBL_ENTRY)&_ZN7S1242C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1242C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1242C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1242C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S1242C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1242C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1242C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1242C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1242C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1242C1[];
extern  VTBL_ENTRY _ZTV7S1242C1[];
Class_Descriptor cd_S1242C1 = {  "S1242C1", // class name
  bases_S1242C1, 3,
  &(vtc_S1242C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(928,700), // object size
  NSPAIRA(_ZTI7S1242C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1242C1),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  S1586C4  {
  __tsi64 s1586c4f0;
  virtual void  v9(); // _ZN7S1586C42v9Ev
  virtual void  v10(); // _ZN7S1586C43v10Ev
  ~S1586C4(); // tgen
  S1586C4(); // tgen
};
//SIG(-1 S1586C4) C1{ v1 v2 FL}


void  S1586C4 ::v9(){vfunc_called(this, "_ZN7S1586C42v9Ev");}
void  S1586C4 ::v10(){vfunc_called(this, "_ZN7S1586C43v10Ev");}
S1586C4 ::~S1586C4(){ note_dtor("S1586C4", this);} // tgen
S1586C4 ::S1586C4(){ note_ctor("S1586C4", this);} // tgen

static void Test_S1586C4()
{
  extern Class_Descriptor cd_S1586C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1586C4, buf);
    S1586C4 *dp, &lv = *(dp=new (buf) S1586C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1586C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1586C4)");
    check_field_offset(lv, s1586c4f0, ABISELECT(8,4), "S1586C4.s1586c4f0");
    test_class_info(&lv, &cd_S1586C4);
    dp->~S1586C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1586C4(Test_S1586C4, "S1586C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1586C4C1Ev();
extern void _ZN7S1586C4D1Ev();
Name_Map name_map_S1586C4[] = {
  NSPAIR(_ZN7S1586C4C1Ev),
  NSPAIR(_ZN7S1586C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1586C4[];
extern void _ZN7S1586C42v9Ev();
extern void _ZN7S1586C43v10Ev();
static  VTBL_ENTRY vtc_S1586C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C4[0]),
  (VTBL_ENTRY)&_ZN7S1586C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1586C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S1586C4[];
extern  VTBL_ENTRY _ZTV7S1586C4[];
Class_Descriptor cd_S1586C4 = {  "S1586C4", // class name
  0,0,//no base classes
  &(vtc_S1586C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1586C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1586C4),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  S1586C3  : S1586C4 {
  char s1586c3f0;
  virtual  ~S1586C3(); // _ZN7S1586C3D1Ev
  virtual void  v11(); // _ZN7S1586C33v11Ev
  S1586C3(); // tgen
};
//SIG(-1 S1586C3) C1{ BC2{ v2 v3 FL} vd v1 Fc}


 S1586C3 ::~S1586C3(){ note_dtor("S1586C3", this);}
void  S1586C3 ::v11(){vfunc_called(this, "_ZN7S1586C33v11Ev");}
S1586C3 ::S1586C3(){ note_ctor("S1586C3", this);} // tgen

static void Test_S1586C3()
{
  extern Class_Descriptor cd_S1586C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1586C3, buf);
    S1586C3 *dp, &lv = *(dp=new (buf) S1586C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1586C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1586C3)");
    check_base_class_offset(lv, (S1586C4*), 0, "S1586C3");
    check_field_offset(lv, s1586c3f0, ABISELECT(16,12), "S1586C3.s1586c3f0");
    test_class_info(&lv, &cd_S1586C3);
    dp->~S1586C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1586C3(Test_S1586C3, "S1586C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S1586C3C1Ev();
extern void _ZN7S1586C3D1Ev();
Name_Map name_map_S1586C3[] = {
  NSPAIR(_ZN7S1586C3C1Ev),
  NSPAIR(_ZN7S1586C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1586C4;
extern VTBL_ENTRY _ZTI7S1586C4[];
extern  VTBL_ENTRY _ZTV7S1586C4[];
static Base_Class bases_S1586C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1586C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1586C3[];
extern void _ZN7S1586C42v9Ev();
extern void _ZN7S1586C43v10Ev();
extern void _ZN7S1586C3D1Ev();
extern void _ZN7S1586C3D0Ev();
extern void _ZN7S1586C33v11Ev();
static  VTBL_ENTRY vtc_S1586C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C3[0]),
  (VTBL_ENTRY)&_ZN7S1586C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1586C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1586C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1586C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1586C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1586C3[];
extern  VTBL_ENTRY _ZTV7S1586C3[];
Class_Descriptor cd_S1586C3 = {  "S1586C3", // class name
  bases_S1586C3, 1,
  &(vtc_S1586C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S1586C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1586C3),7, //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  S1586C2  : S1586C3 {
  virtual  ~S1586C2(); // _ZN7S1586C2D1Ev
  virtual void  v12(); // _ZN7S1586C23v12Ev
  virtual void  v13(); // _ZN7S1586C23v13Ev
  virtual void  v14(); // _ZN7S1586C23v14Ev
  virtual void  v15(); // _ZN7S1586C23v15Ev
  virtual void  v16(); // _ZN7S1586C23v16Ev
  virtual void  v17(); // _ZN7S1586C23v17Ev
  S1586C2(); // tgen
};
//SIG(-1 S1586C2) C1{ BC2{ BC3{ v7 v8 FL} vd v9 Fc} vd v1 v2 v3 v4 v5 v6}


 S1586C2 ::~S1586C2(){ note_dtor("S1586C2", this);}
void  S1586C2 ::v12(){vfunc_called(this, "_ZN7S1586C23v12Ev");}
void  S1586C2 ::v13(){vfunc_called(this, "_ZN7S1586C23v13Ev");}
void  S1586C2 ::v14(){vfunc_called(this, "_ZN7S1586C23v14Ev");}
void  S1586C2 ::v15(){vfunc_called(this, "_ZN7S1586C23v15Ev");}
void  S1586C2 ::v16(){vfunc_called(this, "_ZN7S1586C23v16Ev");}
void  S1586C2 ::v17(){vfunc_called(this, "_ZN7S1586C23v17Ev");}
S1586C2 ::S1586C2(){ note_ctor("S1586C2", this);} // tgen

static void Test_S1586C2()
{
  extern Class_Descriptor cd_S1586C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1586C2, buf);
    S1586C2 *dp, &lv = *(dp=new (buf) S1586C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1586C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1586C2)");
    check_base_class_offset(lv, (S1586C4*)(S1586C3*), 0, "S1586C2");
    check_base_class_offset(lv, (S1586C3*), 0, "S1586C2");
    test_class_info(&lv, &cd_S1586C2);
    dp->~S1586C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1586C2(Test_S1586C2, "S1586C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S1586C2C1Ev();
extern void _ZN7S1586C2D1Ev();
Name_Map name_map_S1586C2[] = {
  NSPAIR(_ZN7S1586C2C1Ev),
  NSPAIR(_ZN7S1586C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1586C4;
extern VTBL_ENTRY _ZTI7S1586C4[];
extern  VTBL_ENTRY _ZTV7S1586C4[];
extern Class_Descriptor cd_S1586C3;
extern VTBL_ENTRY _ZTI7S1586C3[];
extern  VTBL_ENTRY _ZTV7S1586C3[];
static Base_Class bases_S1586C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1586C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1586C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1586C2[];
extern void _ZN7S1586C42v9Ev();
extern void _ZN7S1586C43v10Ev();
extern void _ZN7S1586C2D1Ev();
extern void _ZN7S1586C2D0Ev();
extern void _ZN7S1586C33v11Ev();
extern void _ZN7S1586C23v12Ev();
extern void _ZN7S1586C23v13Ev();
extern void _ZN7S1586C23v14Ev();
extern void _ZN7S1586C23v15Ev();
extern void _ZN7S1586C23v16Ev();
extern void _ZN7S1586C23v17Ev();
static  VTBL_ENTRY vtc_S1586C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C2[0]),
  (VTBL_ENTRY)&_ZN7S1586C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1586C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1586C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1586C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1586C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1586C2[];
extern  VTBL_ENTRY _ZTV7S1586C2[];
Class_Descriptor cd_S1586C2 = {  "S1586C2", // class name
  bases_S1586C2, 2,
  &(vtc_S1586C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S1586C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1586C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1586C8  {
  short s1586c8f0;
  ::S1586C4 s1586c8f1;
  virtual void  v18(); // _ZN7S1586C83v18Ev
  virtual void  v19(); // _ZN7S1586C83v19Ev
  virtual void  v20(); // _ZN7S1586C83v20Ev
  virtual void  v21(); // _ZN7S1586C83v21Ev
  ~S1586C8(); // tgen
  S1586C8(); // tgen
};
//SIG(-1 S1586C8) C1{ v1 v2 v3 v4 Fs FC2{ v5 v6 FL}}


void  S1586C8 ::v18(){vfunc_called(this, "_ZN7S1586C83v18Ev");}
void  S1586C8 ::v19(){vfunc_called(this, "_ZN7S1586C83v19Ev");}
void  S1586C8 ::v20(){vfunc_called(this, "_ZN7S1586C83v20Ev");}
void  S1586C8 ::v21(){vfunc_called(this, "_ZN7S1586C83v21Ev");}
S1586C8 ::~S1586C8(){ note_dtor("S1586C8", this);} // tgen
S1586C8 ::S1586C8(){ note_ctor("S1586C8", this);} // tgen

static void Test_S1586C8()
{
  extern Class_Descriptor cd_S1586C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1586C8, buf);
    S1586C8 *dp, &lv = *(dp=new (buf) S1586C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1586C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1586C8)");
    check_field_offset(lv, s1586c8f0, ABISELECT(8,4), "S1586C8.s1586c8f0");
    check_field_offset(lv, s1586c8f1, ABISELECT(16,8), "S1586C8.s1586c8f1");
    test_class_info(&lv, &cd_S1586C8);
    dp->~S1586C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1586C8(Test_S1586C8, "S1586C8", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1586C8C1Ev();
extern void _ZN7S1586C8D1Ev();
Name_Map name_map_S1586C8[] = {
  NSPAIR(_ZN7S1586C8C1Ev),
  NSPAIR(_ZN7S1586C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1586C8[];
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
static  VTBL_ENTRY vtc_S1586C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C8[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
};
extern VTBL_ENTRY _ZTI7S1586C8[];
extern  VTBL_ENTRY _ZTV7S1586C8[];
Class_Descriptor cd_S1586C8 = {  "S1586C8", // class name
  0,0,//no base classes
  &(vtc_S1586C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1586C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1586C8),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  S1586C7  : S1586C8 {
  void *s1586c7f0[5];
  virtual void  v22(); // _ZN7S1586C73v22Ev
  virtual void  v23(); // _ZN7S1586C73v23Ev
  virtual void  v24(); // _ZN7S1586C73v24Ev
  ~S1586C7(); // tgen
  S1586C7(); // tgen
};
//SIG(-1 S1586C7) C1{ BC2{ v4 v5 v6 v7 Fs FC3{ v8 v9 FL}} v1 v2 v3 Fp[5]}


void  S1586C7 ::v22(){vfunc_called(this, "_ZN7S1586C73v22Ev");}
void  S1586C7 ::v23(){vfunc_called(this, "_ZN7S1586C73v23Ev");}
void  S1586C7 ::v24(){vfunc_called(this, "_ZN7S1586C73v24Ev");}
S1586C7 ::~S1586C7(){ note_dtor("S1586C7", this);} // tgen
S1586C7 ::S1586C7(){ note_ctor("S1586C7", this);} // tgen

static void Test_S1586C7()
{
  extern Class_Descriptor cd_S1586C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S1586C7, buf);
    S1586C7 *dp, &lv = *(dp=new (buf) S1586C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S1586C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1586C7)");
    check_base_class_offset(lv, (S1586C8*), 0, "S1586C7");
    check_field_offset(lv, s1586c7f0, ABISELECT(32,20), "S1586C7.s1586c7f0");
    test_class_info(&lv, &cd_S1586C7);
    dp->~S1586C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1586C7(Test_S1586C7, "S1586C7", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S1586C7C1Ev();
extern void _ZN7S1586C7D1Ev();
Name_Map name_map_S1586C7[] = {
  NSPAIR(_ZN7S1586C7C1Ev),
  NSPAIR(_ZN7S1586C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1586C8;
extern VTBL_ENTRY _ZTI7S1586C8[];
extern  VTBL_ENTRY _ZTV7S1586C8[];
static Base_Class bases_S1586C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1586C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1586C7[];
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
extern void _ZN7S1586C73v22Ev();
extern void _ZN7S1586C73v23Ev();
extern void _ZN7S1586C73v24Ev();
static  VTBL_ENTRY vtc_S1586C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C7[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v24Ev,
};
extern VTBL_ENTRY _ZTI7S1586C7[];
extern  VTBL_ENTRY _ZTV7S1586C7[];
Class_Descriptor cd_S1586C7 = {  "S1586C7", // class name
  bases_S1586C7, 1,
  &(vtc_S1586C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S1586C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1586C7),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  S1586C6  : virtual S1586C7 , virtual S1586C8 {
  virtual  ~S1586C6(); // _ZN7S1586C6D2Ev
  virtual void  v25(); // _ZN7S1586C63v25Ev
  virtual void  v26(); // _ZN7S1586C63v26Ev
  virtual void  v27(); // _ZN7S1586C63v27Ev
  virtual void  v28(); // _ZN7S1586C63v28Ev
  virtual void  v29(); // _ZN7S1586C63v29Ev
  virtual void  v30(); // _ZN7S1586C63v30Ev
  virtual void  v31(); // _ZN7S1586C63v31Ev
  virtual void  v32(); // _ZN7S1586C63v32Ev
  S1586C6(); // tgen
};
//SIG(-1 S1586C6) C1{ VBC2{ BC3{ v9 v10 v11 v12 Fs FC4{ v16 v17 FL}} v13 v14 v15 Fp[5]} VBC3 vd v1 v2 v3 v4 v5 v6 v7 v8}


 S1586C6 ::~S1586C6(){ note_dtor("S1586C6", this);}
void  S1586C6 ::v25(){vfunc_called(this, "_ZN7S1586C63v25Ev");}
void  S1586C6 ::v26(){vfunc_called(this, "_ZN7S1586C63v26Ev");}
void  S1586C6 ::v27(){vfunc_called(this, "_ZN7S1586C63v27Ev");}
void  S1586C6 ::v28(){vfunc_called(this, "_ZN7S1586C63v28Ev");}
void  S1586C6 ::v29(){vfunc_called(this, "_ZN7S1586C63v29Ev");}
void  S1586C6 ::v30(){vfunc_called(this, "_ZN7S1586C63v30Ev");}
void  S1586C6 ::v31(){vfunc_called(this, "_ZN7S1586C63v31Ev");}
void  S1586C6 ::v32(){vfunc_called(this, "_ZN7S1586C63v32Ev");}
S1586C6 ::S1586C6(){ note_ctor("S1586C6", this);} // tgen

static void Test_S1586C6()
{
  extern Class_Descriptor cd_S1586C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S1586C6, buf);
    S1586C6 *dp, &lv = *(dp=new (buf) S1586C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S1586C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1586C6)");
    check_base_class_offset(lv, (S1586C8*)(S1586C7*), ABISELECT(8,4), "S1586C6");
    check_base_class_offset(lv, (S1586C7*), ABISELECT(8,4), "S1586C6");
    /*is_ambiguous_... S1586C6::S1586C8 */ AMB_check_base_class_offset(lv, (S1586C8*), ABISELECT(80,44), "S1586C6");
    test_class_info(&lv, &cd_S1586C6);
    dp->~S1586C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1586C6(Test_S1586C6, "S1586C6", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S1586C6C1Ev();
extern void _ZN7S1586C6D2Ev();
Name_Map name_map_S1586C6[] = {
  NSPAIR(_ZN7S1586C6C1Ev),
  NSPAIR(_ZN7S1586C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1586C8;
extern VTBL_ENTRY _ZTI7S1586C8[];
extern  VTBL_ENTRY _ZTV7S1586C8[];
extern Class_Descriptor cd_S1586C7;
extern VTBL_ENTRY _ZTI7S1586C7[];
extern  VTBL_ENTRY _ZTV7S1586C7[];
extern Class_Descriptor cd_S1586C8;
extern VTBL_ENTRY _ZTI7S1586C8[];
extern  VTBL_ENTRY _ZTV7S1586C8[];
static Base_Class bases_S1586C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1586C8,    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
  0, 0},
  {&cd_S1586C7,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1586C8,    ABISELECT(80,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1586C6[];
extern void _ZN7S1586C6D1Ev();
extern void _ZN7S1586C6D0Ev();
extern void _ZN7S1586C63v25Ev();
extern void _ZN7S1586C63v26Ev();
extern void _ZN7S1586C63v27Ev();
extern void _ZN7S1586C63v28Ev();
extern void _ZN7S1586C63v29Ev();
extern void _ZN7S1586C63v30Ev();
extern void _ZN7S1586C63v31Ev();
extern void _ZN7S1586C63v32Ev();
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
extern void _ZN7S1586C73v22Ev();
extern void _ZN7S1586C73v23Ev();
extern void _ZN7S1586C73v24Ev();
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
static  VTBL_ENTRY vtc_S1586C6[] = {
  ABISELECT(80,44),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C6[0]),
  (VTBL_ENTRY)&_ZN7S1586C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1586C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v25Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v26Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v27Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v28Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v29Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v30Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1586C6[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S1586C6[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
};
extern VTBL_ENTRY _ZTV7S1586C6[];
static  VTT_ENTRY vtt_S1586C6[] = {
  {&(_ZTV7S1586C6[4]),  4,40},
  {&(_ZTV7S1586C6[23]),  23,40},
  {&(_ZTV7S1586C6[36]),  36,40},
};
extern VTBL_ENTRY _ZTI7S1586C6[];
extern  VTBL_ENTRY _ZTV7S1586C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1586C6[];
Class_Descriptor cd_S1586C6 = {  "S1586C6", // class name
  bases_S1586C6, 3,
  &(vtc_S1586C6[0]), // expected_vtbl_contents
  &(vtt_S1586C6[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S1586C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1586C6),40, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1586C6),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1586C5  : virtual S1586C6 {
  long double s1586c5f0;
  void *s1586c5f1;
  virtual  ~S1586C5(); // _ZN7S1586C5D2Ev
  virtual void  v33(); // _ZN7S1586C53v33Ev
  virtual void  v34(); // _ZN7S1586C53v34Ev
  virtual void  v35(); // _ZN7S1586C53v35Ev
  S1586C5(); // tgen
};
//SIG(-1 S1586C5) C1{ VBC2{ VBC3{ BC4{ v4 v5 v6 v7 Fs FC5{ v19 v20 FL}} v8 v9 v10 Fp[5]} VBC4 vd v11 v12 v13 v14 v15 v16 v17 v18} vd v1 v2 v3 FD Fp}


 S1586C5 ::~S1586C5(){ note_dtor("S1586C5", this);}
void  S1586C5 ::v33(){vfunc_called(this, "_ZN7S1586C53v33Ev");}
void  S1586C5 ::v34(){vfunc_called(this, "_ZN7S1586C53v34Ev");}
void  S1586C5 ::v35(){vfunc_called(this, "_ZN7S1586C53v35Ev");}
S1586C5 ::S1586C5(){ note_ctor("S1586C5", this);} // tgen

static void Test_S1586C5()
{
  extern Class_Descriptor cd_S1586C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,21)];
    init_test(&cd_S1586C5, buf);
    S1586C5 *dp, &lv = *(dp=new (buf) S1586C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S1586C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1586C5)");
    check_base_class_offset(lv, (S1586C8*)(S1586C7*), ABISELECT(40,20), "S1586C5");
    check_base_class_offset(lv, (S1586C7*)(S1586C6*), ABISELECT(40,20), "S1586C5");
    /*is_ambiguous_... S1586C6::S1586C8 */ AMB_check_base_class_offset(lv, (S1586C8*)(S1586C6*), ABISELECT(112,60), "S1586C5");
    check_base_class_offset(lv, (S1586C6*), 0, "S1586C5");
    check_field_offset(lv, s1586c5f0, ABISELECT(16,4), "S1586C5.s1586c5f0");
    check_field_offset(lv, s1586c5f1, ABISELECT(32,16), "S1586C5.s1586c5f1");
    test_class_info(&lv, &cd_S1586C5);
    dp->~S1586C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1586C5(Test_S1586C5, "S1586C5", ABISELECT(144,80));

#else // __cplusplus

extern void _ZN7S1586C5C1Ev();
extern void _ZN7S1586C5D2Ev();
Name_Map name_map_S1586C5[] = {
  NSPAIR(_ZN7S1586C5C1Ev),
  NSPAIR(_ZN7S1586C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1586C8;
extern VTBL_ENTRY _ZTI7S1586C8[];
extern  VTBL_ENTRY _ZTV7S1586C8[];
extern Class_Descriptor cd_S1586C7;
extern VTBL_ENTRY _ZTI7S1586C7[];
extern  VTBL_ENTRY _ZTV7S1586C7[];
extern Class_Descriptor cd_S1586C8;
extern VTBL_ENTRY _ZTI7S1586C8[];
extern  VTBL_ENTRY _ZTV7S1586C8[];
extern Class_Descriptor cd_S1586C6;
extern VTBL_ENTRY _ZTI7S1586C6[];
extern  VTBL_ENTRY _ZTV7S1586C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1586C6[];
static Base_Class bases_S1586C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1586C8,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_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_S1586C7,    ABISELECT(40,20), //bcp->offset
    27, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1586C8,    ABISELECT(112,60), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1586C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1586C5[];
extern void _ZN7S1586C5D1Ev();
extern void _ZN7S1586C5D0Ev();
extern void _ZN7S1586C63v25Ev();
extern void _ZN7S1586C63v26Ev();
extern void _ZN7S1586C63v27Ev();
extern void _ZN7S1586C63v28Ev();
extern void _ZN7S1586C63v29Ev();
extern void _ZN7S1586C63v30Ev();
extern void _ZN7S1586C63v31Ev();
extern void _ZN7S1586C63v32Ev();
extern void _ZN7S1586C53v33Ev();
extern void _ZN7S1586C53v34Ev();
extern void _ZN7S1586C53v35Ev();
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
extern void _ZN7S1586C73v22Ev();
extern void _ZN7S1586C73v23Ev();
extern void _ZN7S1586C73v24Ev();
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
static  VTBL_ENTRY vtc_S1586C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C5[0]),
  (VTBL_ENTRY)&_ZN7S1586C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1586C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v25Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v26Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v27Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v28Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v29Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v30Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v32Ev,
  (VTBL_ENTRY)&_ZN7S1586C53v33Ev,
  (VTBL_ENTRY)&_ZN7S1586C53v34Ev,
  (VTBL_ENTRY)&_ZN7S1586C53v35Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S1586C5[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S1586C5[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
};
extern VTBL_ENTRY _ZTV7S1586C5[];
extern void _ZN7S1586C6D1Ev();
extern void _ZN7S1586C6D0Ev();
extern void _ZN7S1586C63v25Ev();
extern void _ZN7S1586C63v26Ev();
extern void _ZN7S1586C63v27Ev();
extern void _ZN7S1586C63v28Ev();
extern void _ZN7S1586C63v29Ev();
extern void _ZN7S1586C63v30Ev();
extern void _ZN7S1586C63v31Ev();
extern void _ZN7S1586C63v32Ev();
static  VTBL_ENTRY _tg__ZTV7S1586C6__7S1586C5[] = {
  ABISELECT(112,60),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C6[0]),
  (VTBL_ENTRY)&_ZN7S1586C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1586C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v25Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v26Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v27Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v28Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v29Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v30Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v32Ev,
};
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
extern void _ZN7S1586C73v22Ev();
extern void _ZN7S1586C73v23Ev();
extern void _ZN7S1586C73v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1586C7__7S1586C6__7S1586C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S1586C6[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v24Ev,
};
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1586C8__A1__7S1586C6__7S1586C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S1586C6[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
};
static  VTT_ENTRY vtt_S1586C5[] = {
  {&(_ZTV7S1586C5[14]),  14,53},
  {&(_ZTV7S1586C5[14]),  14,53},
  {&(_ZTV7S1586C5[36]),  36,53},
  {&(_ZTV7S1586C5[49]),  49,53},
  {&(_tg__ZTV7S1586C6__7S1586C5[4]),  4,14},
  {&(_tg__ZTV7S1586C7__7S1586C6__7S1586C5[9]),  9,16},
  {&(_tg__ZTV7S1586C8__A1__7S1586C6__7S1586C5[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S1586C5[];
extern  VTBL_ENTRY _ZTV7S1586C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1586C5[];
Class_Descriptor cd_S1586C5 = {  "S1586C5", // class name
  bases_S1586C5, 4,
  &(vtc_S1586C5[0]), // expected_vtbl_contents
  &(vtt_S1586C5[0]), // expected_vtt_contents
  ABISELECT(144,80), // object size
  NSPAIRA(_ZTI7S1586C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1586C5),53, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1586C5),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1586C1  : S1586C2 , virtual S1586C5 {
  int s1586c1f0;
  virtual  ~S1586C1(); // _ZN7S1586C1D2Ev
  virtual void  v1(); // _ZN7S1586C12v1Ev
  virtual void  v2(); // _ZN7S1586C12v2Ev
  virtual void  v3(); // _ZN7S1586C12v3Ev
  virtual void  v4(); // _ZN7S1586C12v4Ev
  virtual void  v5(); // _ZN7S1586C12v5Ev
  virtual void  v6(); // _ZN7S1586C12v6Ev
  virtual void  v7(); // _ZN7S1586C12v7Ev
  virtual void  v8(); // _ZN7S1586C12v8Ev
  S1586C1(); // tgen
};
//SIG(1 S1586C1) C1{ BC2{ BC3{ BC4{ v9 v10 FL} vd v11 Fc} vd v12 v13 v14 v15 v16 v17} VBC5{ VBC6{ VBC7{ BC8{ v18 v19 v20 v21 Fs FC4} v22 v23 v24 Fp[5]} VBC8 vd v25 v26 v27 v28 v29 v30 v31 v32} vd v33 v34 v35 FD Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi}


 S1586C1 ::~S1586C1(){ note_dtor("S1586C1", this);}
void  S1586C1 ::v1(){vfunc_called(this, "_ZN7S1586C12v1Ev");}
void  S1586C1 ::v2(){vfunc_called(this, "_ZN7S1586C12v2Ev");}
void  S1586C1 ::v3(){vfunc_called(this, "_ZN7S1586C12v3Ev");}
void  S1586C1 ::v4(){vfunc_called(this, "_ZN7S1586C12v4Ev");}
void  S1586C1 ::v5(){vfunc_called(this, "_ZN7S1586C12v5Ev");}
void  S1586C1 ::v6(){vfunc_called(this, "_ZN7S1586C12v6Ev");}
void  S1586C1 ::v7(){vfunc_called(this, "_ZN7S1586C12v7Ev");}
void  S1586C1 ::v8(){vfunc_called(this, "_ZN7S1586C12v8Ev");}
S1586C1 ::S1586C1(){ note_ctor("S1586C1", this);} // tgen

static void Test_S1586C1()
{
  extern Class_Descriptor cd_S1586C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,26)];
    init_test(&cd_S1586C1, buf);
    S1586C1 *dp, &lv = *(dp=new (buf) S1586C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,100), "sizeof(S1586C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1586C1)");
    check_base_class_offset(lv, (S1586C4*)(S1586C3*)(S1586C2*), 0, "S1586C1");
    check_base_class_offset(lv, (S1586C3*)(S1586C2*), 0, "S1586C1");
    check_base_class_offset(lv, (S1586C2*), 0, "S1586C1");
    check_base_class_offset(lv, (S1586C8*)(S1586C7*), ABISELECT(72,40), "S1586C1");
    check_base_class_offset(lv, (S1586C7*)(S1586C6*), ABISELECT(72,40), "S1586C1");
    /*is_ambiguous_... S1586C6::S1586C8 */ AMB_check_base_class_offset(lv, (S1586C8*)(S1586C6*), ABISELECT(144,80), "S1586C1");
    check_base_class_offset(lv, (S1586C6*)(S1586C5*), ABISELECT(32,20), "S1586C1");
    check_base_class_offset(lv, (S1586C5*), ABISELECT(32,20), "S1586C1");
    check_field_offset(lv, s1586c1f0, ABISELECT(20,16), "S1586C1.s1586c1f0");
    test_class_info(&lv, &cd_S1586C1);
    dp->~S1586C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1586C1(Test_S1586C1, "S1586C1", ABISELECT(176,100));

#else // __cplusplus

extern void _ZN7S1586C1C1Ev();
extern void _ZN7S1586C1D2Ev();
Name_Map name_map_S1586C1[] = {
  NSPAIR(_ZN7S1586C1C1Ev),
  NSPAIR(_ZN7S1586C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1586C4;
extern VTBL_ENTRY _ZTI7S1586C4[];
extern  VTBL_ENTRY _ZTV7S1586C4[];
extern Class_Descriptor cd_S1586C3;
extern VTBL_ENTRY _ZTI7S1586C3[];
extern  VTBL_ENTRY _ZTV7S1586C3[];
extern Class_Descriptor cd_S1586C2;
extern VTBL_ENTRY _ZTI7S1586C2[];
extern  VTBL_ENTRY _ZTV7S1586C2[];
extern Class_Descriptor cd_S1586C8;
extern VTBL_ENTRY _ZTI7S1586C8[];
extern  VTBL_ENTRY _ZTV7S1586C8[];
extern Class_Descriptor cd_S1586C7;
extern VTBL_ENTRY _ZTI7S1586C7[];
extern  VTBL_ENTRY _ZTV7S1586C7[];
extern Class_Descriptor cd_S1586C8;
extern VTBL_ENTRY _ZTI7S1586C8[];
extern  VTBL_ENTRY _ZTV7S1586C8[];
extern Class_Descriptor cd_S1586C6;
extern VTBL_ENTRY _ZTI7S1586C6[];
extern  VTBL_ENTRY _ZTV7S1586C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1586C6[];
extern Class_Descriptor cd_S1586C5;
extern VTBL_ENTRY _ZTI7S1586C5[];
extern  VTBL_ENTRY _ZTV7S1586C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1586C5[];
static Base_Class bases_S1586C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1586C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S1586C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1586C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1586C8,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S1586C7,    ABISELECT(72,40), //bcp->offset
    55, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1586C8,    ABISELECT(144,80), //bcp->offset
    71, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1586C6,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1586C5,    ABISELECT(32,20), //bcp->offset
    25, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1586C1[];
extern void _ZN7S1586C42v9Ev();
extern void _ZN7S1586C43v10Ev();
extern void _ZN7S1586C1D1Ev();
extern void _ZN7S1586C1D0Ev();
extern void _ZN7S1586C33v11Ev();
extern void _ZN7S1586C23v12Ev();
extern void _ZN7S1586C23v13Ev();
extern void _ZN7S1586C23v14Ev();
extern void _ZN7S1586C23v15Ev();
extern void _ZN7S1586C23v16Ev();
extern void _ZN7S1586C23v17Ev();
extern void _ZN7S1586C12v1Ev();
extern void _ZN7S1586C12v2Ev();
extern void _ZN7S1586C12v3Ev();
extern void _ZN7S1586C12v4Ev();
extern void _ZN7S1586C12v5Ev();
extern void _ZN7S1586C12v6Ev();
extern void _ZN7S1586C12v7Ev();
extern void _ZN7S1586C12v8Ev();
extern void ABISELECT(_ZTv0_n40_N7S1586C1D1Ev,_ZTv0_n20_N7S1586C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S1586C1D1Ev,_ZThn20_N7S1586C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1586C1D0Ev,_ZTv0_n20_N7S1586C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S1586C1D0Ev,_ZThn20_N7S1586C1D0Ev)() __attribute__((weak));
extern void _ZN7S1586C63v25Ev();
extern void _ZN7S1586C63v26Ev();
extern void _ZN7S1586C63v27Ev();
extern void _ZN7S1586C63v28Ev();
extern void _ZN7S1586C63v29Ev();
extern void _ZN7S1586C63v30Ev();
extern void _ZN7S1586C63v31Ev();
extern void _ZN7S1586C63v32Ev();
extern void _ZN7S1586C53v33Ev();
extern void _ZN7S1586C53v34Ev();
extern void _ZN7S1586C53v35Ev();
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
extern void _ZN7S1586C73v22Ev();
extern void _ZN7S1586C73v23Ev();
extern void _ZN7S1586C73v24Ev();
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
static  VTBL_ENTRY vtc_S1586C1[] = {
  ABISELECT(144,80),
  ABISELECT(72,40),
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C1[0]),
  (VTBL_ENTRY)&_ZN7S1586C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1586C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1586C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1586C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1586C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1586C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1586C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1586C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1586C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1586C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1586C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1586C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1586C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1586C12v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(112,60),
  ABISELECT(40,20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1586C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1586C1D1Ev,_ZTv0_n20_N7S1586C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1586C1D0Ev,_ZTv0_n20_N7S1586C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1586C63v25Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v26Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v27Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v28Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v29Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v30Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v32Ev,
  (VTBL_ENTRY)&_ZN7S1586C53v33Ev,
  (VTBL_ENTRY)&_ZN7S1586C53v34Ev,
  (VTBL_ENTRY)&_ZN7S1586C53v35Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S1586C1[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI7S1586C1[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
};
extern VTBL_ENTRY _ZTV7S1586C1[];
extern void ABISELECT(_ZTv0_n40_N7S1586C5D1Ev,_ZTv0_n20_N7S1586C5D1Ev)();
extern void _ZN7S1586C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1586C5D0Ev,_ZTv0_n20_N7S1586C5D0Ev)();
extern void _ZN7S1586C5D0Ev() __attribute__((weak));
extern void _ZN7S1586C63v25Ev();
extern void _ZN7S1586C63v26Ev();
extern void _ZN7S1586C63v27Ev();
extern void _ZN7S1586C63v28Ev();
extern void _ZN7S1586C63v29Ev();
extern void _ZN7S1586C63v30Ev();
extern void _ZN7S1586C63v31Ev();
extern void _ZN7S1586C63v32Ev();
extern void _ZN7S1586C53v33Ev();
extern void _ZN7S1586C53v34Ev();
extern void _ZN7S1586C53v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1586C5__7S1586C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1586C5D1Ev,_ZTv0_n20_N7S1586C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1586C5D0Ev,_ZTv0_n20_N7S1586C5D0Ev),
  (VTBL_ENTRY)&_ZN7S1586C63v25Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v26Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v27Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v28Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v29Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v30Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v32Ev,
  (VTBL_ENTRY)&_ZN7S1586C53v33Ev,
  (VTBL_ENTRY)&_ZN7S1586C53v34Ev,
  (VTBL_ENTRY)&_ZN7S1586C53v35Ev,
};
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
extern void _ZN7S1586C73v22Ev();
extern void _ZN7S1586C73v23Ev();
extern void _ZN7S1586C73v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1586C7__7S1586C5__7S1586C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S1586C5[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v24Ev,
};
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1586C8__A1__7S1586C5__7S1586C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S1586C5[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
};
extern void _ZN7S1586C6D1Ev();
extern void _ZN7S1586C6D0Ev();
extern void _ZN7S1586C63v25Ev();
extern void _ZN7S1586C63v26Ev();
extern void _ZN7S1586C63v27Ev();
extern void _ZN7S1586C63v28Ev();
extern void _ZN7S1586C63v29Ev();
extern void _ZN7S1586C63v30Ev();
extern void _ZN7S1586C63v31Ev();
extern void _ZN7S1586C63v32Ev();
static  VTBL_ENTRY _tg__ZTV7S1586C6__7S1586C1[] = {
  ABISELECT(112,60),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1586C6[0]),
  (VTBL_ENTRY)&_ZN7S1586C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1586C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v25Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v26Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v27Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v28Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v29Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v30Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v31Ev,
  (VTBL_ENTRY)&_ZN7S1586C63v32Ev,
};
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
extern void _ZN7S1586C73v22Ev();
extern void _ZN7S1586C73v23Ev();
extern void _ZN7S1586C73v24Ev();
static  VTBL_ENTRY _tg__ZTV7S1586C7__7S1586C6__7S1586C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S1586C6[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1586C73v24Ev,
};
extern void _ZN7S1586C83v18Ev();
extern void _ZN7S1586C83v19Ev();
extern void _ZN7S1586C83v20Ev();
extern void _ZN7S1586C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1586C8__A1__7S1586C6__7S1586C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S1586C6[0]),
  (VTBL_ENTRY)&_ZN7S1586C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v20Ev,
  (VTBL_ENTRY)&_ZN7S1586C83v21Ev,
};
static  VTT_ENTRY vtt_S1586C1[] = {
  {&(_ZTV7S1586C1[6]),  6,81},
  {&(_ZTV7S1586C1[42]),  42,81},
  {&(_ZTV7S1586C1[42]),  42,81},
  {&(_ZTV7S1586C1[64]),  64,81},
  {&(_ZTV7S1586C1[77]),  77,81},
  {&(_tg__ZTV7S1586C5__7S1586C1[14]),  14,27},
  {&(_tg__ZTV7S1586C5__7S1586C1[14]),  14,27},
  {&(_tg__ZTV7S1586C7__7S1586C5__7S1586C1[9]),  9,16},
  {&(_tg__ZTV7S1586C8__A1__7S1586C5__7S1586C1[6]),  6,10},
  {&(_tg__ZTV7S1586C6__7S1586C1[4]),  4,14},
  {&(_tg__ZTV7S1586C7__7S1586C6__7S1586C1[9]),  9,16},
  {&(_tg__ZTV7S1586C8__A1__7S1586C6__7S1586C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S1586C1[];
extern  VTBL_ENTRY _ZTV7S1586C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1586C1[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1586C5D0Ev,_ZTv0_n20_N7S1586C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S1586C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1586C5D1Ev,_ZTv0_n20_N7S1586C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S1586C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1586C1D0Ev,_ZTv0_n20_N7S1586C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1586C1D0Ev,_ZThn20_N7S1586C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1586C1D1Ev,_ZTv0_n20_N7S1586C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1586C1D1Ev,_ZThn20_N7S1586C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1586C1 = {  "S1586C1", // class name
  bases_S1586C1, 8,
  &(vtc_S1586C1[0]), // expected_vtbl_contents
  &(vtt_S1586C1[0]), // expected_vtt_contents
  ABISELECT(176,100), // object size
  NSPAIRA(_ZTI7S1586C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1586C1),81, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1586C1),12, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5071C3_nt  {
  ::S10180C13 s5071c3f0;
  int s5071c3f1[2];
  char s5071c3f2;
  virtual  ~S5071C3_nt(); // _ZN10S5071C3_ntD1Ev
  virtual void  v4(); // _ZN10S5071C3_nt2v4Ev
  virtual void  v5(); // _ZN10S5071C3_nt2v5Ev
  virtual void  v6(); // _ZN10S5071C3_nt2v6Ev
  S5071C3_nt(); // tgen
};
//SIG(-1 S5071C3_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5071C3_nt ::~S5071C3_nt(){ note_dtor("S5071C3_nt", this);}
void  S5071C3_nt ::v4(){vfunc_called(this, "_ZN10S5071C3_nt2v4Ev");}
void  S5071C3_nt ::v5(){vfunc_called(this, "_ZN10S5071C3_nt2v5Ev");}
void  S5071C3_nt ::v6(){vfunc_called(this, "_ZN10S5071C3_nt2v6Ev");}
S5071C3_nt ::S5071C3_nt(){ note_ctor("S5071C3_nt", this);} // tgen

//skip512 S5071C3_nt

#else // __cplusplus

extern void _ZN10S5071C3_ntC1Ev();
extern void _ZN10S5071C3_ntD1Ev();
Name_Map name_map_S5071C3_nt[] = {
  NSPAIR(_ZN10S5071C3_ntC1Ev),
  NSPAIR(_ZN10S5071C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5071C3_nt[];
extern void _ZN10S5071C3_ntD1Ev();
extern void _ZN10S5071C3_ntD0Ev();
extern void _ZN10S5071C3_nt2v4Ev();
extern void _ZN10S5071C3_nt2v5Ev();
extern void _ZN10S5071C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S5071C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5071C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5071C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5071C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5071C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5071C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5071C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S5071C3_nt[];
VTBL_ENTRY *P__ZTI10S5071C3_nt = _ZTI10S5071C3_nt; 
extern  VTBL_ENTRY _ZTV10S5071C3_nt[];
Class_Descriptor cd_S5071C3_nt = {  "S5071C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5071C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S5071C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5071C3_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  S5071C2_nt  : S5071C3_nt {
  void *s5071c2f0;
  virtual void  v7(); // _ZN10S5071C2_nt2v7Ev
  virtual void  v8(); // _ZN10S5071C2_nt2v8Ev
  ~S5071C2_nt(); // tgen
  S5071C2_nt(); // tgen
};
//SIG(-1 S5071C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5071C2_nt ::v7(){vfunc_called(this, "_ZN10S5071C2_nt2v7Ev");}
void  S5071C2_nt ::v8(){vfunc_called(this, "_ZN10S5071C2_nt2v8Ev");}
S5071C2_nt ::~S5071C2_nt(){ note_dtor("S5071C2_nt", this);} // tgen
S5071C2_nt ::S5071C2_nt(){ note_ctor("S5071C2_nt", this);} // tgen

//skip512 S5071C2_nt

#else // __cplusplus

extern void _ZN10S5071C2_ntC1Ev();
extern void _ZN10S5071C2_ntD1Ev();
Name_Map name_map_S5071C2_nt[] = {
  NSPAIR(_ZN10S5071C2_ntC1Ev),
  NSPAIR(_ZN10S5071C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5071C3_nt;
extern VTBL_ENTRY _ZTI10S5071C3_nt[];
extern  VTBL_ENTRY _ZTV10S5071C3_nt[];
static Base_Class bases_S5071C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5071C3_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 _ZTI10S5071C2_nt[];
extern void _ZN10S5071C2_ntD1Ev();
extern void _ZN10S5071C2_ntD0Ev();
extern void _ZN10S5071C3_nt2v4Ev();
extern void _ZN10S5071C3_nt2v5Ev();
extern void _ZN10S5071C3_nt2v6Ev();
extern void _ZN10S5071C2_nt2v7Ev();
extern void _ZN10S5071C2_nt2v8Ev();
static  VTBL_ENTRY vtc_S5071C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5071C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5071C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5071C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5071C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5071C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5071C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5071C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5071C2_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S5071C2_nt[];
VTBL_ENTRY *P__ZTI10S5071C2_nt = _ZTI10S5071C2_nt; 
extern  VTBL_ENTRY _ZTV10S5071C2_nt[];
Class_Descriptor cd_S5071C2_nt = {  "S5071C2_nt", // class name
  bases_S5071C2_nt, 1,
  &(vtc_S5071C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S5071C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5071C2_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  S5071C1  : S5071C2_nt {
  int s5071c1f0;
  void *s5071c1f1;
  int s5071c1f2;
  ::S15696C5_nt s5071c1f3;
  ::S10180C54 s5071c1f4;
  ::S10180C161 s5071c1f5;
  ::S10180C123 s5071c1f6;
  void *s5071c1f7;
  char s5071c1f8;
  __tsi64 s5071c1f9;
  char s5071c1f10[4];
  ::S10180C93 s5071c1f11;
  char s5071c1f12[2];
  int s5071c1f13;
  virtual void  v1(); // _ZN7S5071C12v1Ev
  virtual void  v2(); // _ZN7S5071C12v2Ev
  virtual void  v3(); // _ZN7S5071C12v3Ev
  ~S5071C1(); // tgen
  S5071C1(); // tgen
};
//SIG(1 S5071C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} v1 v2 v3 Fi Fp Fi FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} FC10{ m Fp Fi[2] FC11{ m}} FC12{ m Fp[3] FC13{ m Fi[2]} FC4 FL[2] Fc} Fp Fc FL Fc[4] FC14{ m FL} Fc[2] Fi}


void  S5071C1 ::v1(){vfunc_called(this, "_ZN7S5071C12v1Ev");}
void  S5071C1 ::v2(){vfunc_called(this, "_ZN7S5071C12v2Ev");}
void  S5071C1 ::v3(){vfunc_called(this, "_ZN7S5071C12v3Ev");}
S5071C1 ::~S5071C1(){ note_dtor("S5071C1", this);} // tgen
S5071C1 ::S5071C1(){ note_ctor("S5071C1", this);} // tgen

static void Test_S5071C1()
{
  extern Class_Descriptor cd_S5071C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,51)];
    init_test(&cd_S5071C1, buf);
    S5071C1 *dp, &lv = *(dp=new (buf) S5071C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,200), "sizeof(S5071C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5071C1)");
    check_base_class_offset(lv, (S5071C3_nt*)(S5071C2_nt*), 0, "S5071C1");
    check_base_class_offset(lv, (S5071C2_nt*), 0, "S5071C1");
    check_field_offset(lv, s5071c1f0, ABISELECT(48,32), "S5071C1.s5071c1f0");
    check_field_offset(lv, s5071c1f1, ABISELECT(56,36), "S5071C1.s5071c1f1");
    check_field_offset(lv, s5071c1f2, ABISELECT(64,40), "S5071C1.s5071c1f2");
    check_field_offset(lv, s5071c1f3, ABISELECT(72,44), "S5071C1.s5071c1f3");
    check_field_offset(lv, s5071c1f4, ABISELECT(104,76), "S5071C1.s5071c1f4");
    check_field_offset(lv, s5071c1f5, ABISELECT(128,96), "S5071C1.s5071c1f5");
    check_field_offset(lv, s5071c1f6, ABISELECT(152,112), "S5071C1.s5071c1f6");
    check_field_offset(lv, s5071c1f7, ABISELECT(224,164), "S5071C1.s5071c1f7");
    check_field_offset(lv, s5071c1f8, ABISELECT(232,168), "S5071C1.s5071c1f8");
    check_field_offset(lv, s5071c1f9, ABISELECT(240,172), "S5071C1.s5071c1f9");
    check_field_offset(lv, s5071c1f10, ABISELECT(248,180), "S5071C1.s5071c1f10");
    check_field_offset(lv, s5071c1f11, ABISELECT(256,184), "S5071C1.s5071c1f11");
    check_field_offset(lv, s5071c1f12, ABISELECT(264,192), "S5071C1.s5071c1f12");
    check_field_offset(lv, s5071c1f13, ABISELECT(268,196), "S5071C1.s5071c1f13");
    test_class_info(&lv, &cd_S5071C1);
    dp->~S5071C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5071C1(Test_S5071C1, "S5071C1", ABISELECT(272,200));

#else // __cplusplus

extern void _ZN7S5071C1C1Ev();
extern void _ZN7S5071C1D1Ev();
Name_Map name_map_S5071C1[] = {
  NSPAIR(_ZN7S5071C1C1Ev),
  NSPAIR(_ZN7S5071C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5071C3_nt;
extern VTBL_ENTRY _ZTI10S5071C3_nt[];
extern  VTBL_ENTRY _ZTV10S5071C3_nt[];
extern Class_Descriptor cd_S5071C2_nt;
extern VTBL_ENTRY _ZTI10S5071C2_nt[];
extern  VTBL_ENTRY _ZTV10S5071C2_nt[];
static Base_Class bases_S5071C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5071C3_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_S5071C2_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 _ZTI7S5071C1[];
extern void _ZN7S5071C1D1Ev();
extern void _ZN7S5071C1D0Ev();
extern void _ZN10S5071C3_nt2v4Ev();
extern void _ZN10S5071C3_nt2v5Ev();
extern void _ZN10S5071C3_nt2v6Ev();
extern void _ZN10S5071C2_nt2v7Ev();
extern void _ZN10S5071C2_nt2v8Ev();
extern void _ZN7S5071C12v1Ev();
extern void _ZN7S5071C12v2Ev();
extern void _ZN7S5071C12v3Ev();
static  VTBL_ENTRY vtc_S5071C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5071C1[0]),
  (VTBL_ENTRY)&_ZN7S5071C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5071C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5071C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5071C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5071C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5071C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5071C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S5071C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5071C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5071C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5071C1[];
extern  VTBL_ENTRY _ZTV7S5071C1[];
Class_Descriptor cd_S5071C1 = {  "S5071C1", // class name
  bases_S5071C1, 2,
  &(vtc_S5071C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,200), // object size
  NSPAIRA(_ZTI7S5071C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5071C1),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  S5070C3  {
  ::S10180C13 s5070c3f0;
  int s5070c3f1[2];
  char s5070c3f2;
  virtual  ~S5070C3(); // _ZN7S5070C3D1Ev
  virtual void  v4(); // _ZN7S5070C32v4Ev
  virtual void  v5(); // _ZN7S5070C32v5Ev
  virtual void  v6(); // _ZN7S5070C32v6Ev
  S5070C3(); // tgen
};
//SIG(-1 S5070C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5070C3 ::~S5070C3(){ note_dtor("S5070C3", this);}
void  S5070C3 ::v4(){vfunc_called(this, "_ZN7S5070C32v4Ev");}
void  S5070C3 ::v5(){vfunc_called(this, "_ZN7S5070C32v5Ev");}
void  S5070C3 ::v6(){vfunc_called(this, "_ZN7S5070C32v6Ev");}
S5070C3 ::S5070C3(){ note_ctor("S5070C3", this);} // tgen

static void Test_S5070C3()
{
  extern Class_Descriptor cd_S5070C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5070C3, buf);
    S5070C3 *dp, &lv = *(dp=new (buf) S5070C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5070C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5070C3)");
    check_field_offset(lv, s5070c3f0, ABISELECT(8,4), "S5070C3.s5070c3f0");
    check_field_offset(lv, s5070c3f1, ABISELECT(24,16), "S5070C3.s5070c3f1");
    check_field_offset(lv, s5070c3f2, ABISELECT(32,24), "S5070C3.s5070c3f2");
    test_class_info(&lv, &cd_S5070C3);
    dp->~S5070C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5070C3(Test_S5070C3, "S5070C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5070C3C1Ev();
extern void _ZN7S5070C3D1Ev();
Name_Map name_map_S5070C3[] = {
  NSPAIR(_ZN7S5070C3C1Ev),
  NSPAIR(_ZN7S5070C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5070C3[];
extern void _ZN7S5070C3D1Ev();
extern void _ZN7S5070C3D0Ev();
extern void _ZN7S5070C32v4Ev();
extern void _ZN7S5070C32v5Ev();
extern void _ZN7S5070C32v6Ev();
static  VTBL_ENTRY vtc_S5070C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5070C3[0]),
  (VTBL_ENTRY)&_ZN7S5070C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5070C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5070C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5070C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5070C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5070C3[];
extern  VTBL_ENTRY _ZTV7S5070C3[];
Class_Descriptor cd_S5070C3 = {  "S5070C3", // class name
  0,0,//no base classes
  &(vtc_S5070C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5070C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5070C3),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  S5070C2  : S5070C3 {
  void *s5070c2f0;
  virtual void  v7(); // _ZN7S5070C22v7Ev
  virtual void  v8(); // _ZN7S5070C22v8Ev
  ~S5070C2(); // tgen
  S5070C2(); // tgen
};
//SIG(-1 S5070C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5070C2 ::v7(){vfunc_called(this, "_ZN7S5070C22v7Ev");}
void  S5070C2 ::v8(){vfunc_called(this, "_ZN7S5070C22v8Ev");}
S5070C2 ::~S5070C2(){ note_dtor("S5070C2", this);} // tgen
S5070C2 ::S5070C2(){ note_ctor("S5070C2", this);} // tgen

static void Test_S5070C2()
{
  extern Class_Descriptor cd_S5070C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5070C2, buf);
    S5070C2 *dp, &lv = *(dp=new (buf) S5070C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5070C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5070C2)");
    check_base_class_offset(lv, (S5070C3*), 0, "S5070C2");
    check_field_offset(lv, s5070c2f0, ABISELECT(40,28), "S5070C2.s5070c2f0");
    test_class_info(&lv, &cd_S5070C2);
    dp->~S5070C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5070C2(Test_S5070C2, "S5070C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5070C2C1Ev();
extern void _ZN7S5070C2D1Ev();
Name_Map name_map_S5070C2[] = {
  NSPAIR(_ZN7S5070C2C1Ev),
  NSPAIR(_ZN7S5070C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5070C3;
extern VTBL_ENTRY _ZTI7S5070C3[];
extern  VTBL_ENTRY _ZTV7S5070C3[];
static Base_Class bases_S5070C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5070C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5070C2[];
extern void _ZN7S5070C2D1Ev();
extern void _ZN7S5070C2D0Ev();
extern void _ZN7S5070C32v4Ev();
extern void _ZN7S5070C32v5Ev();
extern void _ZN7S5070C32v6Ev();
extern void _ZN7S5070C22v7Ev();
extern void _ZN7S5070C22v8Ev();
static  VTBL_ENTRY vtc_S5070C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5070C2[0]),
  (VTBL_ENTRY)&_ZN7S5070C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5070C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5070C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5070C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5070C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5070C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5070C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5070C2[];
extern  VTBL_ENTRY _ZTV7S5070C2[];
Class_Descriptor cd_S5070C2 = {  "S5070C2", // class name
  bases_S5070C2, 1,
  &(vtc_S5070C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5070C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5070C2),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  S5070C1  : S5070C2 {
  int s5070c1f0;
  void *s5070c1f1;
  int s5070c1f2;
  ::S15695C5_nt s5070c1f3;
  ::S10180C54 s5070c1f4;
  ::S10180C161 s5070c1f5;
  ::S10180C123 s5070c1f6;
  void *s5070c1f7;
  char s5070c1f8;
  __tsi64 s5070c1f9;
  char s5070c1f10[4];
  ::S10179C93 s5070c1f11;
  char s5070c1f12[2];
  int s5070c1f13;
  virtual void  v1(); // _ZN7S5070C12v1Ev
  virtual void  v2(); // _ZN7S5070C12v2Ev
  virtual void  v3(); // _ZN7S5070C12v3Ev
  ~S5070C1(); // tgen
  S5070C1(); // tgen
};
//SIG(1 S5070C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} v1 v2 v3 Fi Fp Fi FC6{ m FC7{ Fl[4]}} FC8{ m Fp FC9{ Fi[4]}} FC10{ m Fp Fi[2] FC11{ m}} FC12{ m Fp[3] FC13{ m Fi[2]} FC4 FL[2] Fc} Fp Fc FL Fc[4] FC14{ m Fl} Fc[2] Fi}


void  S5070C1 ::v1(){vfunc_called(this, "_ZN7S5070C12v1Ev");}
void  S5070C1 ::v2(){vfunc_called(this, "_ZN7S5070C12v2Ev");}
void  S5070C1 ::v3(){vfunc_called(this, "_ZN7S5070C12v3Ev");}
S5070C1 ::~S5070C1(){ note_dtor("S5070C1", this);} // tgen
S5070C1 ::S5070C1(){ note_ctor("S5070C1", this);} // tgen

static void Test_S5070C1()
{
  extern Class_Descriptor cd_S5070C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,46)];
    init_test(&cd_S5070C1, buf);
    S5070C1 *dp, &lv = *(dp=new (buf) S5070C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,180), "sizeof(S5070C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5070C1)");
    check_base_class_offset(lv, (S5070C3*)(S5070C2*), 0, "S5070C1");
    check_base_class_offset(lv, (S5070C2*), 0, "S5070C1");
    check_field_offset(lv, s5070c1f0, ABISELECT(48,32), "S5070C1.s5070c1f0");
    check_field_offset(lv, s5070c1f1, ABISELECT(56,36), "S5070C1.s5070c1f1");
    check_field_offset(lv, s5070c1f2, ABISELECT(64,40), "S5070C1.s5070c1f2");
    check_field_offset(lv, s5070c1f3, ABISELECT(72,44), "S5070C1.s5070c1f3");
    check_field_offset(lv, s5070c1f4, ABISELECT(104,60), "S5070C1.s5070c1f4");
    check_field_offset(lv, s5070c1f5, ABISELECT(128,80), "S5070C1.s5070c1f5");
    check_field_offset(lv, s5070c1f6, ABISELECT(152,96), "S5070C1.s5070c1f6");
    check_field_offset(lv, s5070c1f7, ABISELECT(224,148), "S5070C1.s5070c1f7");
    check_field_offset(lv, s5070c1f8, ABISELECT(232,152), "S5070C1.s5070c1f8");
    check_field_offset(lv, s5070c1f9, ABISELECT(240,156), "S5070C1.s5070c1f9");
    check_field_offset(lv, s5070c1f10, ABISELECT(248,164), "S5070C1.s5070c1f10");
    check_field_offset(lv, s5070c1f11, ABISELECT(256,168), "S5070C1.s5070c1f11");
    check_field_offset(lv, s5070c1f12, ABISELECT(264,172), "S5070C1.s5070c1f12");
    check_field_offset(lv, s5070c1f13, ABISELECT(268,176), "S5070C1.s5070c1f13");
    test_class_info(&lv, &cd_S5070C1);
    dp->~S5070C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5070C1(Test_S5070C1, "S5070C1", ABISELECT(272,180));

#else // __cplusplus

extern void _ZN7S5070C1C1Ev();
extern void _ZN7S5070C1D1Ev();
Name_Map name_map_S5070C1[] = {
  NSPAIR(_ZN7S5070C1C1Ev),
  NSPAIR(_ZN7S5070C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5070C3;
extern VTBL_ENTRY _ZTI7S5070C3[];
extern  VTBL_ENTRY _ZTV7S5070C3[];
extern Class_Descriptor cd_S5070C2;
extern VTBL_ENTRY _ZTI7S5070C2[];
extern  VTBL_ENTRY _ZTV7S5070C2[];
static Base_Class bases_S5070C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5070C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S5070C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5070C1[];
extern void _ZN7S5070C1D1Ev();
extern void _ZN7S5070C1D0Ev();
extern void _ZN7S5070C32v4Ev();
extern void _ZN7S5070C32v5Ev();
extern void _ZN7S5070C32v6Ev();
extern void _ZN7S5070C22v7Ev();
extern void _ZN7S5070C22v8Ev();
extern void _ZN7S5070C12v1Ev();
extern void _ZN7S5070C12v2Ev();
extern void _ZN7S5070C12v3Ev();
static  VTBL_ENTRY vtc_S5070C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5070C1[0]),
  (VTBL_ENTRY)&_ZN7S5070C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5070C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5070C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5070C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5070C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5070C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5070C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5070C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5070C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5070C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5070C1[];
extern  VTBL_ENTRY _ZTV7S5070C1[];
Class_Descriptor cd_S5070C1 = {  "S5070C1", // class name
  bases_S5070C1, 2,
  &(vtc_S5070C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,180), // object size
  NSPAIRA(_ZTI7S5070C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5070C1),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  S20563C7  {
  __tsi64 s20563c7f0;
  virtual void  v25(); // _ZN8S20563C73v25Ev
  virtual void  v26(); // _ZN8S20563C73v26Ev
  ~S20563C7(); // tgen
  S20563C7(); // tgen
};
//SIG(-1 S20563C7) C1{ v1 v2 FL}


void  S20563C7 ::v25(){vfunc_called(this, "_ZN8S20563C73v25Ev");}
void  S20563C7 ::v26(){vfunc_called(this, "_ZN8S20563C73v26Ev");}
S20563C7 ::~S20563C7(){ note_dtor("S20563C7", this);} // tgen
S20563C7 ::S20563C7(){ note_ctor("S20563C7", this);} // tgen

static void Test_S20563C7()
{
  extern Class_Descriptor cd_S20563C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20563C7, buf);
    S20563C7 *dp, &lv = *(dp=new (buf) S20563C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20563C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20563C7)");
    check_field_offset(lv, s20563c7f0, ABISELECT(8,4), "S20563C7.s20563c7f0");
    test_class_info(&lv, &cd_S20563C7);
    dp->~S20563C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20563C7(Test_S20563C7, "S20563C7", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20563C7C1Ev();
extern void _ZN8S20563C7D1Ev();
Name_Map name_map_S20563C7[] = {
  NSPAIR(_ZN8S20563C7C1Ev),
  NSPAIR(_ZN8S20563C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20563C7[];
extern void _ZN8S20563C73v25Ev();
extern void _ZN8S20563C73v26Ev();
static  VTBL_ENTRY vtc_S20563C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C7[0]),
  (VTBL_ENTRY)&_ZN8S20563C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20563C73v26Ev,
};
extern VTBL_ENTRY _ZTI8S20563C7[];
extern  VTBL_ENTRY _ZTV8S20563C7[];
Class_Descriptor cd_S20563C7 = {  "S20563C7", // class name
  0,0,//no base classes
  &(vtc_S20563C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20563C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20563C7),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  S20563C6  : S20563C7 {
  char s20563c6f0;
  virtual  ~S20563C6(); // _ZN8S20563C6D1Ev
  virtual void  v27(); // _ZN8S20563C63v27Ev
  S20563C6(); // tgen
};
//SIG(-1 S20563C6) C1{ BC2{ v2 v3 FL} vd v1 Fc}


 S20563C6 ::~S20563C6(){ note_dtor("S20563C6", this);}
void  S20563C6 ::v27(){vfunc_called(this, "_ZN8S20563C63v27Ev");}
S20563C6 ::S20563C6(){ note_ctor("S20563C6", this);} // tgen

static void Test_S20563C6()
{
  extern Class_Descriptor cd_S20563C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20563C6, buf);
    S20563C6 *dp, &lv = *(dp=new (buf) S20563C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20563C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20563C6)");
    check_base_class_offset(lv, (S20563C7*), 0, "S20563C6");
    check_field_offset(lv, s20563c6f0, ABISELECT(16,12), "S20563C6.s20563c6f0");
    test_class_info(&lv, &cd_S20563C6);
    dp->~S20563C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20563C6(Test_S20563C6, "S20563C6", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20563C6C1Ev();
extern void _ZN8S20563C6D1Ev();
Name_Map name_map_S20563C6[] = {
  NSPAIR(_ZN8S20563C6C1Ev),
  NSPAIR(_ZN8S20563C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20563C7;
extern VTBL_ENTRY _ZTI8S20563C7[];
extern  VTBL_ENTRY _ZTV8S20563C7[];
static Base_Class bases_S20563C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20563C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20563C6[];
extern void _ZN8S20563C73v25Ev();
extern void _ZN8S20563C73v26Ev();
extern void _ZN8S20563C6D1Ev();
extern void _ZN8S20563C6D0Ev();
extern void _ZN8S20563C63v27Ev();
static  VTBL_ENTRY vtc_S20563C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C6[0]),
  (VTBL_ENTRY)&_ZN8S20563C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20563C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20563C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20563C63v27Ev,
};
extern VTBL_ENTRY _ZTI8S20563C6[];
extern  VTBL_ENTRY _ZTV8S20563C6[];
Class_Descriptor cd_S20563C6 = {  "S20563C6", // class name
  bases_S20563C6, 1,
  &(vtc_S20563C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20563C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20563C6),7, //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  S20563C5  : S20563C6 {
  virtual  ~S20563C5(); // _ZN8S20563C5D1Ev
  virtual void  v28(); // _ZN8S20563C53v28Ev
  virtual void  v29(); // _ZN8S20563C53v29Ev
  virtual void  v30(); // _ZN8S20563C53v30Ev
  virtual void  v31(); // _ZN8S20563C53v31Ev
  virtual void  v32(); // _ZN8S20563C53v32Ev
  virtual void  v33(); // _ZN8S20563C53v33Ev
  S20563C5(); // tgen
};
//SIG(-1 S20563C5) C1{ BC2{ BC3{ v7 v8 FL} vd v9 Fc} vd v1 v2 v3 v4 v5 v6}


 S20563C5 ::~S20563C5(){ note_dtor("S20563C5", this);}
void  S20563C5 ::v28(){vfunc_called(this, "_ZN8S20563C53v28Ev");}
void  S20563C5 ::v29(){vfunc_called(this, "_ZN8S20563C53v29Ev");}
void  S20563C5 ::v30(){vfunc_called(this, "_ZN8S20563C53v30Ev");}
void  S20563C5 ::v31(){vfunc_called(this, "_ZN8S20563C53v31Ev");}
void  S20563C5 ::v32(){vfunc_called(this, "_ZN8S20563C53v32Ev");}
void  S20563C5 ::v33(){vfunc_called(this, "_ZN8S20563C53v33Ev");}
S20563C5 ::S20563C5(){ note_ctor("S20563C5", this);} // tgen

static void Test_S20563C5()
{
  extern Class_Descriptor cd_S20563C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20563C5, buf);
    S20563C5 *dp, &lv = *(dp=new (buf) S20563C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20563C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20563C5)");
    check_base_class_offset(lv, (S20563C7*)(S20563C6*), 0, "S20563C5");
    check_base_class_offset(lv, (S20563C6*), 0, "S20563C5");
    test_class_info(&lv, &cd_S20563C5);
    dp->~S20563C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20563C5(Test_S20563C5, "S20563C5", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20563C5C1Ev();
extern void _ZN8S20563C5D1Ev();
Name_Map name_map_S20563C5[] = {
  NSPAIR(_ZN8S20563C5C1Ev),
  NSPAIR(_ZN8S20563C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20563C7;
extern VTBL_ENTRY _ZTI8S20563C7[];
extern  VTBL_ENTRY _ZTV8S20563C7[];
extern Class_Descriptor cd_S20563C6;
extern VTBL_ENTRY _ZTI8S20563C6[];
extern  VTBL_ENTRY _ZTV8S20563C6[];
static Base_Class bases_S20563C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20563C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20563C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20563C5[];
extern void _ZN8S20563C73v25Ev();
extern void _ZN8S20563C73v26Ev();
extern void _ZN8S20563C5D1Ev();
extern void _ZN8S20563C5D0Ev();
extern void _ZN8S20563C63v27Ev();
extern void _ZN8S20563C53v28Ev();
extern void _ZN8S20563C53v29Ev();
extern void _ZN8S20563C53v30Ev();
extern void _ZN8S20563C53v31Ev();
extern void _ZN8S20563C53v32Ev();
extern void _ZN8S20563C53v33Ev();
static  VTBL_ENTRY vtc_S20563C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C5[0]),
  (VTBL_ENTRY)&_ZN8S20563C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20563C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20563C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20563C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20563C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v33Ev,
};
extern VTBL_ENTRY _ZTI8S20563C5[];
extern  VTBL_ENTRY _ZTV8S20563C5[];
Class_Descriptor cd_S20563C5 = {  "S20563C5", // class name
  bases_S20563C5, 2,
  &(vtc_S20563C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20563C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20563C5),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20563C4  {
  long double s20563c4f0;
  ::S20563C5 s20563c4f1;
  virtual void  v7(); // _ZN8S20563C42v7Ev
  virtual void  v8(); // _ZN8S20563C42v8Ev
  virtual void  v9(); // _ZN8S20563C42v9Ev
  virtual void  v10(); // _ZN8S20563C43v10Ev
  virtual void  v11(); // _ZN8S20563C43v11Ev
  virtual void  v12(); // _ZN8S20563C43v12Ev
  virtual void  v13(); // _ZN8S20563C43v13Ev
  virtual void  v14(); // _ZN8S20563C43v14Ev
  ~S20563C4(); // tgen
  S20563C4(); // tgen
};
//SIG(-1 S20563C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FD FC2{ BC3{ BC4{ v15 v16 FL} vd v17 Fc} vd v9 v10 v11 v12 v13 v14}}


void  S20563C4 ::v7(){vfunc_called(this, "_ZN8S20563C42v7Ev");}
void  S20563C4 ::v8(){vfunc_called(this, "_ZN8S20563C42v8Ev");}
void  S20563C4 ::v9(){vfunc_called(this, "_ZN8S20563C42v9Ev");}
void  S20563C4 ::v10(){vfunc_called(this, "_ZN8S20563C43v10Ev");}
void  S20563C4 ::v11(){vfunc_called(this, "_ZN8S20563C43v11Ev");}
void  S20563C4 ::v12(){vfunc_called(this, "_ZN8S20563C43v12Ev");}
void  S20563C4 ::v13(){vfunc_called(this, "_ZN8S20563C43v13Ev");}
void  S20563C4 ::v14(){vfunc_called(this, "_ZN8S20563C43v14Ev");}
S20563C4 ::~S20563C4(){ note_dtor("S20563C4", this);} // tgen
S20563C4 ::S20563C4(){ note_ctor("S20563C4", this);} // tgen

static void Test_S20563C4()
{
  extern Class_Descriptor cd_S20563C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S20563C4, buf);
    S20563C4 *dp, &lv = *(dp=new (buf) S20563C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20563C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20563C4)");
    check_field_offset(lv, s20563c4f0, ABISELECT(16,4), "S20563C4.s20563c4f0");
    check_field_offset(lv, s20563c4f1, ABISELECT(32,16), "S20563C4.s20563c4f1");
    test_class_info(&lv, &cd_S20563C4);
    dp->~S20563C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20563C4(Test_S20563C4, "S20563C4", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20563C4C1Ev();
extern void _ZN8S20563C4D1Ev();
Name_Map name_map_S20563C4[] = {
  NSPAIR(_ZN8S20563C4C1Ev),
  NSPAIR(_ZN8S20563C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20563C4[];
extern void _ZN8S20563C42v7Ev();
extern void _ZN8S20563C42v8Ev();
extern void _ZN8S20563C42v9Ev();
extern void _ZN8S20563C43v10Ev();
extern void _ZN8S20563C43v11Ev();
extern void _ZN8S20563C43v12Ev();
extern void _ZN8S20563C43v13Ev();
extern void _ZN8S20563C43v14Ev();
static  VTBL_ENTRY vtc_S20563C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C4[0]),
  (VTBL_ENTRY)&_ZN8S20563C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v14Ev,
};
extern VTBL_ENTRY _ZTI8S20563C4[];
extern  VTBL_ENTRY _ZTV8S20563C4[];
Class_Descriptor cd_S20563C4 = {  "S20563C4", // class name
  0,0,//no base classes
  &(vtc_S20563C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20563C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20563C4),10, //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  S20563C8  {
  short s20563c8f0;
  ::S20563C7 s20563c8f1;
  virtual void  v15(); // _ZN8S20563C83v15Ev
  virtual void  v16(); // _ZN8S20563C83v16Ev
  virtual void  v17(); // _ZN8S20563C83v17Ev
  virtual void  v18(); // _ZN8S20563C83v18Ev
  ~S20563C8(); // tgen
  S20563C8(); // tgen
};
//SIG(-1 S20563C8) C1{ v1 v2 v3 v4 Fs FC2{ v5 v6 FL}}


void  S20563C8 ::v15(){vfunc_called(this, "_ZN8S20563C83v15Ev");}
void  S20563C8 ::v16(){vfunc_called(this, "_ZN8S20563C83v16Ev");}
void  S20563C8 ::v17(){vfunc_called(this, "_ZN8S20563C83v17Ev");}
void  S20563C8 ::v18(){vfunc_called(this, "_ZN8S20563C83v18Ev");}
S20563C8 ::~S20563C8(){ note_dtor("S20563C8", this);} // tgen
S20563C8 ::S20563C8(){ note_ctor("S20563C8", this);} // tgen

static void Test_S20563C8()
{
  extern Class_Descriptor cd_S20563C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20563C8, buf);
    S20563C8 *dp, &lv = *(dp=new (buf) S20563C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20563C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20563C8)");
    check_field_offset(lv, s20563c8f0, ABISELECT(8,4), "S20563C8.s20563c8f0");
    check_field_offset(lv, s20563c8f1, ABISELECT(16,8), "S20563C8.s20563c8f1");
    test_class_info(&lv, &cd_S20563C8);
    dp->~S20563C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20563C8(Test_S20563C8, "S20563C8", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20563C8C1Ev();
extern void _ZN8S20563C8D1Ev();
Name_Map name_map_S20563C8[] = {
  NSPAIR(_ZN8S20563C8C1Ev),
  NSPAIR(_ZN8S20563C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20563C8[];
extern void _ZN8S20563C83v15Ev();
extern void _ZN8S20563C83v16Ev();
extern void _ZN8S20563C83v17Ev();
extern void _ZN8S20563C83v18Ev();
static  VTBL_ENTRY vtc_S20563C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C8[0]),
  (VTBL_ENTRY)&_ZN8S20563C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v18Ev,
};
extern VTBL_ENTRY _ZTI8S20563C8[];
extern  VTBL_ENTRY _ZTV8S20563C8[];
Class_Descriptor cd_S20563C8 = {  "S20563C8", // class name
  0,0,//no base classes
  &(vtc_S20563C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20563C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20563C8),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  S20563C3  : S20563C4 , virtual S20563C8 {
  virtual void  v19(); // _ZN8S20563C33v19Ev
  virtual void  v20(); // _ZN8S20563C33v20Ev
  virtual void  v21(); // _ZN8S20563C33v21Ev
  virtual void  v22(); // _ZN8S20563C33v22Ev
  virtual void  v23(); // _ZN8S20563C33v23Ev
  virtual void  v24(); // _ZN8S20563C33v24Ev
  ~S20563C3(); // tgen
  S20563C3(); // tgen
};
//SIG(-1 S20563C3) C1{ BC2{ v7 v8 v9 v10 v11 v12 v13 v14 FD FC3{ BC4{ BC5{ v25 v26 FL} vd v27 Fc} vd v19 v20 v21 v22 v23 v24}} VBC6{ v15 v16 v17 v18 Fs FC5} v1 v2 v3 v4 v5 v6}


void  S20563C3 ::v19(){vfunc_called(this, "_ZN8S20563C33v19Ev");}
void  S20563C3 ::v20(){vfunc_called(this, "_ZN8S20563C33v20Ev");}
void  S20563C3 ::v21(){vfunc_called(this, "_ZN8S20563C33v21Ev");}
void  S20563C3 ::v22(){vfunc_called(this, "_ZN8S20563C33v22Ev");}
void  S20563C3 ::v23(){vfunc_called(this, "_ZN8S20563C33v23Ev");}
void  S20563C3 ::v24(){vfunc_called(this, "_ZN8S20563C33v24Ev");}
S20563C3 ::~S20563C3(){ note_dtor("S20563C3", this);} // tgen
S20563C3 ::S20563C3(){ note_ctor("S20563C3", this);} // tgen

static void Test_S20563C3()
{
  extern Class_Descriptor cd_S20563C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S20563C3, buf);
    S20563C3 *dp, &lv = *(dp=new (buf) S20563C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20563C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20563C3)");
    check_base_class_offset(lv, (S20563C4*), 0, "S20563C3");
    check_base_class_offset(lv, (S20563C8*), ABISELECT(56,32), "S20563C3");
    test_class_info(&lv, &cd_S20563C3);
    dp->~S20563C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20563C3(Test_S20563C3, "S20563C3", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20563C3C1Ev();
extern void _ZN8S20563C3D1Ev();
Name_Map name_map_S20563C3[] = {
  NSPAIR(_ZN8S20563C3C1Ev),
  NSPAIR(_ZN8S20563C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20563C4;
extern VTBL_ENTRY _ZTI8S20563C4[];
extern  VTBL_ENTRY _ZTV8S20563C4[];
extern Class_Descriptor cd_S20563C8;
extern VTBL_ENTRY _ZTI8S20563C8[];
extern  VTBL_ENTRY _ZTV8S20563C8[];
static Base_Class bases_S20563C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S20563C8,    ABISELECT(56,32), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20563C3[];
extern void _ZN8S20563C42v7Ev();
extern void _ZN8S20563C42v8Ev();
extern void _ZN8S20563C42v9Ev();
extern void _ZN8S20563C43v10Ev();
extern void _ZN8S20563C43v11Ev();
extern void _ZN8S20563C43v12Ev();
extern void _ZN8S20563C43v13Ev();
extern void _ZN8S20563C43v14Ev();
extern void _ZN8S20563C33v19Ev();
extern void _ZN8S20563C33v20Ev();
extern void _ZN8S20563C33v21Ev();
extern void _ZN8S20563C33v22Ev();
extern void _ZN8S20563C33v23Ev();
extern void _ZN8S20563C33v24Ev();
extern void _ZN8S20563C83v15Ev();
extern void _ZN8S20563C83v16Ev();
extern void _ZN8S20563C83v17Ev();
extern void _ZN8S20563C83v18Ev();
static  VTBL_ENTRY vtc_S20563C3[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C3[0]),
  (VTBL_ENTRY)&_ZN8S20563C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20563C3[0]),
  (VTBL_ENTRY)&_ZN8S20563C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v18Ev,
};
extern VTBL_ENTRY _ZTV8S20563C3[];
static  VTT_ENTRY vtt_S20563C3[] = {
  {&(_ZTV8S20563C3[3]),  3,27},
  {&(_ZTV8S20563C3[23]),  23,27},
};
extern VTBL_ENTRY _ZTI8S20563C3[];
extern  VTBL_ENTRY _ZTV8S20563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20563C3[];
Class_Descriptor cd_S20563C3 = {  "S20563C3", // class name
  bases_S20563C3, 2,
  &(vtc_S20563C3[0]), // expected_vtbl_contents
  &(vtt_S20563C3[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20563C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20563C3),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20563C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20563C2  : virtual S20563C3 , virtual S20563C5 {
  virtual  ~S20563C2(); // _ZN8S20563C2D2Ev
  virtual void  v34(); // _ZN8S20563C23v34Ev
  virtual void  v35(); // _ZN8S20563C23v35Ev
  S20563C2(); // tgen
};
//SIG(-1 S20563C2) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 v8 v9 v10 FD FC4{ BC5{ BC6{ v21 v22 FL} vd v23 Fc} vd v24 v25 v26 v27 v28 v29}} VBC7{ v11 v12 v13 v14 Fs FC6} v15 v16 v17 v18 v19 v20} VBC4 vd v1 v2}


 S20563C2 ::~S20563C2(){ note_dtor("S20563C2", this);}
void  S20563C2 ::v34(){vfunc_called(this, "_ZN8S20563C23v34Ev");}
void  S20563C2 ::v35(){vfunc_called(this, "_ZN8S20563C23v35Ev");}
S20563C2 ::S20563C2(){ note_ctor("S20563C2", this);} // tgen

static void Test_S20563C2()
{
  extern Class_Descriptor cd_S20563C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,19)];
    init_test(&cd_S20563C2, buf);
    S20563C2 *dp, &lv = *(dp=new (buf) S20563C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,72), "sizeof(S20563C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20563C2)");
    check_base_class_offset(lv, (S20563C4*)(S20563C3*), ABISELECT(16,4), "S20563C2");
    check_base_class_offset(lv, (S20563C8*)(S20563C3*), ABISELECT(72,36), "S20563C2");
    check_base_class_offset(lv, (S20563C3*), ABISELECT(16,4), "S20563C2");
    check_base_class_offset(lv, (S20563C7*)(S20563C6*)(S20563C5*), ABISELECT(104,56), "S20563C2");
    check_base_class_offset(lv, (S20563C6*)(S20563C5*), ABISELECT(104,56), "S20563C2");
    check_base_class_offset(lv, (S20563C5*), ABISELECT(104,56), "S20563C2");
    test_class_info(&lv, &cd_S20563C2);
    dp->~S20563C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20563C2(Test_S20563C2, "S20563C2", ABISELECT(128,72));

#else // __cplusplus

extern void _ZN8S20563C2C1Ev();
extern void _ZN8S20563C2D2Ev();
Name_Map name_map_S20563C2[] = {
  NSPAIR(_ZN8S20563C2C1Ev),
  NSPAIR(_ZN8S20563C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20563C4;
extern VTBL_ENTRY _ZTI8S20563C4[];
extern  VTBL_ENTRY _ZTV8S20563C4[];
extern Class_Descriptor cd_S20563C8;
extern VTBL_ENTRY _ZTI8S20563C8[];
extern  VTBL_ENTRY _ZTV8S20563C8[];
extern Class_Descriptor cd_S20563C3;
extern VTBL_ENTRY _ZTI8S20563C3[];
extern  VTBL_ENTRY _ZTV8S20563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20563C3[];
extern Class_Descriptor cd_S20563C7;
extern VTBL_ENTRY _ZTI8S20563C7[];
extern  VTBL_ENTRY _ZTV8S20563C7[];
extern Class_Descriptor cd_S20563C6;
extern VTBL_ENTRY _ZTI8S20563C6[];
extern  VTBL_ENTRY _ZTV8S20563C6[];
extern Class_Descriptor cd_S20563C5;
extern VTBL_ENTRY _ZTI8S20563C5[];
extern  VTBL_ENTRY _ZTV8S20563C5[];
static Base_Class bases_S20563C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20563C4,    ABISELECT(16,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20563C8,    ABISELECT(72,36), //bcp->offset
    40, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20563C3,    ABISELECT(16,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20563C7,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20563C6,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20563C5,    ABISELECT(104,56), //bcp->offset
    50, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20563C2[];
extern void _ZN8S20563C2D1Ev();
extern void _ZN8S20563C2D0Ev();
extern void _ZN8S20563C23v34Ev();
extern void _ZN8S20563C23v35Ev();
extern void _ZN8S20563C42v7Ev();
extern void _ZN8S20563C42v8Ev();
extern void _ZN8S20563C42v9Ev();
extern void _ZN8S20563C43v10Ev();
extern void _ZN8S20563C43v11Ev();
extern void _ZN8S20563C43v12Ev();
extern void _ZN8S20563C43v13Ev();
extern void _ZN8S20563C43v14Ev();
extern void _ZN8S20563C33v19Ev();
extern void _ZN8S20563C33v20Ev();
extern void _ZN8S20563C33v21Ev();
extern void _ZN8S20563C33v22Ev();
extern void _ZN8S20563C33v23Ev();
extern void _ZN8S20563C33v24Ev();
extern void _ZN8S20563C83v15Ev();
extern void _ZN8S20563C83v16Ev();
extern void _ZN8S20563C83v17Ev();
extern void _ZN8S20563C83v18Ev();
extern void _ZN8S20563C73v25Ev();
extern void _ZN8S20563C73v26Ev();
extern void ABISELECT(_ZTv0_n40_N8S20563C2D1Ev,_ZTv0_n20_N8S20563C2D1Ev)();
extern void ABISELECT(_ZThn104_N8S20563C2D1Ev,_ZThn56_N8S20563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20563C2D0Ev,_ZTv0_n20_N8S20563C2D0Ev)();
extern void ABISELECT(_ZThn104_N8S20563C2D0Ev,_ZThn56_N8S20563C2D0Ev)() __attribute__((weak));
extern void _ZN8S20563C63v27Ev();
extern void _ZN8S20563C53v28Ev();
extern void _ZN8S20563C53v29Ev();
extern void _ZN8S20563C53v30Ev();
extern void _ZN8S20563C53v31Ev();
extern void _ZN8S20563C53v32Ev();
extern void _ZN8S20563C53v33Ev();
static  VTBL_ENTRY vtc_S20563C2[] = {
  ABISELECT(104,56),
  ABISELECT(72,36),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C2[0]),
  (VTBL_ENTRY)&_ZN8S20563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20563C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20563C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20563C23v35Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20563C2[0]),
  (VTBL_ENTRY)&_ZN8S20563C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20563C2[0]),
  (VTBL_ENTRY)&_ZN8S20563C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20563C2[0]),
  (VTBL_ENTRY)&_ZN8S20563C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20563C73v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20563C2D1Ev,_ZTv0_n20_N8S20563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20563C2D0Ev,_ZTv0_n20_N8S20563C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20563C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v33Ev,
};
extern VTBL_ENTRY _ZTV8S20563C2[];
extern void _ZN8S20563C42v7Ev();
extern void _ZN8S20563C42v8Ev();
extern void _ZN8S20563C42v9Ev();
extern void _ZN8S20563C43v10Ev();
extern void _ZN8S20563C43v11Ev();
extern void _ZN8S20563C43v12Ev();
extern void _ZN8S20563C43v13Ev();
extern void _ZN8S20563C43v14Ev();
extern void _ZN8S20563C33v19Ev();
extern void _ZN8S20563C33v20Ev();
extern void _ZN8S20563C33v21Ev();
extern void _ZN8S20563C33v22Ev();
extern void _ZN8S20563C33v23Ev();
extern void _ZN8S20563C33v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20563C3__8S20563C2[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C3[0]),
  (VTBL_ENTRY)&_ZN8S20563C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v24Ev,
};
extern void _ZN8S20563C83v15Ev();
extern void _ZN8S20563C83v16Ev();
extern void _ZN8S20563C83v17Ev();
extern void _ZN8S20563C83v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20563C8__8S20563C3__8S20563C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20563C3[0]),
  (VTBL_ENTRY)&_ZN8S20563C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v18Ev,
};
static  VTT_ENTRY vtt_S20563C2[] = {
  {&(_ZTV8S20563C2[5]),  5,73},
  {&(_ZTV8S20563C2[26]),  26,73},
  {&(_ZTV8S20563C2[46]),  46,73},
  {&(_ZTV8S20563C2[62]),  62,73},
  {&(_tg__ZTV8S20563C3__8S20563C2[3]),  3,17},
  {&(_tg__ZTV8S20563C8__8S20563C3__8S20563C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20563C2[];
extern  VTBL_ENTRY _ZTV8S20563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20563C2[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20563C2D0Ev,_ZTv0_n20_N8S20563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20563C2D0Ev,_ZThn56_N8S20563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20563C2D1Ev,_ZTv0_n20_N8S20563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20563C2D1Ev,_ZThn56_N8S20563C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20563C2 = {  "S20563C2", // class name
  bases_S20563C2, 6,
  &(vtc_S20563C2[0]), // expected_vtbl_contents
  &(vtt_S20563C2[0]), // expected_vtt_contents
  ABISELECT(128,72), // object size
  NSPAIRA(_ZTI8S20563C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20563C2),73, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20563C2),6, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20563C1  : virtual S20563C2 {
  __tsi64 s20563c1f0;
  void *s20563c1f1;
  int s20563c1f2;
  virtual  ~S20563C1(); // _ZN8S20563C1D2Ev
  virtual void  v1(); // _ZN8S20563C12v1Ev
  virtual void  v2(); // _ZN8S20563C12v2Ev
  virtual void  v3(); // _ZN8S20563C12v3Ev
  virtual void  v4(); // _ZN8S20563C12v4Ev
  virtual void  v5(); // _ZN8S20563C12v5Ev
  virtual void  v6(); // _ZN8S20563C12v6Ev
  S20563C1(); // tgen
};
//SIG(1 S20563C1) C1{ VBC2{ VBC3{ BC4{ v7 v8 v9 v10 v11 v12 v13 v14 FD FC5{ BC6{ BC7{ v25 v26 FL} vd v27 Fc} vd v28 v29 v30 v31 v32 v33}} VBC8{ v15 v16 v17 v18 Fs FC7} v19 v20 v21 v22 v23 v24} VBC5 vd v34 v35} vd v1 v2 v3 v4 v5 v6 FL Fp Fi}


 S20563C1 ::~S20563C1(){ note_dtor("S20563C1", this);}
void  S20563C1 ::v1(){vfunc_called(this, "_ZN8S20563C12v1Ev");}
void  S20563C1 ::v2(){vfunc_called(this, "_ZN8S20563C12v2Ev");}
void  S20563C1 ::v3(){vfunc_called(this, "_ZN8S20563C12v3Ev");}
void  S20563C1 ::v4(){vfunc_called(this, "_ZN8S20563C12v4Ev");}
void  S20563C1 ::v5(){vfunc_called(this, "_ZN8S20563C12v5Ev");}
void  S20563C1 ::v6(){vfunc_called(this, "_ZN8S20563C12v6Ev");}
S20563C1 ::S20563C1(){ note_ctor("S20563C1", this);} // tgen

static void Test_S20563C1()
{
  extern Class_Descriptor cd_S20563C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,23)];
    init_test(&cd_S20563C1, buf);
    S20563C1 *dp, &lv = *(dp=new (buf) S20563C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S20563C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20563C1)");
    check_base_class_offset(lv, (S20563C4*)(S20563C3*), ABISELECT(32,20), "S20563C1");
    check_base_class_offset(lv, (S20563C8*)(S20563C3*), ABISELECT(88,52), "S20563C1");
    check_base_class_offset(lv, (S20563C3*)(S20563C2*), ABISELECT(32,20), "S20563C1");
    check_base_class_offset(lv, (S20563C7*)(S20563C6*)(S20563C5*), ABISELECT(120,72), "S20563C1");
    check_base_class_offset(lv, (S20563C6*)(S20563C5*), ABISELECT(120,72), "S20563C1");
    check_base_class_offset(lv, (S20563C5*)(S20563C2*), ABISELECT(120,72), "S20563C1");
    check_base_class_offset(lv, (S20563C2*), 0, "S20563C1");
    check_field_offset(lv, s20563c1f0, ABISELECT(8,4), "S20563C1.s20563c1f0");
    check_field_offset(lv, s20563c1f1, ABISELECT(16,12), "S20563C1.s20563c1f1");
    check_field_offset(lv, s20563c1f2, ABISELECT(24,16), "S20563C1.s20563c1f2");
    test_class_info(&lv, &cd_S20563C1);
    dp->~S20563C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20563C1(Test_S20563C1, "S20563C1", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN8S20563C1C1Ev();
extern void _ZN8S20563C1D2Ev();
Name_Map name_map_S20563C1[] = {
  NSPAIR(_ZN8S20563C1C1Ev),
  NSPAIR(_ZN8S20563C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20563C4;
extern VTBL_ENTRY _ZTI8S20563C4[];
extern  VTBL_ENTRY _ZTV8S20563C4[];
extern Class_Descriptor cd_S20563C8;
extern VTBL_ENTRY _ZTI8S20563C8[];
extern  VTBL_ENTRY _ZTV8S20563C8[];
extern Class_Descriptor cd_S20563C3;
extern VTBL_ENTRY _ZTI8S20563C3[];
extern  VTBL_ENTRY _ZTV8S20563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20563C3[];
extern Class_Descriptor cd_S20563C7;
extern VTBL_ENTRY _ZTI8S20563C7[];
extern  VTBL_ENTRY _ZTV8S20563C7[];
extern Class_Descriptor cd_S20563C6;
extern VTBL_ENTRY _ZTI8S20563C6[];
extern  VTBL_ENTRY _ZTV8S20563C6[];
extern Class_Descriptor cd_S20563C5;
extern VTBL_ENTRY _ZTI8S20563C5[];
extern  VTBL_ENTRY _ZTV8S20563C5[];
extern Class_Descriptor cd_S20563C2;
extern VTBL_ENTRY _ZTI8S20563C2[];
extern  VTBL_ENTRY _ZTV8S20563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20563C2[];
static Base_Class bases_S20563C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20563C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20563C8,    ABISELECT(88,52), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20563C3,    ABISELECT(32,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20563C7,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20563C6,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20563C5,    ABISELECT(120,72), //bcp->offset
    60, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20563C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20563C1[];
extern void _ZN8S20563C1D1Ev();
extern void _ZN8S20563C1D0Ev();
extern void _ZN8S20563C23v34Ev();
extern void _ZN8S20563C23v35Ev();
extern void _ZN8S20563C12v1Ev();
extern void _ZN8S20563C12v2Ev();
extern void _ZN8S20563C12v3Ev();
extern void _ZN8S20563C12v4Ev();
extern void _ZN8S20563C12v5Ev();
extern void _ZN8S20563C12v6Ev();
extern void _ZN8S20563C42v7Ev();
extern void _ZN8S20563C42v8Ev();
extern void _ZN8S20563C42v9Ev();
extern void _ZN8S20563C43v10Ev();
extern void _ZN8S20563C43v11Ev();
extern void _ZN8S20563C43v12Ev();
extern void _ZN8S20563C43v13Ev();
extern void _ZN8S20563C43v14Ev();
extern void _ZN8S20563C33v19Ev();
extern void _ZN8S20563C33v20Ev();
extern void _ZN8S20563C33v21Ev();
extern void _ZN8S20563C33v22Ev();
extern void _ZN8S20563C33v23Ev();
extern void _ZN8S20563C33v24Ev();
extern void _ZN8S20563C83v15Ev();
extern void _ZN8S20563C83v16Ev();
extern void _ZN8S20563C83v17Ev();
extern void _ZN8S20563C83v18Ev();
extern void _ZN8S20563C73v25Ev();
extern void _ZN8S20563C73v26Ev();
extern void ABISELECT(_ZTv0_n40_N8S20563C1D1Ev,_ZTv0_n20_N8S20563C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S20563C1D1Ev,_ZThn72_N8S20563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20563C1D0Ev,_ZTv0_n20_N8S20563C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S20563C1D0Ev,_ZThn72_N8S20563C1D0Ev)() __attribute__((weak));
extern void _ZN8S20563C63v27Ev();
extern void _ZN8S20563C53v28Ev();
extern void _ZN8S20563C53v29Ev();
extern void _ZN8S20563C53v30Ev();
extern void _ZN8S20563C53v31Ev();
extern void _ZN8S20563C53v32Ev();
extern void _ZN8S20563C53v33Ev();
static  VTBL_ENTRY vtc_S20563C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(120,72),
  ABISELECT(88,52),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C1[0]),
  (VTBL_ENTRY)&_ZN8S20563C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20563C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20563C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20563C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20563C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20563C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20563C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20563C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20563C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20563C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20563C1[0]),
  (VTBL_ENTRY)&_ZN8S20563C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S20563C1[0]),
  (VTBL_ENTRY)&_ZN8S20563C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-72),
  0,
  0,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S20563C1[0]),
  (VTBL_ENTRY)&_ZN8S20563C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20563C73v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20563C1D1Ev,_ZTv0_n20_N8S20563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20563C1D0Ev,_ZTv0_n20_N8S20563C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20563C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v33Ev,
};
extern VTBL_ENTRY _ZTV8S20563C1[];
extern void _ZN8S20563C2D1Ev();
extern void _ZN8S20563C2D0Ev();
extern void _ZN8S20563C23v34Ev();
extern void _ZN8S20563C23v35Ev();
static  VTBL_ENTRY _tg__ZTV8S20563C2__8S20563C1[] = {
  ABISELECT(120,72),
  ABISELECT(88,52),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C2[0]),
  (VTBL_ENTRY)&_ZN8S20563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20563C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20563C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20563C23v35Ev,
};
extern void _ZN8S20563C42v7Ev();
extern void _ZN8S20563C42v8Ev();
extern void _ZN8S20563C42v9Ev();
extern void _ZN8S20563C43v10Ev();
extern void _ZN8S20563C43v11Ev();
extern void _ZN8S20563C43v12Ev();
extern void _ZN8S20563C43v13Ev();
extern void _ZN8S20563C43v14Ev();
extern void _ZN8S20563C33v19Ev();
extern void _ZN8S20563C33v20Ev();
extern void _ZN8S20563C33v21Ev();
extern void _ZN8S20563C33v22Ev();
extern void _ZN8S20563C33v23Ev();
extern void _ZN8S20563C33v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20563C3__8S20563C2__8S20563C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20563C2[0]),
  (VTBL_ENTRY)&_ZN8S20563C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v24Ev,
};
extern void _ZN8S20563C83v15Ev();
extern void _ZN8S20563C83v16Ev();
extern void _ZN8S20563C83v17Ev();
extern void _ZN8S20563C83v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20563C8__8S20563C2__8S20563C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S20563C2[0]),
  (VTBL_ENTRY)&_ZN8S20563C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v18Ev,
};
extern void _ZN8S20563C73v25Ev();
extern void _ZN8S20563C73v26Ev();
extern void ABISELECT(_ZTv0_n40_N8S20563C2D1Ev,_ZTv0_n20_N8S20563C2D1Ev)();
extern void ABISELECT(_ZThn120_N8S20563C2D1Ev,_ZThn72_N8S20563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20563C2D0Ev,_ZTv0_n20_N8S20563C2D0Ev)();
extern void ABISELECT(_ZThn120_N8S20563C2D0Ev,_ZThn72_N8S20563C2D0Ev)() __attribute__((weak));
extern void _ZN8S20563C63v27Ev();
extern void _ZN8S20563C53v28Ev();
extern void _ZN8S20563C53v29Ev();
extern void _ZN8S20563C53v30Ev();
extern void _ZN8S20563C53v31Ev();
extern void _ZN8S20563C53v32Ev();
extern void _ZN8S20563C53v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20563C5__8S20563C2__8S20563C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-72),
  0,
  0,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S20563C2[0]),
  (VTBL_ENTRY)&_ZN8S20563C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20563C73v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20563C2D1Ev,_ZTv0_n20_N8S20563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20563C2D0Ev,_ZTv0_n20_N8S20563C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20563C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v28Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v29Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v32Ev,
  (VTBL_ENTRY)&_ZN8S20563C53v33Ev,
};
extern void _ZN8S20563C42v7Ev();
extern void _ZN8S20563C42v8Ev();
extern void _ZN8S20563C42v9Ev();
extern void _ZN8S20563C43v10Ev();
extern void _ZN8S20563C43v11Ev();
extern void _ZN8S20563C43v12Ev();
extern void _ZN8S20563C43v13Ev();
extern void _ZN8S20563C43v14Ev();
extern void _ZN8S20563C33v19Ev();
extern void _ZN8S20563C33v20Ev();
extern void _ZN8S20563C33v21Ev();
extern void _ZN8S20563C33v22Ev();
extern void _ZN8S20563C33v23Ev();
extern void _ZN8S20563C33v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20563C3__8S20563C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20563C3[0]),
  (VTBL_ENTRY)&_ZN8S20563C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20563C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20563C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20563C33v24Ev,
};
extern void _ZN8S20563C83v15Ev();
extern void _ZN8S20563C83v16Ev();
extern void _ZN8S20563C83v17Ev();
extern void _ZN8S20563C83v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20563C8__8S20563C3__8S20563C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20563C3[0]),
  (VTBL_ENTRY)&_ZN8S20563C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20563C83v18Ev,
};
static  VTT_ENTRY vtt_S20563C1[] = {
  {&(_ZTV8S20563C1[9]),  9,83},
  {&(_ZTV8S20563C1[9]),  9,83},
  {&(_ZTV8S20563C1[36]),  36,83},
  {&(_ZTV8S20563C1[56]),  56,83},
  {&(_ZTV8S20563C1[72]),  72,83},
  {&(_tg__ZTV8S20563C2__8S20563C1[5]),  5,9},
  {&(_tg__ZTV8S20563C3__8S20563C2__8S20563C1[17]),  17,31},
  {&(_tg__ZTV8S20563C8__8S20563C2__8S20563C1[6]),  6,10},
  {&(_tg__ZTV8S20563C5__8S20563C2__8S20563C1[12]),  12,23},
  {&(_tg__ZTV8S20563C3__8S20563C1[3]),  3,17},
  {&(_tg__ZTV8S20563C8__8S20563C3__8S20563C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20563C1[];
extern  VTBL_ENTRY _ZTV8S20563C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20563C1[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20563C2D0Ev,_ZTv0_n20_N8S20563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20563C2D0Ev,_ZThn72_N8S20563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20563C2D1Ev,_ZTv0_n20_N8S20563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20563C2D1Ev,_ZThn72_N8S20563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20563C1D0Ev,_ZTv0_n20_N8S20563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20563C1D0Ev,_ZThn72_N8S20563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20563C1D1Ev,_ZTv0_n20_N8S20563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20563C1D1Ev,_ZThn72_N8S20563C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20563C1 = {  "S20563C1", // class name
  bases_S20563C1, 7,
  &(vtc_S20563C1[0]), // expected_vtbl_contents
  &(vtt_S20563C1[0]), // expected_vtt_contents
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI8S20563C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20563C1),83, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20563C1),11, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S964C3  : S19890C5 {
};
//SIG(-1 S964C3) C1{ BC2{ m FD Fc:4}}



static void Test_S964C3()
{
  extern Class_Descriptor cd_S964C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S964C3, buf);
    S964C3 &lv = *(new (buf) S964C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S964C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S964C3)");
    check_base_class_offset(lv, (S19890C5*), 0, "S964C3");
    test_class_info(&lv, &cd_S964C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS964C3(Test_S964C3, "S964C3", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
static Base_Class bases_S964C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S964C3[];
Class_Descriptor cd_S964C3 = {  "S964C3", // class name
  bases_S964C3, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI6S964C3),ABISELECT(24,12), //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  S964C7  : virtual S19890C10 , virtual S10180C133 , S19890C5 {
  __tsi64 s964c7f0;
  ::S19890C5 s964c7f1;
  ::S964C3 s964c7f2;
  ~S964C7(); // tgen
  S964C7(); // tgen
};
//SIG(-1 S964C7) C1{ VBC2{ m FC3{ m FD Fc:4} Fi} VBC4{ m} BC3 FL FC3 FC5{ BC3}}


S964C7 ::~S964C7(){ note_dtor("S964C7", this);} // tgen
S964C7 ::S964C7(){ note_ctor("S964C7", this);} // tgen

static void Test_S964C7()
{
  extern Class_Descriptor cd_S964C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,21)];
    init_test(&cd_S964C7, buf);
    S964C7 *dp, &lv = *(dp=new (buf) S964C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,80), "sizeof(S964C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S964C7)");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(128,60), "S964C7");
    check_base_class_offset(lv, (S10180C133*), 0, "S964C7");
    check_base_class_offset(lv, (S19890C5*), ABISELECT(16,4), "S964C7");
    check_field_offset(lv, s964c7f0, ABISELECT(48,20), "S964C7.s964c7f0");
    check_field_offset(lv, s964c7f1, ABISELECT(64,28), "S964C7.s964c7f1");
    check_field_offset(lv, s964c7f2, ABISELECT(96,44), "S964C7.s964c7f2");
    test_class_info(&lv, &cd_S964C7);
    dp->~S964C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS964C7(Test_S964C7, "S964C7", ABISELECT(176,80));

#else // __cplusplus

extern void _ZN6S964C7C1Ev();
extern void _ZN6S964C7D1Ev();
Name_Map name_map_S964C7[] = {
  NSPAIR(_ZN6S964C7C1Ev),
  NSPAIR(_ZN6S964C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
static Base_Class bases_S964C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C10,    ABISELECT(128,60), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S19890C5,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI6S964C7[];
static  VTBL_ENTRY vtc_S964C7[] = {
  0,
  ABISELECT(128,60),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C7[0]),
};
extern VTBL_ENTRY _ZTV6S964C7[];
static  VTT_ENTRY vtt_S964C7[] = {
  {&(_ZTV6S964C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI6S964C7[];
extern  VTBL_ENTRY _ZTV6S964C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C7[];
Class_Descriptor cd_S964C7 = {  "S964C7", // class name
  bases_S964C7, 3,
  &(vtc_S964C7[0]), // expected_vtbl_contents
  &(vtt_S964C7[0]), // expected_vtt_contents
  ABISELECT(176,80), // object size
  NSPAIRA(_ZTI6S964C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S964C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S964C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S964C2  : S964C3 , virtual S19890C10 , S10180C138 , virtual S964C7 {
  int s964c2f0;
  ~S964C2(); // tgen
  S964C2(); // tgen
};
//SIG(-1 S964C2) C1{ BC2{ BC3{ m FD Fc:4}} VBC4{ m FC3 Fi} BC5{ m} VBC6{ VBC4 VBC7{ m} BC3 FL FC3 FC2} Fi}


S964C2 ::~S964C2(){ note_dtor("S964C2", this);} // tgen
S964C2 ::S964C2(){ note_ctor("S964C2", this);} // tgen

static void Test_S964C2()
{
  extern Class_Descriptor cd_S964C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S964C2, buf);
    S964C2 *dp, &lv = *(dp=new (buf) S964C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S964C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S964C2)");
    check_base_class_offset(lv, (S19890C5*)(S964C3*), ABISELECT(16,4), "S964C2");
    check_base_class_offset(lv, (S964C3*), ABISELECT(16,4), "S964C2");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(64,24), "S964C2");
    check_base_class_offset(lv, (S19890C10*)(S964C7*), ABISELECT(64,24), "S964C2");
    check_base_class_offset(lv, (S10180C138*), 0, "S964C2");
    check_base_class_offset(lv, (S10180C133*)(S964C7*), 0, "S964C2");
    check_base_class_offset(lv, (S19890C5*)(S964C7*), ABISELECT(128,48), "S964C2");
    check_base_class_offset(lv, (S964C7*), ABISELECT(112,44), "S964C2");
    check_field_offset(lv, s964c2f0, ABISELECT(48,20), "S964C2.s964c2f0");
    test_class_info(&lv, &cd_S964C2);
    dp->~S964C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS964C2(Test_S964C2, "S964C2", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN6S964C2C1Ev();
extern void _ZN6S964C2D1Ev();
Name_Map name_map_S964C2[] = {
  NSPAIR(_ZN6S964C2C1Ev),
  NSPAIR(_ZN6S964C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C7;
extern VTBL_ENTRY _ZTI6S964C7[];
extern  VTBL_ENTRY _ZTV6S964C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C7[];
static Base_Class bases_S964C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(16,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
  0, 0},
  {&cd_S964C3,    ABISELECT(16,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_S19890C10,    ABISELECT(64,24), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(128,48), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S964C7,    ABISELECT(112,44), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S964C2[];
static  VTBL_ENTRY vtc_S964C2[] = {
  0,
  ABISELECT(112,44),
  ABISELECT(64,24),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C2[0]),
  ABISELECT(-112,-44),
  ABISELECT(-48,-20),
  ABISELECT(-112,-44),
  (VTBL_ENTRY)&(_ZTI6S964C2[0]),
};
extern VTBL_ENTRY _ZTV6S964C2[];
static  VTBL_ENTRY _tg__ZTV6S964C7__6S964C2[] = {
  ABISELECT(-112,-44),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C7[0]),
};
static  VTT_ENTRY vtt_S964C2[] = {
  {&(_ZTV6S964C2[5]),  5,9},
  {&(_ZTV6S964C2[9]),  9,9},
  {&(_tg__ZTV6S964C7__6S964C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI6S964C2[];
extern  VTBL_ENTRY _ZTV6S964C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C2[];
Class_Descriptor cd_S964C2 = {  "S964C2", // class name
  bases_S964C2, 7,
  &(vtc_S964C2[0]), // expected_vtbl_contents
  &(vtt_S964C2[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI6S964C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV6S964C2),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S964C2),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S964C10  : virtual S964C3 , virtual S19890C10 , virtual S10180C138 , S10180C133 {
  virtual  ~S964C10(); // _ZN7S964C10D2Ev
  S964C10(); // tgen
};
//SIG(-1 S964C10) C1{ VBC2{ BC3{ m FD Fc:4}} VBC4{ m FC3 Fi} VBC5{ m} BC6{ m} vd}


 S964C10 ::~S964C10(){ note_dtor("S964C10", this);}
S964C10 ::S964C10(){ note_ctor("S964C10", this);} // tgen

static void Test_S964C10()
{
  extern Class_Descriptor cd_S964C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,11)];
    init_test(&cd_S964C10, buf);
    S964C10 *dp, &lv = *(dp=new (buf) S964C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,40), "sizeof(S964C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S964C10)");
    check_base_class_offset(lv, (S19890C5*)(S964C3*), ABISELECT(16,4), "S964C10");
    check_base_class_offset(lv, (S964C3*), ABISELECT(16,4), "S964C10");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(48,20), "S964C10");
    check_base_class_offset(lv, (S10180C138*), 0, "S964C10");
    check_base_class_offset(lv, (S10180C133*), 0, "S964C10");
    test_class_info(&lv, &cd_S964C10);
    dp->~S964C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS964C10(Test_S964C10, "S964C10", ABISELECT(96,40));

#else // __cplusplus

extern void _ZN7S964C10C1Ev();
extern void _ZN7S964C10D2Ev();
Name_Map name_map_S964C10[] = {
  NSPAIR(_ZN7S964C10C1Ev),
  NSPAIR(_ZN7S964C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
static Base_Class bases_S964C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(16,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
  0, 0},
  {&cd_S964C3,    ABISELECT(16,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, 1},
  {&cd_S19890C10,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S964C10[];
extern void _ZN7S964C10D1Ev();
extern void _ZN7S964C10D0Ev();
static  VTBL_ENTRY vtc_S964C10[] = {
  0,
  ABISELECT(48,20),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C10[0]),
  (VTBL_ENTRY)&_ZN7S964C10D1Ev,
  (VTBL_ENTRY)&_ZN7S964C10D0Ev,
};
extern VTBL_ENTRY _ZTV7S964C10[];
static  VTT_ENTRY vtt_S964C10[] = {
  {&(_ZTV7S964C10[5]),  5,7},
};
extern VTBL_ENTRY _ZTI7S964C10[];
extern  VTBL_ENTRY _ZTV7S964C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C10[];
Class_Descriptor cd_S964C10 = {  "S964C10", // class name
  bases_S964C10, 5,
  &(vtc_S964C10[0]), // expected_vtbl_contents
  &(vtt_S964C10[0]), // expected_vtt_contents
  ABISELECT(96,40), // object size
  NSPAIRA(_ZTI7S964C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S964C10),7, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S964C10),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S964C9  : S10180C138 , virtual S964C10 , virtual S964C7 {
  virtual  ~S964C9(); // _ZN6S964C9D2Ev
  S964C9(); // tgen
};
//SIG(-1 S964C9) C1{ BC2{ m} VBC3{ VBC4{ BC5{ m FD Fc:4}} VBC6{ m FC5 Fi} VBC2 BC7{ m} vd} VBC8{ VBC6 VBC7 BC5 FL FC5 FC4} vd}


 S964C9 ::~S964C9(){ note_dtor("S964C9", this);}
S964C9 ::S964C9(){ note_ctor("S964C9", this);} // tgen

static void Test_S964C9()
{
  extern Class_Descriptor cd_S964C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S964C9, buf);
    S964C9 *dp, &lv = *(dp=new (buf) S964C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S964C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S964C9)");
    /*is_ambiguous_... S964C9::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*), 0, "S964C9");
    check_base_class_offset(lv, (S19890C5*)(S964C3*), ABISELECT(16,4), "S964C9");
    check_base_class_offset(lv, (S964C3*)(S964C10*), ABISELECT(16,4), "S964C9");
    check_base_class_offset(lv, (S19890C10*)(S964C10*), ABISELECT(48,20), "S964C9");
    check_base_class_offset(lv, (S19890C10*)(S964C7*), ABISELECT(48,20), "S964C9");
    check_base_class_offset(lv, (S10180C138*)(S964C10*), ABISELECT(96,40), "S964C9");
    check_base_class_offset(lv, (S10180C133*)(S964C10*), 0, "S964C9");
    check_base_class_offset(lv, (S964C10*), 0, "S964C9");
    check_base_class_offset(lv, (S10180C133*)(S964C7*), ABISELECT(224,100), "S964C9");
    check_base_class_offset(lv, (S19890C5*)(S964C7*), ABISELECT(112,44), "S964C9");
    check_base_class_offset(lv, (S964C7*), ABISELECT(96,40), "S964C9");
    test_class_info(&lv, &cd_S964C9);
    dp->~S964C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS964C9(Test_S964C9, "S964C9", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN6S964C9C1Ev();
extern void _ZN6S964C9D2Ev();
Name_Map name_map_S964C9[] = {
  NSPAIR(_ZN6S964C9C1Ev),
  NSPAIR(_ZN6S964C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S964C10;
extern VTBL_ENTRY _ZTI7S964C10[];
extern  VTBL_ENTRY _ZTV7S964C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C7;
extern VTBL_ENTRY _ZTI6S964C7[];
extern  VTBL_ENTRY _ZTV6S964C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C7[];
static Base_Class bases_S964C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19890C5,    ABISELECT(16,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_S964C3,    ABISELECT(16,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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(96,40), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S964C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C133,    ABISELECT(224,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(112,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S964C7,    ABISELECT(96,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI6S964C9[];
extern void _ZN6S964C9D1Ev();
extern void _ZN6S964C9D0Ev();
static  VTBL_ENTRY vtc_S964C9[] = {
  ABISELECT(224,100),
  ABISELECT(96,40),
  0,
  0,
  ABISELECT(96,40),
  ABISELECT(48,20),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
  (VTBL_ENTRY)&_ZN6S964C9D1Ev,
  (VTBL_ENTRY)&_ZN6S964C9D0Ev,
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-96,-40),
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
};
extern VTBL_ENTRY _ZTV6S964C9[];
extern void _ZN7S964C10D1Ev();
extern void _ZN7S964C10D0Ev();
static  VTBL_ENTRY _tg__ZTV7S964C10__6S964C9[] = {
  ABISELECT(96,40),
  ABISELECT(48,20),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C10[0]),
  (VTBL_ENTRY)&_ZN7S964C10D1Ev,
  (VTBL_ENTRY)&_ZN7S964C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV6S964C7__6S964C9[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C7[0]),
};
static  VTT_ENTRY vtt_S964C9[] = {
  {&(_ZTV6S964C9[9]),  9,15},
  {&(_ZTV6S964C9[9]),  9,15},
  {&(_ZTV6S964C9[15]),  15,15},
  {&(_tg__ZTV7S964C10__6S964C9[5]),  5,7},
  {&(_tg__ZTV6S964C7__6S964C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI6S964C9[];
extern  VTBL_ENTRY _ZTV6S964C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C9[];
Class_Descriptor cd_S964C9 = {  "S964C9", // class name
  bases_S964C9, 10,
  &(vtc_S964C9[0]), // expected_vtbl_contents
  &(vtt_S964C9[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI6S964C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S964C9),15, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S964C9),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S964C11  : virtual S964C10 , virtual S19890C5 , virtual S964C7 {
  void *s964c11f0;
  __tsi64 s964c11f1;
  virtual  ~S964C11(); // _ZN7S964C11D2Ev
  S964C11(); // tgen
};
//SIG(-1 S964C11) C1{ VBC2{ VBC3{ BC4{ m FD Fc:4}} VBC5{ m FC4 Fi} VBC6{ m} BC7{ m} vd} VBC4 VBC8{ VBC5 VBC7 BC4 FL FC4 FC3} vd Fp FL}


 S964C11 ::~S964C11(){ note_dtor("S964C11", this);}
S964C11 ::S964C11(){ note_ctor("S964C11", this);} // tgen

static void Test_S964C11()
{
  extern Class_Descriptor cd_S964C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,34)];
    init_test(&cd_S964C11, buf);
    S964C11 *dp, &lv = *(dp=new (buf) S964C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,132), "sizeof(S964C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S964C11)");
    check_base_class_offset(lv, (S19890C5*)(S964C3*), ABISELECT(32,16), "S964C11");
    check_base_class_offset(lv, (S964C3*)(S964C10*), ABISELECT(32,16), "S964C11");
    check_base_class_offset(lv, (S19890C10*)(S964C10*), ABISELECT(64,32), "S964C11");
    check_base_class_offset(lv, (S19890C10*)(S964C7*), ABISELECT(64,32), "S964C11");
    check_base_class_offset(lv, (S10180C138*)(S964C10*), 0, "S964C11");
    check_base_class_offset(lv, (S10180C133*)(S964C10*), 0, "S964C11");
    check_base_class_offset(lv, (S964C10*), 0, "S964C11");
    /*is_ambiguous_... S964C11::S19890C5 */ AMB_check_base_class_offset(lv, (S19890C5*), ABISELECT(112,52), "S964C11");
    check_base_class_offset(lv, (S10180C133*)(S964C7*), ABISELECT(272,128), "S964C11");
    check_base_class_offset(lv, (S19890C5*)(S964C7*), ABISELECT(160,72), "S964C11");
    check_base_class_offset(lv, (S964C7*), ABISELECT(144,68), "S964C11");
    check_field_offset(lv, s964c11f0, ABISELECT(8,4), "S964C11.s964c11f0");
    check_field_offset(lv, s964c11f1, ABISELECT(16,8), "S964C11.s964c11f1");
    test_class_info(&lv, &cd_S964C11);
    dp->~S964C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS964C11(Test_S964C11, "S964C11", ABISELECT(288,132));

#else // __cplusplus

extern void _ZN7S964C11C1Ev();
extern void _ZN7S964C11D2Ev();
Name_Map name_map_S964C11[] = {
  NSPAIR(_ZN7S964C11C1Ev),
  NSPAIR(_ZN7S964C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S964C10;
extern VTBL_ENTRY _ZTI7S964C10[];
extern  VTBL_ENTRY _ZTV7S964C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C10[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C7;
extern VTBL_ENTRY _ZTI6S964C7[];
extern  VTBL_ENTRY _ZTV6S964C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C7[];
static Base_Class bases_S964C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_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_S964C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S964C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19890C5,    ABISELECT(112,52), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    ABISELECT(272,128), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(160,72), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S964C7,    ABISELECT(144,68), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S964C11[];
extern void _ZN7S964C11D1Ev();
extern void _ZN7S964C11D0Ev();
static  VTBL_ENTRY vtc_S964C11[] = {
  ABISELECT(272,128),
  ABISELECT(144,68),
  ABISELECT(112,52),
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C11[0]),
  (VTBL_ENTRY)&_ZN7S964C11D1Ev,
  (VTBL_ENTRY)&_ZN7S964C11D0Ev,
  ABISELECT(128,60),
  ABISELECT(-80,-36),
  ABISELECT(-144,-68),
  (VTBL_ENTRY)&(_ZTI7S964C11[0]),
};
extern VTBL_ENTRY _ZTV7S964C11[];
extern void _ZN7S964C10D1Ev();
extern void _ZN7S964C10D0Ev();
static  VTBL_ENTRY _tg__ZTV7S964C10__7S964C11[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C10[0]),
  (VTBL_ENTRY)&_ZN7S964C10D1Ev,
  (VTBL_ENTRY)&_ZN7S964C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C11[] = {
  ABISELECT(128,60),
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C7[0]),
};
static  VTT_ENTRY vtt_S964C11[] = {
  {&(_ZTV7S964C11[10]),  10,16},
  {&(_ZTV7S964C11[10]),  10,16},
  {&(_ZTV7S964C11[16]),  16,16},
  {&(_tg__ZTV7S964C10__7S964C11[5]),  5,7},
  {&(_tg__ZTV6S964C7__7S964C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S964C11[];
extern  VTBL_ENTRY _ZTV7S964C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C11[];
Class_Descriptor cd_S964C11 = {  "S964C11", // class name
  bases_S964C11, 10,
  &(vtc_S964C11[0]), // expected_vtbl_contents
  &(vtt_S964C11[0]), // expected_vtt_contents
  ABISELECT(288,132), // object size
  NSPAIRA(_ZTI7S964C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S964C11),16, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S964C11),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S964C12  : S964C9 {
  int s964c12f0;
  virtual  ~S964C12(); // _ZN7S964C12D2Ev
  S964C12(); // tgen
};
//SIG(-1 S964C12) C1{ BC2{ BC3{ m} VBC4{ VBC5{ BC6{ m FD Fc:4}} VBC7{ m FC6 Fi} VBC3 BC8{ m} vd} VBC9{ VBC7 VBC8 BC6 FL FC6 FC5} vd} vd Fi}


 S964C12 ::~S964C12(){ note_dtor("S964C12", this);}
S964C12 ::S964C12(){ note_ctor("S964C12", this);} // tgen

static void Test_S964C12()
{
  extern Class_Descriptor cd_S964C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,28)];
    init_test(&cd_S964C12, buf);
    S964C12 *dp, &lv = *(dp=new (buf) S964C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,108), "sizeof(S964C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S964C12)");
    /*is_ambiguous_... S964C9::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S964C9*), 0, "S964C12");
    check_base_class_offset(lv, (S19890C5*)(S964C3*), ABISELECT(16,8), "S964C12");
    check_base_class_offset(lv, (S964C3*)(S964C10*), ABISELECT(16,8), "S964C12");
    check_base_class_offset(lv, (S19890C10*)(S964C10*), ABISELECT(48,24), "S964C12");
    check_base_class_offset(lv, (S19890C10*)(S964C7*), ABISELECT(48,24), "S964C12");
    check_base_class_offset(lv, (S10180C138*)(S964C10*), ABISELECT(96,44), "S964C12");
    check_base_class_offset(lv, (S10180C133*)(S964C10*), 0, "S964C12");
    check_base_class_offset(lv, (S964C10*)(S964C9*), 0, "S964C12");
    check_base_class_offset(lv, (S10180C133*)(S964C7*), ABISELECT(224,104), "S964C12");
    check_base_class_offset(lv, (S19890C5*)(S964C7*), ABISELECT(112,48), "S964C12");
    check_base_class_offset(lv, (S964C7*)(S964C9*), ABISELECT(96,44), "S964C12");
    check_base_class_offset(lv, (S964C9*), 0, "S964C12");
    check_field_offset(lv, s964c12f0, ABISELECT(8,4), "S964C12.s964c12f0");
    test_class_info(&lv, &cd_S964C12);
    dp->~S964C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS964C12(Test_S964C12, "S964C12", ABISELECT(240,108));

#else // __cplusplus

extern void _ZN7S964C12C1Ev();
extern void _ZN7S964C12D2Ev();
Name_Map name_map_S964C12[] = {
  NSPAIR(_ZN7S964C12C1Ev),
  NSPAIR(_ZN7S964C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S964C10;
extern VTBL_ENTRY _ZTI7S964C10[];
extern  VTBL_ENTRY _ZTV7S964C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C7;
extern VTBL_ENTRY _ZTI6S964C7[];
extern  VTBL_ENTRY _ZTV6S964C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C7[];
extern Class_Descriptor cd_S964C9;
extern VTBL_ENTRY _ZTI6S964C9[];
extern  VTBL_ENTRY _ZTV6S964C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C9[];
static Base_Class bases_S964C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19890C5,    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_S964C3,    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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S964C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(224,104), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(112,48), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S964C7,    ABISELECT(96,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S964C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S964C12[];
extern void _ZN7S964C12D1Ev();
extern void _ZN7S964C12D0Ev();
static  VTBL_ENTRY vtc_S964C12[] = {
  ABISELECT(224,104),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(96,44),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
  (VTBL_ENTRY)&_ZN7S964C12D1Ev,
  (VTBL_ENTRY)&_ZN7S964C12D0Ev,
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
};
extern VTBL_ENTRY _ZTV7S964C12[];
extern void _ZN6S964C9D1Ev();
extern void _ZN6S964C9D0Ev();
static  VTBL_ENTRY _tg__ZTV6S964C9__7S964C12[] = {
  ABISELECT(224,104),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(96,44),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
  (VTBL_ENTRY)&_ZN6S964C9D1Ev,
  (VTBL_ENTRY)&_ZN6S964C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV6S964C7__6S964C9__7S964C12[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
};
extern void _ZN7S964C10D1Ev();
extern void _ZN7S964C10D0Ev();
static  VTBL_ENTRY _tg__ZTV7S964C10__7S964C12[] = {
  ABISELECT(96,44),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C10[0]),
  (VTBL_ENTRY)&_ZN7S964C10D1Ev,
  (VTBL_ENTRY)&_ZN7S964C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C12[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C7[0]),
};
static  VTT_ENTRY vtt_S964C12[] = {
  {&(_ZTV7S964C12[9]),  9,15},
  {&(_tg__ZTV6S964C9__7S964C12[9]),  9,11},
  {&(_tg__ZTV6S964C9__7S964C12[9]),  9,11},
  {&(_tg__ZTV6S964C7__6S964C9__7S964C12[4]),  4,4},
  {&(_ZTV7S964C12[9]),  9,15},
  {&(_ZTV7S964C12[15]),  15,15},
  {&(_tg__ZTV7S964C10__7S964C12[5]),  5,7},
  {&(_tg__ZTV6S964C7__7S964C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S964C12[];
extern  VTBL_ENTRY _ZTV7S964C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C12[];
Class_Descriptor cd_S964C12 = {  "S964C12", // class name
  bases_S964C12, 11,
  &(vtc_S964C12[0]), // expected_vtbl_contents
  &(vtt_S964C12[0]), // expected_vtt_contents
  ABISELECT(240,108), // object size
  NSPAIRA(_ZTI7S964C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S964C12),15, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S964C12),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S964C14  : S10180C133 , S964C12 {
  ~S964C14(); // tgen
  S964C14(); // tgen
};
//SIG(-1 S964C14) C1{ BC2{ m} BC3{ BC4{ BC5{ m} VBC6{ VBC7{ BC8{ m FD Fc:4}} VBC9{ m FC8 Fi} VBC5 BC2 vd} VBC10{ VBC9 VBC2 BC8 FL FC8 FC7} vd} vd Fi}}


S964C14 ::~S964C14(){ note_dtor("S964C14", this);} // tgen
S964C14 ::S964C14(){ note_ctor("S964C14", this);} // tgen

static void Test_S964C14()
{
  extern Class_Descriptor cd_S964C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,28)];
    init_test(&cd_S964C14, buf);
    S964C14 *dp, &lv = *(dp=new (buf) S964C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,108), "sizeof(S964C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S964C14)");
    /*is_ambiguous_... S964C14::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*), ABISELECT(12,8), "S964C14");
    /*is_ambiguous_... S964C9::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S964C9*)(S964C12*), 0, "S964C14");
    check_base_class_offset(lv, (S19890C5*)(S964C3*), ABISELECT(16,8), "S964C14");
    check_base_class_offset(lv, (S964C3*)(S964C10*), ABISELECT(16,8), "S964C14");
    check_base_class_offset(lv, (S19890C10*)(S964C10*), ABISELECT(48,24), "S964C14");
    check_base_class_offset(lv, (S19890C10*)(S964C7*), ABISELECT(48,24), "S964C14");
    check_base_class_offset(lv, (S10180C138*)(S964C10*), ABISELECT(96,44), "S964C14");
    check_base_class_offset(lv, (S10180C133*)(S964C10*), 0, "S964C14");
    check_base_class_offset(lv, (S964C10*)(S964C9*)(S964C12*), 0, "S964C14");
    check_base_class_offset(lv, (S10180C133*)(S964C7*), ABISELECT(224,104), "S964C14");
    check_base_class_offset(lv, (S19890C5*)(S964C7*), ABISELECT(112,48), "S964C14");
    check_base_class_offset(lv, (S964C7*)(S964C9*)(S964C12*), ABISELECT(96,44), "S964C14");
    check_base_class_offset(lv, (S964C9*)(S964C12*), 0, "S964C14");
    check_base_class_offset(lv, (S964C12*), 0, "S964C14");
    test_class_info(&lv, &cd_S964C14);
    dp->~S964C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS964C14(Test_S964C14, "S964C14", ABISELECT(240,108));

#else // __cplusplus

extern void _ZN7S964C14C1Ev();
extern void _ZN7S964C14D1Ev();
Name_Map name_map_S964C14[] = {
  NSPAIR(_ZN7S964C14C1Ev),
  NSPAIR(_ZN7S964C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S964C10;
extern VTBL_ENTRY _ZTI7S964C10[];
extern  VTBL_ENTRY _ZTV7S964C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C7;
extern VTBL_ENTRY _ZTI6S964C7[];
extern  VTBL_ENTRY _ZTV6S964C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C7[];
extern Class_Descriptor cd_S964C9;
extern VTBL_ENTRY _ZTI6S964C9[];
extern  VTBL_ENTRY _ZTV6S964C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C9[];
extern Class_Descriptor cd_S964C12;
extern VTBL_ENTRY _ZTI7S964C12[];
extern  VTBL_ENTRY _ZTV7S964C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C12[];
static Base_Class bases_S964C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    ABISELECT(12,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},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19890C5,    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
    3, //immediately_derived
  0, 0},
  {&cd_S964C3,    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
    7, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S964C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(224,104), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(112,48), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S964C7,    ABISELECT(96,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S964C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S964C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S964C14[];
extern void _ZN7S964C14D1Ev();
extern void _ZN7S964C14D0Ev();
static  VTBL_ENTRY vtc_S964C14[] = {
  ABISELECT(224,104),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(96,44),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C14[0]),
  (VTBL_ENTRY)&_ZN7S964C14D1Ev,
  (VTBL_ENTRY)&_ZN7S964C14D0Ev,
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S964C14[0]),
};
extern VTBL_ENTRY _ZTV7S964C14[];
extern void _ZN7S964C12D1Ev();
extern void _ZN7S964C12D0Ev();
static  VTBL_ENTRY _tg__ZTV7S964C12__7S964C14[] = {
  ABISELECT(224,104),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(96,44),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
  (VTBL_ENTRY)&_ZN7S964C12D1Ev,
  (VTBL_ENTRY)&_ZN7S964C12D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev)();
extern void _ZN6S964C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev)();
extern void _ZN6S964C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S964C97S964C12__7S964C14[] = {
  ABISELECT(224,104),
  ABISELECT(96,44),
  0,
  0,
  ABISELECT(96,44),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__6S964C97S964C12__7S964C14[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C12__7S964C14[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
};
extern void _ZN7S964C10D1Ev();
extern void _ZN7S964C10D0Ev();
static  VTBL_ENTRY _tg__ZTV7S964C10__7S964C14[] = {
  ABISELECT(96,44),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C10[0]),
  (VTBL_ENTRY)&_ZN7S964C10D1Ev,
  (VTBL_ENTRY)&_ZN7S964C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C14[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C7[0]),
};
static  VTT_ENTRY vtt_S964C14[] = {
  {&(_ZTV7S964C14[9]),  9,15},
  {&(_tg__ZTV7S964C12__7S964C14[9]),  9,11},
  {&(_tg__ZTV6S964C97S964C12__7S964C14[9]),  9,11},
  {&(_tg__ZTV6S964C97S964C12__7S964C14[9]),  9,11},
  {&(_tg__ZTV6S964C7__6S964C97S964C12__7S964C14[4]),  4,4},
  {&(_tg__ZTV7S964C12__7S964C14[9]),  9,11},
  {&(_tg__ZTV6S964C7__7S964C12__7S964C14[4]),  4,4},
  {&(_ZTV7S964C14[9]),  9,15},
  {&(_ZTV7S964C14[15]),  15,15},
  {&(_tg__ZTV7S964C10__7S964C14[5]),  5,7},
  {&(_tg__ZTV6S964C7__7S964C14[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S964C14[];
extern  VTBL_ENTRY _ZTV7S964C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C14[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev), // 
  (VTBL_ENTRY)_ZN6S964C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev), // 
  (VTBL_ENTRY)_ZN6S964C9D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S964C14 = {  "S964C14", // class name
  bases_S964C14, 13,
  &(vtc_S964C14[0]), // expected_vtbl_contents
  &(vtt_S964C14[0]), // expected_vtt_contents
  ABISELECT(240,108), // object size
  NSPAIRA(_ZTI7S964C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S964C14),15, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S964C14),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S964C13  : S964C3 , virtual S10180C138 , S964C14 {
  void *s964c13f0;
  ~S964C13(); // tgen
  S964C13(); // tgen
};
//SIG(-1 S964C13) C1{ BC2{ BC3{ m FD Fc:4}} VBC4{ m} BC5{ BC6{ m} BC7{ BC8{ BC4 VBC9{ VBC2 VBC10{ m FC3 Fi} VBC4 BC6 vd} VBC11{ VBC10 VBC6 BC3 FL FC3 FC2} vd} vd Fi}} Fp}


S964C13 ::~S964C13(){ note_dtor("S964C13", this);} // tgen
S964C13 ::S964C13(){ note_ctor("S964C13", this);} // tgen

static void Test_S964C13()
{
  extern Class_Descriptor cd_S964C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,34)];
    init_test(&cd_S964C13, buf);
    S964C13 *dp, &lv = *(dp=new (buf) S964C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,132), "sizeof(S964C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S964C13)");
    /*is_ambiguous_... S964C13::S964C3 */ AMB_check_base_class_offset(lv, (S19890C5*)(S964C3*), ABISELECT(16,12), "S964C13");
    /*is_ambiguous_... S964C13::S964C3 */ AMB_check_base_class_offset(lv, (S964C3*), ABISELECT(16,12), "S964C13");
    /*is_ambiguous_... S964C13::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*), ABISELECT(56,32), "S964C13");
    check_base_class_offset(lv, (S10180C138*)(S964C10*), ABISELECT(56,32), "S964C13");
    /*is_ambiguous_... S964C14::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S964C14*), ABISELECT(12,8), "S964C13");
    /*is_ambiguous_... S964C9::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S964C9*)(S964C12*)(S964C14*), 0, "S964C13");
    /*is_ambiguous_... S964C13::S964C3 */ AMB_check_base_class_offset(lv, (S19890C5*)(S964C3*), ABISELECT(64,32), "S964C13");
    check_base_class_offset(lv, (S964C3*)(S964C10*), ABISELECT(64,32), "S964C13");
    check_base_class_offset(lv, (S19890C10*)(S964C10*), ABISELECT(96,48), "S964C13");
    check_base_class_offset(lv, (S19890C10*)(S964C7*), ABISELECT(96,48), "S964C13");
    check_base_class_offset(lv, (S10180C133*)(S964C10*), 0, "S964C13");
    check_base_class_offset(lv, (S964C10*)(S964C9*)(S964C12*)(S964C14*), 0, "S964C13");
    check_base_class_offset(lv, (S10180C133*)(S964C7*), ABISELECT(272,128), "S964C13");
    check_base_class_offset(lv, (S19890C5*)(S964C7*), ABISELECT(160,72), "S964C13");
    check_base_class_offset(lv, (S964C7*)(S964C9*)(S964C12*)(S964C14*), ABISELECT(144,68), "S964C13");
    check_base_class_offset(lv, (S964C9*)(S964C12*)(S964C14*), 0, "S964C13");
    check_base_class_offset(lv, (S964C12*)(S964C14*), 0, "S964C13");
    check_base_class_offset(lv, (S964C14*), 0, "S964C13");
    check_field_offset(lv, s964c13f0, ABISELECT(48,28), "S964C13.s964c13f0");
    test_class_info(&lv, &cd_S964C13);
    dp->~S964C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS964C13(Test_S964C13, "S964C13", ABISELECT(288,132));

#else // __cplusplus

extern void _ZN7S964C13C1Ev();
extern void _ZN7S964C13D1Ev();
Name_Map name_map_S964C13[] = {
  NSPAIR(_ZN7S964C13C1Ev),
  NSPAIR(_ZN7S964C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S964C10;
extern VTBL_ENTRY _ZTI7S964C10[];
extern  VTBL_ENTRY _ZTV7S964C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C7;
extern VTBL_ENTRY _ZTI6S964C7[];
extern  VTBL_ENTRY _ZTV6S964C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C7[];
extern Class_Descriptor cd_S964C9;
extern VTBL_ENTRY _ZTI6S964C9[];
extern  VTBL_ENTRY _ZTV6S964C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C9[];
extern Class_Descriptor cd_S964C12;
extern VTBL_ENTRY _ZTI7S964C12[];
extern  VTBL_ENTRY _ZTV7S964C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C12[];
extern Class_Descriptor cd_S964C14;
extern VTBL_ENTRY _ZTI7S964C14[];
extern  VTBL_ENTRY _ZTV7S964C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C14[];
static Base_Class bases_S964C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S964C3,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C138,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    ABISELECT(12,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
    15, //immediately_derived
  0, 0},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S19890C5,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S964C3,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S964C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(272,128), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(160,72), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S964C7,    ABISELECT(144,68), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S964C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S964C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S964C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S964C13[];
extern void _ZN7S964C13D1Ev();
extern void _ZN7S964C13D0Ev();
static  VTBL_ENTRY vtc_S964C13[] = {
  ABISELECT(272,128),
  ABISELECT(144,68),
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(96,48),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C13[0]),
  (VTBL_ENTRY)&_ZN7S964C13D1Ev,
  (VTBL_ENTRY)&_ZN7S964C13D0Ev,
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-144,-68),
  (VTBL_ENTRY)&(_ZTI7S964C13[0]),
};
extern VTBL_ENTRY _ZTV7S964C13[];
extern void _ZN7S964C14D1Ev();
extern void _ZN7S964C14D0Ev();
static  VTBL_ENTRY _tg__ZTV7S964C14__7S964C13[] = {
  ABISELECT(272,128),
  ABISELECT(144,68),
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(96,48),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C14[0]),
  (VTBL_ENTRY)&_ZN7S964C14D1Ev,
  (VTBL_ENTRY)&_ZN7S964C14D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev)();
extern void _ZN7S964C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev)();
extern void _ZN7S964C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S964C127S964C14__7S964C13[] = {
  ABISELECT(272,128),
  ABISELECT(144,68),
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(96,48),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev)();
extern void _ZN6S964C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev)();
extern void _ZN6S964C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S964C97S964C127S964C14__7S964C13[] = {
  ABISELECT(272,128),
  ABISELECT(144,68),
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(96,48),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__6S964C97S964C127S964C14__7S964C13[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-144,-68),
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C127S964C14__7S964C13[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-144,-68),
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C14__7S964C13[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-144,-68),
  (VTBL_ENTRY)&(_ZTI7S964C14[0]),
};
extern void _ZN7S964C10D1Ev();
extern void _ZN7S964C10D0Ev();
static  VTBL_ENTRY _tg__ZTV7S964C10__7S964C13[] = {
  ABISELECT(56,32),
  ABISELECT(96,48),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C10[0]),
  (VTBL_ENTRY)&_ZN7S964C10D1Ev,
  (VTBL_ENTRY)&_ZN7S964C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C13[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C7[0]),
};
static  VTT_ENTRY vtt_S964C13[] = {
  {&(_ZTV7S964C13[9]),  9,15},
  {&(_tg__ZTV7S964C14__7S964C13[9]),  9,11},
  {&(_tg__ZTV7S964C127S964C14__7S964C13[9]),  9,11},
  {&(_tg__ZTV6S964C97S964C127S964C14__7S964C13[9]),  9,11},
  {&(_tg__ZTV6S964C97S964C127S964C14__7S964C13[9]),  9,11},
  {&(_tg__ZTV6S964C7__6S964C97S964C127S964C14__7S964C13[4]),  4,4},
  {&(_tg__ZTV7S964C127S964C14__7S964C13[9]),  9,11},
  {&(_tg__ZTV6S964C7__7S964C127S964C14__7S964C13[4]),  4,4},
  {&(_tg__ZTV7S964C14__7S964C13[9]),  9,11},
  {&(_tg__ZTV6S964C7__7S964C14__7S964C13[4]),  4,4},
  {&(_ZTV7S964C13[9]),  9,15},
  {&(_ZTV7S964C13[15]),  15,15},
  {&(_tg__ZTV7S964C10__7S964C13[5]),  5,7},
  {&(_tg__ZTV6S964C7__7S964C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S964C13[];
extern  VTBL_ENTRY _ZTV7S964C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C13[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev), // 
  (VTBL_ENTRY)_ZN6S964C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev), // 
  (VTBL_ENTRY)_ZN6S964C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev), // 
  (VTBL_ENTRY)_ZN7S964C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev), // 
  (VTBL_ENTRY)_ZN7S964C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S964C13 = {  "S964C13", // class name
  bases_S964C13, 16,
  &(vtc_S964C13[0]), // expected_vtbl_contents
  &(vtt_S964C13[0]), // expected_vtt_contents
  ABISELECT(288,132), // object size
  NSPAIRA(_ZTI7S964C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S964C13),15, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S964C13),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S964C1  : S964C2 , S964C9 , S964C11 , S964C12 , S964C13 {
  ~S964C1(); // tgen
  S964C1(); // tgen
};
//SIG(1 S964C1) C1{ BC2{ BC3{ BC4{ m FD Fc:4}} VBC5{ m FC4 Fi} BC6{ m} VBC7{ VBC5 VBC8{ m} BC4 FL FC4 FC3} Fi} BC9{ BC6 VBC10{ VBC3 VBC5 VBC6 BC8 vd} VBC7 vd} BC11{ VBC10 VBC4 VBC7 vd Fp FL} BC12{ BC9 vd Fi} BC13{ BC3 VBC6 BC14{ BC8 BC12} Fp}}


S964C1 ::~S964C1(){ note_dtor("S964C1", this);} // tgen
S964C1 ::S964C1(){ note_ctor("S964C1", this);} // tgen

static void Test_S964C1()
{
  extern Class_Descriptor cd_S964C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,50)];
    init_test(&cd_S964C1, buf);
    S964C1 *dp, &lv = *(dp=new (buf) S964C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,196), "sizeof(S964C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S964C1)");
    check_base_class_offset(lv, (S19890C5*)(S964C3*)(S964C2*), ABISELECT(16,4), "S964C1");
    check_base_class_offset(lv, (S964C3*)(S964C2*), ABISELECT(16,4), "S964C1");
    check_base_class_offset(lv, (S19890C10*)(S964C2*), ABISELECT(176,84), "S964C1");
    check_base_class_offset(lv, (S19890C10*)(S964C7*), ABISELECT(176,84), "S964C1");
    check_base_class_offset(lv, (S19890C10*)(S964C10*), ABISELECT(176,84), "S964C1");
    check_base_class_offset(lv, (S10180C138*)(S964C2*), 0, "S964C1");
    check_base_class_offset(lv, (S10180C133*)(S964C7*), 0, "S964C1");
    check_base_class_offset(lv, (S19890C5*)(S964C7*), ABISELECT(240,108), "S964C1");
    check_base_class_offset(lv, (S964C7*)(S964C2*), ABISELECT(224,104), "S964C1");
    /*is_ambiguous_... S964C1::S964C9 */ AMB_check_base_class_offset(lv, (S964C7*)(S964C9*), ABISELECT(224,104), "S964C1");
    check_base_class_offset(lv, (S964C7*)(S964C11*), ABISELECT(224,104), "S964C1");
    /*is_ambiguous_... S964C1::S964C12 */ AMB_check_base_class_offset(lv, (S964C7*)(S964C9*)(S964C12*), ABISELECT(224,104), "S964C1");
    check_base_class_offset(lv, (S964C7*)(S964C9*)(S964C12*)(S964C14*)(S964C13*), ABISELECT(224,104), "S964C1");
    check_base_class_offset(lv, (S964C2*), 0, "S964C1");
    /*is_ambiguous_... S964C1::S964C9 */ AMB_check_base_class_offset(lv, (S10180C138*)(S964C9*), ABISELECT(56,24), "S964C1");
    /*is_ambiguous_... S964C1::S964C3 */ AMB_check_base_class_offset(lv, (S19890C5*)(S964C3*), ABISELECT(352,164), "S964C1");
    check_base_class_offset(lv, (S964C3*)(S964C10*), ABISELECT(352,164), "S964C1");
    check_base_class_offset(lv, (S10180C138*)(S964C10*), ABISELECT(384,180), "S964C1");
    /*is_ambiguous_... S964C13::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S964C13*), ABISELECT(384,180), "S964C1");
    check_base_class_offset(lv, (S10180C133*)(S964C10*), ABISELECT(56,24), "S964C1");
    /*is_ambiguous_... S964C1::S964C9 */ AMB_check_base_class_offset(lv, (S964C10*)(S964C9*), ABISELECT(56,24), "S964C1");
    check_base_class_offset(lv, (S964C10*)(S964C11*), ABISELECT(56,24), "S964C1");
    /*is_ambiguous_... S964C1::S964C12 */ AMB_check_base_class_offset(lv, (S964C10*)(S964C9*)(S964C12*), ABISELECT(56,24), "S964C1");
    check_base_class_offset(lv, (S964C10*)(S964C9*)(S964C12*)(S964C14*)(S964C13*), ABISELECT(56,24), "S964C1");
    /*is_ambiguous_... S964C1::S964C9 */ AMB_check_base_class_offset(lv, (S964C9*), ABISELECT(56,24), "S964C1");
    /*is_ambiguous_... S964C11::S19890C5 */ AMB_check_base_class_offset(lv, (S19890C5*)(S964C11*), ABISELECT(384,180), "S964C1");
    check_base_class_offset(lv, (S964C11*), ABISELECT(64,28), "S964C1");
    /*is_ambiguous_... S964C1::S964C12 */ AMB_check_base_class_offset(lv, (S10180C138*)(S964C9*)(S964C12*), ABISELECT(88,44), "S964C1");
    /*is_ambiguous_... S964C1::S964C12 */ AMB_check_base_class_offset(lv, (S964C9*)(S964C12*), ABISELECT(88,44), "S964C1");
    /*is_ambiguous_... S964C1::S964C12 */ AMB_check_base_class_offset(lv, (S964C12*), ABISELECT(88,44), "S964C1");
    /*is_ambiguous_... S964C13::S964C3 */ AMB_check_base_class_offset(lv, (S19890C5*)(S964C3*)(S964C13*), ABISELECT(128,64), "S964C1");
    /*is_ambiguous_... S964C13::S964C3 */ AMB_check_base_class_offset(lv, (S964C3*)(S964C13*), ABISELECT(128,64), "S964C1");
    /*is_ambiguous_... S964C14::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S964C14*)(S964C13*), ABISELECT(124,60), "S964C1");
    /*is_ambiguous_... S964C9::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S964C9*)(S964C12*)(S964C14*)(S964C13*), ABISELECT(112,52), "S964C1");
    check_base_class_offset(lv, (S964C9*)(S964C12*)(S964C14*)(S964C13*), ABISELECT(112,52), "S964C1");
    check_base_class_offset(lv, (S964C12*)(S964C14*)(S964C13*), ABISELECT(112,52), "S964C1");
    check_base_class_offset(lv, (S964C14*)(S964C13*), ABISELECT(112,52), "S964C1");
    check_base_class_offset(lv, (S964C13*), ABISELECT(112,52), "S964C1");
    test_class_info(&lv, &cd_S964C1);
    dp->~S964C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS964C1(Test_S964C1, "S964C1", ABISELECT(416,196));

#else // __cplusplus

extern void _ZN6S964C1C1Ev();
extern void _ZN6S964C1D1Ev();
Name_Map name_map_S964C1[] = {
  NSPAIR(_ZN6S964C1C1Ev),
  NSPAIR(_ZN6S964C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C7;
extern VTBL_ENTRY _ZTI6S964C7[];
extern  VTBL_ENTRY _ZTV6S964C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C7[];
extern Class_Descriptor cd_S964C2;
extern VTBL_ENTRY _ZTI6S964C2[];
extern  VTBL_ENTRY _ZTV6S964C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C2[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S964C10;
extern VTBL_ENTRY _ZTI7S964C10[];
extern  VTBL_ENTRY _ZTV7S964C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C10[];
extern Class_Descriptor cd_S964C9;
extern VTBL_ENTRY _ZTI6S964C9[];
extern  VTBL_ENTRY _ZTV6S964C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C9[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C11;
extern VTBL_ENTRY _ZTI7S964C11[];
extern  VTBL_ENTRY _ZTV7S964C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C11[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S964C9;
extern VTBL_ENTRY _ZTI6S964C9[];
extern  VTBL_ENTRY _ZTV6S964C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C9[];
extern Class_Descriptor cd_S964C12;
extern VTBL_ENTRY _ZTI7S964C12[];
extern  VTBL_ENTRY _ZTV7S964C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C12[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S964C3;
extern VTBL_ENTRY _ZTI6S964C3[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S964C9;
extern VTBL_ENTRY _ZTI6S964C9[];
extern  VTBL_ENTRY _ZTV6S964C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C9[];
extern Class_Descriptor cd_S964C12;
extern VTBL_ENTRY _ZTI7S964C12[];
extern  VTBL_ENTRY _ZTV7S964C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C12[];
extern Class_Descriptor cd_S964C14;
extern VTBL_ENTRY _ZTI7S964C14[];
extern  VTBL_ENTRY _ZTV7S964C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C14[];
extern Class_Descriptor cd_S964C13;
extern VTBL_ENTRY _ZTI7S964C13[];
extern  VTBL_ENTRY _ZTV7S964C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S964C13[];
static Base_Class bases_S964C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(16,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
  0, 0},
  {&cd_S964C3,    ABISELECT(16,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
    7, //immediately_derived
  0, 0},
  {&cd_S19890C10,    ABISELECT(176,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(240,108), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S964C7,    ABISELECT(224,104), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S964C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C138,    ABISELECT(56,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19890C5,    ABISELECT(352,164), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S964C3,    ABISELECT(352,164), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(384,180), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(56,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S964C10,    ABISELECT(56,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S964C9,    ABISELECT(56,24), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19890C5,    ABISELECT(384,180), //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 1},
  {&cd_S964C11,    ABISELECT(64,28), //bcp->offset
    22, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C138,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S964C9,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S964C12,    ABISELECT(88,44), //bcp->offset
    34, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19890C5,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S964C3,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(124,60), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(112,52), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S964C9,    ABISELECT(112,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S964C12,    ABISELECT(112,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S964C14,    ABISELECT(112,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S964C13,    ABISELECT(112,52), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S964C1[];
extern void _ZN6S964C1D1Ev();
extern void _ZN6S964C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N6S964C1D1Ev,_ZTv0_n24_N6S964C1D1Ev)();
extern void ABISELECT(_ZThn56_N6S964C1D1Ev,_ZThn24_N6S964C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C1D0Ev,_ZTv0_n24_N6S964C1D0Ev)();
extern void ABISELECT(_ZThn56_N6S964C1D0Ev,_ZThn24_N6S964C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C1D1Ev,_ZTv0_n24_N6S964C1D1Ev)();
extern void ABISELECT(_ZThn64_N6S964C1D1Ev,_ZThn28_N6S964C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C1D0Ev,_ZTv0_n24_N6S964C1D0Ev)();
extern void ABISELECT(_ZThn64_N6S964C1D0Ev,_ZThn28_N6S964C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C1D1Ev,_ZTv0_n24_N6S964C1D1Ev)();
extern void ABISELECT(_ZThn88_N6S964C1D1Ev,_ZThn44_N6S964C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C1D0Ev,_ZTv0_n24_N6S964C1D0Ev)();
extern void ABISELECT(_ZThn88_N6S964C1D0Ev,_ZThn44_N6S964C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C1D1Ev,_ZTv0_n24_N6S964C1D1Ev)();
extern void ABISELECT(_ZThn112_N6S964C1D1Ev,_ZThn52_N6S964C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C1D0Ev,_ZTv0_n24_N6S964C1D0Ev)();
extern void ABISELECT(_ZThn112_N6S964C1D0Ev,_ZThn52_N6S964C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S964C1[] = {
  ABISELECT(384,180),
  ABISELECT(384,180),
  ABISELECT(352,164),
  ABISELECT(56,24),
  0,
  ABISELECT(224,104),
  ABISELECT(176,84),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C1[0]),
  (VTBL_ENTRY)&_ZN6S964C1D1Ev,
  (VTBL_ENTRY)&_ZN6S964C1D0Ev,
  ABISELECT(-56,-24),
  ABISELECT(168,80),
  0,
  ABISELECT(-56,-24),
  ABISELECT(328,156),
  ABISELECT(120,60),
  ABISELECT(296,140),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI6S964C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C1D1Ev,_ZTv0_n24_N6S964C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C1D0Ev,_ZTv0_n24_N6S964C1D0Ev),
  ABISELECT(-64,-28),
  ABISELECT(160,76),
  ABISELECT(320,152),
  ABISELECT(-8,-4),
  ABISELECT(-64,-28),
  ABISELECT(320,152),
  ABISELECT(112,56),
  ABISELECT(288,136),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI6S964C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C1D1Ev,_ZTv0_n24_N6S964C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C1D0Ev,_ZTv0_n24_N6S964C1D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(136,60),
  ABISELECT(-32,-20),
  ABISELECT(-88,-44),
  ABISELECT(296,136),
  ABISELECT(88,40),
  ABISELECT(264,120),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI6S964C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C1D1Ev,_ZTv0_n24_N6S964C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C1D0Ev,_ZTv0_n24_N6S964C1D0Ev),
  ABISELECT(-112,-52),
  ABISELECT(112,52),
  ABISELECT(-56,-28),
  ABISELECT(-112,-52),
  ABISELECT(272,128),
  ABISELECT(64,32),
  ABISELECT(240,112),
  ABISELECT(-112,-52),
  (VTBL_ENTRY)&(_ZTI6S964C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C1D1Ev,_ZTv0_n24_N6S964C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C1D0Ev,_ZTv0_n24_N6S964C1D0Ev),
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  ABISELECT(-224,-104),
  (VTBL_ENTRY)&(_ZTI6S964C1[0]),
};
extern VTBL_ENTRY _ZTV6S964C1[];
static  VTBL_ENTRY _tg__ZTV6S964C2__6S964C1[] = {
  0,
  ABISELECT(224,104),
  ABISELECT(176,84),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C2[0]),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__6S964C2__6S964C1[] = {
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  ABISELECT(-224,-104),
  (VTBL_ENTRY)&(_ZTI6S964C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev)();
extern void _ZN6S964C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev)();
extern void _ZN6S964C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S964C9__6S964C1[] = {
  ABISELECT(-56,-24),
  ABISELECT(168,80),
  0,
  0,
  ABISELECT(328,156),
  ABISELECT(120,60),
  ABISELECT(296,140),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__6S964C9__6S964C1[] = {
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  ABISELECT(-168,-80),
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S964C11D1Ev,_ZTv0_n24_N7S964C11D1Ev)();
extern void _ZN7S964C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S964C11D0Ev,_ZTv0_n24_N7S964C11D0Ev)();
extern void _ZN7S964C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S964C11__6S964C1[] = {
  ABISELECT(-64,-28),
  ABISELECT(160,76),
  ABISELECT(320,152),
  ABISELECT(-8,-4),
  0,
  ABISELECT(320,152),
  ABISELECT(112,56),
  ABISELECT(288,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C11D1Ev,_ZTv0_n24_N7S964C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C11D0Ev,_ZTv0_n24_N7S964C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S964C11D1Ev,_ZTv0_n24_N7S964C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S964C11D0Ev,_ZTv0_n24_N7S964C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S964C10__7S964C11__6S964C1[] = {
  ABISELECT(8,4),
  ABISELECT(328,156),
  ABISELECT(120,60),
  ABISELECT(296,140),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S964C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C11D1Ev,_ZTv0_n24_N7S964C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C11D0Ev,_ZTv0_n24_N7S964C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C11__6S964C1[] = {
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  ABISELECT(-160,-76),
  (VTBL_ENTRY)&(_ZTI7S964C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev)();
extern void _ZN7S964C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev)();
extern void _ZN7S964C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S964C12__6S964C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(136,60),
  ABISELECT(-32,-20),
  0,
  ABISELECT(296,136),
  ABISELECT(88,40),
  ABISELECT(264,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev)();
extern void _ZN6S964C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev)();
extern void _ZN6S964C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S964C97S964C12__A1__6S964C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(136,60),
  ABISELECT(-32,-20),
  0,
  ABISELECT(296,136),
  ABISELECT(88,40),
  ABISELECT(264,120),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S964C10__6S964C97S964C12__A1__6S964C1[] = {
  ABISELECT(32,20),
  ABISELECT(328,156),
  ABISELECT(120,60),
  ABISELECT(296,140),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__6S964C97S964C12__A1__6S964C1[] = {
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  ABISELECT(-136,-60),
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S964C10__7S964C12__6S964C1[] = {
  ABISELECT(32,20),
  ABISELECT(328,156),
  ABISELECT(120,60),
  ABISELECT(296,140),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C12__6S964C1[] = {
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  ABISELECT(-136,-60),
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S964C13D1Ev,_ZTv0_n24_N7S964C13D1Ev)();
extern void _ZN7S964C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S964C13D0Ev,_ZTv0_n24_N7S964C13D0Ev)();
extern void _ZN7S964C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S964C13__6S964C1[] = {
  ABISELECT(-112,-52),
  ABISELECT(112,52),
  ABISELECT(-56,-28),
  0,
  ABISELECT(272,128),
  ABISELECT(64,32),
  ABISELECT(240,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C13D1Ev,_ZTv0_n24_N7S964C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C13D0Ev,_ZTv0_n24_N7S964C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S964C14D1Ev,_ZTv0_n24_N7S964C14D1Ev)();
extern void _ZN7S964C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S964C14D0Ev,_ZTv0_n24_N7S964C14D0Ev)();
extern void _ZN7S964C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S964C147S964C13__6S964C1[] = {
  ABISELECT(-112,-52),
  ABISELECT(112,52),
  ABISELECT(-56,-28),
  0,
  ABISELECT(272,128),
  ABISELECT(64,32),
  ABISELECT(240,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C14D1Ev,_ZTv0_n24_N7S964C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C14D0Ev,_ZTv0_n24_N7S964C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev)();
extern void _ZN7S964C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev)();
extern void _ZN7S964C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S964C127S964C147S964C13__A1__6S964C1[] = {
  ABISELECT(-112,-52),
  ABISELECT(112,52),
  ABISELECT(-56,-28),
  0,
  ABISELECT(272,128),
  ABISELECT(64,32),
  ABISELECT(240,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev)();
extern void _ZN6S964C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev)();
extern void _ZN6S964C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV6S964C97S964C127S964C147S964C13__A2__6S964C1[] = {
  ABISELECT(-112,-52),
  ABISELECT(112,52),
  ABISELECT(-56,-28),
  0,
  ABISELECT(272,128),
  ABISELECT(64,32),
  ABISELECT(240,112),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S964C10__6S964C97S964C127S964C147S964C13__A2__6S964C1[] = {
  ABISELECT(56,28),
  ABISELECT(328,156),
  ABISELECT(120,60),
  ABISELECT(296,140),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__6S964C97S964C127S964C147S964C13__A2__6S964C1[] = {
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  ABISELECT(-112,-52),
  (VTBL_ENTRY)&(_ZTI6S964C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S964C10__7S964C127S964C147S964C13__A1__6S964C1[] = {
  ABISELECT(56,28),
  ABISELECT(328,156),
  ABISELECT(120,60),
  ABISELECT(296,140),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C127S964C147S964C13__A1__6S964C1[] = {
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  ABISELECT(-112,-52),
  (VTBL_ENTRY)&(_ZTI7S964C12[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S964C14D1Ev,_ZTv0_n24_N7S964C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S964C14D0Ev,_ZTv0_n24_N7S964C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S964C10__7S964C147S964C13__6S964C1[] = {
  ABISELECT(56,28),
  ABISELECT(328,156),
  ABISELECT(120,60),
  ABISELECT(296,140),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI7S964C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C14D1Ev,_ZTv0_n24_N7S964C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C14D0Ev,_ZTv0_n24_N7S964C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C147S964C13__6S964C1[] = {
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  ABISELECT(-112,-52),
  (VTBL_ENTRY)&(_ZTI7S964C14[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S964C13D1Ev,_ZTv0_n24_N7S964C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S964C13D0Ev,_ZTv0_n24_N7S964C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S964C10__7S964C13__6S964C1[] = {
  ABISELECT(56,28),
  ABISELECT(328,156),
  ABISELECT(120,60),
  ABISELECT(296,140),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI7S964C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C13D1Ev,_ZTv0_n24_N7S964C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S964C13D0Ev,_ZTv0_n24_N7S964C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__7S964C13__6S964C1[] = {
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  ABISELECT(-112,-52),
  (VTBL_ENTRY)&(_ZTI7S964C13[0]),
};
static  VTBL_ENTRY _tg__ZTV6S964C7__6S964C1[] = {
  ABISELECT(-224,-104),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI6S964C7[0]),
};
extern void _ZN7S964C10D1Ev();
extern void _ZN7S964C10D0Ev();
static  VTBL_ENTRY _tg__ZTV7S964C10__6S964C1[] = {
  ABISELECT(328,156),
  ABISELECT(120,60),
  ABISELECT(296,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S964C10[0]),
  (VTBL_ENTRY)&_ZN7S964C10D1Ev,
  (VTBL_ENTRY)&_ZN7S964C10D0Ev,
};
static  VTT_ENTRY vtt_S964C1[] = {
  {&(_ZTV6S964C1[9]),  9,60},
  {&(_tg__ZTV6S964C2__6S964C1[5]),  5,5},
  {&(_tg__ZTV6S964C7__6S964C2__6S964C1[4]),  4,4},
  {&(_tg__ZTV6S964C9__6S964C1[9]),  9,11},
  {&(_tg__ZTV6S964C9__6S964C1[9]),  9,11},
  {&(_tg__ZTV6S964C7__6S964C9__6S964C1[4]),  4,4},
  {&(_tg__ZTV7S964C11__6S964C1[10]),  10,12},
  {&(_tg__ZTV7S964C10__7S964C11__6S964C1[6]),  6,8},
  {&(_tg__ZTV6S964C7__7S964C11__6S964C1[4]),  4,4},
  {&(_tg__ZTV7S964C12__6S964C1[9]),  9,11},
  {&(_tg__ZTV6S964C97S964C12__A1__6S964C1[9]),  9,11},
  {&(_tg__ZTV7S964C10__6S964C97S964C12__A1__6S964C1[6]),  6,8},
  {&(_tg__ZTV6S964C7__6S964C97S964C12__A1__6S964C1[4]),  4,4},
  {&(_tg__ZTV7S964C10__7S964C12__6S964C1[6]),  6,8},
  {&(_tg__ZTV6S964C7__7S964C12__6S964C1[4]),  4,4},
  {&(_tg__ZTV7S964C13__6S964C1[9]),  9,11},
  {&(_tg__ZTV7S964C147S964C13__6S964C1[9]),  9,11},
  {&(_tg__ZTV7S964C127S964C147S964C13__A1__6S964C1[9]),  9,11},
  {&(_tg__ZTV6S964C97S964C127S964C147S964C13__A2__6S964C1[9]),  9,11},
  {&(_tg__ZTV7S964C10__6S964C97S964C127S964C147S964C13__A2__6S964C1[6]),  6,8},
  {&(_tg__ZTV6S964C7__6S964C97S964C127S964C147S964C13__A2__6S964C1[4]),  4,4},
  {&(_tg__ZTV7S964C10__7S964C127S964C147S964C13__A1__6S964C1[6]),  6,8},
  {&(_tg__ZTV6S964C7__7S964C127S964C147S964C13__A1__6S964C1[4]),  4,4},
  {&(_tg__ZTV7S964C10__7S964C147S964C13__6S964C1[6]),  6,8},
  {&(_tg__ZTV6S964C7__7S964C147S964C13__6S964C1[4]),  4,4},
  {&(_tg__ZTV7S964C10__7S964C13__6S964C1[6]),  6,8},
  {&(_tg__ZTV6S964C7__7S964C13__6S964C1[4]),  4,4},
  {&(_ZTV6S964C1[60]),  60,60},
  {&(_ZTV6S964C1[20]),  20,60},
  {&(_ZTV6S964C1[20]),  20,60},
  {&(_ZTV6S964C1[32]),  32,60},
  {&(_ZTV6S964C1[43]),  43,60},
  {&(_ZTV6S964C1[54]),  54,60},
  {&(_tg__ZTV6S964C7__6S964C1[4]),  4,4},
  {&(_tg__ZTV7S964C10__6S964C1[5]),  5,7},
};
extern VTBL_ENTRY _ZTI6S964C1[];
extern  VTBL_ENTRY _ZTV6S964C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S964C1[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S964C14D0Ev,_ZTv0_n24_N7S964C14D0Ev), // 
  (VTBL_ENTRY)_ZN7S964C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S964C14D1Ev,_ZTv0_n24_N7S964C14D1Ev), // 
  (VTBL_ENTRY)_ZN7S964C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S964C13D0Ev,_ZTv0_n24_N7S964C13D0Ev), // 
  (VTBL_ENTRY)_ZN7S964C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S964C13D1Ev,_ZTv0_n24_N7S964C13D1Ev), // 
  (VTBL_ENTRY)_ZN7S964C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S964C12D0Ev,_ZTv0_n24_N7S964C12D0Ev), // 
  (VTBL_ENTRY)_ZN7S964C12D0Ev,
  (VTBL_ENTRY)_ZN7S964C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S964C12D1Ev,_ZTv0_n24_N7S964C12D1Ev), // 
  (VTBL_ENTRY)_ZN7S964C12D1Ev,
  (VTBL_ENTRY)_ZN7S964C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S964C11D0Ev,_ZTv0_n24_N7S964C11D0Ev), // 
  (VTBL_ENTRY)_ZN7S964C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S964C11D1Ev,_ZTv0_n24_N7S964C11D1Ev), // 
  (VTBL_ENTRY)_ZN7S964C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S964C9D0Ev,_ZTv0_n24_N6S964C9D0Ev), // 
  (VTBL_ENTRY)_ZN6S964C9D0Ev,
  (VTBL_ENTRY)_ZN6S964C9D0Ev,
  (VTBL_ENTRY)_ZN6S964C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S964C9D1Ev,_ZTv0_n24_N6S964C9D1Ev), // 
  (VTBL_ENTRY)_ZN6S964C9D1Ev,
  (VTBL_ENTRY)_ZN6S964C9D1Ev,
  (VTBL_ENTRY)_ZN6S964C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S964C1D0Ev,_ZTv0_n24_N6S964C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N6S964C1D0Ev,_ZThn52_N6S964C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N6S964C1D0Ev,_ZThn44_N6S964C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N6S964C1D0Ev,_ZThn28_N6S964C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N6S964C1D0Ev,_ZThn24_N6S964C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N6S964C1D1Ev,_ZTv0_n24_N6S964C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N6S964C1D1Ev,_ZThn52_N6S964C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N6S964C1D1Ev,_ZThn44_N6S964C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N6S964C1D1Ev,_ZThn28_N6S964C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N6S964C1D1Ev,_ZThn24_N6S964C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S964C1 = {  "S964C1", // class name
  bases_S964C1, 28,
  &(vtc_S964C1[0]), // expected_vtbl_contents
  &(vtt_S964C1[0]), // expected_vtt_contents
  ABISELECT(416,196), // object size
  NSPAIRA(_ZTI6S964C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV6S964C1),60, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S964C1),35, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5642C6  : S19890C5 {
};
//SIG(-1 S5642C6) C1{ BC2{ m FD Fc:4}}



static void Test_S5642C6()
{
  extern Class_Descriptor cd_S5642C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S5642C6, buf);
    S5642C6 &lv = *(new (buf) S5642C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S5642C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5642C6)");
    check_base_class_offset(lv, (S19890C5*), 0, "S5642C6");
    test_class_info(&lv, &cd_S5642C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5642C6(Test_S5642C6, "S5642C6", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
static Base_Class bases_S5642C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5642C6[];
Class_Descriptor cd_S5642C6 = {  "S5642C6", // class name
  bases_S5642C6, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S5642C6),ABISELECT(24,12), //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  S5642C8  : virtual S19890C10 , virtual S10180C133 , S19890C5 {
  __tsi64 s5642c8f0;
  ::S19890C5 s5642c8f1;
  ::S5642C6 s5642c8f2;
  ~S5642C8(); // tgen
  S5642C8(); // tgen
};
//SIG(-1 S5642C8) C1{ VBC2{ m FC3{ m FD Fc:4} Fi} VBC4{ m} BC3 FL FC3 FC5{ BC3}}


S5642C8 ::~S5642C8(){ note_dtor("S5642C8", this);} // tgen
S5642C8 ::S5642C8(){ note_ctor("S5642C8", this);} // tgen

static void Test_S5642C8()
{
  extern Class_Descriptor cd_S5642C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,21)];
    init_test(&cd_S5642C8, buf);
    S5642C8 *dp, &lv = *(dp=new (buf) S5642C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,80), "sizeof(S5642C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5642C8)");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(128,60), "S5642C8");
    check_base_class_offset(lv, (S10180C133*), 0, "S5642C8");
    check_base_class_offset(lv, (S19890C5*), ABISELECT(16,4), "S5642C8");
    check_field_offset(lv, s5642c8f0, ABISELECT(48,20), "S5642C8.s5642c8f0");
    check_field_offset(lv, s5642c8f1, ABISELECT(64,28), "S5642C8.s5642c8f1");
    check_field_offset(lv, s5642c8f2, ABISELECT(96,44), "S5642C8.s5642c8f2");
    test_class_info(&lv, &cd_S5642C8);
    dp->~S5642C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5642C8(Test_S5642C8, "S5642C8", ABISELECT(176,80));

#else // __cplusplus

extern void _ZN7S5642C8C1Ev();
extern void _ZN7S5642C8D1Ev();
Name_Map name_map_S5642C8[] = {
  NSPAIR(_ZN7S5642C8C1Ev),
  NSPAIR(_ZN7S5642C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
static Base_Class bases_S5642C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C10,    ABISELECT(128,60), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S19890C5,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI7S5642C8[];
static  VTBL_ENTRY vtc_S5642C8[] = {
  0,
  ABISELECT(128,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C8[0]),
};
extern VTBL_ENTRY _ZTV7S5642C8[];
static  VTT_ENTRY vtt_S5642C8[] = {
  {&(_ZTV7S5642C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S5642C8[];
extern  VTBL_ENTRY _ZTV7S5642C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C8[];
Class_Descriptor cd_S5642C8 = {  "S5642C8", // class name
  bases_S5642C8, 3,
  &(vtc_S5642C8[0]), // expected_vtbl_contents
  &(vtt_S5642C8[0]), // expected_vtt_contents
  ABISELECT(176,80), // object size
  NSPAIRA(_ZTI7S5642C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5642C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5642C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5642C5  : S5642C6 , virtual S19890C10 , S10180C138 , virtual S5642C8 {
  int s5642c5f0;
  ~S5642C5(); // tgen
  S5642C5(); // tgen
};
//SIG(-1 S5642C5) C1{ BC2{ BC3{ m FD Fc:4}} VBC4{ m FC3 Fi} BC5{ m} VBC6{ VBC4 VBC7{ m} BC3 FL FC3 FC2} Fi}


S5642C5 ::~S5642C5(){ note_dtor("S5642C5", this);} // tgen
S5642C5 ::S5642C5(){ note_ctor("S5642C5", this);} // tgen

static void Test_S5642C5()
{
  extern Class_Descriptor cd_S5642C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S5642C5, buf);
    S5642C5 *dp, &lv = *(dp=new (buf) S5642C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S5642C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5642C5)");
    check_base_class_offset(lv, (S19890C5*)(S5642C6*), ABISELECT(16,4), "S5642C5");
    check_base_class_offset(lv, (S5642C6*), ABISELECT(16,4), "S5642C5");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(64,24), "S5642C5");
    check_base_class_offset(lv, (S19890C10*)(S5642C8*), ABISELECT(64,24), "S5642C5");
    check_base_class_offset(lv, (S10180C138*), 0, "S5642C5");
    check_base_class_offset(lv, (S10180C133*)(S5642C8*), 0, "S5642C5");
    check_base_class_offset(lv, (S19890C5*)(S5642C8*), ABISELECT(128,48), "S5642C5");
    check_base_class_offset(lv, (S5642C8*), ABISELECT(112,44), "S5642C5");
    check_field_offset(lv, s5642c5f0, ABISELECT(48,20), "S5642C5.s5642c5f0");
    test_class_info(&lv, &cd_S5642C5);
    dp->~S5642C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5642C5(Test_S5642C5, "S5642C5", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN7S5642C5C1Ev();
extern void _ZN7S5642C5D1Ev();
Name_Map name_map_S5642C5[] = {
  NSPAIR(_ZN7S5642C5C1Ev),
  NSPAIR(_ZN7S5642C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C8;
extern VTBL_ENTRY _ZTI7S5642C8[];
extern  VTBL_ENTRY _ZTV7S5642C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C8[];
static Base_Class bases_S5642C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(16,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
  0, 0},
  {&cd_S5642C6,    ABISELECT(16,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_S19890C10,    ABISELECT(64,24), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(128,48), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S5642C8,    ABISELECT(112,44), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5642C5[];
static  VTBL_ENTRY vtc_S5642C5[] = {
  0,
  ABISELECT(112,44),
  ABISELECT(64,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C5[0]),
  ABISELECT(-112,-44),
  ABISELECT(-48,-20),
  ABISELECT(-112,-44),
  (VTBL_ENTRY)&(_ZTI7S5642C5[0]),
};
extern VTBL_ENTRY _ZTV7S5642C5[];
static  VTBL_ENTRY _tg__ZTV7S5642C8__7S5642C5[] = {
  ABISELECT(-112,-44),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C8[0]),
};
static  VTT_ENTRY vtt_S5642C5[] = {
  {&(_ZTV7S5642C5[5]),  5,9},
  {&(_ZTV7S5642C5[9]),  9,9},
  {&(_tg__ZTV7S5642C8__7S5642C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S5642C5[];
extern  VTBL_ENTRY _ZTV7S5642C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C5[];
Class_Descriptor cd_S5642C5 = {  "S5642C5", // class name
  bases_S5642C5, 7,
  &(vtc_S5642C5[0]), // expected_vtbl_contents
  &(vtt_S5642C5[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI7S5642C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5642C5),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5642C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5642C11  : virtual S5642C6 , virtual S19890C10 , virtual S10180C138 , S10180C133 {
  virtual  ~S5642C11(); // _ZN8S5642C11D2Ev
  S5642C11(); // tgen
};
//SIG(-1 S5642C11) C1{ VBC2{ BC3{ m FD Fc:4}} VBC4{ m FC3 Fi} VBC5{ m} BC6{ m} vd}


 S5642C11 ::~S5642C11(){ note_dtor("S5642C11", this);}
S5642C11 ::S5642C11(){ note_ctor("S5642C11", this);} // tgen

static void Test_S5642C11()
{
  extern Class_Descriptor cd_S5642C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,11)];
    init_test(&cd_S5642C11, buf);
    S5642C11 *dp, &lv = *(dp=new (buf) S5642C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,40), "sizeof(S5642C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5642C11)");
    check_base_class_offset(lv, (S19890C5*)(S5642C6*), ABISELECT(16,4), "S5642C11");
    check_base_class_offset(lv, (S5642C6*), ABISELECT(16,4), "S5642C11");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(48,20), "S5642C11");
    check_base_class_offset(lv, (S10180C138*), 0, "S5642C11");
    check_base_class_offset(lv, (S10180C133*), 0, "S5642C11");
    test_class_info(&lv, &cd_S5642C11);
    dp->~S5642C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5642C11(Test_S5642C11, "S5642C11", ABISELECT(96,40));

#else // __cplusplus

extern void _ZN8S5642C11C1Ev();
extern void _ZN8S5642C11D2Ev();
Name_Map name_map_S5642C11[] = {
  NSPAIR(_ZN8S5642C11C1Ev),
  NSPAIR(_ZN8S5642C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
static Base_Class bases_S5642C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(16,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
  0, 0},
  {&cd_S5642C6,    ABISELECT(16,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, 1},
  {&cd_S19890C10,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S5642C11[];
extern void _ZN8S5642C11D1Ev();
extern void _ZN8S5642C11D0Ev();
static  VTBL_ENTRY vtc_S5642C11[] = {
  0,
  ABISELECT(48,20),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C11[0]),
  (VTBL_ENTRY)&_ZN8S5642C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C11D0Ev,
};
extern VTBL_ENTRY _ZTV8S5642C11[];
static  VTT_ENTRY vtt_S5642C11[] = {
  {&(_ZTV8S5642C11[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S5642C11[];
extern  VTBL_ENTRY _ZTV8S5642C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C11[];
Class_Descriptor cd_S5642C11 = {  "S5642C11", // class name
  bases_S5642C11, 5,
  &(vtc_S5642C11[0]), // expected_vtbl_contents
  &(vtt_S5642C11[0]), // expected_vtt_contents
  ABISELECT(96,40), // object size
  NSPAIRA(_ZTI8S5642C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S5642C11),7, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5642C11),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5642C12  : S10180C138 , virtual S5642C11 , virtual S5642C8 {
  virtual  ~S5642C12(); // _ZN8S5642C12D2Ev
  S5642C12(); // tgen
};
//SIG(-1 S5642C12) C1{ BC2{ m} VBC3{ VBC4{ BC5{ m FD Fc:4}} VBC6{ m FC5 Fi} VBC2 BC7{ m} vd} VBC8{ VBC6 VBC7 BC5 FL FC5 FC4} vd}


 S5642C12 ::~S5642C12(){ note_dtor("S5642C12", this);}
S5642C12 ::S5642C12(){ note_ctor("S5642C12", this);} // tgen

static void Test_S5642C12()
{
  extern Class_Descriptor cd_S5642C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S5642C12, buf);
    S5642C12 *dp, &lv = *(dp=new (buf) S5642C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S5642C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5642C12)");
    /*is_ambiguous_... S5642C12::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*), 0, "S5642C12");
    check_base_class_offset(lv, (S19890C5*)(S5642C6*), ABISELECT(16,4), "S5642C12");
    check_base_class_offset(lv, (S5642C6*)(S5642C11*), ABISELECT(16,4), "S5642C12");
    check_base_class_offset(lv, (S19890C10*)(S5642C11*), ABISELECT(48,20), "S5642C12");
    check_base_class_offset(lv, (S19890C10*)(S5642C8*), ABISELECT(48,20), "S5642C12");
    check_base_class_offset(lv, (S10180C138*)(S5642C11*), ABISELECT(96,40), "S5642C12");
    check_base_class_offset(lv, (S10180C133*)(S5642C11*), 0, "S5642C12");
    check_base_class_offset(lv, (S5642C11*), 0, "S5642C12");
    check_base_class_offset(lv, (S10180C133*)(S5642C8*), ABISELECT(224,100), "S5642C12");
    check_base_class_offset(lv, (S19890C5*)(S5642C8*), ABISELECT(112,44), "S5642C12");
    check_base_class_offset(lv, (S5642C8*), ABISELECT(96,40), "S5642C12");
    test_class_info(&lv, &cd_S5642C12);
    dp->~S5642C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5642C12(Test_S5642C12, "S5642C12", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN8S5642C12C1Ev();
extern void _ZN8S5642C12D2Ev();
Name_Map name_map_S5642C12[] = {
  NSPAIR(_ZN8S5642C12C1Ev),
  NSPAIR(_ZN8S5642C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S5642C11;
extern VTBL_ENTRY _ZTI8S5642C11[];
extern  VTBL_ENTRY _ZTV8S5642C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C11[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C8;
extern VTBL_ENTRY _ZTI7S5642C8[];
extern  VTBL_ENTRY _ZTV7S5642C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C8[];
static Base_Class bases_S5642C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19890C5,    ABISELECT(16,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_S5642C6,    ABISELECT(16,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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(96,40), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S5642C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C133,    ABISELECT(224,100), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(112,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S5642C8,    ABISELECT(96,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S5642C12[];
extern void _ZN8S5642C12D1Ev();
extern void _ZN8S5642C12D0Ev();
static  VTBL_ENTRY vtc_S5642C12[] = {
  ABISELECT(224,100),
  ABISELECT(96,40),
  0,
  0,
  ABISELECT(96,40),
  ABISELECT(48,20),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C12[0]),
  (VTBL_ENTRY)&_ZN8S5642C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C12D0Ev,
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-96,-40),
  (VTBL_ENTRY)&(_ZTI8S5642C12[0]),
};
extern VTBL_ENTRY _ZTV8S5642C12[];
extern void _ZN8S5642C11D1Ev();
extern void _ZN8S5642C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5642C11__8S5642C12[] = {
  ABISELECT(96,40),
  ABISELECT(48,20),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C11[0]),
  (VTBL_ENTRY)&_ZN8S5642C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5642C8__8S5642C12[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C8[0]),
};
static  VTT_ENTRY vtt_S5642C12[] = {
  {&(_ZTV8S5642C12[9]),  9,15},
  {&(_ZTV8S5642C12[9]),  9,15},
  {&(_ZTV8S5642C12[15]),  15,15},
  {&(_tg__ZTV8S5642C11__8S5642C12[5]),  5,7},
  {&(_tg__ZTV7S5642C8__8S5642C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S5642C12[];
extern  VTBL_ENTRY _ZTV8S5642C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C12[];
Class_Descriptor cd_S5642C12 = {  "S5642C12", // class name
  bases_S5642C12, 10,
  &(vtc_S5642C12[0]), // expected_vtbl_contents
  &(vtt_S5642C12[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI8S5642C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S5642C12),15, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5642C12),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5642C10  : virtual S10180C138 , virtual S19890C10 , S5642C11 , virtual S10180C133 , S5642C6 {
  ::S5642C12 s5642c10f0;
  virtual  ~S5642C10(); // _ZN8S5642C10D2Ev
  S5642C10(); // tgen
};
//SIG(-1 S5642C10) C1{ VBC2{ m} VBC3{ m FC4{ m FD Fc:4} Fi} BC5{ VBC6{ BC4} VBC3 VBC2 BC7{ m} vd} VBC7 BC6 vd FC8{ BC2 VBC5 VBC9{ VBC3 VBC7 BC4 FL FC4 FC6} vd}}


 S5642C10 ::~S5642C10(){ note_dtor("S5642C10", this);}
S5642C10 ::S5642C10(){ note_ctor("S5642C10", this);} // tgen

static void Test_S5642C10()
{
  extern Class_Descriptor cd_S5642C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,42)];
    init_test(&cd_S5642C10, buf);
    S5642C10 *dp, &lv = *(dp=new (buf) S5642C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,164), "sizeof(S5642C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5642C10)");
    check_base_class_offset(lv, (S10180C138*), 0, "S5642C10");
    check_base_class_offset(lv, (S10180C138*)(S5642C11*), 0, "S5642C10");
    check_base_class_offset(lv, (S19890C10*), ABISELECT(288,124), "S5642C10");
    check_base_class_offset(lv, (S19890C10*)(S5642C11*), ABISELECT(288,124), "S5642C10");
    /*is_ambiguous_... S5642C10::S5642C6 */ AMB_check_base_class_offset(lv, (S19890C5*)(S5642C6*), ABISELECT(336,144), "S5642C10");
    check_base_class_offset(lv, (S5642C6*)(S5642C11*), ABISELECT(336,144), "S5642C10");
    check_base_class_offset(lv, (S10180C133*)(S5642C11*), 0, "S5642C10");
    check_base_class_offset(lv, (S5642C11*), 0, "S5642C10");
    /*is_ambiguous_... S5642C10::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*), ABISELECT(368,160), "S5642C10");
    /*is_ambiguous_... S5642C10::S5642C6 */ AMB_check_base_class_offset(lv, (S19890C5*)(S5642C6*), ABISELECT(16,4), "S5642C10");
    /*is_ambiguous_... S5642C10::S5642C6 */ AMB_check_base_class_offset(lv, (S5642C6*), ABISELECT(16,4), "S5642C10");
    check_field_offset(lv, s5642c10f0, ABISELECT(48,20), "S5642C10.s5642c10f0");
    test_class_info(&lv, &cd_S5642C10);
    dp->~S5642C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5642C10(Test_S5642C10, "S5642C10", ABISELECT(384,164));

#else // __cplusplus

extern void _ZN8S5642C10C1Ev();
extern void _ZN8S5642C10D2Ev();
Name_Map name_map_S5642C10[] = {
  NSPAIR(_ZN8S5642C10C1Ev),
  NSPAIR(_ZN8S5642C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S5642C11;
extern VTBL_ENTRY _ZTI8S5642C11[];
extern  VTBL_ENTRY _ZTV8S5642C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C11[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
static Base_Class bases_S5642C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S19890C10,    ABISELECT(288,124), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S19890C5,    ABISELECT(336,144), //bcp->offset
    -1, //bcp->virtual_function_table_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_S5642C6,    ABISELECT(336,144), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S5642C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C133,    ABISELECT(368,160), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S19890C5,    ABISELECT(16,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
    8, //immediately_derived
  0, 0},
  {&cd_S5642C6,    ABISELECT(16,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}};
extern VTBL_ENTRY _ZTI8S5642C10[];
extern void _ZN8S5642C10D1Ev();
extern void _ZN8S5642C10D0Ev();
static  VTBL_ENTRY vtc_S5642C10[] = {
  ABISELECT(368,160),
  0,
  ABISELECT(288,124),
  ABISELECT(336,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C10[0]),
  (VTBL_ENTRY)&_ZN8S5642C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C10D0Ev,
};
extern VTBL_ENTRY _ZTV8S5642C10[];
extern void _ZN8S5642C11D1Ev();
extern void _ZN8S5642C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5642C11__8S5642C10[] = {
  0,
  ABISELECT(288,124),
  ABISELECT(336,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C11[0]),
  (VTBL_ENTRY)&_ZN8S5642C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C11D0Ev,
};
static  VTT_ENTRY vtt_S5642C10[] = {
  {&(_ZTV8S5642C10[6]),  6,8},
  {&(_tg__ZTV8S5642C11__8S5642C10[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S5642C10[];
extern  VTBL_ENTRY _ZTV8S5642C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C10[];
Class_Descriptor cd_S5642C10 = {  "S5642C10", // class name
  bases_S5642C10, 9,
  &(vtc_S5642C10[0]), // expected_vtbl_contents
  &(vtt_S5642C10[0]), // expected_vtt_contents
  ABISELECT(384,164), // object size
  NSPAIRA(_ZTI8S5642C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S5642C10),8, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5642C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5642C4  : virtual S5642C5 , S19890C10 , S10180C133 , S5642C10 , S5642C12 {
  char s5642c4f0[2];
  ~S5642C4(); // tgen
  S5642C4(); // tgen
};
//SIG(-1 S5642C4) C1{ VBC2{ BC3{ BC4{ m FD Fc:4}} VBC5{ m FC4 Fi} BC6{ m} VBC7{ VBC5 VBC8{ m} BC4 FL FC4 FC3} Fi} BC5 BC8 BC9{ VBC6 VBC5 BC10{ VBC3 VBC5 VBC6 BC8 vd} VBC8 BC3 vd FC11{ BC6 VBC10 VBC7 vd}} BC11 Fc[2]}


S5642C4 ::~S5642C4(){ note_dtor("S5642C4", this);} // tgen
S5642C4 ::S5642C4(){ note_ctor("S5642C4", this);} // tgen

static void Test_S5642C4()
{
  extern Class_Descriptor cd_S5642C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,70)];
    init_test(&cd_S5642C4, buf);
    S5642C4 *dp, &lv = *(dp=new (buf) S5642C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,276), "sizeof(S5642C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5642C4)");
    check_base_class_offset(lv, (S19890C5*)(S5642C6*)(S5642C5*), ABISELECT(384,160), "S5642C4");
    check_base_class_offset(lv, (S5642C6*)(S5642C5*), ABISELECT(384,160), "S5642C4");
    check_base_class_offset(lv, (S19890C10*)(S5642C5*), ABISELECT(432,180), "S5642C4");
    check_base_class_offset(lv, (S19890C10*)(S5642C8*), ABISELECT(432,180), "S5642C4");
    check_base_class_offset(lv, (S19890C10*)(S5642C10*), ABISELECT(432,180), "S5642C4");
    check_base_class_offset(lv, (S19890C10*)(S5642C11*)(S5642C10*), ABISELECT(432,180), "S5642C4");
    /*is_ambiguous_... S5642C4::S5642C11 */ AMB_check_base_class_offset(lv, (S19890C10*)(S5642C11*), ABISELECT(432,180), "S5642C4");
    check_base_class_offset(lv, (S10180C138*)(S5642C5*), ABISELECT(368,156), "S5642C4");
    check_base_class_offset(lv, (S10180C133*)(S5642C8*), ABISELECT(608,260), "S5642C4");
    /*is_ambiguous_... S5642C10::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S5642C10*), ABISELECT(608,260), "S5642C4");
    check_base_class_offset(lv, (S19890C5*)(S5642C8*), ABISELECT(496,204), "S5642C4");
    check_base_class_offset(lv, (S5642C8*)(S5642C5*), ABISELECT(480,200), "S5642C4");
    check_base_class_offset(lv, (S5642C8*)(S5642C12*), ABISELECT(480,200), "S5642C4");
    check_base_class_offset(lv, (S5642C5*), ABISELECT(368,156), "S5642C4");
    /*is_ambiguous_... S5642C4::S19890C10 */ AMB_check_base_class_offset(lv, (S19890C10*), ABISELECT(288,124), "S5642C4");
    /*is_ambiguous_... S5642C4::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*), ABISELECT(336,144), "S5642C4");
    check_base_class_offset(lv, (S10180C138*)(S5642C10*), 0, "S5642C4");
    check_base_class_offset(lv, (S10180C138*)(S5642C11*)(S5642C10*), 0, "S5642C4");
    /*is_ambiguous_... S5642C4::S5642C11 */ AMB_check_base_class_offset(lv, (S10180C138*)(S5642C11*), 0, "S5642C4");
    /*is_ambiguous_... S5642C4::S5642C6 */ AMB_check_base_class_offset(lv, (S19890C5*)(S5642C6*), ABISELECT(608,260), "S5642C4");
    check_base_class_offset(lv, (S5642C6*)(S5642C11*)(S5642C10*), ABISELECT(608,260), "S5642C4");
    /*is_ambiguous_... S5642C4::S5642C11 */ AMB_check_base_class_offset(lv, (S5642C6*)(S5642C11*), ABISELECT(608,260), "S5642C4");
    check_base_class_offset(lv, (S10180C133*)(S5642C11*)(S5642C10*), 0, "S5642C4");
    check_base_class_offset(lv, (S5642C11*)(S5642C10*), 0, "S5642C4");
    /*is_ambiguous_... S5642C10::S5642C6 */ AMB_check_base_class_offset(lv, (S19890C5*)(S5642C6*)(S5642C10*), ABISELECT(16,4), "S5642C4");
    /*is_ambiguous_... S5642C10::S5642C6 */ AMB_check_base_class_offset(lv, (S5642C6*)(S5642C10*), ABISELECT(16,4), "S5642C4");
    check_base_class_offset(lv, (S5642C10*), 0, "S5642C4");
    /*is_ambiguous_... S5642C12::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S5642C12*), ABISELECT(344,148), "S5642C4");
    /*is_ambiguous_... S5642C4::S5642C11 */ AMB_check_base_class_offset(lv, (S10180C133*)(S5642C11*), ABISELECT(344,148), "S5642C4");
    check_base_class_offset(lv, (S5642C11*)(S5642C12*), ABISELECT(344,148), "S5642C4");
    check_base_class_offset(lv, (S5642C12*), ABISELECT(344,148), "S5642C4");
    check_field_offset(lv, s5642c4f0, ABISELECT(352,152), "S5642C4.s5642c4f0");
    test_class_info(&lv, &cd_S5642C4);
    dp->~S5642C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5642C4(Test_S5642C4, "S5642C4", ABISELECT(640,276));

#else // __cplusplus

extern void _ZN7S5642C4C1Ev();
extern void _ZN7S5642C4D1Ev();
Name_Map name_map_S5642C4[] = {
  NSPAIR(_ZN7S5642C4C1Ev),
  NSPAIR(_ZN7S5642C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C8;
extern VTBL_ENTRY _ZTI7S5642C8[];
extern  VTBL_ENTRY _ZTV7S5642C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C8[];
extern Class_Descriptor cd_S5642C5;
extern VTBL_ENTRY _ZTI7S5642C5[];
extern  VTBL_ENTRY _ZTV7S5642C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C5[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S5642C11;
extern VTBL_ENTRY _ZTI8S5642C11[];
extern  VTBL_ENTRY _ZTV8S5642C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C11[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
extern Class_Descriptor cd_S5642C10;
extern VTBL_ENTRY _ZTI8S5642C10[];
extern  VTBL_ENTRY _ZTV8S5642C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S5642C11;
extern VTBL_ENTRY _ZTI8S5642C11[];
extern  VTBL_ENTRY _ZTV8S5642C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C11[];
extern Class_Descriptor cd_S5642C12;
extern VTBL_ENTRY _ZTI8S5642C12[];
extern  VTBL_ENTRY _ZTV8S5642C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C12[];
static Base_Class bases_S5642C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C5,    ABISELECT(384,160), //bcp->offset
    -1, //bcp->virtual_function_table_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_S5642C6,    ABISELECT(384,160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19890C10,    ABISELECT(432,180), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(368,156), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(608,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(496,204), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S5642C8,    ABISELECT(480,200), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S5642C5,    ABISELECT(368,156), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19890C10,    ABISELECT(288,124), //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C133,    ABISELECT(336,144), //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(608,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S5642C6,    ABISELECT(608,260), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S5642C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19890C5,    ABISELECT(16,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
    16, //immediately_derived
  0, 0},
  {&cd_S5642C6,    ABISELECT(16,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
    17, //immediately_derived
  0, 0},
  {&cd_S5642C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C138,    ABISELECT(344,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(344,148), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S5642C11,    ABISELECT(344,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S5642C12,    ABISELECT(344,148), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5642C4[];
extern void _ZN7S5642C4D1Ev();
extern void _ZN7S5642C4D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S5642C4D1Ev,_ZTv0_n24_N7S5642C4D1Ev)();
extern void ABISELECT(_ZThn344_N7S5642C4D1Ev,_ZThn148_N7S5642C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5642C4D0Ev,_ZTv0_n24_N7S5642C4D0Ev)();
extern void ABISELECT(_ZThn344_N7S5642C4D0Ev,_ZThn148_N7S5642C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5642C4[] = {
  ABISELECT(344,148),
  ABISELECT(480,200),
  ABISELECT(368,156),
  ABISELECT(608,260),
  0,
  ABISELECT(432,180),
  ABISELECT(608,260),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C4[0]),
  (VTBL_ENTRY)&_ZN7S5642C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5642C4D0Ev,
  ABISELECT(264,112),
  ABISELECT(136,52),
  0,
  ABISELECT(-344,-148),
  ABISELECT(-344,-148),
  ABISELECT(88,32),
  ABISELECT(264,112),
  ABISELECT(-344,-148),
  (VTBL_ENTRY)&(_ZTI7S5642C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5642C4D1Ev,_ZTv0_n24_N7S5642C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5642C4D0Ev,_ZTv0_n24_N7S5642C4D0Ev),
  ABISELECT(240,104),
  ABISELECT(112,44),
  ABISELECT(64,24),
  ABISELECT(-368,-156),
  (VTBL_ENTRY)&(_ZTI7S5642C4[0]),
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-480,-200),
  (VTBL_ENTRY)&(_ZTI7S5642C4[0]),
};
extern VTBL_ENTRY _ZTV7S5642C4[];
extern void _ZN8S5642C10D1Ev();
extern void _ZN8S5642C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5642C10__7S5642C4[] = {
  ABISELECT(608,260),
  0,
  ABISELECT(432,180),
  ABISELECT(608,260),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C10[0]),
  (VTBL_ENTRY)&_ZN8S5642C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C10D0Ev,
};
extern void _ZN8S5642C11D1Ev();
extern void _ZN8S5642C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5642C118S5642C10__7S5642C4[] = {
  0,
  ABISELECT(432,180),
  ABISELECT(608,260),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C11[0]),
  (VTBL_ENTRY)&_ZN8S5642C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S5642C12D1Ev,_ZTv0_n24_N8S5642C12D1Ev)();
extern void _ZN8S5642C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5642C12D0Ev,_ZTv0_n24_N8S5642C12D0Ev)();
extern void _ZN8S5642C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5642C12__7S5642C4[] = {
  ABISELECT(264,112),
  ABISELECT(136,52),
  0,
  0,
  ABISELECT(-344,-148),
  ABISELECT(88,32),
  ABISELECT(264,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5642C12D1Ev,_ZTv0_n24_N8S5642C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5642C12D0Ev,_ZTv0_n24_N8S5642C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5642C8__8S5642C12__7S5642C4[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-136,-52),
  (VTBL_ENTRY)&(_ZTI8S5642C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5642C5__7S5642C4[] = {
  ABISELECT(240,104),
  ABISELECT(112,44),
  ABISELECT(64,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5642C8__7S5642C5__7S5642C4[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  ABISELECT(-112,-44),
  (VTBL_ENTRY)&(_ZTI7S5642C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5642C8__7S5642C4[] = {
  ABISELECT(128,60),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C8[0]),
};
extern void _ZN8S5642C11D1Ev();
extern void _ZN8S5642C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5642C11__A1__7S5642C4[] = {
  ABISELECT(-344,-148),
  ABISELECT(88,32),
  ABISELECT(264,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C11[0]),
  (VTBL_ENTRY)&_ZN8S5642C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C11D0Ev,
};
static  VTT_ENTRY vtt_S5642C4[] = {
  {&(_ZTV7S5642C4[9]),  9,31},
  {&(_tg__ZTV8S5642C10__7S5642C4[6]),  6,8},
  {&(_tg__ZTV8S5642C118S5642C10__7S5642C4[5]),  5,7},
  {&(_tg__ZTV8S5642C12__7S5642C4[9]),  9,11},
  {&(_tg__ZTV8S5642C12__7S5642C4[9]),  9,11},
  {&(_tg__ZTV7S5642C8__8S5642C12__7S5642C4[4]),  4,4},
  {&(_ZTV7S5642C4[27]),  27,31},
  {&(_ZTV7S5642C4[31]),  31,31},
  {&(_ZTV7S5642C4[20]),  20,31},
  {&(_ZTV7S5642C4[20]),  20,31},
  {&(_tg__ZTV7S5642C5__7S5642C4[5]),  5,5},
  {&(_tg__ZTV7S5642C8__7S5642C5__7S5642C4[4]),  4,4},
  {&(_tg__ZTV7S5642C8__7S5642C4[4]),  4,4},
  {&(_tg__ZTV8S5642C11__A1__7S5642C4[5]),  5,7},
};
extern VTBL_ENTRY _ZTI7S5642C4[];
extern  VTBL_ENTRY _ZTV7S5642C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C4[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5642C12D0Ev,_ZTv0_n24_N8S5642C12D0Ev), // 
  (VTBL_ENTRY)_ZN8S5642C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5642C12D1Ev,_ZTv0_n24_N8S5642C12D1Ev), // 
  (VTBL_ENTRY)_ZN8S5642C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5642C4D0Ev,_ZTv0_n24_N7S5642C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S5642C4D0Ev,_ZThn148_N7S5642C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5642C4D1Ev,_ZTv0_n24_N7S5642C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S5642C4D1Ev,_ZThn148_N7S5642C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5642C4 = {  "S5642C4", // class name
  bases_S5642C4, 22,
  &(vtc_S5642C4[0]), // expected_vtbl_contents
  &(vtt_S5642C4[0]), // expected_vtt_contents
  ABISELECT(640,276), // object size
  NSPAIRA(_ZTI7S5642C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S5642C4),31, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5642C4),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5642C1  : S19890C10 , virtual S5642C4 , virtual S5642C12 {
  int s5642c1f0;
  ~S5642C1(); // tgen
  S5642C1(); // tgen
};
//SIG(1 S5642C1) C1{ BC2{ m FC3{ m FD Fc:4} Fi} VBC4{ VBC5{ BC6{ BC3} VBC2 BC7{ m} VBC8{ VBC2 VBC9{ m} BC3 FL FC3 FC6} Fi} BC2 BC9 BC10{ VBC7 VBC2 BC11{ VBC6 VBC2 VBC7 BC9 vd} VBC9 BC6 vd FC12{ BC7 VBC11 VBC8 vd}} BC12 Fc[2]} VBC12 Fi}


S5642C1 ::~S5642C1(){ note_dtor("S5642C1", this);} // tgen
S5642C1 ::S5642C1(){ note_ctor("S5642C1", this);} // tgen

static void Test_S5642C1()
{
  extern Class_Descriptor cd_S5642C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,77)];
    init_test(&cd_S5642C1, buf);
    S5642C1 *dp, &lv = *(dp=new (buf) S5642C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,304), "sizeof(S5642C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5642C1)");
    /*is_ambiguous_... S5642C1::S19890C10 */ AMB_check_base_class_offset(lv, (S19890C10*), ABISELECT(16,4), "S5642C1");
    check_base_class_offset(lv, (S19890C5*)(S5642C6*)(S5642C5*), ABISELECT(464,188), "S5642C1");
    check_base_class_offset(lv, (S5642C6*)(S5642C5*), ABISELECT(464,188), "S5642C1");
    check_base_class_offset(lv, (S19890C10*)(S5642C5*), ABISELECT(512,208), "S5642C1");
    check_base_class_offset(lv, (S19890C10*)(S5642C8*), ABISELECT(512,208), "S5642C1");
    check_base_class_offset(lv, (S19890C10*)(S5642C10*)(S5642C4*), ABISELECT(512,208), "S5642C1");
    check_base_class_offset(lv, (S19890C10*)(S5642C11*)(S5642C10*)(S5642C4*), ABISELECT(512,208), "S5642C1");
    /*is_ambiguous_... S5642C1::S5642C11 */ AMB_check_base_class_offset(lv, (S19890C10*)(S5642C11*), ABISELECT(512,208), "S5642C1");
    check_base_class_offset(lv, (S10180C138*)(S5642C5*), ABISELECT(448,184), "S5642C1");
    check_base_class_offset(lv, (S10180C133*)(S5642C8*), 0, "S5642C1");
    /*is_ambiguous_... S5642C10::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S5642C10*)(S5642C4*), 0, "S5642C1");
    check_base_class_offset(lv, (S19890C5*)(S5642C8*), ABISELECT(576,232), "S5642C1");
    check_base_class_offset(lv, (S5642C8*)(S5642C5*), ABISELECT(560,228), "S5642C1");
    check_base_class_offset(lv, (S5642C8*)(S5642C12*)(S5642C4*), ABISELECT(560,228), "S5642C1");
    /*is_ambiguous_... S5642C1::S5642C12 */ AMB_check_base_class_offset(lv, (S5642C8*)(S5642C12*), ABISELECT(560,228), "S5642C1");
    check_base_class_offset(lv, (S5642C5*)(S5642C4*), ABISELECT(448,184), "S5642C1");
    /*is_ambiguous_... S5642C4::S19890C10 */ AMB_check_base_class_offset(lv, (S19890C10*)(S5642C4*), ABISELECT(368,152), "S5642C1");
    /*is_ambiguous_... S5642C4::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S5642C4*), ABISELECT(416,172), "S5642C1");
    check_base_class_offset(lv, (S10180C138*)(S5642C10*)(S5642C4*), ABISELECT(688,288), "S5642C1");
    check_base_class_offset(lv, (S10180C138*)(S5642C11*)(S5642C10*)(S5642C4*), ABISELECT(688,288), "S5642C1");
    /*is_ambiguous_... S5642C1::S5642C11 */ AMB_check_base_class_offset(lv, (S10180C138*)(S5642C11*), ABISELECT(688,288), "S5642C1");
    /*is_ambiguous_... S5642C1::S5642C6 */ AMB_check_base_class_offset(lv, (S19890C5*)(S5642C6*), ABISELECT(688,288), "S5642C1");
    check_base_class_offset(lv, (S5642C6*)(S5642C11*)(S5642C10*)(S5642C4*), ABISELECT(688,288), "S5642C1");
    /*is_ambiguous_... S5642C1::S5642C11 */ AMB_check_base_class_offset(lv, (S5642C6*)(S5642C11*), ABISELECT(688,288), "S5642C1");
    check_base_class_offset(lv, (S10180C133*)(S5642C11*)(S5642C10*)(S5642C4*), ABISELECT(80,28), "S5642C1");
    check_base_class_offset(lv, (S5642C11*)(S5642C10*)(S5642C4*), ABISELECT(80,28), "S5642C1");
    /*is_ambiguous_... S5642C10::S5642C6 */ AMB_check_base_class_offset(lv, (S19890C5*)(S5642C6*)(S5642C10*)(S5642C4*), ABISELECT(96,32), "S5642C1");
    /*is_ambiguous_... S5642C10::S5642C6 */ AMB_check_base_class_offset(lv, (S5642C6*)(S5642C10*)(S5642C4*), ABISELECT(96,32), "S5642C1");
    check_base_class_offset(lv, (S5642C10*)(S5642C4*), ABISELECT(80,28), "S5642C1");
    /*is_ambiguous_... S5642C12::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S5642C12*)(S5642C4*), ABISELECT(424,176), "S5642C1");
    /*is_ambiguous_... S5642C1::S5642C11 */ AMB_check_base_class_offset(lv, (S10180C133*)(S5642C11*), ABISELECT(424,176), "S5642C1");
    check_base_class_offset(lv, (S5642C11*)(S5642C12*)(S5642C4*), ABISELECT(424,176), "S5642C1");
    /*is_ambiguous_... S5642C1::S5642C12 */ AMB_check_base_class_offset(lv, (S5642C11*)(S5642C12*), ABISELECT(424,176), "S5642C1");
    check_base_class_offset(lv, (S5642C12*)(S5642C4*), ABISELECT(424,176), "S5642C1");
    check_base_class_offset(lv, (S5642C4*), ABISELECT(80,28), "S5642C1");
    /*is_ambiguous_... S5642C1::S5642C12 */ AMB_check_base_class_offset(lv, (S10180C138*)(S5642C12*), 0, "S5642C1");
    /*is_ambiguous_... S5642C1::S5642C12 */ AMB_check_base_class_offset(lv, (S5642C12*), 0, "S5642C1");
    check_field_offset(lv, s5642c1f0, ABISELECT(64,24), "S5642C1.s5642c1f0");
    test_class_info(&lv, &cd_S5642C1);
    dp->~S5642C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5642C1(Test_S5642C1, "S5642C1", ABISELECT(720,304));

#else // __cplusplus

extern void _ZN7S5642C1C1Ev();
extern void _ZN7S5642C1D1Ev();
Name_Map name_map_S5642C1[] = {
  NSPAIR(_ZN7S5642C1C1Ev),
  NSPAIR(_ZN7S5642C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C8;
extern VTBL_ENTRY _ZTI7S5642C8[];
extern  VTBL_ENTRY _ZTV7S5642C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C8[];
extern Class_Descriptor cd_S5642C5;
extern VTBL_ENTRY _ZTI7S5642C5[];
extern  VTBL_ENTRY _ZTV7S5642C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C5[];
extern Class_Descriptor cd_S19890C10;
extern VTBL_ENTRY _ZTI9S19890C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S5642C11;
extern VTBL_ENTRY _ZTI8S5642C11[];
extern  VTBL_ENTRY _ZTV8S5642C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C11[];
extern Class_Descriptor cd_S19890C5;
extern VTBL_ENTRY _ZTI8S19890C5[];
extern Class_Descriptor cd_S5642C6;
extern VTBL_ENTRY _ZTI7S5642C6[];
extern Class_Descriptor cd_S5642C10;
extern VTBL_ENTRY _ZTI8S5642C10[];
extern  VTBL_ENTRY _ZTV8S5642C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S5642C11;
extern VTBL_ENTRY _ZTI8S5642C11[];
extern  VTBL_ENTRY _ZTV8S5642C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C11[];
extern Class_Descriptor cd_S5642C12;
extern VTBL_ENTRY _ZTI8S5642C12[];
extern  VTBL_ENTRY _ZTV8S5642C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C12[];
extern Class_Descriptor cd_S5642C4;
extern VTBL_ENTRY _ZTI7S5642C4[];
extern  VTBL_ENTRY _ZTV7S5642C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C4[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S5642C12;
extern VTBL_ENTRY _ZTI8S5642C12[];
extern  VTBL_ENTRY _ZTV8S5642C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5642C12[];
static Base_Class bases_S5642C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19890C10,    ABISELECT(16,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_S19890C5,    ABISELECT(464,188), //bcp->offset
    -1, //bcp->virtual_function_table_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_S5642C6,    ABISELECT(464,188), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S19890C10,    ABISELECT(512,208), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 1},
  {&cd_S10180C138,    ABISELECT(448,184), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(576,232), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S5642C8,    ABISELECT(560,228), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S5642C5,    ABISELECT(448,184), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19890C10,    ABISELECT(368,152), //bcp->offset
    -1, //bcp->virtual_function_table_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
    23, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(416,172), //bcp->offset
    -1, //bcp->virtual_function_table_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
    23, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(688,288), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 1},
  {&cd_S19890C5,    ABISELECT(688,288), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S5642C6,    ABISELECT(688,288), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(80,28), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S5642C11,    ABISELECT(80,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19890C5,    ABISELECT(96,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S5642C6,    ABISELECT(96,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S5642C10,    ABISELECT(80,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(424,176), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S10180C133,    ABISELECT(424,176), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S5642C11,    ABISELECT(424,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S5642C12,    ABISELECT(424,176), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S5642C4,    ABISELECT(80,28), //bcp->offset
    14, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    25, //immediately_derived
  0, 0},
  {&cd_S5642C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5642C1[];
extern void ABISELECT(_ZTv0_n48_N7S5642C1D1Ev,_ZTv0_n24_N7S5642C1D1Ev)();
extern void _ZN7S5642C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5642C1D0Ev,_ZTv0_n24_N7S5642C1D0Ev)();
extern void _ZN7S5642C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S5642C1D1Ev,_ZTv0_n40_N7S5642C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S5642C1D1Ev,_ZThn28_N7S5642C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S5642C1D0Ev,_ZTv0_n40_N7S5642C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S5642C1D0Ev,_ZThn28_N7S5642C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5642C1D1Ev,_ZTv0_n24_N7S5642C1D1Ev)();
extern void ABISELECT(_ZThn424_N7S5642C1D1Ev,_ZThn176_N7S5642C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5642C1D0Ev,_ZTv0_n24_N7S5642C1D0Ev)();
extern void ABISELECT(_ZThn424_N7S5642C1D0Ev,_ZThn176_N7S5642C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5642C1[] = {
  0,
  ABISELECT(448,184),
  ABISELECT(80,28),
  0,
  ABISELECT(560,228),
  ABISELECT(424,176),
  0,
  ABISELECT(688,288),
  ABISELECT(512,208),
  ABISELECT(688,288),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5642C1D1Ev,_ZTv0_n24_N7S5642C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5642C1D0Ev,_ZTv0_n24_N7S5642C1D0Ev),
  ABISELECT(-80,-28),
  ABISELECT(344,148),
  ABISELECT(480,200),
  ABISELECT(368,156),
  ABISELECT(-80,-28),
  ABISELECT(608,260),
  ABISELECT(432,180),
  ABISELECT(608,260),
  ABISELECT(-80,-28),
  (VTBL_ENTRY)&(_ZTI7S5642C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S5642C1D1Ev,_ZTv0_n40_N7S5642C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S5642C1D0Ev,_ZTv0_n40_N7S5642C1D0Ev),
  ABISELECT(-424,-176),
  ABISELECT(136,52),
  0,
  ABISELECT(-424,-176),
  ABISELECT(264,112),
  ABISELECT(88,32),
  ABISELECT(264,112),
  ABISELECT(-424,-176),
  (VTBL_ENTRY)&(_ZTI7S5642C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5642C1D1Ev,_ZTv0_n24_N7S5642C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5642C1D0Ev,_ZTv0_n24_N7S5642C1D0Ev),
  ABISELECT(-448,-184),
  ABISELECT(112,44),
  ABISELECT(64,24),
  ABISELECT(-448,-184),
  (VTBL_ENTRY)&(_ZTI7S5642C1[0]),
  ABISELECT(-560,-228),
  ABISELECT(-48,-20),
  ABISELECT(-560,-228),
  (VTBL_ENTRY)&(_ZTI7S5642C1[0]),
};
extern VTBL_ENTRY _ZTV7S5642C1[];
extern void _ZN7S5642C4D1Ev();
extern void _ZN7S5642C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5642C4__7S5642C1[] = {
  ABISELECT(344,148),
  ABISELECT(480,200),
  ABISELECT(368,156),
  ABISELECT(-80,-28),
  ABISELECT(608,260),
  ABISELECT(432,180),
  ABISELECT(608,260),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C4[0]),
  (VTBL_ENTRY)&_ZN7S5642C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5642C4D0Ev,
};
extern void _ZN8S5642C10D1Ev();
extern void _ZN8S5642C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5642C107S5642C4__7S5642C1[] = {
  ABISELECT(-80,-28),
  ABISELECT(608,260),
  ABISELECT(432,180),
  ABISELECT(608,260),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C10[0]),
  (VTBL_ENTRY)&_ZN8S5642C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C10D0Ev,
};
extern void _ZN8S5642C11D1Ev();
extern void _ZN8S5642C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5642C118S5642C107S5642C4__7S5642C1[] = {
  ABISELECT(608,260),
  ABISELECT(432,180),
  ABISELECT(608,260),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C11[0]),
  (VTBL_ENTRY)&_ZN8S5642C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S5642C12D1Ev,_ZTv0_n24_N8S5642C12D1Ev)();
extern void _ZN8S5642C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5642C12D0Ev,_ZTv0_n24_N8S5642C12D0Ev)();
extern void _ZN8S5642C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5642C127S5642C4__7S5642C1[] = {
  ABISELECT(-424,-176),
  ABISELECT(136,52),
  0,
  0,
  ABISELECT(264,112),
  ABISELECT(88,32),
  ABISELECT(264,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5642C12D1Ev,_ZTv0_n24_N8S5642C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5642C12D0Ev,_ZTv0_n24_N8S5642C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5642C8__8S5642C127S5642C4__7S5642C1[] = {
  ABISELECT(-560,-228),
  ABISELECT(-48,-20),
  ABISELECT(-136,-52),
  (VTBL_ENTRY)&(_ZTI8S5642C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5642C5__7S5642C4__7S5642C1[] = {
  ABISELECT(-448,-184),
  ABISELECT(112,44),
  ABISELECT(64,24),
  ABISELECT(-368,-156),
  (VTBL_ENTRY)&(_ZTI7S5642C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5642C8__7S5642C4__7S5642C1[] = {
  ABISELECT(-560,-228),
  ABISELECT(-48,-20),
  ABISELECT(-480,-200),
  (VTBL_ENTRY)&(_ZTI7S5642C4[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5642C4D1Ev,_ZTv0_n24_N7S5642C4D1Ev)();
extern void ABISELECT(_ZThn344_N7S5642C4D1Ev,_ZThn148_N7S5642C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5642C4D0Ev,_ZTv0_n24_N7S5642C4D0Ev)();
extern void ABISELECT(_ZThn344_N7S5642C4D0Ev,_ZThn148_N7S5642C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5642C12__7S5642C4__7S5642C1[] = {
  ABISELECT(-424,-176),
  ABISELECT(136,52),
  0,
  ABISELECT(-344,-148),
  ABISELECT(264,112),
  ABISELECT(88,32),
  ABISELECT(264,112),
  ABISELECT(-344,-148),
  (VTBL_ENTRY)&(_ZTI7S5642C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5642C4D1Ev,_ZTv0_n24_N7S5642C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5642C4D0Ev,_ZTv0_n24_N7S5642C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5642C5__7S5642C1[] = {
  ABISELECT(-448,-184),
  ABISELECT(112,44),
  ABISELECT(64,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5642C8__7S5642C5__7S5642C1[] = {
  ABISELECT(-560,-228),
  ABISELECT(-48,-20),
  ABISELECT(-112,-44),
  (VTBL_ENTRY)&(_ZTI7S5642C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5642C8__7S5642C1[] = {
  ABISELECT(-560,-228),
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S5642C8[0]),
};
extern void _ZN8S5642C11D1Ev();
extern void _ZN8S5642C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5642C11__A1__7S5642C1[] = {
  ABISELECT(264,112),
  ABISELECT(88,32),
  ABISELECT(264,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C11[0]),
  (VTBL_ENTRY)&_ZN8S5642C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5642C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S5642C12D1Ev,_ZTv0_n24_N8S5642C12D1Ev)();
extern void _ZN8S5642C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5642C12D0Ev,_ZTv0_n24_N8S5642C12D0Ev)();
extern void _ZN8S5642C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5642C12__A1__7S5642C1[] = {
  0,
  ABISELECT(560,228),
  ABISELECT(424,176),
  0,
  ABISELECT(688,288),
  ABISELECT(512,208),
  ABISELECT(688,288),
  0,
  (VTBL_ENTRY)&(_ZTI8S5642C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5642C12D1Ev,_ZTv0_n24_N8S5642C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5642C12D0Ev,_ZTv0_n24_N8S5642C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S5642C12D1Ev,_ZTv0_n24_N8S5642C12D1Ev)();
extern void ABISELECT(_ZThn424_N8S5642C12D1Ev,_ZThn176_N8S5642C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5642C12D0Ev,_ZTv0_n24_N8S5642C12D0Ev)();
extern void ABISELECT(_ZThn424_N8S5642C12D0Ev,_ZThn176_N8S5642C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5642C11__8S5642C12__A1__7S5642C1[] = {
  ABISELECT(-424,-176),
  ABISELECT(264,112),
  ABISELECT(88,32),
  ABISELECT(264,112),
  ABISELECT(-424,-176),
  (VTBL_ENTRY)&(_ZTI8S5642C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5642C12D1Ev,_ZTv0_n24_N8S5642C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5642C12D0Ev,_ZTv0_n24_N8S5642C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5642C8__8S5642C12__A1__7S5642C1[] = {
  ABISELECT(-560,-228),
  ABISELECT(-48,-20),
  ABISELECT(-560,-228),
  (VTBL_ENTRY)&(_ZTI8S5642C12[0]),
};
static  VTT_ENTRY vtt_S5642C1[] = {
  {&(_ZTV7S5642C1[12]),  12,46},
  {&(_ZTV7S5642C1[24]),  24,46},
  {&(_ZTV7S5642C1[42]),  42,46},
  {&(_ZTV7S5642C1[46]),  46,46},
  {&(_ZTV7S5642C1[35]),  35,46},
  {&(_ZTV7S5642C1[35]),  35,46},
  {&(_ZTV7S5642C1[12]),  12,46},
  {&(_tg__ZTV7S5642C4__7S5642C1[9]),  9,11},
  {&(_tg__ZTV8S5642C107S5642C4__7S5642C1[6]),  6,8},
  {&(_tg__ZTV8S5642C118S5642C107S5642C4__7S5642C1[5]),  5,7},
  {&(_tg__ZTV8S5642C127S5642C4__7S5642C1[9]),  9,11},
  {&(_tg__ZTV8S5642C127S5642C4__7S5642C1[9]),  9,11},
  {&(_tg__ZTV7S5642C8__8S5642C127S5642C4__7S5642C1[4]),  4,4},
  {&(_tg__ZTV7S5642C5__7S5642C4__7S5642C1[5]),  5,5},
  {&(_tg__ZTV7S5642C8__7S5642C4__7S5642C1[4]),  4,4},
  {&(_tg__ZTV8S5642C12__7S5642C4__7S5642C1[9]),  9,11},
  {&(_tg__ZTV8S5642C12__7S5642C4__7S5642C1[9]),  9,11},
  {&(_tg__ZTV7S5642C5__7S5642C1[5]),  5,5},
  {&(_tg__ZTV7S5642C8__7S5642C5__7S5642C1[4]),  4,4},
  {&(_tg__ZTV7S5642C8__7S5642C1[4]),  4,4},
  {&(_tg__ZTV8S5642C11__A1__7S5642C1[5]),  5,7},
  {&(_tg__ZTV8S5642C12__A1__7S5642C1[9]),  9,11},
  {&(_tg__ZTV8S5642C11__8S5642C12__A1__7S5642C1[6]),  6,8},
  {&(_tg__ZTV7S5642C8__8S5642C12__A1__7S5642C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S5642C1[];
extern  VTBL_ENTRY _ZTV7S5642C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5642C1[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5642C4D0Ev,_ZTv0_n24_N7S5642C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S5642C4D0Ev,_ZThn148_N7S5642C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5642C4D1Ev,_ZTv0_n24_N7S5642C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S5642C4D1Ev,_ZThn148_N7S5642C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5642C12D0Ev,_ZTv0_n24_N8S5642C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N8S5642C12D0Ev,_ZThn176_N8S5642C12D0Ev),
  (VTBL_ENTRY)_ZN8S5642C12D0Ev,
  (VTBL_ENTRY)_ZN8S5642C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5642C12D1Ev,_ZTv0_n24_N8S5642C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N8S5642C12D1Ev,_ZThn176_N8S5642C12D1Ev),
  (VTBL_ENTRY)_ZN8S5642C12D1Ev,
  (VTBL_ENTRY)_ZN8S5642C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S5642C1D0Ev,_ZTv0_n40_N7S5642C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S5642C1D0Ev,_ZThn28_N7S5642C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S5642C1D1Ev,_ZTv0_n40_N7S5642C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S5642C1D1Ev,_ZThn28_N7S5642C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5642C1D0Ev,_ZTv0_n24_N7S5642C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S5642C1D0Ev,_ZThn176_N7S5642C1D0Ev),
  (VTBL_ENTRY)_ZN7S5642C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5642C1D1Ev,_ZTv0_n24_N7S5642C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S5642C1D1Ev,_ZThn176_N7S5642C1D1Ev),
  (VTBL_ENTRY)_ZN7S5642C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5642C1 = {  "S5642C1", // class name
  bases_S5642C1, 26,
  &(vtc_S5642C1[0]), // expected_vtbl_contents
  &(vtt_S5642C1[0]), // expected_vtt_contents
  ABISELECT(720,304), // object size
  NSPAIRA(_ZTI7S5642C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5642C1),46, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5642C1),24, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3268C4  {
  __tsi64 s3268c4f0;
  virtual void  v26(); // _ZN7S3268C43v26Ev
  virtual void  v27(); // _ZN7S3268C43v27Ev
  ~S3268C4(); // tgen
  S3268C4(); // tgen
};
//SIG(-1 S3268C4) C1{ v1 v2 FL}


void  S3268C4 ::v26(){vfunc_called(this, "_ZN7S3268C43v26Ev");}
void  S3268C4 ::v27(){vfunc_called(this, "_ZN7S3268C43v27Ev");}
S3268C4 ::~S3268C4(){ note_dtor("S3268C4", this);} // tgen
S3268C4 ::S3268C4(){ note_ctor("S3268C4", this);} // tgen

static void Test_S3268C4()
{
  extern Class_Descriptor cd_S3268C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3268C4, buf);
    S3268C4 *dp, &lv = *(dp=new (buf) S3268C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3268C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3268C4)");
    check_field_offset(lv, s3268c4f0, ABISELECT(8,4), "S3268C4.s3268c4f0");
    test_class_info(&lv, &cd_S3268C4);
    dp->~S3268C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3268C4(Test_S3268C4, "S3268C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3268C4C1Ev();
extern void _ZN7S3268C4D1Ev();
Name_Map name_map_S3268C4[] = {
  NSPAIR(_ZN7S3268C4C1Ev),
  NSPAIR(_ZN7S3268C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3268C4[];
extern void _ZN7S3268C43v26Ev();
extern void _ZN7S3268C43v27Ev();
static  VTBL_ENTRY vtc_S3268C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3268C4[0]),
  (VTBL_ENTRY)&_ZN7S3268C43v26Ev,
  (VTBL_ENTRY)&_ZN7S3268C43v27Ev,
};
extern VTBL_ENTRY _ZTI7S3268C4[];
extern  VTBL_ENTRY _ZTV7S3268C4[];
Class_Descriptor cd_S3268C4 = {  "S3268C4", // class name
  0,0,//no base classes
  &(vtc_S3268C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3268C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3268C4),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  S3268C3  {
  short s3268c3f0;
  ::S3268C4 s3268c3f1;
  virtual void  v5(); // _ZN7S3268C32v5Ev
  virtual void  v6(); // _ZN7S3268C32v6Ev
  virtual void  v7(); // _ZN7S3268C32v7Ev
  virtual void  v8(); // _ZN7S3268C32v8Ev
  ~S3268C3(); // tgen
  S3268C3(); // tgen
};
//SIG(-1 S3268C3) C1{ v1 v2 v3 v4 Fs FC2{ v5 v6 FL}}


void  S3268C3 ::v5(){vfunc_called(this, "_ZN7S3268C32v5Ev");}
void  S3268C3 ::v6(){vfunc_called(this, "_ZN7S3268C32v6Ev");}
void  S3268C3 ::v7(){vfunc_called(this, "_ZN7S3268C32v7Ev");}
void  S3268C3 ::v8(){vfunc_called(this, "_ZN7S3268C32v8Ev");}
S3268C3 ::~S3268C3(){ note_dtor("S3268C3", this);} // tgen
S3268C3 ::S3268C3(){ note_ctor("S3268C3", this);} // tgen

static void Test_S3268C3()
{
  extern Class_Descriptor cd_S3268C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3268C3, buf);
    S3268C3 *dp, &lv = *(dp=new (buf) S3268C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3268C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3268C3)");
    check_field_offset(lv, s3268c3f0, ABISELECT(8,4), "S3268C3.s3268c3f0");
    check_field_offset(lv, s3268c3f1, ABISELECT(16,8), "S3268C3.s3268c3f1");
    test_class_info(&lv, &cd_S3268C3);
    dp->~S3268C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3268C3(Test_S3268C3, "S3268C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3268C3C1Ev();
extern void _ZN7S3268C3D1Ev();
Name_Map name_map_S3268C3[] = {
  NSPAIR(_ZN7S3268C3C1Ev),
  NSPAIR(_ZN7S3268C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3268C3[];
extern void _ZN7S3268C32v5Ev();
extern void _ZN7S3268C32v6Ev();
extern void _ZN7S3268C32v7Ev();
extern void _ZN7S3268C32v8Ev();
static  VTBL_ENTRY vtc_S3268C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3268C3[0]),
  (VTBL_ENTRY)&_ZN7S3268C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S3268C3[];
extern  VTBL_ENTRY _ZTV7S3268C3[];
Class_Descriptor cd_S3268C3 = {  "S3268C3", // class name
  0,0,//no base classes
  &(vtc_S3268C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3268C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3268C3),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  S3268C2  : S3268C3 {
  void *s3268c2f0[5];
  virtual void  v9(); // _ZN7S3268C22v9Ev
  virtual void  v10(); // _ZN7S3268C23v10Ev
  virtual void  v11(); // _ZN7S3268C23v11Ev
  ~S3268C2(); // tgen
  S3268C2(); // tgen
};
//SIG(-1 S3268C2) C1{ BC2{ v4 v5 v6 v7 Fs FC3{ v8 v9 FL}} v1 v2 v3 Fp[5]}


void  S3268C2 ::v9(){vfunc_called(this, "_ZN7S3268C22v9Ev");}
void  S3268C2 ::v10(){vfunc_called(this, "_ZN7S3268C23v10Ev");}
void  S3268C2 ::v11(){vfunc_called(this, "_ZN7S3268C23v11Ev");}
S3268C2 ::~S3268C2(){ note_dtor("S3268C2", this);} // tgen
S3268C2 ::S3268C2(){ note_ctor("S3268C2", this);} // tgen

static void Test_S3268C2()
{
  extern Class_Descriptor cd_S3268C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S3268C2, buf);
    S3268C2 *dp, &lv = *(dp=new (buf) S3268C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S3268C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3268C2)");
    check_base_class_offset(lv, (S3268C3*), 0, "S3268C2");
    check_field_offset(lv, s3268c2f0, ABISELECT(32,20), "S3268C2.s3268c2f0");
    test_class_info(&lv, &cd_S3268C2);
    dp->~S3268C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3268C2(Test_S3268C2, "S3268C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S3268C2C1Ev();
extern void _ZN7S3268C2D1Ev();
Name_Map name_map_S3268C2[] = {
  NSPAIR(_ZN7S3268C2C1Ev),
  NSPAIR(_ZN7S3268C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3268C3;
extern VTBL_ENTRY _ZTI7S3268C3[];
extern  VTBL_ENTRY _ZTV7S3268C3[];
static Base_Class bases_S3268C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3268C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3268C2[];
extern void _ZN7S3268C32v5Ev();
extern void _ZN7S3268C32v6Ev();
extern void _ZN7S3268C32v7Ev();
extern void _ZN7S3268C32v8Ev();
extern void _ZN7S3268C22v9Ev();
extern void _ZN7S3268C23v10Ev();
extern void _ZN7S3268C23v11Ev();
static  VTBL_ENTRY vtc_S3268C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3268C2[0]),
  (VTBL_ENTRY)&_ZN7S3268C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3268C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3268C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3268C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S3268C2[];
extern  VTBL_ENTRY _ZTV7S3268C2[];
Class_Descriptor cd_S3268C2 = {  "S3268C2", // class name
  bases_S3268C2, 1,
  &(vtc_S3268C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S3268C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3268C2),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  S3268C6  {
  long double s3268c6f0;
  ::S20563C5 s3268c6f1;
  virtual void  v12(); // _ZN7S3268C63v12Ev
  virtual void  v13(); // _ZN7S3268C63v13Ev
  virtual void  v14(); // _ZN7S3268C63v14Ev
  virtual void  v15(); // _ZN7S3268C63v15Ev
  virtual void  v16(); // _ZN7S3268C63v16Ev
  virtual void  v17(); // _ZN7S3268C63v17Ev
  virtual void  v18(); // _ZN7S3268C63v18Ev
  virtual void  v19(); // _ZN7S3268C63v19Ev
  ~S3268C6(); // tgen
  S3268C6(); // tgen
};
//SIG(-1 S3268C6) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FD FC2{ BC3{ BC4{ v15 v16 FL} vd v17 Fc} vd v9 v10 v11 v12 v13 v14}}


void  S3268C6 ::v12(){vfunc_called(this, "_ZN7S3268C63v12Ev");}
void  S3268C6 ::v13(){vfunc_called(this, "_ZN7S3268C63v13Ev");}
void  S3268C6 ::v14(){vfunc_called(this, "_ZN7S3268C63v14Ev");}
void  S3268C6 ::v15(){vfunc_called(this, "_ZN7S3268C63v15Ev");}
void  S3268C6 ::v16(){vfunc_called(this, "_ZN7S3268C63v16Ev");}
void  S3268C6 ::v17(){vfunc_called(this, "_ZN7S3268C63v17Ev");}
void  S3268C6 ::v18(){vfunc_called(this, "_ZN7S3268C63v18Ev");}
void  S3268C6 ::v19(){vfunc_called(this, "_ZN7S3268C63v19Ev");}
S3268C6 ::~S3268C6(){ note_dtor("S3268C6", this);} // tgen
S3268C6 ::S3268C6(){ note_ctor("S3268C6", this);} // tgen

static void Test_S3268C6()
{
  extern Class_Descriptor cd_S3268C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S3268C6, buf);
    S3268C6 *dp, &lv = *(dp=new (buf) S3268C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S3268C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3268C6)");
    check_field_offset(lv, s3268c6f0, ABISELECT(16,4), "S3268C6.s3268c6f0");
    check_field_offset(lv, s3268c6f1, ABISELECT(32,16), "S3268C6.s3268c6f1");
    test_class_info(&lv, &cd_S3268C6);
    dp->~S3268C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3268C6(Test_S3268C6, "S3268C6", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S3268C6C1Ev();
extern void _ZN7S3268C6D1Ev();
Name_Map name_map_S3268C6[] = {
  NSPAIR(_ZN7S3268C6C1Ev),
  NSPAIR(_ZN7S3268C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3268C6[];
extern void _ZN7S3268C63v12Ev();
extern void _ZN7S3268C63v13Ev();
extern void _ZN7S3268C63v14Ev();
extern void _ZN7S3268C63v15Ev();
extern void _ZN7S3268C63v16Ev();
extern void _ZN7S3268C63v17Ev();
extern void _ZN7S3268C63v18Ev();
extern void _ZN7S3268C63v19Ev();
static  VTBL_ENTRY vtc_S3268C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3268C6[0]),
  (VTBL_ENTRY)&_ZN7S3268C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3268C6[];
extern  VTBL_ENTRY _ZTV7S3268C6[];
Class_Descriptor cd_S3268C6 = {  "S3268C6", // class name
  0,0,//no base classes
  &(vtc_S3268C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S3268C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3268C6),10, //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  S3268C5  : S3268C6 , virtual S3268C3 {
  virtual void  v20(); // _ZN7S3268C53v20Ev
  virtual void  v21(); // _ZN7S3268C53v21Ev
  virtual void  v22(); // _ZN7S3268C53v22Ev
  virtual void  v23(); // _ZN7S3268C53v23Ev
  virtual void  v24(); // _ZN7S3268C53v24Ev
  virtual void  v25(); // _ZN7S3268C53v25Ev
  ~S3268C5(); // tgen
  S3268C5(); // tgen
};
//SIG(-1 S3268C5) C1{ BC2{ v7 v8 v9 v10 v11 v12 v13 v14 FD FC3{ BC4{ BC5{ v25 v26 FL} vd v27 Fc} vd v19 v20 v21 v22 v23 v24}} VBC6{ v15 v16 v17 v18 Fs FC7{ v28 v29 FL}} v1 v2 v3 v4 v5 v6}


void  S3268C5 ::v20(){vfunc_called(this, "_ZN7S3268C53v20Ev");}
void  S3268C5 ::v21(){vfunc_called(this, "_ZN7S3268C53v21Ev");}
void  S3268C5 ::v22(){vfunc_called(this, "_ZN7S3268C53v22Ev");}
void  S3268C5 ::v23(){vfunc_called(this, "_ZN7S3268C53v23Ev");}
void  S3268C5 ::v24(){vfunc_called(this, "_ZN7S3268C53v24Ev");}
void  S3268C5 ::v25(){vfunc_called(this, "_ZN7S3268C53v25Ev");}
S3268C5 ::~S3268C5(){ note_dtor("S3268C5", this);} // tgen
S3268C5 ::S3268C5(){ note_ctor("S3268C5", this);} // tgen

static void Test_S3268C5()
{
  extern Class_Descriptor cd_S3268C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S3268C5, buf);
    S3268C5 *dp, &lv = *(dp=new (buf) S3268C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S3268C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3268C5)");
    check_base_class_offset(lv, (S3268C6*), 0, "S3268C5");
    check_base_class_offset(lv, (S3268C3*), ABISELECT(56,32), "S3268C5");
    test_class_info(&lv, &cd_S3268C5);
    dp->~S3268C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3268C5(Test_S3268C5, "S3268C5", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S3268C5C1Ev();
extern void _ZN7S3268C5D1Ev();
Name_Map name_map_S3268C5[] = {
  NSPAIR(_ZN7S3268C5C1Ev),
  NSPAIR(_ZN7S3268C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3268C6;
extern VTBL_ENTRY _ZTI7S3268C6[];
extern  VTBL_ENTRY _ZTV7S3268C6[];
extern Class_Descriptor cd_S3268C3;
extern VTBL_ENTRY _ZTI7S3268C3[];
extern  VTBL_ENTRY _ZTV7S3268C3[];
static Base_Class bases_S3268C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3268C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3268C3,    ABISELECT(56,32), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3268C5[];
extern void _ZN7S3268C63v12Ev();
extern void _ZN7S3268C63v13Ev();
extern void _ZN7S3268C63v14Ev();
extern void _ZN7S3268C63v15Ev();
extern void _ZN7S3268C63v16Ev();
extern void _ZN7S3268C63v17Ev();
extern void _ZN7S3268C63v18Ev();
extern void _ZN7S3268C63v19Ev();
extern void _ZN7S3268C53v20Ev();
extern void _ZN7S3268C53v21Ev();
extern void _ZN7S3268C53v22Ev();
extern void _ZN7S3268C53v23Ev();
extern void _ZN7S3268C53v24Ev();
extern void _ZN7S3268C53v25Ev();
extern void _ZN7S3268C32v5Ev();
extern void _ZN7S3268C32v6Ev();
extern void _ZN7S3268C32v7Ev();
extern void _ZN7S3268C32v8Ev();
static  VTBL_ENTRY vtc_S3268C5[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3268C5[0]),
  (VTBL_ENTRY)&_ZN7S3268C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v25Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S3268C5[0]),
  (VTBL_ENTRY)&_ZN7S3268C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S3268C5[];
static  VTT_ENTRY vtt_S3268C5[] = {
  {&(_ZTV7S3268C5[3]),  3,27},
  {&(_ZTV7S3268C5[23]),  23,27},
};
extern VTBL_ENTRY _ZTI7S3268C5[];
extern  VTBL_ENTRY _ZTV7S3268C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3268C5[];
Class_Descriptor cd_S3268C5 = {  "S3268C5", // class name
  bases_S3268C5, 2,
  &(vtc_S3268C5[0]), // expected_vtbl_contents
  &(vtt_S3268C5[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S3268C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3268C5),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3268C5),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3268C1  : S3268C2 , S3268C5 {
  int s3268c1f0;
  virtual void  v1(); // _ZN7S3268C12v1Ev
  virtual void  v2(); // _ZN7S3268C12v2Ev
  virtual void  v3(); // _ZN7S3268C12v3Ev
  virtual void  v4(); // _ZN7S3268C12v4Ev
  ~S3268C1(); // tgen
  S3268C1(); // tgen
};
//SIG(1 S3268C1) C1{ BC2{ BC3{ v5 v6 v7 v8 Fs FC4{ v26 v27 FL}} v9 v10 v11 Fp[5]} BC5{ BC6{ v12 v13 v14 v15 v16 v17 v18 v19 FD FC7{ BC8{ BC9{ v34 v35 FL} vd v36 Fc} vd v28 v29 v30 v31 v32 v33}} VBC3 v20 v21 v22 v23 v24 v25} v1 v2 v3 v4 Fi}


void  S3268C1 ::v1(){vfunc_called(this, "_ZN7S3268C12v1Ev");}
void  S3268C1 ::v2(){vfunc_called(this, "_ZN7S3268C12v2Ev");}
void  S3268C1 ::v3(){vfunc_called(this, "_ZN7S3268C12v3Ev");}
void  S3268C1 ::v4(){vfunc_called(this, "_ZN7S3268C12v4Ev");}
S3268C1 ::~S3268C1(){ note_dtor("S3268C1", this);} // tgen
S3268C1 ::S3268C1(){ note_ctor("S3268C1", this);} // tgen

static void Test_S3268C1()
{
  extern Class_Descriptor cd_S3268C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,25)];
    init_test(&cd_S3268C1, buf);
    S3268C1 *dp, &lv = *(dp=new (buf) S3268C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,96), "sizeof(S3268C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3268C1)");
    check_base_class_offset(lv, (S3268C3*)(S3268C2*), 0, "S3268C1");
    check_base_class_offset(lv, (S3268C2*), 0, "S3268C1");
    check_base_class_offset(lv, (S3268C6*)(S3268C5*), ABISELECT(80,40), "S3268C1");
    check_base_class_offset(lv, (S3268C3*)(S3268C5*), ABISELECT(144,76), "S3268C1");
    check_base_class_offset(lv, (S3268C5*), ABISELECT(80,40), "S3268C1");
    check_field_offset(lv, s3268c1f0, ABISELECT(136,72), "S3268C1.s3268c1f0");
    test_class_info(&lv, &cd_S3268C1);
    dp->~S3268C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3268C1(Test_S3268C1, "S3268C1", ABISELECT(176,96));

#else // __cplusplus

extern void _ZN7S3268C1C1Ev();
extern void _ZN7S3268C1D1Ev();
Name_Map name_map_S3268C1[] = {
  NSPAIR(_ZN7S3268C1C1Ev),
  NSPAIR(_ZN7S3268C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3268C3;
extern VTBL_ENTRY _ZTI7S3268C3[];
extern  VTBL_ENTRY _ZTV7S3268C3[];
extern Class_Descriptor cd_S3268C2;
extern VTBL_ENTRY _ZTI7S3268C2[];
extern  VTBL_ENTRY _ZTV7S3268C2[];
extern Class_Descriptor cd_S3268C6;
extern VTBL_ENTRY _ZTI7S3268C6[];
extern  VTBL_ENTRY _ZTV7S3268C6[];
extern Class_Descriptor cd_S3268C3;
extern VTBL_ENTRY _ZTI7S3268C3[];
extern  VTBL_ENTRY _ZTV7S3268C3[];
extern Class_Descriptor cd_S3268C5;
extern VTBL_ENTRY _ZTI7S3268C5[];
extern  VTBL_ENTRY _ZTV7S3268C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3268C5[];
static Base_Class bases_S3268C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3268C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S3268C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3268C6,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3268C3,    ABISELECT(144,76), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3268C5,    ABISELECT(80,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3268C1[];
extern void _ZN7S3268C32v5Ev();
extern void _ZN7S3268C32v6Ev();
extern void _ZN7S3268C32v7Ev();
extern void _ZN7S3268C32v8Ev();
extern void _ZN7S3268C22v9Ev();
extern void _ZN7S3268C23v10Ev();
extern void _ZN7S3268C23v11Ev();
extern void _ZN7S3268C12v1Ev();
extern void _ZN7S3268C12v2Ev();
extern void _ZN7S3268C12v3Ev();
extern void _ZN7S3268C12v4Ev();
extern void _ZN7S3268C63v12Ev();
extern void _ZN7S3268C63v13Ev();
extern void _ZN7S3268C63v14Ev();
extern void _ZN7S3268C63v15Ev();
extern void _ZN7S3268C63v16Ev();
extern void _ZN7S3268C63v17Ev();
extern void _ZN7S3268C63v18Ev();
extern void _ZN7S3268C63v19Ev();
extern void _ZN7S3268C53v20Ev();
extern void _ZN7S3268C53v21Ev();
extern void _ZN7S3268C53v22Ev();
extern void _ZN7S3268C53v23Ev();
extern void _ZN7S3268C53v24Ev();
extern void _ZN7S3268C53v25Ev();
extern void _ZN7S3268C32v5Ev();
extern void _ZN7S3268C32v6Ev();
extern void _ZN7S3268C32v7Ev();
extern void _ZN7S3268C32v8Ev();
static  VTBL_ENTRY vtc_S3268C1[] = {
  ABISELECT(144,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3268C1[0]),
  (VTBL_ENTRY)&_ZN7S3268C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3268C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3268C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3268C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3268C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3268C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3268C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3268C12v4Ev,
  ABISELECT(64,36),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S3268C1[0]),
  (VTBL_ENTRY)&_ZN7S3268C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v25Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S3268C1[0]),
  (VTBL_ENTRY)&_ZN7S3268C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S3268C1[];
extern void _ZN7S3268C63v12Ev();
extern void _ZN7S3268C63v13Ev();
extern void _ZN7S3268C63v14Ev();
extern void _ZN7S3268C63v15Ev();
extern void _ZN7S3268C63v16Ev();
extern void _ZN7S3268C63v17Ev();
extern void _ZN7S3268C63v18Ev();
extern void _ZN7S3268C63v19Ev();
extern void _ZN7S3268C53v20Ev();
extern void _ZN7S3268C53v21Ev();
extern void _ZN7S3268C53v22Ev();
extern void _ZN7S3268C53v23Ev();
extern void _ZN7S3268C53v24Ev();
extern void _ZN7S3268C53v25Ev();
static  VTBL_ENTRY _tg__ZTV7S3268C5__7S3268C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3268C5[0]),
  (VTBL_ENTRY)&_ZN7S3268C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3268C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v20Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v21Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v22Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v23Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v24Ev,
  (VTBL_ENTRY)&_ZN7S3268C53v25Ev,
};
extern void _ZN7S3268C32v5Ev();
extern void _ZN7S3268C32v6Ev();
extern void _ZN7S3268C32v7Ev();
extern void _ZN7S3268C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3268C3__7S3268C5__7S3268C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3268C5[0]),
  (VTBL_ENTRY)&_ZN7S3268C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3268C32v8Ev,
};
static  VTT_ENTRY vtt_S3268C1[] = {
  {&(_ZTV7S3268C1[3]),  3,41},
  {&(_tg__ZTV7S3268C5__7S3268C1[3]),  3,17},
  {&(_tg__ZTV7S3268C3__7S3268C5__7S3268C1[6]),  6,10},
  {&(_ZTV7S3268C1[17]),  17,41},
  {&(_ZTV7S3268C1[37]),  37,41},
};
extern VTBL_ENTRY _ZTI7S3268C1[];
extern  VTBL_ENTRY _ZTV7S3268C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3268C1[];
Class_Descriptor cd_S3268C1 = {  "S3268C1", // class name
  bases_S3268C1, 5,
  &(vtc_S3268C1[0]), // expected_vtbl_contents
  &(vtt_S3268C1[0]), // expected_vtt_contents
  ABISELECT(176,96), // object size
  NSPAIRA(_ZTI7S3268C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3268C1),41, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3268C1),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6901C2_nt  {
  int s6901c2f0;
  virtual void  v5(); // _ZN10S6901C2_nt2v5Ev
  virtual void  v6(); // _ZN10S6901C2_nt2v6Ev
  virtual void  v7(); // _ZN10S6901C2_nt2v7Ev
  virtual void  v8(); // _ZN10S6901C2_nt2v8Ev
  virtual void  v9(); // _ZN10S6901C2_nt2v9Ev
  ~S6901C2_nt(); // tgen
  S6901C2_nt(); // tgen
};
//SIG(-1 S6901C2_nt) C1{ v1 v2 v3 v4 v5 Fi}


void  S6901C2_nt ::v5(){vfunc_called(this, "_ZN10S6901C2_nt2v5Ev");}
void  S6901C2_nt ::v6(){vfunc_called(this, "_ZN10S6901C2_nt2v6Ev");}
void  S6901C2_nt ::v7(){vfunc_called(this, "_ZN10S6901C2_nt2v7Ev");}
void  S6901C2_nt ::v8(){vfunc_called(this, "_ZN10S6901C2_nt2v8Ev");}
void  S6901C2_nt ::v9(){vfunc_called(this, "_ZN10S6901C2_nt2v9Ev");}
S6901C2_nt ::~S6901C2_nt(){ note_dtor("S6901C2_nt", this);} // tgen
S6901C2_nt ::S6901C2_nt(){ note_ctor("S6901C2_nt", this);} // tgen

//skip512 S6901C2_nt

#else // __cplusplus

extern void _ZN10S6901C2_ntC1Ev();
extern void _ZN10S6901C2_ntD1Ev();
Name_Map name_map_S6901C2_nt[] = {
  NSPAIR(_ZN10S6901C2_ntC1Ev),
  NSPAIR(_ZN10S6901C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6901C2_nt[];
extern void _ZN10S6901C2_nt2v5Ev();
extern void _ZN10S6901C2_nt2v6Ev();
extern void _ZN10S6901C2_nt2v7Ev();
extern void _ZN10S6901C2_nt2v8Ev();
extern void _ZN10S6901C2_nt2v9Ev();
static  VTBL_ENTRY vtc_S6901C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6901C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6901C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S6901C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S6901C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S6901C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S6901C2_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S6901C2_nt[];
VTBL_ENTRY *P__ZTI10S6901C2_nt = _ZTI10S6901C2_nt; 
extern  VTBL_ENTRY _ZTV10S6901C2_nt[];
Class_Descriptor cd_S6901C2_nt = {  "S6901C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6901C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S6901C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6901C2_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  S6901C4  {
  long double s6901c4f0;
  ::S20563C5 s6901c4f1;
  virtual void  v10(); // _ZN7S6901C43v10Ev
  virtual void  v11(); // _ZN7S6901C43v11Ev
  virtual void  v12(); // _ZN7S6901C43v12Ev
  virtual void  v13(); // _ZN7S6901C43v13Ev
  virtual void  v14(); // _ZN7S6901C43v14Ev
  virtual void  v15(); // _ZN7S6901C43v15Ev
  virtual void  v16(); // _ZN7S6901C43v16Ev
  virtual void  v17(); // _ZN7S6901C43v17Ev
  ~S6901C4(); // tgen
  S6901C4(); // tgen
};
//SIG(-1 S6901C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FD FC2{ BC3{ BC4{ v15 v16 FL} vd v17 Fc} vd v9 v10 v11 v12 v13 v14}}


void  S6901C4 ::v10(){vfunc_called(this, "_ZN7S6901C43v10Ev");}
void  S6901C4 ::v11(){vfunc_called(this, "_ZN7S6901C43v11Ev");}
void  S6901C4 ::v12(){vfunc_called(this, "_ZN7S6901C43v12Ev");}
void  S6901C4 ::v13(){vfunc_called(this, "_ZN7S6901C43v13Ev");}
void  S6901C4 ::v14(){vfunc_called(this, "_ZN7S6901C43v14Ev");}
void  S6901C4 ::v15(){vfunc_called(this, "_ZN7S6901C43v15Ev");}
void  S6901C4 ::v16(){vfunc_called(this, "_ZN7S6901C43v16Ev");}
void  S6901C4 ::v17(){vfunc_called(this, "_ZN7S6901C43v17Ev");}
S6901C4 ::~S6901C4(){ note_dtor("S6901C4", this);} // tgen
S6901C4 ::S6901C4(){ note_ctor("S6901C4", this);} // tgen

static void Test_S6901C4()
{
  extern Class_Descriptor cd_S6901C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S6901C4, buf);
    S6901C4 *dp, &lv = *(dp=new (buf) S6901C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S6901C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6901C4)");
    check_field_offset(lv, s6901c4f0, ABISELECT(16,4), "S6901C4.s6901c4f0");
    check_field_offset(lv, s6901c4f1, ABISELECT(32,16), "S6901C4.s6901c4f1");
    test_class_info(&lv, &cd_S6901C4);
    dp->~S6901C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6901C4(Test_S6901C4, "S6901C4", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S6901C4C1Ev();
extern void _ZN7S6901C4D1Ev();
Name_Map name_map_S6901C4[] = {
  NSPAIR(_ZN7S6901C4C1Ev),
  NSPAIR(_ZN7S6901C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6901C4[];
extern void _ZN7S6901C43v10Ev();
extern void _ZN7S6901C43v11Ev();
extern void _ZN7S6901C43v12Ev();
extern void _ZN7S6901C43v13Ev();
extern void _ZN7S6901C43v14Ev();
extern void _ZN7S6901C43v15Ev();
extern void _ZN7S6901C43v16Ev();
extern void _ZN7S6901C43v17Ev();
static  VTBL_ENTRY vtc_S6901C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6901C4[0]),
  (VTBL_ENTRY)&_ZN7S6901C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v17Ev,
};
extern VTBL_ENTRY _ZTI7S6901C4[];
extern  VTBL_ENTRY _ZTV7S6901C4[];
Class_Descriptor cd_S6901C4 = {  "S6901C4", // class name
  0,0,//no base classes
  &(vtc_S6901C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S6901C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6901C4),10, //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  S6901C7  {
  __tsi64 s6901c7f0;
  virtual void  v34(); // _ZN7S6901C73v34Ev
  virtual void  v35(); // _ZN7S6901C73v35Ev
  ~S6901C7(); // tgen
  S6901C7(); // tgen
};
//SIG(-1 S6901C7) C1{ v1 v2 FL}


void  S6901C7 ::v34(){vfunc_called(this, "_ZN7S6901C73v34Ev");}
void  S6901C7 ::v35(){vfunc_called(this, "_ZN7S6901C73v35Ev");}
S6901C7 ::~S6901C7(){ note_dtor("S6901C7", this);} // tgen
S6901C7 ::S6901C7(){ note_ctor("S6901C7", this);} // tgen

static void Test_S6901C7()
{
  extern Class_Descriptor cd_S6901C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6901C7, buf);
    S6901C7 *dp, &lv = *(dp=new (buf) S6901C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6901C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6901C7)");
    check_field_offset(lv, s6901c7f0, ABISELECT(8,4), "S6901C7.s6901c7f0");
    test_class_info(&lv, &cd_S6901C7);
    dp->~S6901C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6901C7(Test_S6901C7, "S6901C7", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S6901C7C1Ev();
extern void _ZN7S6901C7D1Ev();
Name_Map name_map_S6901C7[] = {
  NSPAIR(_ZN7S6901C7C1Ev),
  NSPAIR(_ZN7S6901C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6901C7[];
extern void _ZN7S6901C73v34Ev();
extern void _ZN7S6901C73v35Ev();
static  VTBL_ENTRY vtc_S6901C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6901C7[0]),
  (VTBL_ENTRY)&_ZN7S6901C73v34Ev,
  (VTBL_ENTRY)&_ZN7S6901C73v35Ev,
};
extern VTBL_ENTRY _ZTI7S6901C7[];
extern  VTBL_ENTRY _ZTV7S6901C7[];
Class_Descriptor cd_S6901C7 = {  "S6901C7", // class name
  0,0,//no base classes
  &(vtc_S6901C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S6901C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6901C7),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  S6901C8  {
  short s6901c8f0;
  ::S6901C7 s6901c8f1;
  virtual void  v18(); // _ZN7S6901C83v18Ev
  virtual void  v19(); // _ZN7S6901C83v19Ev
  virtual void  v20(); // _ZN7S6901C83v20Ev
  virtual void  v21(); // _ZN7S6901C83v21Ev
  ~S6901C8(); // tgen
  S6901C8(); // tgen
};
//SIG(-1 S6901C8) C1{ v1 v2 v3 v4 Fs FC2{ v5 v6 FL}}


void  S6901C8 ::v18(){vfunc_called(this, "_ZN7S6901C83v18Ev");}
void  S6901C8 ::v19(){vfunc_called(this, "_ZN7S6901C83v19Ev");}
void  S6901C8 ::v20(){vfunc_called(this, "_ZN7S6901C83v20Ev");}
void  S6901C8 ::v21(){vfunc_called(this, "_ZN7S6901C83v21Ev");}
S6901C8 ::~S6901C8(){ note_dtor("S6901C8", this);} // tgen
S6901C8 ::S6901C8(){ note_ctor("S6901C8", this);} // tgen

static void Test_S6901C8()
{
  extern Class_Descriptor cd_S6901C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6901C8, buf);
    S6901C8 *dp, &lv = *(dp=new (buf) S6901C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6901C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6901C8)");
    check_field_offset(lv, s6901c8f0, ABISELECT(8,4), "S6901C8.s6901c8f0");
    check_field_offset(lv, s6901c8f1, ABISELECT(16,8), "S6901C8.s6901c8f1");
    test_class_info(&lv, &cd_S6901C8);
    dp->~S6901C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6901C8(Test_S6901C8, "S6901C8", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S6901C8C1Ev();
extern void _ZN7S6901C8D1Ev();
Name_Map name_map_S6901C8[] = {
  NSPAIR(_ZN7S6901C8C1Ev),
  NSPAIR(_ZN7S6901C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6901C8[];
extern void _ZN7S6901C83v18Ev();
extern void _ZN7S6901C83v19Ev();
extern void _ZN7S6901C83v20Ev();
extern void _ZN7S6901C83v21Ev();
static  VTBL_ENTRY vtc_S6901C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6901C8[0]),
  (VTBL_ENTRY)&_ZN7S6901C83v18Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v19Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v20Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v21Ev,
};
extern VTBL_ENTRY _ZTI7S6901C8[];
extern  VTBL_ENTRY _ZTV7S6901C8[];
Class_Descriptor cd_S6901C8 = {  "S6901C8", // class name
  0,0,//no base classes
  &(vtc_S6901C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S6901C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6901C8),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  S6901C3  : S6901C4 , virtual S6901C8 {
  virtual void  v22(); // _ZN7S6901C33v22Ev
  virtual void  v23(); // _ZN7S6901C33v23Ev
  virtual void  v24(); // _ZN7S6901C33v24Ev
  virtual void  v25(); // _ZN7S6901C33v25Ev
  virtual void  v26(); // _ZN7S6901C33v26Ev
  virtual void  v27(); // _ZN7S6901C33v27Ev
  ~S6901C3(); // tgen
  S6901C3(); // tgen
};
//SIG(-1 S6901C3) C1{ BC2{ v7 v8 v9 v10 v11 v12 v13 v14 FD FC3{ BC4{ BC5{ v25 v26 FL} vd v27 Fc} vd v19 v20 v21 v22 v23 v24}} VBC6{ v15 v16 v17 v18 Fs FC7{ v28 v29 FL}} v1 v2 v3 v4 v5 v6}


void  S6901C3 ::v22(){vfunc_called(this, "_ZN7S6901C33v22Ev");}
void  S6901C3 ::v23(){vfunc_called(this, "_ZN7S6901C33v23Ev");}
void  S6901C3 ::v24(){vfunc_called(this, "_ZN7S6901C33v24Ev");}
void  S6901C3 ::v25(){vfunc_called(this, "_ZN7S6901C33v25Ev");}
void  S6901C3 ::v26(){vfunc_called(this, "_ZN7S6901C33v26Ev");}
void  S6901C3 ::v27(){vfunc_called(this, "_ZN7S6901C33v27Ev");}
S6901C3 ::~S6901C3(){ note_dtor("S6901C3", this);} // tgen
S6901C3 ::S6901C3(){ note_ctor("S6901C3", this);} // tgen

static void Test_S6901C3()
{
  extern Class_Descriptor cd_S6901C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S6901C3, buf);
    S6901C3 *dp, &lv = *(dp=new (buf) S6901C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S6901C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6901C3)");
    check_base_class_offset(lv, (S6901C4*), 0, "S6901C3");
    check_base_class_offset(lv, (S6901C8*), ABISELECT(56,32), "S6901C3");
    test_class_info(&lv, &cd_S6901C3);
    dp->~S6901C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6901C3(Test_S6901C3, "S6901C3", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S6901C3C1Ev();
extern void _ZN7S6901C3D1Ev();
Name_Map name_map_S6901C3[] = {
  NSPAIR(_ZN7S6901C3C1Ev),
  NSPAIR(_ZN7S6901C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6901C4;
extern VTBL_ENTRY _ZTI7S6901C4[];
extern  VTBL_ENTRY _ZTV7S6901C4[];
extern Class_Descriptor cd_S6901C8;
extern VTBL_ENTRY _ZTI7S6901C8[];
extern  VTBL_ENTRY _ZTV7S6901C8[];
static Base_Class bases_S6901C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6901C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S6901C8,    ABISELECT(56,32), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6901C3[];
extern void _ZN7S6901C43v10Ev();
extern void _ZN7S6901C43v11Ev();
extern void _ZN7S6901C43v12Ev();
extern void _ZN7S6901C43v13Ev();
extern void _ZN7S6901C43v14Ev();
extern void _ZN7S6901C43v15Ev();
extern void _ZN7S6901C43v16Ev();
extern void _ZN7S6901C43v17Ev();
extern void _ZN7S6901C33v22Ev();
extern void _ZN7S6901C33v23Ev();
extern void _ZN7S6901C33v24Ev();
extern void _ZN7S6901C33v25Ev();
extern void _ZN7S6901C33v26Ev();
extern void _ZN7S6901C33v27Ev();
extern void _ZN7S6901C83v18Ev();
extern void _ZN7S6901C83v19Ev();
extern void _ZN7S6901C83v20Ev();
extern void _ZN7S6901C83v21Ev();
static  VTBL_ENTRY vtc_S6901C3[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6901C3[0]),
  (VTBL_ENTRY)&_ZN7S6901C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v22Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v23Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v24Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v25Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v26Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v27Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S6901C3[0]),
  (VTBL_ENTRY)&_ZN7S6901C83v18Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v19Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v20Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v21Ev,
};
extern VTBL_ENTRY _ZTV7S6901C3[];
static  VTT_ENTRY vtt_S6901C3[] = {
  {&(_ZTV7S6901C3[3]),  3,27},
  {&(_ZTV7S6901C3[23]),  23,27},
};
extern VTBL_ENTRY _ZTI7S6901C3[];
extern  VTBL_ENTRY _ZTV7S6901C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6901C3[];
Class_Descriptor cd_S6901C3 = {  "S6901C3", // class name
  bases_S6901C3, 2,
  &(vtc_S6901C3[0]), // expected_vtbl_contents
  &(vtt_S6901C3[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S6901C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6901C3),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6901C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6901C1  : S6901C2_nt , virtual S6901C3 {
  virtual void  v1(); // _ZN7S6901C12v1Ev
  virtual void  v2(); // _ZN7S6901C12v2Ev
  virtual void  v3(); // _ZN7S6901C12v3Ev
  virtual void  v4(); // _ZN7S6901C12v4Ev
  ~S6901C1(); // tgen
  S6901C1(); // tgen
};
//SIG(1 S6901C1) C1{ BC2{ v5 v6 v7 v8 v9 Fi} VBC3{ BC4{ v10 v11 v12 v13 v14 v15 v16 v17 FD FC5{ BC6{ BC7{ v34 v35 FL} vd v36 Fc} vd v28 v29 v30 v31 v32 v33}} VBC8{ v18 v19 v20 v21 Fs FC9{ v37 v38 FL}} v22 v23 v24 v25 v26 v27} v1 v2 v3 v4}


void  S6901C1 ::v1(){vfunc_called(this, "_ZN7S6901C12v1Ev");}
void  S6901C1 ::v2(){vfunc_called(this, "_ZN7S6901C12v2Ev");}
void  S6901C1 ::v3(){vfunc_called(this, "_ZN7S6901C12v3Ev");}
void  S6901C1 ::v4(){vfunc_called(this, "_ZN7S6901C12v4Ev");}
S6901C1 ::~S6901C1(){ note_dtor("S6901C1", this);} // tgen
S6901C1 ::S6901C1(){ note_ctor("S6901C1", this);} // tgen

static void Test_S6901C1()
{
  extern Class_Descriptor cd_S6901C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,16)];
    init_test(&cd_S6901C1, buf);
    S6901C1 *dp, &lv = *(dp=new (buf) S6901C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S6901C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6901C1)");
    check_base_class_offset(lv, (S6901C2_nt*), 0, "S6901C1");
    check_base_class_offset(lv, (S6901C4*)(S6901C3*), ABISELECT(16,8), "S6901C1");
    check_base_class_offset(lv, (S6901C8*)(S6901C3*), ABISELECT(72,40), "S6901C1");
    check_base_class_offset(lv, (S6901C3*), ABISELECT(16,8), "S6901C1");
    test_class_info(&lv, &cd_S6901C1);
    dp->~S6901C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6901C1(Test_S6901C1, "S6901C1", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN7S6901C1C1Ev();
extern void _ZN7S6901C1D1Ev();
Name_Map name_map_S6901C1[] = {
  NSPAIR(_ZN7S6901C1C1Ev),
  NSPAIR(_ZN7S6901C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6901C2_nt;
extern VTBL_ENTRY _ZTI10S6901C2_nt[];
extern  VTBL_ENTRY _ZTV10S6901C2_nt[];
extern Class_Descriptor cd_S6901C4;
extern VTBL_ENTRY _ZTI7S6901C4[];
extern  VTBL_ENTRY _ZTV7S6901C4[];
extern Class_Descriptor cd_S6901C8;
extern VTBL_ENTRY _ZTI7S6901C8[];
extern  VTBL_ENTRY _ZTV7S6901C8[];
extern Class_Descriptor cd_S6901C3;
extern VTBL_ENTRY _ZTI7S6901C3[];
extern  VTBL_ENTRY _ZTV7S6901C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6901C3[];
static Base_Class bases_S6901C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6901C2_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},
  {&cd_S6901C4,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6901C8,    ABISELECT(72,40), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6901C3,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6901C1[];
extern void _ZN10S6901C2_nt2v5Ev();
extern void _ZN10S6901C2_nt2v6Ev();
extern void _ZN10S6901C2_nt2v7Ev();
extern void _ZN10S6901C2_nt2v8Ev();
extern void _ZN10S6901C2_nt2v9Ev();
extern void _ZN7S6901C12v1Ev();
extern void _ZN7S6901C12v2Ev();
extern void _ZN7S6901C12v3Ev();
extern void _ZN7S6901C12v4Ev();
extern void _ZN7S6901C43v10Ev();
extern void _ZN7S6901C43v11Ev();
extern void _ZN7S6901C43v12Ev();
extern void _ZN7S6901C43v13Ev();
extern void _ZN7S6901C43v14Ev();
extern void _ZN7S6901C43v15Ev();
extern void _ZN7S6901C43v16Ev();
extern void _ZN7S6901C43v17Ev();
extern void _ZN7S6901C33v22Ev();
extern void _ZN7S6901C33v23Ev();
extern void _ZN7S6901C33v24Ev();
extern void _ZN7S6901C33v25Ev();
extern void _ZN7S6901C33v26Ev();
extern void _ZN7S6901C33v27Ev();
extern void _ZN7S6901C83v18Ev();
extern void _ZN7S6901C83v19Ev();
extern void _ZN7S6901C83v20Ev();
extern void _ZN7S6901C83v21Ev();
static  VTBL_ENTRY vtc_S6901C1[] = {
  ABISELECT(72,40),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6901C1[0]),
  (VTBL_ENTRY)&_ZN10S6901C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S6901C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S6901C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S6901C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S6901C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S6901C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6901C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6901C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6901C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6901C1[0]),
  (VTBL_ENTRY)&_ZN7S6901C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v22Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v23Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v24Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v25Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v26Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v27Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S6901C1[0]),
  (VTBL_ENTRY)&_ZN7S6901C83v18Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v19Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v20Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v21Ev,
};
extern VTBL_ENTRY _ZTV7S6901C1[];
extern void _ZN7S6901C43v10Ev();
extern void _ZN7S6901C43v11Ev();
extern void _ZN7S6901C43v12Ev();
extern void _ZN7S6901C43v13Ev();
extern void _ZN7S6901C43v14Ev();
extern void _ZN7S6901C43v15Ev();
extern void _ZN7S6901C43v16Ev();
extern void _ZN7S6901C43v17Ev();
extern void _ZN7S6901C33v22Ev();
extern void _ZN7S6901C33v23Ev();
extern void _ZN7S6901C33v24Ev();
extern void _ZN7S6901C33v25Ev();
extern void _ZN7S6901C33v26Ev();
extern void _ZN7S6901C33v27Ev();
static  VTBL_ENTRY _tg__ZTV7S6901C3__7S6901C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6901C3[0]),
  (VTBL_ENTRY)&_ZN7S6901C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v16Ev,
  (VTBL_ENTRY)&_ZN7S6901C43v17Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v22Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v23Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v24Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v25Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v26Ev,
  (VTBL_ENTRY)&_ZN7S6901C33v27Ev,
};
extern void _ZN7S6901C83v18Ev();
extern void _ZN7S6901C83v19Ev();
extern void _ZN7S6901C83v20Ev();
extern void _ZN7S6901C83v21Ev();
static  VTBL_ENTRY _tg__ZTV7S6901C8__7S6901C3__7S6901C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S6901C3[0]),
  (VTBL_ENTRY)&_ZN7S6901C83v18Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v19Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v20Ev,
  (VTBL_ENTRY)&_ZN7S6901C83v21Ev,
};
static  VTT_ENTRY vtt_S6901C1[] = {
  {&(_ZTV7S6901C1[4]),  4,54},
  {&(_ZTV7S6901C1[30]),  30,54},
  {&(_ZTV7S6901C1[50]),  50,54},
  {&(_tg__ZTV7S6901C3__7S6901C1[3]),  3,17},
  {&(_tg__ZTV7S6901C8__7S6901C3__7S6901C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S6901C1[];
extern  VTBL_ENTRY _ZTV7S6901C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6901C1[];
Class_Descriptor cd_S6901C1 = {  "S6901C1", // class name
  bases_S6901C1, 4,
  &(vtc_S6901C1[0]), // expected_vtbl_contents
  &(vtt_S6901C1[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI7S6901C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6901C1),54, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6901C1),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1166C3  : S10180C138 {
  int s1166c3f0;
  void *s1166c3f1;
  ::S1168C5 s1166c3f2;
  ::S1168C8_nt s1166c3f3;
  char s1166c3f4;
  virtual  ~S1166C3(); // _ZN7S1166C3D1Ev
  virtual void  v4(); // _ZN7S1166C32v4Ev
  virtual void  v5(); // _ZN7S1166C32v5Ev
  virtual void  v6(); // _ZN7S1166C32v6Ev
  virtual void  v7(); // _ZN7S1166C32v7Ev
  virtual void  v8(); // _ZN7S1166C32v8Ev
  virtual void  v9(); // _ZN7S1166C32v9Ev
  virtual void  v10(); // _ZN7S1166C33v10Ev
  virtual void  v11(); // _ZN7S1166C33v11Ev
  S1166C3(); // tgen
};
//SIG(-1 S1166C3) C1{ BC2{ m} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp FC3{ BC4{ m Fp Fi[2] FC2}} FC5{ BC6{ m Fp}} Fc}


 S1166C3 ::~S1166C3(){ note_dtor("S1166C3", this);}
void  S1166C3 ::v4(){vfunc_called(this, "_ZN7S1166C32v4Ev");}
void  S1166C3 ::v5(){vfunc_called(this, "_ZN7S1166C32v5Ev");}
void  S1166C3 ::v6(){vfunc_called(this, "_ZN7S1166C32v6Ev");}
void  S1166C3 ::v7(){vfunc_called(this, "_ZN7S1166C32v7Ev");}
void  S1166C3 ::v8(){vfunc_called(this, "_ZN7S1166C32v8Ev");}
void  S1166C3 ::v9(){vfunc_called(this, "_ZN7S1166C32v9Ev");}
void  S1166C3 ::v10(){vfunc_called(this, "_ZN7S1166C33v10Ev");}
void  S1166C3 ::v11(){vfunc_called(this, "_ZN7S1166C33v11Ev");}
S1166C3 ::S1166C3(){ note_ctor("S1166C3", this);} // tgen

static void Test_S1166C3()
{
  extern Class_Descriptor cd_S1166C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1166C3, buf);
    S1166C3 *dp, &lv = *(dp=new (buf) S1166C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1166C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1166C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S1166C3");
    check_field_offset(lv, s1166c3f0, ABISELECT(8,4), "S1166C3.s1166c3f0");
    check_field_offset(lv, s1166c3f1, ABISELECT(16,8), "S1166C3.s1166c3f1");
    check_field_offset(lv, s1166c3f2, ABISELECT(24,12), "S1166C3.s1166c3f2");
    check_field_offset(lv, s1166c3f3, ABISELECT(48,28), "S1166C3.s1166c3f3");
    check_field_offset(lv, s1166c3f4, ABISELECT(56,32), "S1166C3.s1166c3f4");
    test_class_info(&lv, &cd_S1166C3);
    dp->~S1166C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1166C3(Test_S1166C3, "S1166C3", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1166C3C1Ev();
extern void _ZN7S1166C3D1Ev();
Name_Map name_map_S1166C3[] = {
  NSPAIR(_ZN7S1166C3C1Ev),
  NSPAIR(_ZN7S1166C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S1166C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1166C3[];
extern void _ZN7S1166C3D1Ev();
extern void _ZN7S1166C3D0Ev();
extern void _ZN7S1166C32v4Ev();
extern void _ZN7S1166C32v5Ev();
extern void _ZN7S1166C32v6Ev();
extern void _ZN7S1166C32v7Ev();
extern void _ZN7S1166C32v8Ev();
extern void _ZN7S1166C32v9Ev();
extern void _ZN7S1166C33v10Ev();
extern void _ZN7S1166C33v11Ev();
static  VTBL_ENTRY vtc_S1166C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1166C3[0]),
  (VTBL_ENTRY)&_ZN7S1166C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1166C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1166C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1166C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1166C3[];
extern  VTBL_ENTRY _ZTV7S1166C3[];
Class_Descriptor cd_S1166C3 = {  "S1166C3", // class name
  bases_S1166C3, 1,
  &(vtc_S1166C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1166C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1166C3),12, //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  S1166C2  : S1166C3 {
  void *s1166c2f0;
  virtual void  v12(); // _ZN7S1166C23v12Ev
  virtual void  v13(); // _ZN7S1166C23v13Ev
  virtual void  v14(); // _ZN7S1166C23v14Ev
  virtual void  v15(); // _ZN7S1166C23v15Ev
  virtual void  v16(); // _ZN7S1166C23v16Ev
  virtual void  v17(); // _ZN7S1166C23v17Ev
  ~S1166C2(); // tgen
  S1166C2(); // tgen
};
//SIG(-1 S1166C2) C1{ BC2{ BC3{ m} vd v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp FC4{ BC5{ m Fp Fi[2] FC3}} FC6{ BC7{ m Fp}} Fc} v1 v2 v3 v4 v5 v6 Fp}


void  S1166C2 ::v12(){vfunc_called(this, "_ZN7S1166C23v12Ev");}
void  S1166C2 ::v13(){vfunc_called(this, "_ZN7S1166C23v13Ev");}
void  S1166C2 ::v14(){vfunc_called(this, "_ZN7S1166C23v14Ev");}
void  S1166C2 ::v15(){vfunc_called(this, "_ZN7S1166C23v15Ev");}
void  S1166C2 ::v16(){vfunc_called(this, "_ZN7S1166C23v16Ev");}
void  S1166C2 ::v17(){vfunc_called(this, "_ZN7S1166C23v17Ev");}
S1166C2 ::~S1166C2(){ note_dtor("S1166C2", this);} // tgen
S1166C2 ::S1166C2(){ note_ctor("S1166C2", this);} // tgen

static void Test_S1166C2()
{
  extern Class_Descriptor cd_S1166C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S1166C2, buf);
    S1166C2 *dp, &lv = *(dp=new (buf) S1166C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S1166C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1166C2)");
    check_base_class_offset(lv, (S10180C138*)(S1166C3*), 0, "S1166C2");
    check_base_class_offset(lv, (S1166C3*), 0, "S1166C2");
    check_field_offset(lv, s1166c2f0, ABISELECT(64,36), "S1166C2.s1166c2f0");
    test_class_info(&lv, &cd_S1166C2);
    dp->~S1166C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1166C2(Test_S1166C2, "S1166C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S1166C2C1Ev();
extern void _ZN7S1166C2D1Ev();
Name_Map name_map_S1166C2[] = {
  NSPAIR(_ZN7S1166C2C1Ev),
  NSPAIR(_ZN7S1166C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1166C3;
extern VTBL_ENTRY _ZTI7S1166C3[];
extern  VTBL_ENTRY _ZTV7S1166C3[];
static Base_Class bases_S1166C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1166C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1166C2[];
extern void _ZN7S1166C2D1Ev();
extern void _ZN7S1166C2D0Ev();
extern void _ZN7S1166C32v4Ev();
extern void _ZN7S1166C32v5Ev();
extern void _ZN7S1166C32v6Ev();
extern void _ZN7S1166C32v7Ev();
extern void _ZN7S1166C32v8Ev();
extern void _ZN7S1166C32v9Ev();
extern void _ZN7S1166C33v10Ev();
extern void _ZN7S1166C33v11Ev();
extern void _ZN7S1166C23v12Ev();
extern void _ZN7S1166C23v13Ev();
extern void _ZN7S1166C23v14Ev();
extern void _ZN7S1166C23v15Ev();
extern void _ZN7S1166C23v16Ev();
extern void _ZN7S1166C23v17Ev();
static  VTBL_ENTRY vtc_S1166C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1166C2[0]),
  (VTBL_ENTRY)&_ZN7S1166C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1166C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1166C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1166C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1166C2[];
extern  VTBL_ENTRY _ZTV7S1166C2[];
Class_Descriptor cd_S1166C2 = {  "S1166C2", // class name
  bases_S1166C2, 2,
  &(vtc_S1166C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S1166C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1166C2),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  S1166C1  : S1166C2 {
  ::S15696C5_nt s1166c1f0;
  ::S15696C5_nt s1166c1f1;
  ::S1167C23 s1166c1f2;
  int s1166c1f3;
  virtual  ~S1166C1(); // _ZN7S1166C1D1Ev
  virtual void  v1(); // _ZN7S1166C12v1Ev
  virtual void  v2(); // _ZN7S1166C12v2Ev
  virtual void  v3(); // _ZN7S1166C12v3Ev
  S1166C1(); // tgen
};
//SIG(1 S1166C1) C1{ BC2{ BC3{ BC4{ m} vd v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp FC5{ BC6{ m Fp Fi[2] FC4}} FC7{ BC8{ m Fp}} Fc} v12 v13 v14 v15 v16 v17 Fp} vd v1 v2 v3 FC9{ m FC10{ FL[4]}} FC9 FC11{ BC6} Fi}


 S1166C1 ::~S1166C1(){ note_dtor("S1166C1", this);}
void  S1166C1 ::v1(){vfunc_called(this, "_ZN7S1166C12v1Ev");}
void  S1166C1 ::v2(){vfunc_called(this, "_ZN7S1166C12v2Ev");}
void  S1166C1 ::v3(){vfunc_called(this, "_ZN7S1166C12v3Ev");}
S1166C1 ::S1166C1(){ note_ctor("S1166C1", this);} // tgen

static void Test_S1166C1()
{
  extern Class_Descriptor cd_S1166C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,32)];
    init_test(&cd_S1166C1, buf);
    S1166C1 *dp, &lv = *(dp=new (buf) S1166C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,124), "sizeof(S1166C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1166C1)");
    check_base_class_offset(lv, (S10180C138*)(S1166C3*)(S1166C2*), 0, "S1166C1");
    check_base_class_offset(lv, (S1166C3*)(S1166C2*), 0, "S1166C1");
    check_base_class_offset(lv, (S1166C2*), 0, "S1166C1");
    check_field_offset(lv, s1166c1f0, ABISELECT(72,40), "S1166C1.s1166c1f0");
    check_field_offset(lv, s1166c1f1, ABISELECT(104,72), "S1166C1.s1166c1f1");
    check_field_offset(lv, s1166c1f2, ABISELECT(136,104), "S1166C1.s1166c1f2");
    check_field_offset(lv, s1166c1f3, ABISELECT(160,120), "S1166C1.s1166c1f3");
    test_class_info(&lv, &cd_S1166C1);
    dp->~S1166C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1166C1(Test_S1166C1, "S1166C1", ABISELECT(168,124));

#else // __cplusplus

extern void _ZN7S1166C1C1Ev();
extern void _ZN7S1166C1D1Ev();
Name_Map name_map_S1166C1[] = {
  NSPAIR(_ZN7S1166C1C1Ev),
  NSPAIR(_ZN7S1166C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1166C3;
extern VTBL_ENTRY _ZTI7S1166C3[];
extern  VTBL_ENTRY _ZTV7S1166C3[];
extern Class_Descriptor cd_S1166C2;
extern VTBL_ENTRY _ZTI7S1166C2[];
extern  VTBL_ENTRY _ZTV7S1166C2[];
static Base_Class bases_S1166C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1166C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1166C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1166C1[];
extern void _ZN7S1166C1D1Ev();
extern void _ZN7S1166C1D0Ev();
extern void _ZN7S1166C32v4Ev();
extern void _ZN7S1166C32v5Ev();
extern void _ZN7S1166C32v6Ev();
extern void _ZN7S1166C32v7Ev();
extern void _ZN7S1166C32v8Ev();
extern void _ZN7S1166C32v9Ev();
extern void _ZN7S1166C33v10Ev();
extern void _ZN7S1166C33v11Ev();
extern void _ZN7S1166C23v12Ev();
extern void _ZN7S1166C23v13Ev();
extern void _ZN7S1166C23v14Ev();
extern void _ZN7S1166C23v15Ev();
extern void _ZN7S1166C23v16Ev();
extern void _ZN7S1166C23v17Ev();
extern void _ZN7S1166C12v1Ev();
extern void _ZN7S1166C12v2Ev();
extern void _ZN7S1166C12v3Ev();
static  VTBL_ENTRY vtc_S1166C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1166C1[0]),
  (VTBL_ENTRY)&_ZN7S1166C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1166C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1166C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1166C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1166C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1166C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1166C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1166C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1166C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1166C1[];
extern  VTBL_ENTRY _ZTV7S1166C1[];
Class_Descriptor cd_S1166C1 = {  "S1166C1", // class name
  bases_S1166C1, 3,
  &(vtc_S1166C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,124), // object size
  NSPAIRA(_ZTI7S1166C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1166C1),21, //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  S1165C3  : S10180C138 {
  int s1165c3f0;
  void *s1165c3f1;
  ::S1168C5 s1165c3f2;
  ::S1168C8_nt s1165c3f3;
  char s1165c3f4;
  virtual  ~S1165C3(); // _ZN7S1165C3D1Ev
  virtual void  v4(); // _ZN7S1165C32v4Ev
  virtual void  v5(); // _ZN7S1165C32v5Ev
  virtual void  v6(); // _ZN7S1165C32v6Ev
  virtual void  v7(); // _ZN7S1165C32v7Ev
  virtual void  v8(); // _ZN7S1165C32v8Ev
  virtual void  v9(); // _ZN7S1165C32v9Ev
  virtual void  v10(); // _ZN7S1165C33v10Ev
  virtual void  v11(); // _ZN7S1165C33v11Ev
  S1165C3(); // tgen
};
//SIG(-1 S1165C3) C1{ BC2{ m} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp FC3{ BC4{ m Fp Fi[2] FC2}} FC5{ BC6{ m Fp}} Fc}


 S1165C3 ::~S1165C3(){ note_dtor("S1165C3", this);}
void  S1165C3 ::v4(){vfunc_called(this, "_ZN7S1165C32v4Ev");}
void  S1165C3 ::v5(){vfunc_called(this, "_ZN7S1165C32v5Ev");}
void  S1165C3 ::v6(){vfunc_called(this, "_ZN7S1165C32v6Ev");}
void  S1165C3 ::v7(){vfunc_called(this, "_ZN7S1165C32v7Ev");}
void  S1165C3 ::v8(){vfunc_called(this, "_ZN7S1165C32v8Ev");}
void  S1165C3 ::v9(){vfunc_called(this, "_ZN7S1165C32v9Ev");}
void  S1165C3 ::v10(){vfunc_called(this, "_ZN7S1165C33v10Ev");}
void  S1165C3 ::v11(){vfunc_called(this, "_ZN7S1165C33v11Ev");}
S1165C3 ::S1165C3(){ note_ctor("S1165C3", this);} // tgen

static void Test_S1165C3()
{
  extern Class_Descriptor cd_S1165C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1165C3, buf);
    S1165C3 *dp, &lv = *(dp=new (buf) S1165C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1165C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1165C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S1165C3");
    check_field_offset(lv, s1165c3f0, ABISELECT(8,4), "S1165C3.s1165c3f0");
    check_field_offset(lv, s1165c3f1, ABISELECT(16,8), "S1165C3.s1165c3f1");
    check_field_offset(lv, s1165c3f2, ABISELECT(24,12), "S1165C3.s1165c3f2");
    check_field_offset(lv, s1165c3f3, ABISELECT(48,28), "S1165C3.s1165c3f3");
    check_field_offset(lv, s1165c3f4, ABISELECT(56,32), "S1165C3.s1165c3f4");
    test_class_info(&lv, &cd_S1165C3);
    dp->~S1165C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1165C3(Test_S1165C3, "S1165C3", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1165C3C1Ev();
extern void _ZN7S1165C3D1Ev();
Name_Map name_map_S1165C3[] = {
  NSPAIR(_ZN7S1165C3C1Ev),
  NSPAIR(_ZN7S1165C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S1165C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1165C3[];
extern void _ZN7S1165C3D1Ev();
extern void _ZN7S1165C3D0Ev();
extern void _ZN7S1165C32v4Ev();
extern void _ZN7S1165C32v5Ev();
extern void _ZN7S1165C32v6Ev();
extern void _ZN7S1165C32v7Ev();
extern void _ZN7S1165C32v8Ev();
extern void _ZN7S1165C32v9Ev();
extern void _ZN7S1165C33v10Ev();
extern void _ZN7S1165C33v11Ev();
static  VTBL_ENTRY vtc_S1165C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1165C3[0]),
  (VTBL_ENTRY)&_ZN7S1165C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1165C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1165C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1165C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1165C3[];
extern  VTBL_ENTRY _ZTV7S1165C3[];
Class_Descriptor cd_S1165C3 = {  "S1165C3", // class name
  bases_S1165C3, 1,
  &(vtc_S1165C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1165C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1165C3),12, //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  S1165C2  : S1165C3 {
  void *s1165c2f0;
  virtual void  v12(); // _ZN7S1165C23v12Ev
  virtual void  v13(); // _ZN7S1165C23v13Ev
  virtual void  v14(); // _ZN7S1165C23v14Ev
  virtual void  v15(); // _ZN7S1165C23v15Ev
  virtual void  v16(); // _ZN7S1165C23v16Ev
  virtual void  v17(); // _ZN7S1165C23v17Ev
  ~S1165C2(); // tgen
  S1165C2(); // tgen
};
//SIG(-1 S1165C2) C1{ BC2{ BC3{ m} vd v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp FC4{ BC5{ m Fp Fi[2] FC3}} FC6{ BC7{ m Fp}} Fc} v1 v2 v3 v4 v5 v6 Fp}


void  S1165C2 ::v12(){vfunc_called(this, "_ZN7S1165C23v12Ev");}
void  S1165C2 ::v13(){vfunc_called(this, "_ZN7S1165C23v13Ev");}
void  S1165C2 ::v14(){vfunc_called(this, "_ZN7S1165C23v14Ev");}
void  S1165C2 ::v15(){vfunc_called(this, "_ZN7S1165C23v15Ev");}
void  S1165C2 ::v16(){vfunc_called(this, "_ZN7S1165C23v16Ev");}
void  S1165C2 ::v17(){vfunc_called(this, "_ZN7S1165C23v17Ev");}
S1165C2 ::~S1165C2(){ note_dtor("S1165C2", this);} // tgen
S1165C2 ::S1165C2(){ note_ctor("S1165C2", this);} // tgen

static void Test_S1165C2()
{
  extern Class_Descriptor cd_S1165C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S1165C2, buf);
    S1165C2 *dp, &lv = *(dp=new (buf) S1165C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S1165C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1165C2)");
    check_base_class_offset(lv, (S10180C138*)(S1165C3*), 0, "S1165C2");
    check_base_class_offset(lv, (S1165C3*), 0, "S1165C2");
    check_field_offset(lv, s1165c2f0, ABISELECT(64,36), "S1165C2.s1165c2f0");
    test_class_info(&lv, &cd_S1165C2);
    dp->~S1165C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1165C2(Test_S1165C2, "S1165C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S1165C2C1Ev();
extern void _ZN7S1165C2D1Ev();
Name_Map name_map_S1165C2[] = {
  NSPAIR(_ZN7S1165C2C1Ev),
  NSPAIR(_ZN7S1165C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1165C3;
extern VTBL_ENTRY _ZTI7S1165C3[];
extern  VTBL_ENTRY _ZTV7S1165C3[];
static Base_Class bases_S1165C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1165C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1165C2[];
extern void _ZN7S1165C2D1Ev();
extern void _ZN7S1165C2D0Ev();
extern void _ZN7S1165C32v4Ev();
extern void _ZN7S1165C32v5Ev();
extern void _ZN7S1165C32v6Ev();
extern void _ZN7S1165C32v7Ev();
extern void _ZN7S1165C32v8Ev();
extern void _ZN7S1165C32v9Ev();
extern void _ZN7S1165C33v10Ev();
extern void _ZN7S1165C33v11Ev();
extern void _ZN7S1165C23v12Ev();
extern void _ZN7S1165C23v13Ev();
extern void _ZN7S1165C23v14Ev();
extern void _ZN7S1165C23v15Ev();
extern void _ZN7S1165C23v16Ev();
extern void _ZN7S1165C23v17Ev();
static  VTBL_ENTRY vtc_S1165C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1165C2[0]),
  (VTBL_ENTRY)&_ZN7S1165C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1165C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1165C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1165C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1165C2[];
extern  VTBL_ENTRY _ZTV7S1165C2[];
Class_Descriptor cd_S1165C2 = {  "S1165C2", // class name
  bases_S1165C2, 2,
  &(vtc_S1165C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S1165C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1165C2),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  S1165C1  : S1165C2 {
  ::S15695C5_nt s1165c1f0;
  ::S15695C5_nt s1165c1f1;
  ::S1167C23 s1165c1f2;
  int s1165c1f3;
  virtual  ~S1165C1(); // _ZN7S1165C1D1Ev
  virtual void  v1(); // _ZN7S1165C12v1Ev
  virtual void  v2(); // _ZN7S1165C12v2Ev
  virtual void  v3(); // _ZN7S1165C12v3Ev
  S1165C1(); // tgen
};
//SIG(1 S1165C1) C1{ BC2{ BC3{ BC4{ m} vd v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp FC5{ BC6{ m Fp Fi[2] FC4}} FC7{ BC8{ m Fp}} Fc} v12 v13 v14 v15 v16 v17 Fp} vd v1 v2 v3 FC9{ m FC10{ Fl[4]}} FC9 FC11{ BC6} Fi}


 S1165C1 ::~S1165C1(){ note_dtor("S1165C1", this);}
void  S1165C1 ::v1(){vfunc_called(this, "_ZN7S1165C12v1Ev");}
void  S1165C1 ::v2(){vfunc_called(this, "_ZN7S1165C12v2Ev");}
void  S1165C1 ::v3(){vfunc_called(this, "_ZN7S1165C12v3Ev");}
S1165C1 ::S1165C1(){ note_ctor("S1165C1", this);} // tgen

static void Test_S1165C1()
{
  extern Class_Descriptor cd_S1165C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,24)];
    init_test(&cd_S1165C1, buf);
    S1165C1 *dp, &lv = *(dp=new (buf) S1165C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,92), "sizeof(S1165C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1165C1)");
    check_base_class_offset(lv, (S10180C138*)(S1165C3*)(S1165C2*), 0, "S1165C1");
    check_base_class_offset(lv, (S1165C3*)(S1165C2*), 0, "S1165C1");
    check_base_class_offset(lv, (S1165C2*), 0, "S1165C1");
    check_field_offset(lv, s1165c1f0, ABISELECT(72,40), "S1165C1.s1165c1f0");
    check_field_offset(lv, s1165c1f1, ABISELECT(104,56), "S1165C1.s1165c1f1");
    check_field_offset(lv, s1165c1f2, ABISELECT(136,72), "S1165C1.s1165c1f2");
    check_field_offset(lv, s1165c1f3, ABISELECT(160,88), "S1165C1.s1165c1f3");
    test_class_info(&lv, &cd_S1165C1);
    dp->~S1165C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1165C1(Test_S1165C1, "S1165C1", ABISELECT(168,92));

#else // __cplusplus

extern void _ZN7S1165C1C1Ev();
extern void _ZN7S1165C1D1Ev();
Name_Map name_map_S1165C1[] = {
  NSPAIR(_ZN7S1165C1C1Ev),
  NSPAIR(_ZN7S1165C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1165C3;
extern VTBL_ENTRY _ZTI7S1165C3[];
extern  VTBL_ENTRY _ZTV7S1165C3[];
extern Class_Descriptor cd_S1165C2;
extern VTBL_ENTRY _ZTI7S1165C2[];
extern  VTBL_ENTRY _ZTV7S1165C2[];
static Base_Class bases_S1165C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1165C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1165C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1165C1[];
extern void _ZN7S1165C1D1Ev();
extern void _ZN7S1165C1D0Ev();
extern void _ZN7S1165C32v4Ev();
extern void _ZN7S1165C32v5Ev();
extern void _ZN7S1165C32v6Ev();
extern void _ZN7S1165C32v7Ev();
extern void _ZN7S1165C32v8Ev();
extern void _ZN7S1165C32v9Ev();
extern void _ZN7S1165C33v10Ev();
extern void _ZN7S1165C33v11Ev();
extern void _ZN7S1165C23v12Ev();
extern void _ZN7S1165C23v13Ev();
extern void _ZN7S1165C23v14Ev();
extern void _ZN7S1165C23v15Ev();
extern void _ZN7S1165C23v16Ev();
extern void _ZN7S1165C23v17Ev();
extern void _ZN7S1165C12v1Ev();
extern void _ZN7S1165C12v2Ev();
extern void _ZN7S1165C12v3Ev();
static  VTBL_ENTRY vtc_S1165C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1165C1[0]),
  (VTBL_ENTRY)&_ZN7S1165C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1165C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1165C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1165C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1165C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1165C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1165C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1165C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1165C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1165C1[];
extern  VTBL_ENTRY _ZTV7S1165C1[];
Class_Descriptor cd_S1165C1 = {  "S1165C1", // class name
  bases_S1165C1, 3,
  &(vtc_S1165C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,92), // object size
  NSPAIRA(_ZTI7S1165C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1165C1),21, //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  S1169C3  : S10180C138 {
  int s1169c3f0;
  void *s1169c3f1;
  ::S1168C5 s1169c3f2;
  ::S1168C8_nt s1169c3f3;
  char s1169c3f4;
  virtual  ~S1169C3(); // _ZN7S1169C3D1Ev
  virtual void  v4(); // _ZN7S1169C32v4Ev
  virtual void  v5(); // _ZN7S1169C32v5Ev
  virtual void  v6(); // _ZN7S1169C32v6Ev
  virtual void  v7(); // _ZN7S1169C32v7Ev
  virtual void  v8(); // _ZN7S1169C32v8Ev
  virtual void  v9(); // _ZN7S1169C32v9Ev
  virtual void  v10(); // _ZN7S1169C33v10Ev
  virtual void  v11(); // _ZN7S1169C33v11Ev
  S1169C3(); // tgen
};
//SIG(-1 S1169C3) C1{ BC2{ m} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp FC3{ BC4{ m Fp Fi[2] FC2}} FC5{ BC6{ m Fp}} Fc}


 S1169C3 ::~S1169C3(){ note_dtor("S1169C3", this);}
void  S1169C3 ::v4(){vfunc_called(this, "_ZN7S1169C32v4Ev");}
void  S1169C3 ::v5(){vfunc_called(this, "_ZN7S1169C32v5Ev");}
void  S1169C3 ::v6(){vfunc_called(this, "_ZN7S1169C32v6Ev");}
void  S1169C3 ::v7(){vfunc_called(this, "_ZN7S1169C32v7Ev");}
void  S1169C3 ::v8(){vfunc_called(this, "_ZN7S1169C32v8Ev");}
void  S1169C3 ::v9(){vfunc_called(this, "_ZN7S1169C32v9Ev");}
void  S1169C3 ::v10(){vfunc_called(this, "_ZN7S1169C33v10Ev");}
void  S1169C3 ::v11(){vfunc_called(this, "_ZN7S1169C33v11Ev");}
S1169C3 ::S1169C3(){ note_ctor("S1169C3", this);} // tgen

static void Test_S1169C3()
{
  extern Class_Descriptor cd_S1169C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1169C3, buf);
    S1169C3 *dp, &lv = *(dp=new (buf) S1169C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1169C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1169C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S1169C3");
    check_field_offset(lv, s1169c3f0, ABISELECT(8,4), "S1169C3.s1169c3f0");
    check_field_offset(lv, s1169c3f1, ABISELECT(16,8), "S1169C3.s1169c3f1");
    check_field_offset(lv, s1169c3f2, ABISELECT(24,12), "S1169C3.s1169c3f2");
    check_field_offset(lv, s1169c3f3, ABISELECT(48,28), "S1169C3.s1169c3f3");
    check_field_offset(lv, s1169c3f4, ABISELECT(56,32), "S1169C3.s1169c3f4");
    test_class_info(&lv, &cd_S1169C3);
    dp->~S1169C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1169C3(Test_S1169C3, "S1169C3", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1169C3C1Ev();
extern void _ZN7S1169C3D1Ev();
Name_Map name_map_S1169C3[] = {
  NSPAIR(_ZN7S1169C3C1Ev),
  NSPAIR(_ZN7S1169C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S1169C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1169C3[];
extern void _ZN7S1169C3D1Ev();
extern void _ZN7S1169C3D0Ev();
extern void _ZN7S1169C32v4Ev();
extern void _ZN7S1169C32v5Ev();
extern void _ZN7S1169C32v6Ev();
extern void _ZN7S1169C32v7Ev();
extern void _ZN7S1169C32v8Ev();
extern void _ZN7S1169C32v9Ev();
extern void _ZN7S1169C33v10Ev();
extern void _ZN7S1169C33v11Ev();
static  VTBL_ENTRY vtc_S1169C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1169C3[0]),
  (VTBL_ENTRY)&_ZN7S1169C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1169C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1169C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1169C3[];
extern  VTBL_ENTRY _ZTV7S1169C3[];
Class_Descriptor cd_S1169C3 = {  "S1169C3", // class name
  bases_S1169C3, 1,
  &(vtc_S1169C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1169C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1169C3),12, //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  S1169C2  : S1169C3 {
  void *s1169c2f0;
  virtual void  v12(); // _ZN7S1169C23v12Ev
  virtual void  v13(); // _ZN7S1169C23v13Ev
  virtual void  v14(); // _ZN7S1169C23v14Ev
  virtual void  v15(); // _ZN7S1169C23v15Ev
  virtual void  v16(); // _ZN7S1169C23v16Ev
  virtual void  v17(); // _ZN7S1169C23v17Ev
  ~S1169C2(); // tgen
  S1169C2(); // tgen
};
//SIG(-1 S1169C2) C1{ BC2{ BC3{ m} vd v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp FC4{ BC5{ m Fp Fi[2] FC3}} FC6{ BC7{ m Fp}} Fc} v1 v2 v3 v4 v5 v6 Fp}


void  S1169C2 ::v12(){vfunc_called(this, "_ZN7S1169C23v12Ev");}
void  S1169C2 ::v13(){vfunc_called(this, "_ZN7S1169C23v13Ev");}
void  S1169C2 ::v14(){vfunc_called(this, "_ZN7S1169C23v14Ev");}
void  S1169C2 ::v15(){vfunc_called(this, "_ZN7S1169C23v15Ev");}
void  S1169C2 ::v16(){vfunc_called(this, "_ZN7S1169C23v16Ev");}
void  S1169C2 ::v17(){vfunc_called(this, "_ZN7S1169C23v17Ev");}
S1169C2 ::~S1169C2(){ note_dtor("S1169C2", this);} // tgen
S1169C2 ::S1169C2(){ note_ctor("S1169C2", this);} // tgen

static void Test_S1169C2()
{
  extern Class_Descriptor cd_S1169C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S1169C2, buf);
    S1169C2 *dp, &lv = *(dp=new (buf) S1169C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S1169C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1169C2)");
    check_base_class_offset(lv, (S10180C138*)(S1169C3*), 0, "S1169C2");
    check_base_class_offset(lv, (S1169C3*), 0, "S1169C2");
    check_field_offset(lv, s1169c2f0, ABISELECT(64,36), "S1169C2.s1169c2f0");
    test_class_info(&lv, &cd_S1169C2);
    dp->~S1169C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1169C2(Test_S1169C2, "S1169C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S1169C2C1Ev();
extern void _ZN7S1169C2D1Ev();
Name_Map name_map_S1169C2[] = {
  NSPAIR(_ZN7S1169C2C1Ev),
  NSPAIR(_ZN7S1169C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1169C3;
extern VTBL_ENTRY _ZTI7S1169C3[];
extern  VTBL_ENTRY _ZTV7S1169C3[];
static Base_Class bases_S1169C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1169C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1169C2[];
extern void _ZN7S1169C2D1Ev();
extern void _ZN7S1169C2D0Ev();
extern void _ZN7S1169C32v4Ev();
extern void _ZN7S1169C32v5Ev();
extern void _ZN7S1169C32v6Ev();
extern void _ZN7S1169C32v7Ev();
extern void _ZN7S1169C32v8Ev();
extern void _ZN7S1169C32v9Ev();
extern void _ZN7S1169C33v10Ev();
extern void _ZN7S1169C33v11Ev();
extern void _ZN7S1169C23v12Ev();
extern void _ZN7S1169C23v13Ev();
extern void _ZN7S1169C23v14Ev();
extern void _ZN7S1169C23v15Ev();
extern void _ZN7S1169C23v16Ev();
extern void _ZN7S1169C23v17Ev();
static  VTBL_ENTRY vtc_S1169C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1169C2[0]),
  (VTBL_ENTRY)&_ZN7S1169C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1169C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1169C2[];
extern  VTBL_ENTRY _ZTV7S1169C2[];
Class_Descriptor cd_S1169C2 = {  "S1169C2", // class name
  bases_S1169C2, 2,
  &(vtc_S1169C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S1169C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1169C2),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  S1169C1  : S1169C2 {
  ::S10181C37 s1169c1f0;
  ::S10181C37 s1169c1f1;
  ::S1167C23 s1169c1f2;
  int s1169c1f3;
  virtual  ~S1169C1(); // _ZN7S1169C1D1Ev
  virtual void  v1(); // _ZN7S1169C12v1Ev
  virtual void  v2(); // _ZN7S1169C12v2Ev
  virtual void  v3(); // _ZN7S1169C12v3Ev
  S1169C1(); // tgen
};
//SIG(1 S1169C1) C1{ BC2{ BC3{ BC4{ m} vd v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp FC5{ BC6{ m Fp Fi[2] FC4}} FC7{ BC8{ m Fp}} Fc} v12 v13 v14 v15 v16 v17 Fp} vd v1 v2 v3 FC9{ m FL[4]} FC9 FC10{ BC6} Fi}


 S1169C1 ::~S1169C1(){ note_dtor("S1169C1", this);}
void  S1169C1 ::v1(){vfunc_called(this, "_ZN7S1169C12v1Ev");}
void  S1169C1 ::v2(){vfunc_called(this, "_ZN7S1169C12v2Ev");}
void  S1169C1 ::v3(){vfunc_called(this, "_ZN7S1169C12v3Ev");}
S1169C1 ::S1169C1(){ note_ctor("S1169C1", this);} // tgen

static void Test_S1169C1()
{
  extern Class_Descriptor cd_S1169C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,32)];
    init_test(&cd_S1169C1, buf);
    S1169C1 *dp, &lv = *(dp=new (buf) S1169C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,124), "sizeof(S1169C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1169C1)");
    check_base_class_offset(lv, (S10180C138*)(S1169C3*)(S1169C2*), 0, "S1169C1");
    check_base_class_offset(lv, (S1169C3*)(S1169C2*), 0, "S1169C1");
    check_base_class_offset(lv, (S1169C2*), 0, "S1169C1");
    check_field_offset(lv, s1169c1f0, ABISELECT(72,40), "S1169C1.s1169c1f0");
    check_field_offset(lv, s1169c1f1, ABISELECT(104,72), "S1169C1.s1169c1f1");
    check_field_offset(lv, s1169c1f2, ABISELECT(136,104), "S1169C1.s1169c1f2");
    check_field_offset(lv, s1169c1f3, ABISELECT(160,120), "S1169C1.s1169c1f3");
    test_class_info(&lv, &cd_S1169C1);
    dp->~S1169C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1169C1(Test_S1169C1, "S1169C1", ABISELECT(168,124));

#else // __cplusplus

extern void _ZN7S1169C1C1Ev();
extern void _ZN7S1169C1D1Ev();
Name_Map name_map_S1169C1[] = {
  NSPAIR(_ZN7S1169C1C1Ev),
  NSPAIR(_ZN7S1169C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1169C3;
extern VTBL_ENTRY _ZTI7S1169C3[];
extern  VTBL_ENTRY _ZTV7S1169C3[];
extern Class_Descriptor cd_S1169C2;
extern VTBL_ENTRY _ZTI7S1169C2[];
extern  VTBL_ENTRY _ZTV7S1169C2[];
static Base_Class bases_S1169C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1169C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1169C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1169C1[];
extern void _ZN7S1169C1D1Ev();
extern void _ZN7S1169C1D0Ev();
extern void _ZN7S1169C32v4Ev();
extern void _ZN7S1169C32v5Ev();
extern void _ZN7S1169C32v6Ev();
extern void _ZN7S1169C32v7Ev();
extern void _ZN7S1169C32v8Ev();
extern void _ZN7S1169C32v9Ev();
extern void _ZN7S1169C33v10Ev();
extern void _ZN7S1169C33v11Ev();
extern void _ZN7S1169C23v12Ev();
extern void _ZN7S1169C23v13Ev();
extern void _ZN7S1169C23v14Ev();
extern void _ZN7S1169C23v15Ev();
extern void _ZN7S1169C23v16Ev();
extern void _ZN7S1169C23v17Ev();
extern void _ZN7S1169C12v1Ev();
extern void _ZN7S1169C12v2Ev();
extern void _ZN7S1169C12v3Ev();
static  VTBL_ENTRY vtc_S1169C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1169C1[0]),
  (VTBL_ENTRY)&_ZN7S1169C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1169C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1169C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1169C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1169C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1169C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1169C1[];
extern  VTBL_ENTRY _ZTV7S1169C1[];
Class_Descriptor cd_S1169C1 = {  "S1169C1", // class name
  bases_S1169C1, 3,
  &(vtc_S1169C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,124), // object size
  NSPAIRA(_ZTI7S1169C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1169C1),21, //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  S19522C4  {
  char s19522c4f0;
  virtual void  v3(); // _ZN8S19522C42v3Ev
  virtual void  v4(); // _ZN8S19522C42v4Ev
  ~S19522C4(); // tgen
  S19522C4(); // tgen
};
//SIG(-1 S19522C4) C1{ v1 v2 Fc}


void  S19522C4 ::v3(){vfunc_called(this, "_ZN8S19522C42v3Ev");}
void  S19522C4 ::v4(){vfunc_called(this, "_ZN8S19522C42v4Ev");}
S19522C4 ::~S19522C4(){ note_dtor("S19522C4", this);} // tgen
S19522C4 ::S19522C4(){ note_ctor("S19522C4", this);} // tgen

static void Test_S19522C4()
{
  extern Class_Descriptor cd_S19522C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19522C4, buf);
    S19522C4 *dp, &lv = *(dp=new (buf) S19522C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19522C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19522C4)");
    check_field_offset(lv, s19522c4f0, ABISELECT(8,4), "S19522C4.s19522c4f0");
    test_class_info(&lv, &cd_S19522C4);
    dp->~S19522C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19522C4(Test_S19522C4, "S19522C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19522C4C1Ev();
extern void _ZN8S19522C4D1Ev();
Name_Map name_map_S19522C4[] = {
  NSPAIR(_ZN8S19522C4C1Ev),
  NSPAIR(_ZN8S19522C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19522C4[];
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY vtc_S19522C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C4[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
extern VTBL_ENTRY _ZTI8S19522C4[];
extern  VTBL_ENTRY _ZTV8S19522C4[];
Class_Descriptor cd_S19522C4 = {  "S19522C4", // class name
  0,0,//no base classes
  &(vtc_S19522C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19522C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19522C4),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  S19522C3  : virtual S19522C4 {
  void *s19522c3f0;
  virtual void  v5(); // _ZN8S19522C32v5Ev
  virtual void  v6(); // _ZN8S19522C32v6Ev
  ~S19522C3(); // tgen
  S19522C3(); // tgen
};
//SIG(-1 S19522C3) C1{ VBC2{ v3 v4 Fc} v1 v2 Fp}


void  S19522C3 ::v5(){vfunc_called(this, "_ZN8S19522C32v5Ev");}
void  S19522C3 ::v6(){vfunc_called(this, "_ZN8S19522C32v6Ev");}
S19522C3 ::~S19522C3(){ note_dtor("S19522C3", this);} // tgen
S19522C3 ::S19522C3(){ note_ctor("S19522C3", this);} // tgen

static void Test_S19522C3()
{
  extern Class_Descriptor cd_S19522C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19522C3, buf);
    S19522C3 *dp, &lv = *(dp=new (buf) S19522C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19522C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19522C3)");
    check_base_class_offset(lv, (S19522C4*), ABISELECT(16,8), "S19522C3");
    check_field_offset(lv, s19522c3f0, ABISELECT(8,4), "S19522C3.s19522c3f0");
    test_class_info(&lv, &cd_S19522C3);
    dp->~S19522C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19522C3(Test_S19522C3, "S19522C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19522C3C1Ev();
extern void _ZN8S19522C3D1Ev();
Name_Map name_map_S19522C3[] = {
  NSPAIR(_ZN8S19522C3C1Ev),
  NSPAIR(_ZN8S19522C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19522C4;
extern VTBL_ENTRY _ZTI8S19522C4[];
extern  VTBL_ENTRY _ZTV8S19522C4[];
static Base_Class bases_S19522C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19522C4,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19522C3[];
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY vtc_S19522C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19522C3[];
static  VTT_ENTRY vtt_S19522C3[] = {
  {&(_ZTV8S19522C3[3]),  3,11},
  {&(_ZTV8S19522C3[9]),  9,11},
};
extern VTBL_ENTRY _ZTI8S19522C3[];
extern  VTBL_ENTRY _ZTV8S19522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C3[];
Class_Descriptor cd_S19522C3 = {  "S19522C3", // class name
  bases_S19522C3, 1,
  &(vtc_S19522C3[0]), // expected_vtbl_contents
  &(vtt_S19522C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19522C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19522C3),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19522C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19522C6  {
  void *s19522c6f0[2];
  virtual void  v7(); // _ZN8S19522C62v7Ev
  virtual void  v8(); // _ZN8S19522C62v8Ev
  virtual void  v9(); // _ZN8S19522C62v9Ev
  virtual void  v10(); // _ZN8S19522C63v10Ev
  virtual void  v11(); // _ZN8S19522C63v11Ev
  ~S19522C6(); // tgen
  S19522C6(); // tgen
};
//SIG(-1 S19522C6) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S19522C6 ::v7(){vfunc_called(this, "_ZN8S19522C62v7Ev");}
void  S19522C6 ::v8(){vfunc_called(this, "_ZN8S19522C62v8Ev");}
void  S19522C6 ::v9(){vfunc_called(this, "_ZN8S19522C62v9Ev");}
void  S19522C6 ::v10(){vfunc_called(this, "_ZN8S19522C63v10Ev");}
void  S19522C6 ::v11(){vfunc_called(this, "_ZN8S19522C63v11Ev");}
S19522C6 ::~S19522C6(){ note_dtor("S19522C6", this);} // tgen
S19522C6 ::S19522C6(){ note_ctor("S19522C6", this);} // tgen

static void Test_S19522C6()
{
  extern Class_Descriptor cd_S19522C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19522C6, buf);
    S19522C6 *dp, &lv = *(dp=new (buf) S19522C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19522C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19522C6)");
    check_field_offset(lv, s19522c6f0, ABISELECT(8,4), "S19522C6.s19522c6f0");
    test_class_info(&lv, &cd_S19522C6);
    dp->~S19522C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19522C6(Test_S19522C6, "S19522C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19522C6C1Ev();
extern void _ZN8S19522C6D1Ev();
Name_Map name_map_S19522C6[] = {
  NSPAIR(_ZN8S19522C6C1Ev),
  NSPAIR(_ZN8S19522C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19522C6[];
extern void _ZN8S19522C62v7Ev();
extern void _ZN8S19522C62v8Ev();
extern void _ZN8S19522C62v9Ev();
extern void _ZN8S19522C63v10Ev();
extern void _ZN8S19522C63v11Ev();
static  VTBL_ENTRY vtc_S19522C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C6[0]),
  (VTBL_ENTRY)&_ZN8S19522C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v11Ev,
};
extern VTBL_ENTRY _ZTI8S19522C6[];
extern  VTBL_ENTRY _ZTV8S19522C6[];
Class_Descriptor cd_S19522C6 = {  "S19522C6", // class name
  0,0,//no base classes
  &(vtc_S19522C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19522C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19522C6),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  S19522C5  : S19522C6 , S19522C3 {
  virtual void  v12(); // _ZN8S19522C53v12Ev
  ~S19522C5(); // tgen
  S19522C5(); // tgen
};
//SIG(-1 S19522C5) C1{ BC2{ v2 v3 v4 v5 v6 Fp[2]} BC3{ VBC4{ v7 v8 Fc} v9 v10 Fp} v1}


void  S19522C5 ::v12(){vfunc_called(this, "_ZN8S19522C53v12Ev");}
S19522C5 ::~S19522C5(){ note_dtor("S19522C5", this);} // tgen
S19522C5 ::S19522C5(){ note_ctor("S19522C5", this);} // tgen

static void Test_S19522C5()
{
  extern Class_Descriptor cd_S19522C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19522C5, buf);
    S19522C5 *dp, &lv = *(dp=new (buf) S19522C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19522C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19522C5)");
    check_base_class_offset(lv, (S19522C6*), 0, "S19522C5");
    check_base_class_offset(lv, (S19522C4*)(S19522C3*), ABISELECT(40,20), "S19522C5");
    check_base_class_offset(lv, (S19522C3*), ABISELECT(24,12), "S19522C5");
    test_class_info(&lv, &cd_S19522C5);
    dp->~S19522C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19522C5(Test_S19522C5, "S19522C5", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19522C5C1Ev();
extern void _ZN8S19522C5D1Ev();
Name_Map name_map_S19522C5[] = {
  NSPAIR(_ZN8S19522C5C1Ev),
  NSPAIR(_ZN8S19522C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19522C6;
extern VTBL_ENTRY _ZTI8S19522C6[];
extern  VTBL_ENTRY _ZTV8S19522C6[];
extern Class_Descriptor cd_S19522C4;
extern VTBL_ENTRY _ZTI8S19522C4[];
extern  VTBL_ENTRY _ZTV8S19522C4[];
extern Class_Descriptor cd_S19522C3;
extern VTBL_ENTRY _ZTI8S19522C3[];
extern  VTBL_ENTRY _ZTV8S19522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C3[];
static Base_Class bases_S19522C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19522C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19522C4,    ABISELECT(40,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19522C3,    ABISELECT(24,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19522C5[];
extern void _ZN8S19522C62v7Ev();
extern void _ZN8S19522C62v8Ev();
extern void _ZN8S19522C62v9Ev();
extern void _ZN8S19522C63v10Ev();
extern void _ZN8S19522C63v11Ev();
extern void _ZN8S19522C53v12Ev();
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY vtc_S19522C5[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C5[0]),
  (VTBL_ENTRY)&_ZN8S19522C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19522C53v12Ev,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19522C5[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19522C5[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S19522C5[];
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C3__8S19522C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
};
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C4__8S19522C3__8S19522C5[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
static  VTT_ENTRY vtt_S19522C5[] = {
  {&(_ZTV8S19522C5[3]),  3,20},
  {&(_tg__ZTV8S19522C3__8S19522C5[3]),  3,5},
  {&(_tg__ZTV8S19522C4__8S19522C3__8S19522C5[4]),  4,6},
  {&(_ZTV8S19522C5[12]),  12,20},
  {&(_ZTV8S19522C5[18]),  18,20},
};
extern VTBL_ENTRY _ZTI8S19522C5[];
extern  VTBL_ENTRY _ZTV8S19522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C5[];
Class_Descriptor cd_S19522C5 = {  "S19522C5", // class name
  bases_S19522C5, 3,
  &(vtc_S19522C5[0]), // expected_vtbl_contents
  &(vtt_S19522C5[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19522C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19522C5),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19522C5),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19522C2  : S19522C3 , virtual S19522C5 {
  ::S10180C67 s19522c2f0;
  virtual void  v13(); // _ZN8S19522C23v13Ev
  virtual void  v14(); // _ZN8S19522C23v14Ev
  virtual void  v15(); // _ZN8S19522C23v15Ev
  virtual void  v16(); // _ZN8S19522C23v16Ev
  virtual void  v17(); // _ZN8S19522C23v17Ev
  virtual void  v18(); // _ZN8S19522C23v18Ev
  virtual void  v19(); // _ZN8S19522C23v19Ev
  virtual void  v20(); // _ZN8S19522C23v20Ev
  ~S19522C2(); // tgen
  S19522C2(); // tgen
};
//SIG(-1 S19522C2) C1{ BC2{ VBC3{ v9 v10 Fc} v11 v12 Fp} VBC4{ BC5{ v13 v14 v15 v16 v17 Fp[2]} BC2 v18} v1 v2 v3 v4 v5 v6 v7 v8 FC6{}}


void  S19522C2 ::v13(){vfunc_called(this, "_ZN8S19522C23v13Ev");}
void  S19522C2 ::v14(){vfunc_called(this, "_ZN8S19522C23v14Ev");}
void  S19522C2 ::v15(){vfunc_called(this, "_ZN8S19522C23v15Ev");}
void  S19522C2 ::v16(){vfunc_called(this, "_ZN8S19522C23v16Ev");}
void  S19522C2 ::v17(){vfunc_called(this, "_ZN8S19522C23v17Ev");}
void  S19522C2 ::v18(){vfunc_called(this, "_ZN8S19522C23v18Ev");}
void  S19522C2 ::v19(){vfunc_called(this, "_ZN8S19522C23v19Ev");}
void  S19522C2 ::v20(){vfunc_called(this, "_ZN8S19522C23v20Ev");}
S19522C2 ::~S19522C2(){ note_dtor("S19522C2", this);} // tgen
S19522C2 ::S19522C2(){ note_ctor("S19522C2", this);} // tgen

static void Test_S19522C2()
{
  extern Class_Descriptor cd_S19522C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S19522C2, buf);
    S19522C2 *dp, &lv = *(dp=new (buf) S19522C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S19522C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19522C2)");
    /*is_ambiguous_... S19522C2::S19522C3 */ AMB_check_base_class_offset(lv, (S19522C4*)(S19522C3*), ABISELECT(24,12), "S19522C2");
    check_base_class_offset(lv, (S19522C4*)(S19522C3*)(S19522C5*), ABISELECT(24,12), "S19522C2");
    /*is_ambiguous_... S19522C2::S19522C3 */ AMB_check_base_class_offset(lv, (S19522C3*), 0, "S19522C2");
    check_base_class_offset(lv, (S19522C6*)(S19522C5*), ABISELECT(40,20), "S19522C2");
    check_base_class_offset(lv, (S19522C3*)(S19522C5*), ABISELECT(64,32), "S19522C2");
    check_base_class_offset(lv, (S19522C5*), ABISELECT(40,20), "S19522C2");
    check_field_offset(lv, s19522c2f0, ABISELECT(16,8), "S19522C2.s19522c2f0");
    test_class_info(&lv, &cd_S19522C2);
    dp->~S19522C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19522C2(Test_S19522C2, "S19522C2", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S19522C2C1Ev();
extern void _ZN8S19522C2D1Ev();
Name_Map name_map_S19522C2[] = {
  NSPAIR(_ZN8S19522C2C1Ev),
  NSPAIR(_ZN8S19522C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19522C4;
extern VTBL_ENTRY _ZTI8S19522C4[];
extern  VTBL_ENTRY _ZTV8S19522C4[];
extern Class_Descriptor cd_S19522C3;
extern VTBL_ENTRY _ZTI8S19522C3[];
extern  VTBL_ENTRY _ZTV8S19522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C3[];
extern Class_Descriptor cd_S19522C6;
extern VTBL_ENTRY _ZTI8S19522C6[];
extern  VTBL_ENTRY _ZTV8S19522C6[];
extern Class_Descriptor cd_S19522C3;
extern VTBL_ENTRY _ZTI8S19522C3[];
extern  VTBL_ENTRY _ZTV8S19522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C3[];
extern Class_Descriptor cd_S19522C5;
extern VTBL_ENTRY _ZTI8S19522C5[];
extern  VTBL_ENTRY _ZTV8S19522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C5[];
static Base_Class bases_S19522C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19522C4,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19522C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19522C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19522C3,    ABISELECT(64,32), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19522C5,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19522C2[];
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
extern void _ZN8S19522C23v13Ev();
extern void _ZN8S19522C23v14Ev();
extern void _ZN8S19522C23v15Ev();
extern void _ZN8S19522C23v16Ev();
extern void _ZN8S19522C23v17Ev();
extern void _ZN8S19522C23v18Ev();
extern void _ZN8S19522C23v19Ev();
extern void _ZN8S19522C23v20Ev();
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
extern void _ZN8S19522C62v7Ev();
extern void _ZN8S19522C62v8Ev();
extern void _ZN8S19522C62v9Ev();
extern void _ZN8S19522C63v10Ev();
extern void _ZN8S19522C63v11Ev();
extern void _ZN8S19522C53v12Ev();
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
static  VTBL_ENTRY vtc_S19522C2[] = {
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C2[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v20Ev,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19522C2[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19522C2[0]),
  (VTBL_ENTRY)&_ZN8S19522C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19522C53v12Ev,
  ABISELECT(-40,-20),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19522C2[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
};
extern VTBL_ENTRY _ZTV8S19522C2[];
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C3__8S19522C2[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
};
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C4__8S19522C3__8S19522C2[] = {
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
extern void _ZN8S19522C62v7Ev();
extern void _ZN8S19522C62v8Ev();
extern void _ZN8S19522C62v9Ev();
extern void _ZN8S19522C63v10Ev();
extern void _ZN8S19522C63v11Ev();
extern void _ZN8S19522C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C5__8S19522C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C5[0]),
  (VTBL_ENTRY)&_ZN8S19522C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19522C53v12Ev,
};
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C38S19522C5__A1__8S19522C2[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
};
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C4__8S19522C38S19522C5__A1__8S19522C2[] = {
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C3__8S19522C5__8S19522C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19522C5[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
};
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C4__8S19522C5__8S19522C2[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19522C5[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
static  VTT_ENTRY vtt_S19522C2[] = {
  {&(_ZTV8S19522C2[4]),  4,42},
  {&(_tg__ZTV8S19522C3__8S19522C2[3]),  3,5},
  {&(_tg__ZTV8S19522C4__8S19522C3__8S19522C2[4]),  4,6},
  {&(_ZTV8S19522C2[18]),  18,42},
  {&(_ZTV8S19522C2[31]),  31,42},
  {&(_ZTV8S19522C2[40]),  40,42},
  {&(_tg__ZTV8S19522C5__8S19522C2[3]),  3,9},
  {&(_tg__ZTV8S19522C38S19522C5__A1__8S19522C2[3]),  3,5},
  {&(_tg__ZTV8S19522C4__8S19522C38S19522C5__A1__8S19522C2[4]),  4,6},
  {&(_tg__ZTV8S19522C3__8S19522C5__8S19522C2[3]),  3,5},
  {&(_tg__ZTV8S19522C4__8S19522C5__8S19522C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19522C2[];
extern  VTBL_ENTRY _ZTV8S19522C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C2[];
Class_Descriptor cd_S19522C2 = {  "S19522C2", // class name
  bases_S19522C2, 5,
  &(vtc_S19522C2[0]), // expected_vtbl_contents
  &(vtt_S19522C2[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S19522C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19522C2),42, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19522C2),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19522C9  {
  __tsi64 s19522c9f0;
  virtual void  v21(); // _ZN8S19522C93v21Ev
  virtual void  v22(); // _ZN8S19522C93v22Ev
  ~S19522C9(); // tgen
  S19522C9(); // tgen
};
//SIG(-1 S19522C9) C1{ v1 v2 FL}


void  S19522C9 ::v21(){vfunc_called(this, "_ZN8S19522C93v21Ev");}
void  S19522C9 ::v22(){vfunc_called(this, "_ZN8S19522C93v22Ev");}
S19522C9 ::~S19522C9(){ note_dtor("S19522C9", this);} // tgen
S19522C9 ::S19522C9(){ note_ctor("S19522C9", this);} // tgen

static void Test_S19522C9()
{
  extern Class_Descriptor cd_S19522C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19522C9, buf);
    S19522C9 *dp, &lv = *(dp=new (buf) S19522C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19522C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19522C9)");
    check_field_offset(lv, s19522c9f0, ABISELECT(8,4), "S19522C9.s19522c9f0");
    test_class_info(&lv, &cd_S19522C9);
    dp->~S19522C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19522C9(Test_S19522C9, "S19522C9", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19522C9C1Ev();
extern void _ZN8S19522C9D1Ev();
Name_Map name_map_S19522C9[] = {
  NSPAIR(_ZN8S19522C9C1Ev),
  NSPAIR(_ZN8S19522C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19522C9[];
extern void _ZN8S19522C93v21Ev();
extern void _ZN8S19522C93v22Ev();
static  VTBL_ENTRY vtc_S19522C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C9[0]),
  (VTBL_ENTRY)&_ZN8S19522C93v21Ev,
  (VTBL_ENTRY)&_ZN8S19522C93v22Ev,
};
extern VTBL_ENTRY _ZTI8S19522C9[];
extern  VTBL_ENTRY _ZTV8S19522C9[];
Class_Descriptor cd_S19522C9 = {  "S19522C9", // class name
  0,0,//no base classes
  &(vtc_S19522C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19522C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19522C9),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  S19522C10  {
  ::S19522C6 s19522c10f0;
  virtual  ~S19522C10(); // _ZN9S19522C10D1Ev
  virtual void  v23(); // _ZN9S19522C103v23Ev
  virtual void  v24(); // _ZN9S19522C103v24Ev
  virtual void  v25(); // _ZN9S19522C103v25Ev
  virtual void  v26(); // _ZN9S19522C103v26Ev
  virtual void  v27(); // _ZN9S19522C103v27Ev
  S19522C10(); // tgen
};
//SIG(-1 S19522C10) C1{ vd v1 v2 v3 v4 v5 FC2{ v6 v7 v8 v9 v10 Fp[2]}}


 S19522C10 ::~S19522C10(){ note_dtor("S19522C10", this);}
void  S19522C10 ::v23(){vfunc_called(this, "_ZN9S19522C103v23Ev");}
void  S19522C10 ::v24(){vfunc_called(this, "_ZN9S19522C103v24Ev");}
void  S19522C10 ::v25(){vfunc_called(this, "_ZN9S19522C103v25Ev");}
void  S19522C10 ::v26(){vfunc_called(this, "_ZN9S19522C103v26Ev");}
void  S19522C10 ::v27(){vfunc_called(this, "_ZN9S19522C103v27Ev");}
S19522C10 ::S19522C10(){ note_ctor("S19522C10", this);} // tgen

static void Test_S19522C10()
{
  extern Class_Descriptor cd_S19522C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19522C10, buf);
    S19522C10 *dp, &lv = *(dp=new (buf) S19522C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19522C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19522C10)");
    check_field_offset(lv, s19522c10f0, ABISELECT(8,4), "S19522C10.s19522c10f0");
    test_class_info(&lv, &cd_S19522C10);
    dp->~S19522C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19522C10(Test_S19522C10, "S19522C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19522C10C1Ev();
extern void _ZN9S19522C10D1Ev();
Name_Map name_map_S19522C10[] = {
  NSPAIR(_ZN9S19522C10C1Ev),
  NSPAIR(_ZN9S19522C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19522C10[];
extern void _ZN9S19522C10D1Ev();
extern void _ZN9S19522C10D0Ev();
extern void _ZN9S19522C103v23Ev();
extern void _ZN9S19522C103v24Ev();
extern void _ZN9S19522C103v25Ev();
extern void _ZN9S19522C103v26Ev();
extern void _ZN9S19522C103v27Ev();
static  VTBL_ENTRY vtc_S19522C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19522C10[0]),
  (VTBL_ENTRY)&_ZN9S19522C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19522C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v23Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v24Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v25Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v26Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v27Ev,
};
extern VTBL_ENTRY _ZTI9S19522C10[];
extern  VTBL_ENTRY _ZTV9S19522C10[];
Class_Descriptor cd_S19522C10 = {  "S19522C10", // class name
  0,0,//no base classes
  &(vtc_S19522C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19522C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19522C10),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  S19522C8  : S19522C9 , virtual S19522C10 {
  virtual  ~S19522C8(); // _ZN8S19522C8D2Ev
  S19522C8(); // tgen
};
//SIG(-1 S19522C8) C1{ BC2{ v1 v2 FL} VBC3{ vd v3 v4 v5 v6 v7 FC4{ v8 v9 v10 v11 v12 Fp[2]}} vd}


 S19522C8 ::~S19522C8(){ note_dtor("S19522C8", this);}
S19522C8 ::S19522C8(){ note_ctor("S19522C8", this);} // tgen

static void Test_S19522C8()
{
  extern Class_Descriptor cd_S19522C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S19522C8, buf);
    S19522C8 *dp, &lv = *(dp=new (buf) S19522C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19522C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19522C8)");
    check_base_class_offset(lv, (S19522C9*), 0, "S19522C8");
    check_base_class_offset(lv, (S19522C10*), ABISELECT(16,12), "S19522C8");
    test_class_info(&lv, &cd_S19522C8);
    dp->~S19522C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19522C8(Test_S19522C8, "S19522C8", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19522C8C1Ev();
extern void _ZN8S19522C8D2Ev();
Name_Map name_map_S19522C8[] = {
  NSPAIR(_ZN8S19522C8C1Ev),
  NSPAIR(_ZN8S19522C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19522C9;
extern VTBL_ENTRY _ZTI8S19522C9[];
extern  VTBL_ENTRY _ZTV8S19522C9[];
extern Class_Descriptor cd_S19522C10;
extern VTBL_ENTRY _ZTI9S19522C10[];
extern  VTBL_ENTRY _ZTV9S19522C10[];
static Base_Class bases_S19522C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19522C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19522C10,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19522C8[];
extern void _ZN8S19522C93v21Ev();
extern void _ZN8S19522C93v22Ev();
extern void _ZN8S19522C8D1Ev();
extern void _ZN8S19522C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19522C8D1Ev,_ZTv0_n12_N8S19522C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19522C8D1Ev,_ZThn12_N8S19522C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19522C8D0Ev,_ZTv0_n12_N8S19522C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19522C8D0Ev,_ZThn12_N8S19522C8D0Ev)() __attribute__((weak));
extern void _ZN9S19522C103v23Ev();
extern void _ZN9S19522C103v24Ev();
extern void _ZN9S19522C103v25Ev();
extern void _ZN9S19522C103v26Ev();
extern void _ZN9S19522C103v27Ev();
static  VTBL_ENTRY vtc_S19522C8[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C8[0]),
  (VTBL_ENTRY)&_ZN8S19522C93v21Ev,
  (VTBL_ENTRY)&_ZN8S19522C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19522C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19522C8D0Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19522C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19522C8D1Ev,_ZTv0_n12_N8S19522C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19522C8D0Ev,_ZTv0_n12_N8S19522C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19522C103v23Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v24Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v25Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v26Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v27Ev,
};
extern VTBL_ENTRY _ZTV8S19522C8[];
static  VTT_ENTRY vtt_S19522C8[] = {
  {&(_ZTV8S19522C8[3]),  3,22},
  {&(_ZTV8S19522C8[15]),  15,22},
};
extern VTBL_ENTRY _ZTI8S19522C8[];
extern  VTBL_ENTRY _ZTV8S19522C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C8[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19522C8D0Ev,_ZTv0_n12_N8S19522C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19522C8D0Ev,_ZThn12_N8S19522C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19522C8D1Ev,_ZTv0_n12_N8S19522C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19522C8D1Ev,_ZThn12_N8S19522C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19522C8 = {  "S19522C8", // class name
  bases_S19522C8, 2,
  &(vtc_S19522C8[0]), // expected_vtbl_contents
  &(vtt_S19522C8[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19522C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19522C8),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19522C8),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19522C1  : virtual S19522C2 , S19522C8 {
  virtual  ~S19522C1(); // _ZN8S19522C1D2Ev
  virtual void  v1(); // _ZN8S19522C12v1Ev
  virtual void  v2(); // _ZN8S19522C12v2Ev
  S19522C1(); // tgen
};
//SIG(1 S19522C1) C1{ VBC2{ BC3{ VBC4{ v3 v4 Fc} v5 v6 Fp} VBC5{ BC6{ v7 v8 v9 v10 v11 Fp[2]} BC3 v12} v13 v14 v15 v16 v17 v18 v19 v20 FC7{}} BC8{ BC9{ v21 v22 FL} VBC10{ vd v23 v24 v25 v26 v27 FC6} vd} vd v1 v2}


 S19522C1 ::~S19522C1(){ note_dtor("S19522C1", this);}
void  S19522C1 ::v1(){vfunc_called(this, "_ZN8S19522C12v1Ev");}
void  S19522C1 ::v2(){vfunc_called(this, "_ZN8S19522C12v2Ev");}
S19522C1 ::S19522C1(){ note_ctor("S19522C1", this);} // tgen

static void Test_S19522C1()
{
  extern Class_Descriptor cd_S19522C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,18)];
    init_test(&cd_S19522C1, buf);
    S19522C1 *dp, &lv = *(dp=new (buf) S19522C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S19522C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19522C1)");
    /*is_ambiguous_... S19522C2::S19522C3 */ AMB_check_base_class_offset(lv, (S19522C4*)(S19522C3*)(S19522C2*), ABISELECT(40,24), "S19522C1");
    check_base_class_offset(lv, (S19522C4*)(S19522C3*)(S19522C5*), ABISELECT(40,24), "S19522C1");
    /*is_ambiguous_... S19522C2::S19522C3 */ AMB_check_base_class_offset(lv, (S19522C3*)(S19522C2*), ABISELECT(16,12), "S19522C1");
    check_base_class_offset(lv, (S19522C6*)(S19522C5*), ABISELECT(56,32), "S19522C1");
    check_base_class_offset(lv, (S19522C3*)(S19522C5*), ABISELECT(80,44), "S19522C1");
    check_base_class_offset(lv, (S19522C5*)(S19522C2*), ABISELECT(56,32), "S19522C1");
    check_base_class_offset(lv, (S19522C2*), ABISELECT(16,12), "S19522C1");
    check_base_class_offset(lv, (S19522C9*)(S19522C8*), 0, "S19522C1");
    check_base_class_offset(lv, (S19522C10*)(S19522C8*), ABISELECT(96,52), "S19522C1");
    check_base_class_offset(lv, (S19522C8*), 0, "S19522C1");
    test_class_info(&lv, &cd_S19522C1);
    dp->~S19522C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19522C1(Test_S19522C1, "S19522C1", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S19522C1C1Ev();
extern void _ZN8S19522C1D2Ev();
Name_Map name_map_S19522C1[] = {
  NSPAIR(_ZN8S19522C1C1Ev),
  NSPAIR(_ZN8S19522C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19522C4;
extern VTBL_ENTRY _ZTI8S19522C4[];
extern  VTBL_ENTRY _ZTV8S19522C4[];
extern Class_Descriptor cd_S19522C3;
extern VTBL_ENTRY _ZTI8S19522C3[];
extern  VTBL_ENTRY _ZTV8S19522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C3[];
extern Class_Descriptor cd_S19522C6;
extern VTBL_ENTRY _ZTI8S19522C6[];
extern  VTBL_ENTRY _ZTV8S19522C6[];
extern Class_Descriptor cd_S19522C3;
extern VTBL_ENTRY _ZTI8S19522C3[];
extern  VTBL_ENTRY _ZTV8S19522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C3[];
extern Class_Descriptor cd_S19522C5;
extern VTBL_ENTRY _ZTI8S19522C5[];
extern  VTBL_ENTRY _ZTV8S19522C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C5[];
extern Class_Descriptor cd_S19522C2;
extern VTBL_ENTRY _ZTI8S19522C2[];
extern  VTBL_ENTRY _ZTV8S19522C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C2[];
extern Class_Descriptor cd_S19522C9;
extern VTBL_ENTRY _ZTI8S19522C9[];
extern  VTBL_ENTRY _ZTV8S19522C9[];
extern Class_Descriptor cd_S19522C10;
extern VTBL_ENTRY _ZTI9S19522C10[];
extern  VTBL_ENTRY _ZTV9S19522C10[];
extern Class_Descriptor cd_S19522C8;
extern VTBL_ENTRY _ZTI8S19522C8[];
extern  VTBL_ENTRY _ZTV8S19522C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C8[];
static Base_Class bases_S19522C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19522C4,    ABISELECT(40,24), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19522C3,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19522C6,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19522C3,    ABISELECT(80,44), //bcp->offset
    59, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19522C5,    ABISELECT(56,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19522C2,    ABISELECT(16,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19522C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19522C10,    ABISELECT(96,52), //bcp->offset
    64, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19522C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19522C1[];
extern void _ZN8S19522C93v21Ev();
extern void _ZN8S19522C93v22Ev();
extern void _ZN8S19522C1D1Ev();
extern void _ZN8S19522C1D0Ev();
extern void _ZN8S19522C12v1Ev();
extern void _ZN8S19522C12v2Ev();
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
extern void _ZN8S19522C23v13Ev();
extern void _ZN8S19522C23v14Ev();
extern void _ZN8S19522C23v15Ev();
extern void _ZN8S19522C23v16Ev();
extern void _ZN8S19522C23v17Ev();
extern void _ZN8S19522C23v18Ev();
extern void _ZN8S19522C23v19Ev();
extern void _ZN8S19522C23v20Ev();
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
extern void _ZN8S19522C62v7Ev();
extern void _ZN8S19522C62v8Ev();
extern void _ZN8S19522C62v9Ev();
extern void _ZN8S19522C63v10Ev();
extern void _ZN8S19522C63v11Ev();
extern void _ZN8S19522C53v12Ev();
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S19522C1D1Ev,_ZTv0_n12_N8S19522C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19522C1D1Ev,_ZThn52_N8S19522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19522C1D0Ev,_ZTv0_n12_N8S19522C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19522C1D0Ev,_ZThn52_N8S19522C1D0Ev)() __attribute__((weak));
extern void _ZN9S19522C103v23Ev();
extern void _ZN9S19522C103v24Ev();
extern void _ZN9S19522C103v25Ev();
extern void _ZN9S19522C103v26Ev();
extern void _ZN9S19522C103v27Ev();
static  VTBL_ENTRY vtc_S19522C1[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(16,12),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C1[0]),
  (VTBL_ENTRY)&_ZN8S19522C93v21Ev,
  (VTBL_ENTRY)&_ZN8S19522C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19522C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19522C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19522C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19522C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19522C1[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v20Ev,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19522C1[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19522C1[0]),
  (VTBL_ENTRY)&_ZN8S19522C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19522C53v12Ev,
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19522C1[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19522C1D1Ev,_ZTv0_n12_N8S19522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19522C1D0Ev,_ZTv0_n12_N8S19522C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19522C103v23Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v24Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v25Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v26Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v27Ev,
};
extern VTBL_ENTRY _ZTV8S19522C1[];
extern void _ZN8S19522C93v21Ev();
extern void _ZN8S19522C93v22Ev();
extern void _ZN8S19522C8D1Ev();
extern void _ZN8S19522C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C8__8S19522C1[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C8[0]),
  (VTBL_ENTRY)&_ZN8S19522C93v21Ev,
  (VTBL_ENTRY)&_ZN8S19522C93v22Ev,
  (VTBL_ENTRY)&_ZN8S19522C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19522C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19522C8D1Ev,_ZTv0_n12_N8S19522C8D1Ev)();
extern void ABISELECT(_ZThn96_N8S19522C8D1Ev,_ZThn52_N8S19522C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19522C8D0Ev,_ZTv0_n12_N8S19522C8D0Ev)();
extern void ABISELECT(_ZThn96_N8S19522C8D0Ev,_ZThn52_N8S19522C8D0Ev)() __attribute__((weak));
extern void _ZN9S19522C103v23Ev();
extern void _ZN9S19522C103v24Ev();
extern void _ZN9S19522C103v25Ev();
extern void _ZN9S19522C103v26Ev();
extern void _ZN9S19522C103v27Ev();
static  VTBL_ENTRY _tg__ZTV9S19522C10__8S19522C8__8S19522C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19522C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19522C8D1Ev,_ZTv0_n12_N8S19522C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19522C8D0Ev,_ZTv0_n12_N8S19522C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19522C103v23Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v24Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v25Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v26Ev,
  (VTBL_ENTRY)&_ZN9S19522C103v27Ev,
};
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
extern void _ZN8S19522C23v13Ev();
extern void _ZN8S19522C23v14Ev();
extern void _ZN8S19522C23v15Ev();
extern void _ZN8S19522C23v16Ev();
extern void _ZN8S19522C23v17Ev();
extern void _ZN8S19522C23v18Ev();
extern void _ZN8S19522C23v19Ev();
extern void _ZN8S19522C23v20Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C2__8S19522C1[] = {
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C2[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19522C23v20Ev,
};
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C38S19522C2__8S19522C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
};
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C4__8S19522C38S19522C2__8S19522C1[] = {
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C4__8S19522C2__8S19522C1[] = {
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19522C2[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
extern void _ZN8S19522C62v7Ev();
extern void _ZN8S19522C62v8Ev();
extern void _ZN8S19522C62v9Ev();
extern void _ZN8S19522C63v10Ev();
extern void _ZN8S19522C63v11Ev();
extern void _ZN8S19522C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C5__8S19522C2__8S19522C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19522C2[0]),
  (VTBL_ENTRY)&_ZN8S19522C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19522C53v12Ev,
};
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C38S19522C5__A1__8S19522C2__8S19522C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19522C2[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
};
extern void _ZN8S19522C62v7Ev();
extern void _ZN8S19522C62v8Ev();
extern void _ZN8S19522C62v9Ev();
extern void _ZN8S19522C63v10Ev();
extern void _ZN8S19522C63v11Ev();
extern void _ZN8S19522C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C5__8S19522C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C5[0]),
  (VTBL_ENTRY)&_ZN8S19522C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19522C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19522C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19522C53v12Ev,
};
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C38S19522C5__A1__8S19522C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
};
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C4__8S19522C38S19522C5__A1__8S19522C1[] = {
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19522C3[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
extern void _ZN8S19522C32v5Ev();
extern void _ZN8S19522C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C3__8S19522C5__8S19522C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19522C5[0]),
  (VTBL_ENTRY)&_ZN8S19522C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19522C32v6Ev,
};
extern void _ZN8S19522C42v3Ev();
extern void _ZN8S19522C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19522C4__8S19522C5__8S19522C1[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19522C5[0]),
  (VTBL_ENTRY)&_ZN8S19522C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19522C42v4Ev,
};
static  VTT_ENTRY vtt_S19522C1[] = {
  {&(_ZTV8S19522C1[6]),  6,79},
  {&(_tg__ZTV8S19522C8__8S19522C1[3]),  3,7},
  {&(_tg__ZTV9S19522C10__8S19522C8__8S19522C1[8]),  8,15},
  {&(_ZTV8S19522C1[26]),  26,79},
  {&(_ZTV8S19522C1[40]),  40,79},
  {&(_ZTV8S19522C1[53]),  53,79},
  {&(_ZTV8S19522C1[62]),  62,79},
  {&(_ZTV8S19522C1[72]),  72,79},
  {&(_tg__ZTV8S19522C2__8S19522C1[4]),  4,14},
  {&(_tg__ZTV8S19522C38S19522C2__8S19522C1[3]),  3,5},
  {&(_tg__ZTV8S19522C4__8S19522C38S19522C2__8S19522C1[4]),  4,6},
  {&(_tg__ZTV8S19522C4__8S19522C2__8S19522C1[4]),  4,6},
  {&(_tg__ZTV8S19522C5__8S19522C2__8S19522C1[11]),  11,17},
  {&(_tg__ZTV8S19522C38S19522C5__A1__8S19522C2__8S19522C1[3]),  3,5},
  {&(_tg__ZTV8S19522C5__8S19522C1[3]),  3,9},
  {&(_tg__ZTV8S19522C38S19522C5__A1__8S19522C1[3]),  3,5},
  {&(_tg__ZTV8S19522C4__8S19522C38S19522C5__A1__8S19522C1[4]),  4,6},
  {&(_tg__ZTV8S19522C3__8S19522C5__8S19522C1[3]),  3,5},
  {&(_tg__ZTV8S19522C4__8S19522C5__8S19522C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19522C1[];
extern  VTBL_ENTRY _ZTV8S19522C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19522C1[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19522C8D0Ev,_ZTv0_n12_N8S19522C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19522C8D0Ev,_ZThn52_N8S19522C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19522C8D1Ev,_ZTv0_n12_N8S19522C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19522C8D1Ev,_ZThn52_N8S19522C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19522C1D0Ev,_ZTv0_n12_N8S19522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19522C1D0Ev,_ZThn52_N8S19522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19522C1D1Ev,_ZTv0_n12_N8S19522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19522C1D1Ev,_ZThn52_N8S19522C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19522C1 = {  "S19522C1", // class name
  bases_S19522C1, 9,
  &(vtc_S19522C1[0]), // expected_vtbl_contents
  &(vtt_S19522C1[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S19522C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19522C1),79, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19522C1),19, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6029C3_nt  {
  void *s6029c3f0[2];
  void  mf6029c3(); // _ZN10S6029C3_nt8mf6029c3Ev
};
//SIG(-1 S6029C3_nt) C1{ m Fp[2]}


void  S6029C3_nt ::mf6029c3(){}

//skip512 S6029C3_nt

#else // __cplusplus

Class_Descriptor cd_S6029C3_nt = {  "S6029C3_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  S6029C4_nt  {
  char s6029c4f0;
  void  mf6029c4(); // _ZN10S6029C4_nt8mf6029c4Ev
};
//SIG(-1 S6029C4_nt) C1{ m Fc}


void  S6029C4_nt ::mf6029c4(){}

//skip512 S6029C4_nt

#else // __cplusplus

Class_Descriptor cd_S6029C4_nt = {  "S6029C4_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  S6029C1  : S10180C150 , S6029C3_nt , S6029C4_nt {
  ::S10180C13 s6029c1f0;
  int s6029c1f1[4];
  ::S10180C161 s6029c1f2;
  int s6029c1f3;
  ::S10180C132 s6029c1f4;
  int s6029c1f5[2];
  ::S10180C63 s6029c1f6;
  ::S10180C171 s6029c1f7;
  ::S10180C169 s6029c1f8;
};
//SIG(1 S6029C1) C1{ BC2{ m Fp[2]} BC3{ m Fp[2]} BC4{ m Fc} FC5{ m Fp Fi FC6{ m}} Fi[4] FC7{ m Fp Fi[2] FC8{ m}} Fi FC9{ m Fp Fi[2] FC10{ m}} Fi[2] FC11{ m Fi} FC12{ m FC7 Fi} FC13{ m Fi[2]}}



static void Test_S6029C1()
{
  extern Class_Descriptor cd_S6029C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S6029C1, buf);
    S6029C1 &lv = *(new (buf) S6029C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S6029C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6029C1)");
    check_base_class_offset(lv, (S10180C150*), 0, "S6029C1");
    check_base_class_offset(lv, (S6029C3_nt*), ABISELECT(16,8), "S6029C1");
    check_base_class_offset(lv, (S6029C4_nt*), ABISELECT(32,16), "S6029C1");
    check_field_offset(lv, s6029c1f0, ABISELECT(40,20), "S6029C1.s6029c1f0");
    check_field_offset(lv, s6029c1f1, ABISELECT(56,32), "S6029C1.s6029c1f1");
    check_field_offset(lv, s6029c1f2, ABISELECT(72,48), "S6029C1.s6029c1f2");
    check_field_offset(lv, s6029c1f3, ABISELECT(96,64), "S6029C1.s6029c1f3");
    check_field_offset(lv, s6029c1f4, ABISELECT(104,68), "S6029C1.s6029c1f4");
    check_field_offset(lv, s6029c1f5, ABISELECT(128,84), "S6029C1.s6029c1f5");
    check_field_offset(lv, s6029c1f6, ABISELECT(136,92), "S6029C1.s6029c1f6");
    check_field_offset(lv, s6029c1f7, ABISELECT(144,96), "S6029C1.s6029c1f7");
    check_field_offset(lv, s6029c1f8, ABISELECT(176,116), "S6029C1.s6029c1f8");
    test_class_info(&lv, &cd_S6029C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6029C1(Test_S6029C1, "S6029C1", ABISELECT(184,124));

#else // __cplusplus

extern Class_Descriptor cd_S10180C150;
extern Class_Descriptor cd_S6029C3_nt;
extern Class_Descriptor cd_S6029C4_nt;
static Base_Class bases_S6029C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C150,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6029C3_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},
  {&cd_S6029C4_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6029C1 = {  "S6029C1", // class name
  bases_S6029C1, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(184,124), // 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  S7073C2_nt  {
  virtual  ~S7073C2_nt(); // _ZN10S7073C2_ntD1Ev
  virtual void  v6(); // _ZN10S7073C2_nt2v6Ev
  virtual void  v7(); // _ZN10S7073C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7073C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7073C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7073C2_nt3v10Ev
  virtual void  v11(); // _ZN10S7073C2_nt3v11Ev
  S7073C2_nt(); // tgen
};
//SIG(-1 S7073C2_nt) C1{ vd v1 v2 v3 v4 v5 v6}


 S7073C2_nt ::~S7073C2_nt(){ note_dtor("S7073C2_nt", this);}
void  S7073C2_nt ::v6(){vfunc_called(this, "_ZN10S7073C2_nt2v6Ev");}
void  S7073C2_nt ::v7(){vfunc_called(this, "_ZN10S7073C2_nt2v7Ev");}
void  S7073C2_nt ::v8(){vfunc_called(this, "_ZN10S7073C2_nt2v8Ev");}
void  S7073C2_nt ::v9(){vfunc_called(this, "_ZN10S7073C2_nt2v9Ev");}
void  S7073C2_nt ::v10(){vfunc_called(this, "_ZN10S7073C2_nt3v10Ev");}
void  S7073C2_nt ::v11(){vfunc_called(this, "_ZN10S7073C2_nt3v11Ev");}
S7073C2_nt ::S7073C2_nt(){ note_ctor("S7073C2_nt", this);} // tgen

//skip512 S7073C2_nt

#else // __cplusplus

extern void _ZN10S7073C2_ntC1Ev();
extern void _ZN10S7073C2_ntD1Ev();
Name_Map name_map_S7073C2_nt[] = {
  NSPAIR(_ZN10S7073C2_ntC1Ev),
  NSPAIR(_ZN10S7073C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7073C2_nt[];
extern void _ZN10S7073C2_ntD1Ev();
extern void _ZN10S7073C2_ntD0Ev();
extern void _ZN10S7073C2_nt2v6Ev();
extern void _ZN10S7073C2_nt2v7Ev();
extern void _ZN10S7073C2_nt2v8Ev();
extern void _ZN10S7073C2_nt2v9Ev();
extern void _ZN10S7073C2_nt3v10Ev();
extern void _ZN10S7073C2_nt3v11Ev();
static  VTBL_ENTRY vtc_S7073C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7073C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7073C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI10S7073C2_nt[];
VTBL_ENTRY *P__ZTI10S7073C2_nt = _ZTI10S7073C2_nt; 
extern  VTBL_ENTRY _ZTV10S7073C2_nt[];
Class_Descriptor cd_S7073C2_nt = {  "S7073C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7073C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7073C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7073C2_nt),10, //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  S7073C3  {
  ::S10180C13 s7073c3f0;
  int s7073c3f1[2];
  ::S10180C13 s7073c3f2;
  void *s7073c3f3;
  ::S10180C150 s7073c3f4;
  ::S10180C150 s7073c3f5;
  void  mf7073c3(); // _ZN7S7073C38mf7073c3Ev
};
//SIG(-1 S7073C3) C1{ m FC2{ m Fp Fi FC3{ m}} Fi[2] FC2 Fp FC4{ m Fp[2]} FC4}


void  S7073C3 ::mf7073c3(){}

static void Test_S7073C3()
{
  {
    init_simple_test("S7073C3");
    S7073C3 lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S7073C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7073C3)");
    check_field_offset(lv, s7073c3f0, 0, "S7073C3.s7073c3f0");
    check_field_offset(lv, s7073c3f1, ABISELECT(16,12), "S7073C3.s7073c3f1");
    check_field_offset(lv, s7073c3f2, ABISELECT(24,20), "S7073C3.s7073c3f2");
    check_field_offset(lv, s7073c3f3, ABISELECT(40,32), "S7073C3.s7073c3f3");
    check_field_offset(lv, s7073c3f4, ABISELECT(48,36), "S7073C3.s7073c3f4");
    check_field_offset(lv, s7073c3f5, ABISELECT(64,44), "S7073C3.s7073c3f5");
  }
}
static Arrange_To_Call_Me vS7073C3(Test_S7073C3, "S7073C3", ABISELECT(80,52));

#else // __cplusplus

Class_Descriptor cd_S7073C3 = {  "S7073C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(80,52), // 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  S7073C1  : S7073C2_nt {
  void *s7073c1f0;
  ::S7073C3 s7073c1f1;
  ::S6029C3_nt s7073c1f2;
  int s7073c1f3[2];
  ::S1168C12 s7073c1f4;
  virtual  ~S7073C1(); // _ZN7S7073C1D1Ev
  virtual void  v1(); // _ZN7S7073C12v1Ev
  virtual void  v2(); // _ZN7S7073C12v2Ev
  virtual void  v3(); // _ZN7S7073C12v3Ev
  virtual void  v4(); // _ZN7S7073C12v4Ev
  virtual void  v5(); // _ZN7S7073C12v5Ev
  S7073C1(); // tgen
};
//SIG(1 S7073C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11} vd v1 v2 v3 v4 v5 Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi[2] FC4 Fp FC6{ m Fp[2]} FC6} FC7{ m Fp[2]} Fi[2] FC8{ BC9{ BC10{ m Fp Fi FC11{ m} FC12{ m}}}}}


 S7073C1 ::~S7073C1(){ note_dtor("S7073C1", this);}
void  S7073C1 ::v1(){vfunc_called(this, "_ZN7S7073C12v1Ev");}
void  S7073C1 ::v2(){vfunc_called(this, "_ZN7S7073C12v2Ev");}
void  S7073C1 ::v3(){vfunc_called(this, "_ZN7S7073C12v3Ev");}
void  S7073C1 ::v4(){vfunc_called(this, "_ZN7S7073C12v4Ev");}
void  S7073C1 ::v5(){vfunc_called(this, "_ZN7S7073C12v5Ev");}
S7073C1 ::S7073C1(){ note_ctor("S7073C1", this);} // tgen

static void Test_S7073C1()
{
  extern Class_Descriptor cd_S7073C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S7073C1, buf);
    S7073C1 *dp, &lv = *(dp=new (buf) S7073C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S7073C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7073C1)");
    check_base_class_offset(lv, (S7073C2_nt*), 0, "S7073C1");
    check_field_offset(lv, s7073c1f0, ABISELECT(8,4), "S7073C1.s7073c1f0");
    check_field_offset(lv, s7073c1f1, ABISELECT(16,8), "S7073C1.s7073c1f1");
    check_field_offset(lv, s7073c1f2, ABISELECT(96,60), "S7073C1.s7073c1f2");
    check_field_offset(lv, s7073c1f3, ABISELECT(112,68), "S7073C1.s7073c1f3");
    check_field_offset(lv, s7073c1f4, ABISELECT(120,76), "S7073C1.s7073c1f4");
    test_class_info(&lv, &cd_S7073C1);
    dp->~S7073C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7073C1(Test_S7073C1, "S7073C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S7073C1C1Ev();
extern void _ZN7S7073C1D1Ev();
Name_Map name_map_S7073C1[] = {
  NSPAIR(_ZN7S7073C1C1Ev),
  NSPAIR(_ZN7S7073C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7073C2_nt;
extern VTBL_ENTRY _ZTI10S7073C2_nt[];
extern  VTBL_ENTRY _ZTV10S7073C2_nt[];
static Base_Class bases_S7073C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7073C2_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 _ZTI7S7073C1[];
extern void _ZN7S7073C1D1Ev();
extern void _ZN7S7073C1D0Ev();
extern void _ZN10S7073C2_nt2v6Ev();
extern void _ZN10S7073C2_nt2v7Ev();
extern void _ZN10S7073C2_nt2v8Ev();
extern void _ZN10S7073C2_nt2v9Ev();
extern void _ZN10S7073C2_nt3v10Ev();
extern void _ZN10S7073C2_nt3v11Ev();
extern void _ZN7S7073C12v1Ev();
extern void _ZN7S7073C12v2Ev();
extern void _ZN7S7073C12v3Ev();
extern void _ZN7S7073C12v4Ev();
extern void _ZN7S7073C12v5Ev();
static  VTBL_ENTRY vtc_S7073C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7073C1[0]),
  (VTBL_ENTRY)&_ZN7S7073C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7073C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7073C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S7073C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7073C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7073C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7073C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7073C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7073C1[];
extern  VTBL_ENTRY _ZTV7S7073C1[];
Class_Descriptor cd_S7073C1 = {  "S7073C1", // class name
  bases_S7073C1, 1,
  &(vtc_S7073C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S7073C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7073C1),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  S19339C3  {
  virtual void  v3(); // _ZN8S19339C32v3Ev
  ~S19339C3(); // tgen
  S19339C3(); // tgen
};
//SIG(-1 S19339C3) C1{ v1}


void  S19339C3 ::v3(){vfunc_called(this, "_ZN8S19339C32v3Ev");}
S19339C3 ::~S19339C3(){ note_dtor("S19339C3", this);} // tgen
S19339C3 ::S19339C3(){ note_ctor("S19339C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19339C3C1Ev();
extern void _ZN8S19339C3D1Ev();
Name_Map name_map_S19339C3[] = {
  NSPAIR(_ZN8S19339C3C1Ev),
  NSPAIR(_ZN8S19339C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19339C3[];
extern void _ZN8S19339C32v3Ev();
static  VTBL_ENTRY vtc_S19339C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19339C3[0]),
  (VTBL_ENTRY)&_ZN8S19339C32v3Ev,
};
extern VTBL_ENTRY _ZTI8S19339C3[];
extern  VTBL_ENTRY _ZTV8S19339C3[];
Class_Descriptor cd_S19339C3 = {  "S19339C3", // class name
  0,0,//no base classes
  &(vtc_S19339C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19339C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19339C3),3, //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  S19339C2  : S19339C3 {
  void *s19339c2f0;
  virtual void  v4(); // _ZN8S19339C22v4Ev
  virtual void  v5(); // _ZN8S19339C22v5Ev
  virtual void  v6(); // _ZN8S19339C22v6Ev
  virtual void  v7(); // _ZN8S19339C22v7Ev
  virtual void  v8(); // _ZN8S19339C22v8Ev
  virtual void  v9(); // _ZN8S19339C22v9Ev
  virtual void  v10(); // _ZN8S19339C23v10Ev
  ~S19339C2(); // tgen
  S19339C2(); // tgen
};
//SIG(-1 S19339C2) C1{ BC2{ v8} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S19339C2 ::v4(){vfunc_called(this, "_ZN8S19339C22v4Ev");}
void  S19339C2 ::v5(){vfunc_called(this, "_ZN8S19339C22v5Ev");}
void  S19339C2 ::v6(){vfunc_called(this, "_ZN8S19339C22v6Ev");}
void  S19339C2 ::v7(){vfunc_called(this, "_ZN8S19339C22v7Ev");}
void  S19339C2 ::v8(){vfunc_called(this, "_ZN8S19339C22v8Ev");}
void  S19339C2 ::v9(){vfunc_called(this, "_ZN8S19339C22v9Ev");}
void  S19339C2 ::v10(){vfunc_called(this, "_ZN8S19339C23v10Ev");}
S19339C2 ::~S19339C2(){ note_dtor("S19339C2", this);} // tgen
S19339C2 ::S19339C2(){ note_ctor("S19339C2", this);} // tgen

static void Test_S19339C2()
{
  extern Class_Descriptor cd_S19339C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19339C2, buf);
    S19339C2 *dp, &lv = *(dp=new (buf) S19339C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19339C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19339C2)");
    check_base_class_offset(lv, (S19339C3*), 0, "S19339C2");
    check_field_offset(lv, s19339c2f0, ABISELECT(8,4), "S19339C2.s19339c2f0");
    test_class_info(&lv, &cd_S19339C2);
    dp->~S19339C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19339C2(Test_S19339C2, "S19339C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19339C2C1Ev();
extern void _ZN8S19339C2D1Ev();
Name_Map name_map_S19339C2[] = {
  NSPAIR(_ZN8S19339C2C1Ev),
  NSPAIR(_ZN8S19339C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19339C3;
extern VTBL_ENTRY _ZTI8S19339C3[];
extern  VTBL_ENTRY _ZTV8S19339C3[];
static Base_Class bases_S19339C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19339C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19339C2[];
extern void _ZN8S19339C32v3Ev();
extern void _ZN8S19339C22v4Ev();
extern void _ZN8S19339C22v5Ev();
extern void _ZN8S19339C22v6Ev();
extern void _ZN8S19339C22v7Ev();
extern void _ZN8S19339C22v8Ev();
extern void _ZN8S19339C22v9Ev();
extern void _ZN8S19339C23v10Ev();
static  VTBL_ENTRY vtc_S19339C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19339C2[0]),
  (VTBL_ENTRY)&_ZN8S19339C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v5Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19339C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S19339C2[];
extern  VTBL_ENTRY _ZTV8S19339C2[];
Class_Descriptor cd_S19339C2 = {  "S19339C2", // class name
  bases_S19339C2, 1,
  &(vtc_S19339C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19339C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19339C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19339C5_nt  {
  virtual  ~S19339C5_nt(); // _ZN11S19339C5_ntD1Ev
  virtual void  v11(); // _ZN11S19339C5_nt3v11Ev
  virtual void  v12(); // _ZN11S19339C5_nt3v12Ev
  virtual void  v13(); // _ZN11S19339C5_nt3v13Ev
  virtual void  v14(); // _ZN11S19339C5_nt3v14Ev
  virtual void  v15(); // _ZN11S19339C5_nt3v15Ev
  S19339C5_nt(); // tgen
};
//SIG(-1 S19339C5_nt) C1{ vd v1 v2 v3 v4 v5}


 S19339C5_nt ::~S19339C5_nt(){ note_dtor("S19339C5_nt", this);}
void  S19339C5_nt ::v11(){vfunc_called(this, "_ZN11S19339C5_nt3v11Ev");}
void  S19339C5_nt ::v12(){vfunc_called(this, "_ZN11S19339C5_nt3v12Ev");}
void  S19339C5_nt ::v13(){vfunc_called(this, "_ZN11S19339C5_nt3v13Ev");}
void  S19339C5_nt ::v14(){vfunc_called(this, "_ZN11S19339C5_nt3v14Ev");}
void  S19339C5_nt ::v15(){vfunc_called(this, "_ZN11S19339C5_nt3v15Ev");}
S19339C5_nt ::S19339C5_nt(){ note_ctor("S19339C5_nt", this);} // tgen

//skip512 S19339C5_nt

#else // __cplusplus

extern void _ZN11S19339C5_ntC1Ev();
extern void _ZN11S19339C5_ntD1Ev();
Name_Map name_map_S19339C5_nt[] = {
  NSPAIR(_ZN11S19339C5_ntC1Ev),
  NSPAIR(_ZN11S19339C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19339C5_nt[];
extern void _ZN11S19339C5_ntD1Ev();
extern void _ZN11S19339C5_ntD0Ev();
extern void _ZN11S19339C5_nt3v11Ev();
extern void _ZN11S19339C5_nt3v12Ev();
extern void _ZN11S19339C5_nt3v13Ev();
extern void _ZN11S19339C5_nt3v14Ev();
extern void _ZN11S19339C5_nt3v15Ev();
static  VTBL_ENTRY vtc_S19339C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19339C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S19339C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI11S19339C5_nt[];
VTBL_ENTRY *P__ZTI11S19339C5_nt = _ZTI11S19339C5_nt; 
extern  VTBL_ENTRY _ZTV11S19339C5_nt[];
Class_Descriptor cd_S19339C5_nt = {  "S19339C5_nt", // class name
  0,0,//no base classes
  &(vtc_S19339C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19339C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19339C5_nt),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  S19339C8  {
  virtual void  v16(); // _ZN8S19339C83v16Ev
  virtual void  v17(); // _ZN8S19339C83v17Ev
  virtual void  v18(); // _ZN8S19339C83v18Ev
  virtual void  v19(); // _ZN8S19339C83v19Ev
  ~S19339C8(); // tgen
  S19339C8(); // tgen
};
//SIG(-1 S19339C8) C1{ v1 v2 v3 v4}


void  S19339C8 ::v16(){vfunc_called(this, "_ZN8S19339C83v16Ev");}
void  S19339C8 ::v17(){vfunc_called(this, "_ZN8S19339C83v17Ev");}
void  S19339C8 ::v18(){vfunc_called(this, "_ZN8S19339C83v18Ev");}
void  S19339C8 ::v19(){vfunc_called(this, "_ZN8S19339C83v19Ev");}
S19339C8 ::~S19339C8(){ note_dtor("S19339C8", this);} // tgen
S19339C8 ::S19339C8(){ note_ctor("S19339C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19339C8C1Ev();
extern void _ZN8S19339C8D1Ev();
Name_Map name_map_S19339C8[] = {
  NSPAIR(_ZN8S19339C8C1Ev),
  NSPAIR(_ZN8S19339C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19339C8[];
extern void _ZN8S19339C83v16Ev();
extern void _ZN8S19339C83v17Ev();
extern void _ZN8S19339C83v18Ev();
extern void _ZN8S19339C83v19Ev();
static  VTBL_ENTRY vtc_S19339C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19339C8[0]),
  (VTBL_ENTRY)&_ZN8S19339C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S19339C8[];
extern  VTBL_ENTRY _ZTV8S19339C8[];
Class_Descriptor cd_S19339C8 = {  "S19339C8", // class name
  0,0,//no base classes
  &(vtc_S19339C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19339C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19339C8),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  S19339C7  : S19339C8 {
  virtual void  v20(); // _ZN8S19339C73v20Ev
  virtual void  v21(); // _ZN8S19339C73v21Ev
  ~S19339C7(); // tgen
  S19339C7(); // tgen
};
//SIG(-1 S19339C7) C1{ BC2{ v3 v4 v5 v6} v1 v2}


void  S19339C7 ::v20(){vfunc_called(this, "_ZN8S19339C73v20Ev");}
void  S19339C7 ::v21(){vfunc_called(this, "_ZN8S19339C73v21Ev");}
S19339C7 ::~S19339C7(){ note_dtor("S19339C7", this);} // tgen
S19339C7 ::S19339C7(){ note_ctor("S19339C7", this);} // tgen

static void Test_S19339C7()
{
  extern Class_Descriptor cd_S19339C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19339C7, buf);
    S19339C7 *dp, &lv = *(dp=new (buf) S19339C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19339C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19339C7)");
    check_base_class_offset(lv, (S19339C8*), 0, "S19339C7");
    test_class_info(&lv, &cd_S19339C7);
    dp->~S19339C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19339C7(Test_S19339C7, "S19339C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19339C7C1Ev();
extern void _ZN8S19339C7D1Ev();
Name_Map name_map_S19339C7[] = {
  NSPAIR(_ZN8S19339C7C1Ev),
  NSPAIR(_ZN8S19339C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19339C8;
extern VTBL_ENTRY _ZTI8S19339C8[];
extern  VTBL_ENTRY _ZTV8S19339C8[];
static Base_Class bases_S19339C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19339C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19339C7[];
extern void _ZN8S19339C83v16Ev();
extern void _ZN8S19339C83v17Ev();
extern void _ZN8S19339C83v18Ev();
extern void _ZN8S19339C83v19Ev();
extern void _ZN8S19339C73v20Ev();
extern void _ZN8S19339C73v21Ev();
static  VTBL_ENTRY vtc_S19339C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19339C7[0]),
  (VTBL_ENTRY)&_ZN8S19339C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19339C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19339C73v21Ev,
};
extern VTBL_ENTRY _ZTI8S19339C7[];
extern  VTBL_ENTRY _ZTV8S19339C7[];
Class_Descriptor cd_S19339C7 = {  "S19339C7", // class name
  bases_S19339C7, 1,
  &(vtc_S19339C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19339C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19339C7),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19339C6  : S19339C5_nt , S19339C7 {
  virtual  ~S19339C6(); // _ZN8S19339C6D1Ev
  virtual void  v22(); // _ZN8S19339C63v22Ev
  S19339C6(); // tgen
};
//SIG(-1 S19339C6) C1{ BC2{ vd v2 v3 v4 v5 v6} BC3{ BC4{ v7 v8 v9 v10} v11 v12} vd v1}


 S19339C6 ::~S19339C6(){ note_dtor("S19339C6", this);}
void  S19339C6 ::v22(){vfunc_called(this, "_ZN8S19339C63v22Ev");}
S19339C6 ::S19339C6(){ note_ctor("S19339C6", this);} // tgen

static void Test_S19339C6()
{
  extern Class_Descriptor cd_S19339C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19339C6, buf);
    S19339C6 *dp, &lv = *(dp=new (buf) S19339C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19339C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19339C6)");
    check_base_class_offset(lv, (S19339C5_nt*), 0, "S19339C6");
    check_base_class_offset(lv, (S19339C8*)(S19339C7*), ABISELECT(8,4), "S19339C6");
    check_base_class_offset(lv, (S19339C7*), ABISELECT(8,4), "S19339C6");
    test_class_info(&lv, &cd_S19339C6);
    dp->~S19339C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19339C6(Test_S19339C6, "S19339C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19339C6C1Ev();
extern void _ZN8S19339C6D1Ev();
Name_Map name_map_S19339C6[] = {
  NSPAIR(_ZN8S19339C6C1Ev),
  NSPAIR(_ZN8S19339C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19339C5_nt;
extern VTBL_ENTRY _ZTI11S19339C5_nt[];
extern  VTBL_ENTRY _ZTV11S19339C5_nt[];
extern Class_Descriptor cd_S19339C8;
extern VTBL_ENTRY _ZTI8S19339C8[];
extern  VTBL_ENTRY _ZTV8S19339C8[];
extern Class_Descriptor cd_S19339C7;
extern VTBL_ENTRY _ZTI8S19339C7[];
extern  VTBL_ENTRY _ZTV8S19339C7[];
static Base_Class bases_S19339C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19339C5_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_S19339C8,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19339C7,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI8S19339C6[];
extern void _ZN8S19339C6D1Ev();
extern void _ZN8S19339C6D0Ev();
extern void _ZN11S19339C5_nt3v11Ev();
extern void _ZN11S19339C5_nt3v12Ev();
extern void _ZN11S19339C5_nt3v13Ev();
extern void _ZN11S19339C5_nt3v14Ev();
extern void _ZN11S19339C5_nt3v15Ev();
extern void _ZN8S19339C63v22Ev();
extern void _ZN8S19339C83v16Ev();
extern void _ZN8S19339C83v17Ev();
extern void _ZN8S19339C83v18Ev();
extern void _ZN8S19339C83v19Ev();
extern void _ZN8S19339C73v20Ev();
extern void _ZN8S19339C73v21Ev();
static  VTBL_ENTRY vtc_S19339C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19339C6[0]),
  (VTBL_ENTRY)&_ZN8S19339C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19339C6D0Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S19339C63v22Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19339C6[0]),
  (VTBL_ENTRY)&_ZN8S19339C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19339C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19339C73v21Ev,
};
extern VTBL_ENTRY _ZTI8S19339C6[];
extern  VTBL_ENTRY _ZTV8S19339C6[];
Class_Descriptor cd_S19339C6 = {  "S19339C6", // class name
  bases_S19339C6, 3,
  &(vtc_S19339C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19339C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19339C6),18, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19339C4  : virtual S19339C5_nt , S19339C6 {
  __tsi64 s19339c4f0[2];
  virtual  ~S19339C4(); // _ZN8S19339C4D2Ev
  virtual void  v23(); // _ZN8S19339C43v23Ev
  virtual void  v24(); // _ZN8S19339C43v24Ev
  virtual void  v25(); // _ZN8S19339C43v25Ev
  virtual void  v26(); // _ZN8S19339C43v26Ev
  virtual void  v27(); // _ZN8S19339C43v27Ev
  S19339C4(); // tgen
};
//SIG(-1 S19339C4) C1{ VBC2{ vd v6 v7 v8 v9 v10} BC3{ BC2 BC4{ BC5{ v11 v12 v13 v14} v15 v16} vd v17} vd v1 v2 v3 v4 v5 FL[2]}


 S19339C4 ::~S19339C4(){ note_dtor("S19339C4", this);}
void  S19339C4 ::v23(){vfunc_called(this, "_ZN8S19339C43v23Ev");}
void  S19339C4 ::v24(){vfunc_called(this, "_ZN8S19339C43v24Ev");}
void  S19339C4 ::v25(){vfunc_called(this, "_ZN8S19339C43v25Ev");}
void  S19339C4 ::v26(){vfunc_called(this, "_ZN8S19339C43v26Ev");}
void  S19339C4 ::v27(){vfunc_called(this, "_ZN8S19339C43v27Ev");}
S19339C4 ::S19339C4(){ note_ctor("S19339C4", this);} // tgen

static void Test_S19339C4()
{
  extern Class_Descriptor cd_S19339C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S19339C4, buf);
    S19339C4 *dp, &lv = *(dp=new (buf) S19339C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S19339C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19339C4)");
    /*is_ambiguous_... S19339C4::S19339C5_nt */ AMB_check_base_class_offset(lv, (S19339C5_nt*), ABISELECT(32,24), "S19339C4");
    check_base_class_offset(lv, (S19339C5_nt*)(S19339C6*), 0, "S19339C4");
    check_base_class_offset(lv, (S19339C8*)(S19339C7*)(S19339C6*), ABISELECT(8,4), "S19339C4");
    check_base_class_offset(lv, (S19339C7*)(S19339C6*), ABISELECT(8,4), "S19339C4");
    check_base_class_offset(lv, (S19339C6*), 0, "S19339C4");
    check_field_offset(lv, s19339c4f0, ABISELECT(16,8), "S19339C4.s19339c4f0");
    test_class_info(&lv, &cd_S19339C4);
    dp->~S19339C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19339C4(Test_S19339C4, "S19339C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S19339C4C1Ev();
extern void _ZN8S19339C4D2Ev();
Name_Map name_map_S19339C4[] = {
  NSPAIR(_ZN8S19339C4C1Ev),
  NSPAIR(_ZN8S19339C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19339C5_nt;
extern VTBL_ENTRY _ZTI11S19339C5_nt[];
extern  VTBL_ENTRY _ZTV11S19339C5_nt[];
extern Class_Descriptor cd_S19339C5_nt;
extern VTBL_ENTRY _ZTI11S19339C5_nt[];
extern  VTBL_ENTRY _ZTV11S19339C5_nt[];
extern Class_Descriptor cd_S19339C8;
extern VTBL_ENTRY _ZTI8S19339C8[];
extern  VTBL_ENTRY _ZTV8S19339C8[];
extern Class_Descriptor cd_S19339C7;
extern VTBL_ENTRY _ZTI8S19339C7[];
extern  VTBL_ENTRY _ZTV8S19339C7[];
extern Class_Descriptor cd_S19339C6;
extern VTBL_ENTRY _ZTI8S19339C6[];
extern  VTBL_ENTRY _ZTV8S19339C6[];
static Base_Class bases_S19339C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19339C5_nt,    ABISELECT(32,24), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19339C5_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
    4, //immediately_derived
  0, 0},
  {&cd_S19339C8,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19339C7,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_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_S19339C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19339C4[];
extern void _ZN8S19339C4D1Ev();
extern void _ZN8S19339C4D0Ev();
extern void _ZN11S19339C5_nt3v11Ev();
extern void _ZN11S19339C5_nt3v12Ev();
extern void _ZN11S19339C5_nt3v13Ev();
extern void _ZN11S19339C5_nt3v14Ev();
extern void _ZN11S19339C5_nt3v15Ev();
extern void _ZN8S19339C63v22Ev();
extern void _ZN8S19339C43v23Ev();
extern void _ZN8S19339C43v24Ev();
extern void _ZN8S19339C43v25Ev();
extern void _ZN8S19339C43v26Ev();
extern void _ZN8S19339C43v27Ev();
extern void _ZN8S19339C83v16Ev();
extern void _ZN8S19339C83v17Ev();
extern void _ZN8S19339C83v18Ev();
extern void _ZN8S19339C83v19Ev();
extern void _ZN8S19339C73v20Ev();
extern void _ZN8S19339C73v21Ev();
extern void ABISELECT(_ZTv0_n24_N8S19339C4D1Ev,_ZTv0_n12_N8S19339C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19339C4D1Ev,_ZThn24_N8S19339C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19339C4D0Ev,_ZTv0_n12_N8S19339C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S19339C4D0Ev,_ZThn24_N8S19339C4D0Ev)() __attribute__((weak));
extern void _ZN11S19339C5_nt3v11Ev();
extern void _ZN11S19339C5_nt3v12Ev();
extern void _ZN11S19339C5_nt3v13Ev();
extern void _ZN11S19339C5_nt3v14Ev();
extern void _ZN11S19339C5_nt3v15Ev();
static  VTBL_ENTRY vtc_S19339C4[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19339C4[0]),
  (VTBL_ENTRY)&_ZN8S19339C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19339C4D0Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S19339C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v26Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v27Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19339C4[0]),
  (VTBL_ENTRY)&_ZN8S19339C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19339C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19339C73v21Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19339C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19339C4D1Ev,_ZTv0_n12_N8S19339C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19339C4D0Ev,_ZTv0_n12_N8S19339C4D0Ev),
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v15Ev,
};
extern VTBL_ENTRY _ZTV8S19339C4[];
static  VTT_ENTRY vtt_S19339C4[] = {
  {&(_ZTV8S19339C4[3]),  3,39},
  {&(_ZTV8S19339C4[32]),  32,39},
};
extern VTBL_ENTRY _ZTI8S19339C4[];
extern  VTBL_ENTRY _ZTV8S19339C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19339C4[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19339C4D0Ev,_ZTv0_n12_N8S19339C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19339C4D0Ev,_ZThn24_N8S19339C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19339C4D1Ev,_ZTv0_n12_N8S19339C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19339C4D1Ev,_ZThn24_N8S19339C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19339C4 = {  "S19339C4", // class name
  bases_S19339C4, 5,
  &(vtc_S19339C4[0]), // expected_vtbl_contents
  &(vtt_S19339C4[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S19339C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19339C4),39, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19339C4),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19339C1  : virtual S19339C2 , virtual S19339C4 {
  int s19339c1f0;
  virtual  ~S19339C1(); // _ZN8S19339C1D2Ev
  virtual void  v1(); // _ZN8S19339C12v1Ev
  virtual void  v2(); // _ZN8S19339C12v2Ev
  S19339C1(); // tgen
};
//SIG(1 S19339C1) C1{ VBC2{ BC3{ v3} v4 v5 v6 v7 v8 v9 v10 Fp} VBC4{ VBC5{ vd v11 v12 v13 v14 v15} BC6{ BC5 BC7{ BC8{ v16 v17 v18 v19} v20 v21} vd v22} vd v23 v24 v25 v26 v27 FL[2]} vd v1 v2 Fi}


 S19339C1 ::~S19339C1(){ note_dtor("S19339C1", this);}
void  S19339C1 ::v1(){vfunc_called(this, "_ZN8S19339C12v1Ev");}
void  S19339C1 ::v2(){vfunc_called(this, "_ZN8S19339C12v2Ev");}
S19339C1 ::S19339C1(){ note_ctor("S19339C1", this);} // tgen

static void Test_S19339C1()
{
  extern Class_Descriptor cd_S19339C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S19339C1, buf);
    S19339C1 *dp, &lv = *(dp=new (buf) S19339C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S19339C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19339C1)");
    check_base_class_offset(lv, (S19339C3*)(S19339C2*), ABISELECT(16,8), "S19339C1");
    check_base_class_offset(lv, (S19339C2*), ABISELECT(16,8), "S19339C1");
    /*is_ambiguous_... S19339C4::S19339C5_nt */ AMB_check_base_class_offset(lv, (S19339C5_nt*)(S19339C4*), 0, "S19339C1");
    check_base_class_offset(lv, (S19339C5_nt*)(S19339C6*)(S19339C4*), ABISELECT(32,16), "S19339C1");
    check_base_class_offset(lv, (S19339C8*)(S19339C7*)(S19339C6*)(S19339C4*), ABISELECT(40,20), "S19339C1");
    check_base_class_offset(lv, (S19339C7*)(S19339C6*)(S19339C4*), ABISELECT(40,20), "S19339C1");
    check_base_class_offset(lv, (S19339C6*)(S19339C4*), ABISELECT(32,16), "S19339C1");
    check_base_class_offset(lv, (S19339C4*), ABISELECT(32,16), "S19339C1");
    check_field_offset(lv, s19339c1f0, ABISELECT(8,4), "S19339C1.s19339c1f0");
    test_class_info(&lv, &cd_S19339C1);
    dp->~S19339C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19339C1(Test_S19339C1, "S19339C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S19339C1C1Ev();
extern void _ZN8S19339C1D2Ev();
Name_Map name_map_S19339C1[] = {
  NSPAIR(_ZN8S19339C1C1Ev),
  NSPAIR(_ZN8S19339C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19339C3;
extern VTBL_ENTRY _ZTI8S19339C3[];
extern  VTBL_ENTRY _ZTV8S19339C3[];
extern Class_Descriptor cd_S19339C2;
extern VTBL_ENTRY _ZTI8S19339C2[];
extern  VTBL_ENTRY _ZTV8S19339C2[];
extern Class_Descriptor cd_S19339C5_nt;
extern VTBL_ENTRY _ZTI11S19339C5_nt[];
extern  VTBL_ENTRY _ZTV11S19339C5_nt[];
extern Class_Descriptor cd_S19339C5_nt;
extern VTBL_ENTRY _ZTI11S19339C5_nt[];
extern  VTBL_ENTRY _ZTV11S19339C5_nt[];
extern Class_Descriptor cd_S19339C8;
extern VTBL_ENTRY _ZTI8S19339C8[];
extern  VTBL_ENTRY _ZTV8S19339C8[];
extern Class_Descriptor cd_S19339C7;
extern VTBL_ENTRY _ZTI8S19339C7[];
extern  VTBL_ENTRY _ZTV8S19339C7[];
extern Class_Descriptor cd_S19339C6;
extern VTBL_ENTRY _ZTI8S19339C6[];
extern  VTBL_ENTRY _ZTV8S19339C6[];
extern Class_Descriptor cd_S19339C4;
extern VTBL_ENTRY _ZTI8S19339C4[];
extern  VTBL_ENTRY _ZTV8S19339C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19339C4[];
static Base_Class bases_S19339C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19339C3,    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
  0, 0},
  {&cd_S19339C2,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19339C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19339C5_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19339C8,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19339C7,    ABISELECT(40,20), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19339C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19339C4,    ABISELECT(32,16), //bcp->offset
    38, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19339C1[];
extern void ABISELECT(_ZTv0_n24_N8S19339C1D1Ev,_ZTv0_n12_N8S19339C1D1Ev)();
extern void _ZN8S19339C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19339C1D0Ev,_ZTv0_n12_N8S19339C1D0Ev)();
extern void _ZN8S19339C1D0Ev() __attribute__((weak));
extern void _ZN11S19339C5_nt3v11Ev();
extern void _ZN11S19339C5_nt3v12Ev();
extern void _ZN11S19339C5_nt3v13Ev();
extern void _ZN11S19339C5_nt3v14Ev();
extern void _ZN11S19339C5_nt3v15Ev();
extern void _ZN8S19339C12v1Ev();
extern void _ZN8S19339C12v2Ev();
extern void _ZN8S19339C32v3Ev();
extern void _ZN8S19339C22v4Ev();
extern void _ZN8S19339C22v5Ev();
extern void _ZN8S19339C22v6Ev();
extern void _ZN8S19339C22v7Ev();
extern void _ZN8S19339C22v8Ev();
extern void _ZN8S19339C22v9Ev();
extern void _ZN8S19339C23v10Ev();
extern void ABISELECT(_ZTv0_n32_N8S19339C1D1Ev,_ZTv0_n16_N8S19339C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19339C1D1Ev,_ZThn16_N8S19339C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19339C1D0Ev,_ZTv0_n16_N8S19339C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19339C1D0Ev,_ZThn16_N8S19339C1D0Ev)() __attribute__((weak));
extern void _ZN11S19339C5_nt3v11Ev();
extern void _ZN11S19339C5_nt3v12Ev();
extern void _ZN11S19339C5_nt3v13Ev();
extern void _ZN11S19339C5_nt3v14Ev();
extern void _ZN11S19339C5_nt3v15Ev();
extern void _ZN8S19339C63v22Ev();
extern void _ZN8S19339C43v23Ev();
extern void _ZN8S19339C43v24Ev();
extern void _ZN8S19339C43v25Ev();
extern void _ZN8S19339C43v26Ev();
extern void _ZN8S19339C43v27Ev();
extern void _ZN8S19339C83v16Ev();
extern void _ZN8S19339C83v17Ev();
extern void _ZN8S19339C83v18Ev();
extern void _ZN8S19339C83v19Ev();
extern void _ZN8S19339C73v20Ev();
extern void _ZN8S19339C73v21Ev();
static  VTBL_ENTRY vtc_S19339C1[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19339C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19339C1D1Ev,_ZTv0_n12_N8S19339C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19339C1D0Ev,_ZTv0_n12_N8S19339C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S19339C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19339C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19339C1[0]),
  (VTBL_ENTRY)&_ZN8S19339C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v4Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v5Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19339C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19339C23v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19339C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19339C1D1Ev,_ZTv0_n16_N8S19339C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19339C1D0Ev,_ZTv0_n16_N8S19339C1D0Ev),
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S19339C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v26Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v27Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19339C1[0]),
  (VTBL_ENTRY)&_ZN8S19339C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19339C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19339C73v20Ev,
  (VTBL_ENTRY)&_ZN8S19339C73v21Ev,
};
extern VTBL_ENTRY _ZTV8S19339C1[];
extern void _ZN8S19339C4D1Ev();
extern void _ZN8S19339C4D0Ev();
extern void _ZN11S19339C5_nt3v11Ev();
extern void _ZN11S19339C5_nt3v12Ev();
extern void _ZN11S19339C5_nt3v13Ev();
extern void _ZN11S19339C5_nt3v14Ev();
extern void _ZN11S19339C5_nt3v15Ev();
extern void _ZN8S19339C63v22Ev();
extern void _ZN8S19339C43v23Ev();
extern void _ZN8S19339C43v24Ev();
extern void _ZN8S19339C43v25Ev();
extern void _ZN8S19339C43v26Ev();
extern void _ZN8S19339C43v27Ev();
static  VTBL_ENTRY _tg__ZTV8S19339C4__8S19339C1[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19339C4[0]),
  (VTBL_ENTRY)&_ZN8S19339C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19339C4D0Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S19339C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v24Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v26Ev,
  (VTBL_ENTRY)&_ZN8S19339C43v27Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19339C4D1Ev,_ZTv0_n12_N8S19339C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19339C4D0Ev,_ZTv0_n12_N8S19339C4D0Ev)();
extern void _ZN11S19339C5_nt3v11Ev();
extern void _ZN11S19339C5_nt3v12Ev();
extern void _ZN11S19339C5_nt3v13Ev();
extern void _ZN11S19339C5_nt3v14Ev();
extern void _ZN11S19339C5_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV11S19339C5_nt__8S19339C4__8S19339C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19339C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19339C4D1Ev,_ZTv0_n12_N8S19339C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19339C4D0Ev,_ZTv0_n12_N8S19339C4D0Ev),
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19339C5_nt3v15Ev,
};
static  VTT_ENTRY vtt_S19339C1[] = {
  {&(_ZTV8S19339C1[11]),  11,80},
  {&(_ZTV8S19339C1[30]),  30,80},
  {&(_ZTV8S19339C1[59]),  59,80},
  {&(_ZTV8S19339C1[11]),  11,80},
  {&(_ZTV8S19339C1[74]),  74,80},
  {&(_tg__ZTV8S19339C4__8S19339C1[3]),  3,16},
  {&(_tg__ZTV11S19339C5_nt__8S19339C4__8S19339C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19339C1[];
extern  VTBL_ENTRY _ZTV8S19339C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19339C1[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19339C1D0Ev,_ZTv0_n16_N8S19339C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19339C1D0Ev,_ZThn16_N8S19339C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19339C1D1Ev,_ZTv0_n16_N8S19339C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19339C1D1Ev,_ZThn16_N8S19339C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19339C1D0Ev,_ZTv0_n12_N8S19339C1D0Ev), // 
  (VTBL_ENTRY)_ZN8S19339C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19339C1D1Ev,_ZTv0_n12_N8S19339C1D1Ev), // 
  (VTBL_ENTRY)_ZN8S19339C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19339C1 = {  "S19339C1", // class name
  bases_S19339C1, 8,
  &(vtc_S19339C1[0]), // expected_vtbl_contents
  &(vtt_S19339C1[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S19339C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19339C1),80, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19339C1),7, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7638C3  {
  virtual  ~S7638C3(); // _ZN7S7638C3D1Ev
  virtual void  v6(); // _ZN7S7638C32v6Ev
  virtual void  v7(); // _ZN7S7638C32v7Ev
  virtual void  v8(); // _ZN7S7638C32v8Ev
  virtual void  v9(); // _ZN7S7638C32v9Ev
  virtual void  v10(); // _ZN7S7638C33v10Ev
  S7638C3(); // tgen
};
//SIG(-1 S7638C3) C1{ vd v1 v2 v3 v4 v5}


 S7638C3 ::~S7638C3(){ note_dtor("S7638C3", this);}
void  S7638C3 ::v6(){vfunc_called(this, "_ZN7S7638C32v6Ev");}
void  S7638C3 ::v7(){vfunc_called(this, "_ZN7S7638C32v7Ev");}
void  S7638C3 ::v8(){vfunc_called(this, "_ZN7S7638C32v8Ev");}
void  S7638C3 ::v9(){vfunc_called(this, "_ZN7S7638C32v9Ev");}
void  S7638C3 ::v10(){vfunc_called(this, "_ZN7S7638C33v10Ev");}
S7638C3 ::S7638C3(){ note_ctor("S7638C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7638C3C1Ev();
extern void _ZN7S7638C3D1Ev();
Name_Map name_map_S7638C3[] = {
  NSPAIR(_ZN7S7638C3C1Ev),
  NSPAIR(_ZN7S7638C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7638C3[];
extern void _ZN7S7638C3D1Ev();
extern void _ZN7S7638C3D0Ev();
extern void _ZN7S7638C32v6Ev();
extern void _ZN7S7638C32v7Ev();
extern void _ZN7S7638C32v8Ev();
extern void _ZN7S7638C32v9Ev();
extern void _ZN7S7638C33v10Ev();
static  VTBL_ENTRY vtc_S7638C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7638C3[0]),
  (VTBL_ENTRY)&_ZN7S7638C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7638C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7638C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S7638C3[];
extern  VTBL_ENTRY _ZTV7S7638C3[];
Class_Descriptor cd_S7638C3 = {  "S7638C3", // class name
  0,0,//no base classes
  &(vtc_S7638C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7638C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7638C3),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  S7638C6  {
  virtual void  v11(); // _ZN7S7638C63v11Ev
  virtual void  v12(); // _ZN7S7638C63v12Ev
  virtual void  v13(); // _ZN7S7638C63v13Ev
  virtual void  v14(); // _ZN7S7638C63v14Ev
  ~S7638C6(); // tgen
  S7638C6(); // tgen
};
//SIG(-1 S7638C6) C1{ v1 v2 v3 v4}


void  S7638C6 ::v11(){vfunc_called(this, "_ZN7S7638C63v11Ev");}
void  S7638C6 ::v12(){vfunc_called(this, "_ZN7S7638C63v12Ev");}
void  S7638C6 ::v13(){vfunc_called(this, "_ZN7S7638C63v13Ev");}
void  S7638C6 ::v14(){vfunc_called(this, "_ZN7S7638C63v14Ev");}
S7638C6 ::~S7638C6(){ note_dtor("S7638C6", this);} // tgen
S7638C6 ::S7638C6(){ note_ctor("S7638C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7638C6C1Ev();
extern void _ZN7S7638C6D1Ev();
Name_Map name_map_S7638C6[] = {
  NSPAIR(_ZN7S7638C6C1Ev),
  NSPAIR(_ZN7S7638C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7638C6[];
extern void _ZN7S7638C63v11Ev();
extern void _ZN7S7638C63v12Ev();
extern void _ZN7S7638C63v13Ev();
extern void _ZN7S7638C63v14Ev();
static  VTBL_ENTRY vtc_S7638C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7638C6[0]),
  (VTBL_ENTRY)&_ZN7S7638C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v14Ev,
};
extern VTBL_ENTRY _ZTI7S7638C6[];
extern  VTBL_ENTRY _ZTV7S7638C6[];
Class_Descriptor cd_S7638C6 = {  "S7638C6", // class name
  0,0,//no base classes
  &(vtc_S7638C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7638C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7638C6),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  S7638C5  : S7638C6 {
  virtual void  v15(); // _ZN7S7638C53v15Ev
  virtual void  v16(); // _ZN7S7638C53v16Ev
  ~S7638C5(); // tgen
  S7638C5(); // tgen
};
//SIG(-1 S7638C5) C1{ BC2{ v3 v4 v5 v6} v1 v2}


void  S7638C5 ::v15(){vfunc_called(this, "_ZN7S7638C53v15Ev");}
void  S7638C5 ::v16(){vfunc_called(this, "_ZN7S7638C53v16Ev");}
S7638C5 ::~S7638C5(){ note_dtor("S7638C5", this);} // tgen
S7638C5 ::S7638C5(){ note_ctor("S7638C5", this);} // tgen

static void Test_S7638C5()
{
  extern Class_Descriptor cd_S7638C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7638C5, buf);
    S7638C5 *dp, &lv = *(dp=new (buf) S7638C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7638C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7638C5)");
    check_base_class_offset(lv, (S7638C6*), 0, "S7638C5");
    test_class_info(&lv, &cd_S7638C5);
    dp->~S7638C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7638C5(Test_S7638C5, "S7638C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7638C5C1Ev();
extern void _ZN7S7638C5D1Ev();
Name_Map name_map_S7638C5[] = {
  NSPAIR(_ZN7S7638C5C1Ev),
  NSPAIR(_ZN7S7638C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7638C6;
extern VTBL_ENTRY _ZTI7S7638C6[];
extern  VTBL_ENTRY _ZTV7S7638C6[];
static Base_Class bases_S7638C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7638C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7638C5[];
extern void _ZN7S7638C63v11Ev();
extern void _ZN7S7638C63v12Ev();
extern void _ZN7S7638C63v13Ev();
extern void _ZN7S7638C63v14Ev();
extern void _ZN7S7638C53v15Ev();
extern void _ZN7S7638C53v16Ev();
static  VTBL_ENTRY vtc_S7638C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7638C5[0]),
  (VTBL_ENTRY)&_ZN7S7638C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7638C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7638C53v16Ev,
};
extern VTBL_ENTRY _ZTI7S7638C5[];
extern  VTBL_ENTRY _ZTV7S7638C5[];
Class_Descriptor cd_S7638C5 = {  "S7638C5", // class name
  bases_S7638C5, 1,
  &(vtc_S7638C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7638C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7638C5),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7638C4  : S7638C3 , S7638C5 {
  virtual  ~S7638C4(); // _ZN7S7638C4D1Ev
  virtual void  v17(); // _ZN7S7638C43v17Ev
  S7638C4(); // tgen
};
//SIG(-1 S7638C4) C1{ BC2{ vd v2 v3 v4 v5 v6} BC3{ BC4{ v7 v8 v9 v10} v11 v12} vd v1}


 S7638C4 ::~S7638C4(){ note_dtor("S7638C4", this);}
void  S7638C4 ::v17(){vfunc_called(this, "_ZN7S7638C43v17Ev");}
S7638C4 ::S7638C4(){ note_ctor("S7638C4", this);} // tgen

static void Test_S7638C4()
{
  extern Class_Descriptor cd_S7638C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7638C4, buf);
    S7638C4 *dp, &lv = *(dp=new (buf) S7638C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7638C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7638C4)");
    check_base_class_offset(lv, (S7638C3*), 0, "S7638C4");
    check_base_class_offset(lv, (S7638C6*)(S7638C5*), ABISELECT(8,4), "S7638C4");
    check_base_class_offset(lv, (S7638C5*), ABISELECT(8,4), "S7638C4");
    test_class_info(&lv, &cd_S7638C4);
    dp->~S7638C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7638C4(Test_S7638C4, "S7638C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7638C4C1Ev();
extern void _ZN7S7638C4D1Ev();
Name_Map name_map_S7638C4[] = {
  NSPAIR(_ZN7S7638C4C1Ev),
  NSPAIR(_ZN7S7638C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7638C3;
extern VTBL_ENTRY _ZTI7S7638C3[];
extern  VTBL_ENTRY _ZTV7S7638C3[];
extern Class_Descriptor cd_S7638C6;
extern VTBL_ENTRY _ZTI7S7638C6[];
extern  VTBL_ENTRY _ZTV7S7638C6[];
extern Class_Descriptor cd_S7638C5;
extern VTBL_ENTRY _ZTI7S7638C5[];
extern  VTBL_ENTRY _ZTV7S7638C5[];
static Base_Class bases_S7638C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7638C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7638C6,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7638C5,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI7S7638C4[];
extern void _ZN7S7638C4D1Ev();
extern void _ZN7S7638C4D0Ev();
extern void _ZN7S7638C32v6Ev();
extern void _ZN7S7638C32v7Ev();
extern void _ZN7S7638C32v8Ev();
extern void _ZN7S7638C32v9Ev();
extern void _ZN7S7638C33v10Ev();
extern void _ZN7S7638C43v17Ev();
extern void _ZN7S7638C63v11Ev();
extern void _ZN7S7638C63v12Ev();
extern void _ZN7S7638C63v13Ev();
extern void _ZN7S7638C63v14Ev();
extern void _ZN7S7638C53v15Ev();
extern void _ZN7S7638C53v16Ev();
static  VTBL_ENTRY vtc_S7638C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7638C4[0]),
  (VTBL_ENTRY)&_ZN7S7638C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7638C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7638C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7638C43v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7638C4[0]),
  (VTBL_ENTRY)&_ZN7S7638C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7638C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7638C53v16Ev,
};
extern VTBL_ENTRY _ZTI7S7638C4[];
extern  VTBL_ENTRY _ZTV7S7638C4[];
Class_Descriptor cd_S7638C4 = {  "S7638C4", // class name
  bases_S7638C4, 3,
  &(vtc_S7638C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7638C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7638C4),18, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7638C2  : virtual S7638C3 , S7638C4 {
  __tsi64 s7638c2f0[2];
  virtual  ~S7638C2(); // _ZN7S7638C2D2Ev
  virtual void  v18(); // _ZN7S7638C23v18Ev
  virtual void  v19(); // _ZN7S7638C23v19Ev
  virtual void  v20(); // _ZN7S7638C23v20Ev
  virtual void  v21(); // _ZN7S7638C23v21Ev
  virtual void  v22(); // _ZN7S7638C23v22Ev
  S7638C2(); // tgen
};
//SIG(-1 S7638C2) C1{ VBC2{ vd v6 v7 v8 v9 v10} BC3{ BC2 BC4{ BC5{ v11 v12 v13 v14} v15 v16} vd v17} vd v1 v2 v3 v4 v5 FL[2]}


 S7638C2 ::~S7638C2(){ note_dtor("S7638C2", this);}
void  S7638C2 ::v18(){vfunc_called(this, "_ZN7S7638C23v18Ev");}
void  S7638C2 ::v19(){vfunc_called(this, "_ZN7S7638C23v19Ev");}
void  S7638C2 ::v20(){vfunc_called(this, "_ZN7S7638C23v20Ev");}
void  S7638C2 ::v21(){vfunc_called(this, "_ZN7S7638C23v21Ev");}
void  S7638C2 ::v22(){vfunc_called(this, "_ZN7S7638C23v22Ev");}
S7638C2 ::S7638C2(){ note_ctor("S7638C2", this);} // tgen

static void Test_S7638C2()
{
  extern Class_Descriptor cd_S7638C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S7638C2, buf);
    S7638C2 *dp, &lv = *(dp=new (buf) S7638C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S7638C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7638C2)");
    /*is_ambiguous_... S7638C2::S7638C3 */ AMB_check_base_class_offset(lv, (S7638C3*), ABISELECT(32,24), "S7638C2");
    check_base_class_offset(lv, (S7638C3*)(S7638C4*), 0, "S7638C2");
    check_base_class_offset(lv, (S7638C6*)(S7638C5*)(S7638C4*), ABISELECT(8,4), "S7638C2");
    check_base_class_offset(lv, (S7638C5*)(S7638C4*), ABISELECT(8,4), "S7638C2");
    check_base_class_offset(lv, (S7638C4*), 0, "S7638C2");
    check_field_offset(lv, s7638c2f0, ABISELECT(16,8), "S7638C2.s7638c2f0");
    test_class_info(&lv, &cd_S7638C2);
    dp->~S7638C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7638C2(Test_S7638C2, "S7638C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S7638C2C1Ev();
extern void _ZN7S7638C2D2Ev();
Name_Map name_map_S7638C2[] = {
  NSPAIR(_ZN7S7638C2C1Ev),
  NSPAIR(_ZN7S7638C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7638C3;
extern VTBL_ENTRY _ZTI7S7638C3[];
extern  VTBL_ENTRY _ZTV7S7638C3[];
extern Class_Descriptor cd_S7638C3;
extern VTBL_ENTRY _ZTI7S7638C3[];
extern  VTBL_ENTRY _ZTV7S7638C3[];
extern Class_Descriptor cd_S7638C6;
extern VTBL_ENTRY _ZTI7S7638C6[];
extern  VTBL_ENTRY _ZTV7S7638C6[];
extern Class_Descriptor cd_S7638C5;
extern VTBL_ENTRY _ZTI7S7638C5[];
extern  VTBL_ENTRY _ZTV7S7638C5[];
extern Class_Descriptor cd_S7638C4;
extern VTBL_ENTRY _ZTI7S7638C4[];
extern  VTBL_ENTRY _ZTV7S7638C4[];
static Base_Class bases_S7638C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7638C3,    ABISELECT(32,24), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7638C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S7638C6,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7638C5,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_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_S7638C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7638C2[];
extern void _ZN7S7638C2D1Ev();
extern void _ZN7S7638C2D0Ev();
extern void _ZN7S7638C32v6Ev();
extern void _ZN7S7638C32v7Ev();
extern void _ZN7S7638C32v8Ev();
extern void _ZN7S7638C32v9Ev();
extern void _ZN7S7638C33v10Ev();
extern void _ZN7S7638C43v17Ev();
extern void _ZN7S7638C23v18Ev();
extern void _ZN7S7638C23v19Ev();
extern void _ZN7S7638C23v20Ev();
extern void _ZN7S7638C23v21Ev();
extern void _ZN7S7638C23v22Ev();
extern void _ZN7S7638C63v11Ev();
extern void _ZN7S7638C63v12Ev();
extern void _ZN7S7638C63v13Ev();
extern void _ZN7S7638C63v14Ev();
extern void _ZN7S7638C53v15Ev();
extern void _ZN7S7638C53v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7638C2D1Ev,_ZTv0_n12_N7S7638C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7638C2D1Ev,_ZThn24_N7S7638C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7638C2D0Ev,_ZTv0_n12_N7S7638C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7638C2D0Ev,_ZThn24_N7S7638C2D0Ev)() __attribute__((weak));
extern void _ZN7S7638C32v6Ev();
extern void _ZN7S7638C32v7Ev();
extern void _ZN7S7638C32v8Ev();
extern void _ZN7S7638C32v9Ev();
extern void _ZN7S7638C33v10Ev();
static  VTBL_ENTRY vtc_S7638C2[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7638C2[0]),
  (VTBL_ENTRY)&_ZN7S7638C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7638C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7638C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7638C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v22Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7638C2[0]),
  (VTBL_ENTRY)&_ZN7S7638C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7638C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7638C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7638C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7638C2D1Ev,_ZTv0_n12_N7S7638C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7638C2D0Ev,_ZTv0_n12_N7S7638C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7638C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7638C33v10Ev,
};
extern VTBL_ENTRY _ZTV7S7638C2[];
static  VTT_ENTRY vtt_S7638C2[] = {
  {&(_ZTV7S7638C2[3]),  3,39},
  {&(_ZTV7S7638C2[32]),  32,39},
};
extern VTBL_ENTRY _ZTI7S7638C2[];
extern  VTBL_ENTRY _ZTV7S7638C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7638C2[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7638C2D0Ev,_ZTv0_n12_N7S7638C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7638C2D0Ev,_ZThn24_N7S7638C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7638C2D1Ev,_ZTv0_n12_N7S7638C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7638C2D1Ev,_ZThn24_N7S7638C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7638C2 = {  "S7638C2", // class name
  bases_S7638C2, 5,
  &(vtc_S7638C2[0]), // expected_vtbl_contents
  &(vtt_S7638C2[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S7638C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7638C2),39, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7638C2),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7638C1  : S7638C2 , S7638C3 {
  int s7638c1f0;
  ::S20442C5 s7638c1f1;
  virtual void  v1(); // _ZN7S7638C12v1Ev
  virtual void  v2(); // _ZN7S7638C12v2Ev
  virtual void  v3(); // _ZN7S7638C12v3Ev
  virtual void  v4(); // _ZN7S7638C12v4Ev
  virtual void  v5(); // _ZN7S7638C12v5Ev
  ~S7638C1(); // tgen
  S7638C1(); // tgen
};
//SIG(1 S7638C1) C1{ BC2{ VBC3{ vd v6 v7 v8 v9 v10} BC4{ BC3 BC5{ BC6{ v11 v12 v13 v14} v15 v16} vd v17} vd v18 v19 v20 v21 v22 FL[2]} BC3 v1 v2 v3 v4 v5 Fi FC7{ v23 v24 v25 v26 v27 Fp[2]}}


void  S7638C1 ::v1(){vfunc_called(this, "_ZN7S7638C12v1Ev");}
void  S7638C1 ::v2(){vfunc_called(this, "_ZN7S7638C12v2Ev");}
void  S7638C1 ::v3(){vfunc_called(this, "_ZN7S7638C12v3Ev");}
void  S7638C1 ::v4(){vfunc_called(this, "_ZN7S7638C12v4Ev");}
void  S7638C1 ::v5(){vfunc_called(this, "_ZN7S7638C12v5Ev");}
S7638C1 ::~S7638C1(){ note_dtor("S7638C1", this);} // tgen
S7638C1 ::S7638C1(){ note_ctor("S7638C1", this);} // tgen

static void Test_S7638C1()
{
  extern Class_Descriptor cd_S7638C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S7638C1, buf);
    S7638C1 *dp, &lv = *(dp=new (buf) S7638C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S7638C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7638C1)");
    /*is_ambiguous_... S7638C2::S7638C3 */ AMB_check_base_class_offset(lv, (S7638C3*)(S7638C2*), ABISELECT(72,44), "S7638C1");
    check_base_class_offset(lv, (S7638C3*)(S7638C4*)(S7638C2*), 0, "S7638C1");
    check_base_class_offset(lv, (S7638C6*)(S7638C5*)(S7638C4*)(S7638C2*), ABISELECT(8,4), "S7638C1");
    check_base_class_offset(lv, (S7638C5*)(S7638C4*)(S7638C2*), ABISELECT(8,4), "S7638C1");
    check_base_class_offset(lv, (S7638C4*)(S7638C2*), 0, "S7638C1");
    check_base_class_offset(lv, (S7638C2*), 0, "S7638C1");
    /*is_ambiguous_... S7638C1::S7638C3 */ AMB_check_base_class_offset(lv, (S7638C3*), ABISELECT(32,24), "S7638C1");
    check_field_offset(lv, s7638c1f0, ABISELECT(40,28), "S7638C1.s7638c1f0");
    check_field_offset(lv, s7638c1f1, ABISELECT(48,32), "S7638C1.s7638c1f1");
    test_class_info(&lv, &cd_S7638C1);
    dp->~S7638C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7638C1(Test_S7638C1, "S7638C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S7638C1C1Ev();
extern void _ZN7S7638C1D1Ev();
Name_Map name_map_S7638C1[] = {
  NSPAIR(_ZN7S7638C1C1Ev),
  NSPAIR(_ZN7S7638C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7638C3;
extern VTBL_ENTRY _ZTI7S7638C3[];
extern  VTBL_ENTRY _ZTV7S7638C3[];
extern Class_Descriptor cd_S7638C3;
extern VTBL_ENTRY _ZTI7S7638C3[];
extern  VTBL_ENTRY _ZTV7S7638C3[];
extern Class_Descriptor cd_S7638C6;
extern VTBL_ENTRY _ZTI7S7638C6[];
extern  VTBL_ENTRY _ZTV7S7638C6[];
extern Class_Descriptor cd_S7638C5;
extern VTBL_ENTRY _ZTI7S7638C5[];
extern  VTBL_ENTRY _ZTV7S7638C5[];
extern Class_Descriptor cd_S7638C4;
extern VTBL_ENTRY _ZTI7S7638C4[];
extern  VTBL_ENTRY _ZTV7S7638C4[];
extern Class_Descriptor cd_S7638C2;
extern VTBL_ENTRY _ZTI7S7638C2[];
extern  VTBL_ENTRY _ZTV7S7638C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7638C2[];
extern Class_Descriptor cd_S7638C3;
extern VTBL_ENTRY _ZTI7S7638C3[];
extern  VTBL_ENTRY _ZTV7S7638C3[];
static Base_Class bases_S7638C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7638C3,    ABISELECT(72,44), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7638C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S7638C6,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7638C5,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_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_S7638C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7638C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7638C3,    ABISELECT(32,24), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7638C1[];
extern void _ZN7S7638C1D1Ev();
extern void _ZN7S7638C1D0Ev();
extern void _ZN7S7638C32v6Ev();
extern void _ZN7S7638C32v7Ev();
extern void _ZN7S7638C32v8Ev();
extern void _ZN7S7638C32v9Ev();
extern void _ZN7S7638C33v10Ev();
extern void _ZN7S7638C43v17Ev();
extern void _ZN7S7638C23v18Ev();
extern void _ZN7S7638C23v19Ev();
extern void _ZN7S7638C23v20Ev();
extern void _ZN7S7638C23v21Ev();
extern void _ZN7S7638C23v22Ev();
extern void _ZN7S7638C12v1Ev();
extern void _ZN7S7638C12v2Ev();
extern void _ZN7S7638C12v3Ev();
extern void _ZN7S7638C12v4Ev();
extern void _ZN7S7638C12v5Ev();
extern void _ZN7S7638C63v11Ev();
extern void _ZN7S7638C63v12Ev();
extern void _ZN7S7638C63v13Ev();
extern void _ZN7S7638C63v14Ev();
extern void _ZN7S7638C53v15Ev();
extern void _ZN7S7638C53v16Ev();
extern void ABISELECT(_ZThn32_N7S7638C1D1Ev,_ZThn24_N7S7638C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7638C1D0Ev,_ZThn24_N7S7638C1D0Ev)();
extern void _ZN7S7638C32v6Ev();
extern void _ZN7S7638C32v7Ev();
extern void _ZN7S7638C32v8Ev();
extern void _ZN7S7638C32v9Ev();
extern void _ZN7S7638C33v10Ev();
extern void ABISELECT(_ZTv0_n24_N7S7638C1D1Ev,_ZTv0_n12_N7S7638C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S7638C1D1Ev,_ZThn44_N7S7638C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7638C1D0Ev,_ZTv0_n12_N7S7638C1D0Ev)();
extern void ABISELECT(_ZThn72_N7S7638C1D0Ev,_ZThn44_N7S7638C1D0Ev)() __attribute__((weak));
extern void _ZN7S7638C32v6Ev();
extern void _ZN7S7638C32v7Ev();
extern void _ZN7S7638C32v8Ev();
extern void _ZN7S7638C32v9Ev();
extern void _ZN7S7638C33v10Ev();
static  VTBL_ENTRY vtc_S7638C1[] = {
  ABISELECT(72,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7638C1[0]),
  (VTBL_ENTRY)&_ZN7S7638C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7638C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7638C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7638C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7638C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7638C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7638C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7638C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7638C12v5Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7638C1[0]),
  (VTBL_ENTRY)&_ZN7S7638C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7638C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7638C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7638C53v16Ev,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7638C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7638C1D1Ev,_ZThn24_N7S7638C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7638C1D0Ev,_ZThn24_N7S7638C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7638C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7638C33v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7638C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7638C1D1Ev,_ZTv0_n12_N7S7638C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7638C1D0Ev,_ZTv0_n12_N7S7638C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7638C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7638C33v10Ev,
};
extern VTBL_ENTRY _ZTV7S7638C1[];
extern void _ZN7S7638C2D1Ev();
extern void _ZN7S7638C2D0Ev();
extern void _ZN7S7638C32v6Ev();
extern void _ZN7S7638C32v7Ev();
extern void _ZN7S7638C32v8Ev();
extern void _ZN7S7638C32v9Ev();
extern void _ZN7S7638C33v10Ev();
extern void _ZN7S7638C43v17Ev();
extern void _ZN7S7638C23v18Ev();
extern void _ZN7S7638C23v19Ev();
extern void _ZN7S7638C23v20Ev();
extern void _ZN7S7638C23v21Ev();
extern void _ZN7S7638C23v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7638C2__7S7638C1[] = {
  ABISELECT(72,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7638C2[0]),
  (VTBL_ENTRY)&_ZN7S7638C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7638C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7638C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7638C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7638C23v22Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7638C2D1Ev,_ZTv0_n12_N7S7638C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S7638C2D1Ev,_ZThn44_N7S7638C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7638C2D0Ev,_ZTv0_n12_N7S7638C2D0Ev)();
extern void ABISELECT(_ZThn72_N7S7638C2D0Ev,_ZThn44_N7S7638C2D0Ev)() __attribute__((weak));
extern void _ZN7S7638C32v6Ev();
extern void _ZN7S7638C32v7Ev();
extern void _ZN7S7638C32v8Ev();
extern void _ZN7S7638C32v9Ev();
extern void _ZN7S7638C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7638C3__7S7638C2__7S7638C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7638C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7638C2D1Ev,_ZTv0_n12_N7S7638C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7638C2D0Ev,_ZTv0_n12_N7S7638C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7638C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7638C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7638C33v10Ev,
};
static  VTT_ENTRY vtt_S7638C1[] = {
  {&(_ZTV7S7638C1[3]),  3,53},
  {&(_tg__ZTV7S7638C2__7S7638C1[3]),  3,16},
  {&(_tg__ZTV7S7638C3__7S7638C2__7S7638C1[8]),  8,15},
  {&(_ZTV7S7638C1[46]),  46,53},
};
extern VTBL_ENTRY _ZTI7S7638C1[];
extern  VTBL_ENTRY _ZTV7S7638C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7638C1[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7638C2D0Ev,_ZTv0_n12_N7S7638C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7638C2D0Ev,_ZThn44_N7S7638C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7638C2D1Ev,_ZTv0_n12_N7S7638C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7638C2D1Ev,_ZThn44_N7S7638C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7638C1D0Ev,_ZTv0_n12_N7S7638C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7638C1D0Ev,_ZThn44_N7S7638C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7638C1D1Ev,_ZTv0_n12_N7S7638C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7638C1D1Ev,_ZThn44_N7S7638C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7638C1 = {  "S7638C1", // class name
  bases_S7638C1, 7,
  &(vtc_S7638C1[0]), // expected_vtbl_contents
  &(vtt_S7638C1[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S7638C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7638C1),53, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7638C1),4, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21544C1  {
  ::S10180C48 s21544c1f0;
  ::S10180C50 s21544c1f1;
  ::S15695C5_nt s21544c1f2;
  ::S15695C5_nt s21544c1f3;
  __tsi64 s21544c1f4;
  int s21544c1f5[8];
  void  mf21544c1(); // _ZN8S21544C19mf21544c1Ev
  virtual  ~S21544C1(); // _ZN8S21544C1D1Ev
  S21544C1(); // tgen
};
//SIG(1 S21544C1) C1{ vd m FC2{ vd m FC3{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC4{ BC5{ vd v7 v8 v9 v10 v11 v12 Fi Fp Fc} vd v1 v2 v3 v4 v5 v6 Fp} FC6{ m FC7{ Fl[4]}} FC6 FL Fi[8]}


void  S21544C1 ::mf21544c1(){}
 S21544C1 ::~S21544C1(){ note_dtor("S21544C1", this);}
S21544C1 ::S21544C1(){ note_ctor("S21544C1", this);} // tgen

static void Test_S21544C1()
{
  extern Class_Descriptor cd_S21544C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,47)];
    init_test(&cd_S21544C1, buf);
    S21544C1 *dp, &lv = *(dp=new (buf) S21544C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,184), "sizeof(S21544C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21544C1)");
    check_field_offset(lv, s21544c1f0, ABISELECT(8,4), "S21544C1.s21544c1f0");
    check_field_offset(lv, s21544c1f1, ABISELECT(136,92), "S21544C1.s21544c1f1");
    check_field_offset(lv, s21544c1f2, ABISELECT(176,112), "S21544C1.s21544c1f2");
    check_field_offset(lv, s21544c1f3, ABISELECT(208,128), "S21544C1.s21544c1f3");
    check_field_offset(lv, s21544c1f4, ABISELECT(240,144), "S21544C1.s21544c1f4");
    check_field_offset(lv, s21544c1f5, ABISELECT(248,152), "S21544C1.s21544c1f5");
    test_class_info(&lv, &cd_S21544C1);
    dp->~S21544C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21544C1(Test_S21544C1, "S21544C1", ABISELECT(280,184));

#else // __cplusplus

extern void _ZN8S21544C1C1Ev();
extern void _ZN8S21544C1D1Ev();
Name_Map name_map_S21544C1[] = {
  NSPAIR(_ZN8S21544C1C1Ev),
  NSPAIR(_ZN8S21544C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21544C1[];
extern void _ZN8S21544C1D1Ev();
extern void _ZN8S21544C1D0Ev();
static  VTBL_ENTRY vtc_S21544C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21544C1[0]),
  (VTBL_ENTRY)&_ZN8S21544C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21544C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21544C1[];
extern  VTBL_ENTRY _ZTV8S21544C1[];
Class_Descriptor cd_S21544C1 = {  "S21544C1", // class name
  0,0,//no base classes
  &(vtc_S21544C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,184), // object size
  NSPAIRA(_ZTI8S21544C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21544C1),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  S7623C3  {
  virtual void  v5(); // _ZN7S7623C32v5Ev
  virtual void  v6(); // _ZN7S7623C32v6Ev
  virtual void  v7(); // _ZN7S7623C32v7Ev
  virtual void  v8(); // _ZN7S7623C32v8Ev
  ~S7623C3(); // tgen
  S7623C3(); // tgen
};
//SIG(-1 S7623C3) C1{ v1 v2 v3 v4}


void  S7623C3 ::v5(){vfunc_called(this, "_ZN7S7623C32v5Ev");}
void  S7623C3 ::v6(){vfunc_called(this, "_ZN7S7623C32v6Ev");}
void  S7623C3 ::v7(){vfunc_called(this, "_ZN7S7623C32v7Ev");}
void  S7623C3 ::v8(){vfunc_called(this, "_ZN7S7623C32v8Ev");}
S7623C3 ::~S7623C3(){ note_dtor("S7623C3", this);} // tgen
S7623C3 ::S7623C3(){ note_ctor("S7623C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7623C3C1Ev();
extern void _ZN7S7623C3D1Ev();
Name_Map name_map_S7623C3[] = {
  NSPAIR(_ZN7S7623C3C1Ev),
  NSPAIR(_ZN7S7623C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7623C3[];
extern void _ZN7S7623C32v5Ev();
extern void _ZN7S7623C32v6Ev();
extern void _ZN7S7623C32v7Ev();
extern void _ZN7S7623C32v8Ev();
static  VTBL_ENTRY vtc_S7623C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7623C3[0]),
  (VTBL_ENTRY)&_ZN7S7623C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S7623C3[];
extern  VTBL_ENTRY _ZTV7S7623C3[];
Class_Descriptor cd_S7623C3 = {  "S7623C3", // class name
  0,0,//no base classes
  &(vtc_S7623C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7623C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7623C3),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  S7623C2  : virtual S7623C3 {
  int s7623c2f0;
  long double s7623c2f1;
  virtual void  v9(); // _ZN7S7623C22v9Ev
  virtual void  v10(); // _ZN7S7623C23v10Ev
  virtual void  v11(); // _ZN7S7623C23v11Ev
  virtual void  v12(); // _ZN7S7623C23v12Ev
  virtual void  v13(); // _ZN7S7623C23v13Ev
  virtual void  v14(); // _ZN7S7623C23v14Ev
  virtual void  v15(); // _ZN7S7623C23v15Ev
  ~S7623C2(); // tgen
  S7623C2(); // tgen
};
//SIG(-1 S7623C2) C1{ VBC2{ v8 v9 v10 v11} v1 v2 v3 v4 v5 v6 v7 Fi FD}


void  S7623C2 ::v9(){vfunc_called(this, "_ZN7S7623C22v9Ev");}
void  S7623C2 ::v10(){vfunc_called(this, "_ZN7S7623C23v10Ev");}
void  S7623C2 ::v11(){vfunc_called(this, "_ZN7S7623C23v11Ev");}
void  S7623C2 ::v12(){vfunc_called(this, "_ZN7S7623C23v12Ev");}
void  S7623C2 ::v13(){vfunc_called(this, "_ZN7S7623C23v13Ev");}
void  S7623C2 ::v14(){vfunc_called(this, "_ZN7S7623C23v14Ev");}
void  S7623C2 ::v15(){vfunc_called(this, "_ZN7S7623C23v15Ev");}
S7623C2 ::~S7623C2(){ note_dtor("S7623C2", this);} // tgen
S7623C2 ::S7623C2(){ note_ctor("S7623C2", this);} // tgen

static void Test_S7623C2()
{
  extern Class_Descriptor cd_S7623C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,6)];
    init_test(&cd_S7623C2, buf);
    S7623C2 *dp, &lv = *(dp=new (buf) S7623C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7623C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7623C2)");
    check_base_class_offset(lv, (S7623C3*), 0, "S7623C2");
    check_field_offset(lv, s7623c2f0, ABISELECT(8,4), "S7623C2.s7623c2f0");
    check_field_offset(lv, s7623c2f1, ABISELECT(16,8), "S7623C2.s7623c2f1");
    test_class_info(&lv, &cd_S7623C2);
    dp->~S7623C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7623C2(Test_S7623C2, "S7623C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7623C2C1Ev();
extern void _ZN7S7623C2D1Ev();
Name_Map name_map_S7623C2[] = {
  NSPAIR(_ZN7S7623C2C1Ev),
  NSPAIR(_ZN7S7623C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7623C3;
extern VTBL_ENTRY _ZTI7S7623C3[];
extern  VTBL_ENTRY _ZTV7S7623C3[];
static Base_Class bases_S7623C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7623C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7623C2[];
extern void _ZN7S7623C32v5Ev();
extern void _ZN7S7623C32v6Ev();
extern void _ZN7S7623C32v7Ev();
extern void _ZN7S7623C32v8Ev();
extern void _ZN7S7623C22v9Ev();
extern void _ZN7S7623C23v10Ev();
extern void _ZN7S7623C23v11Ev();
extern void _ZN7S7623C23v12Ev();
extern void _ZN7S7623C23v13Ev();
extern void _ZN7S7623C23v14Ev();
extern void _ZN7S7623C23v15Ev();
static  VTBL_ENTRY vtc_S7623C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7623C2[0]),
  (VTBL_ENTRY)&_ZN7S7623C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7623C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S7623C2[];
static  VTT_ENTRY vtt_S7623C2[] = {
  {&(_ZTV7S7623C2[7]),  7,18},
  {&(_ZTV7S7623C2[7]),  7,18},
};
extern VTBL_ENTRY _ZTI7S7623C2[];
extern  VTBL_ENTRY _ZTV7S7623C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7623C2[];
Class_Descriptor cd_S7623C2 = {  "S7623C2", // class name
  bases_S7623C2, 1,
  &(vtc_S7623C2[0]), // expected_vtbl_contents
  &(vtt_S7623C2[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7623C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7623C2),18, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7623C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7623C4  {
  ::S18992C10 s7623c4f0;
  int s7623c4f1[2];
  void *s7623c4f2;
  virtual void  v16(); // _ZN7S7623C43v16Ev
  virtual void  v17(); // _ZN7S7623C43v17Ev
  virtual void  v18(); // _ZN7S7623C43v18Ev
  virtual void  v19(); // _ZN7S7623C43v19Ev
  virtual void  v20(); // _ZN7S7623C43v20Ev
  ~S7623C4(); // tgen
  S7623C4(); // tgen
};
//SIG(-1 S7623C4) C1{ v1 v2 v3 v4 v5 FC2{ BC3{ v7 v8 v9 v10 v11 Fp[2]} vd v6 Fi} Fi[2] Fp}


void  S7623C4 ::v16(){vfunc_called(this, "_ZN7S7623C43v16Ev");}
void  S7623C4 ::v17(){vfunc_called(this, "_ZN7S7623C43v17Ev");}
void  S7623C4 ::v18(){vfunc_called(this, "_ZN7S7623C43v18Ev");}
void  S7623C4 ::v19(){vfunc_called(this, "_ZN7S7623C43v19Ev");}
void  S7623C4 ::v20(){vfunc_called(this, "_ZN7S7623C43v20Ev");}
S7623C4 ::~S7623C4(){ note_dtor("S7623C4", this);} // tgen
S7623C4 ::S7623C4(){ note_ctor("S7623C4", this);} // tgen

static void Test_S7623C4()
{
  extern Class_Descriptor cd_S7623C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S7623C4, buf);
    S7623C4 *dp, &lv = *(dp=new (buf) S7623C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S7623C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7623C4)");
    check_field_offset(lv, s7623c4f0, ABISELECT(8,4), "S7623C4.s7623c4f0");
    check_field_offset(lv, s7623c4f1, ABISELECT(40,20), "S7623C4.s7623c4f1");
    check_field_offset(lv, s7623c4f2, ABISELECT(48,28), "S7623C4.s7623c4f2");
    test_class_info(&lv, &cd_S7623C4);
    dp->~S7623C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7623C4(Test_S7623C4, "S7623C4", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S7623C4C1Ev();
extern void _ZN7S7623C4D1Ev();
Name_Map name_map_S7623C4[] = {
  NSPAIR(_ZN7S7623C4C1Ev),
  NSPAIR(_ZN7S7623C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7623C4[];
extern void _ZN7S7623C43v16Ev();
extern void _ZN7S7623C43v17Ev();
extern void _ZN7S7623C43v18Ev();
extern void _ZN7S7623C43v19Ev();
extern void _ZN7S7623C43v20Ev();
static  VTBL_ENTRY vtc_S7623C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7623C4[0]),
  (VTBL_ENTRY)&_ZN7S7623C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7623C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7623C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7623C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7623C43v20Ev,
};
extern VTBL_ENTRY _ZTI7S7623C4[];
extern  VTBL_ENTRY _ZTV7S7623C4[];
Class_Descriptor cd_S7623C4 = {  "S7623C4", // class name
  0,0,//no base classes
  &(vtc_S7623C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S7623C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7623C4),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  S7623C1  : S7623C2 {
  int s7623c1f0;
  ::S7623C4 s7623c1f1;
  int s7623c1f2;
  virtual void  v1(); // _ZN7S7623C12v1Ev
  virtual void  v2(); // _ZN7S7623C12v2Ev
  virtual void  v3(); // _ZN7S7623C12v3Ev
  virtual void  v4(); // _ZN7S7623C12v4Ev
  ~S7623C1(); // tgen
  S7623C1(); // tgen
};
//SIG(1 S7623C1) C1{ BC2{ VBC3{ v5 v6 v7 v8} v9 v10 v11 v12 v13 v14 v15 Fi FD} v1 v2 v3 v4 Fi FC4{ v16 v17 v18 v19 v20 FC5{ BC6{ v22 v23 v24 v25 v26 Fp[2]} vd v21 Fi} Fi[2] Fp} Fi}


void  S7623C1 ::v1(){vfunc_called(this, "_ZN7S7623C12v1Ev");}
void  S7623C1 ::v2(){vfunc_called(this, "_ZN7S7623C12v2Ev");}
void  S7623C1 ::v3(){vfunc_called(this, "_ZN7S7623C12v3Ev");}
void  S7623C1 ::v4(){vfunc_called(this, "_ZN7S7623C12v4Ev");}
S7623C1 ::~S7623C1(){ note_dtor("S7623C1", this);} // tgen
S7623C1 ::S7623C1(){ note_ctor("S7623C1", this);} // tgen

static void Test_S7623C1()
{
  extern Class_Descriptor cd_S7623C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,16)];
    init_test(&cd_S7623C1, buf);
    S7623C1 *dp, &lv = *(dp=new (buf) S7623C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S7623C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7623C1)");
    check_base_class_offset(lv, (S7623C3*)(S7623C2*), 0, "S7623C1");
    check_base_class_offset(lv, (S7623C2*), 0, "S7623C1");
    check_field_offset(lv, s7623c1f0, ABISELECT(32,20), "S7623C1.s7623c1f0");
    check_field_offset(lv, s7623c1f1, ABISELECT(40,24), "S7623C1.s7623c1f1");
    check_field_offset(lv, s7623c1f2, ABISELECT(96,56), "S7623C1.s7623c1f2");
    test_class_info(&lv, &cd_S7623C1);
    dp->~S7623C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7623C1(Test_S7623C1, "S7623C1", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN7S7623C1C1Ev();
extern void _ZN7S7623C1D1Ev();
Name_Map name_map_S7623C1[] = {
  NSPAIR(_ZN7S7623C1C1Ev),
  NSPAIR(_ZN7S7623C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7623C3;
extern VTBL_ENTRY _ZTI7S7623C3[];
extern  VTBL_ENTRY _ZTV7S7623C3[];
extern Class_Descriptor cd_S7623C2;
extern VTBL_ENTRY _ZTI7S7623C2[];
extern  VTBL_ENTRY _ZTV7S7623C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7623C2[];
static Base_Class bases_S7623C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7623C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7623C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7623C1[];
extern void _ZN7S7623C32v5Ev();
extern void _ZN7S7623C32v6Ev();
extern void _ZN7S7623C32v7Ev();
extern void _ZN7S7623C32v8Ev();
extern void _ZN7S7623C22v9Ev();
extern void _ZN7S7623C23v10Ev();
extern void _ZN7S7623C23v11Ev();
extern void _ZN7S7623C23v12Ev();
extern void _ZN7S7623C23v13Ev();
extern void _ZN7S7623C23v14Ev();
extern void _ZN7S7623C23v15Ev();
extern void _ZN7S7623C12v1Ev();
extern void _ZN7S7623C12v2Ev();
extern void _ZN7S7623C12v3Ev();
extern void _ZN7S7623C12v4Ev();
static  VTBL_ENTRY vtc_S7623C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7623C1[0]),
  (VTBL_ENTRY)&_ZN7S7623C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7623C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7623C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7623C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7623C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7623C12v4Ev,
};
extern VTBL_ENTRY _ZTV7S7623C1[];
extern void _ZN7S7623C32v5Ev();
extern void _ZN7S7623C32v6Ev();
extern void _ZN7S7623C32v7Ev();
extern void _ZN7S7623C32v8Ev();
extern void _ZN7S7623C22v9Ev();
extern void _ZN7S7623C23v10Ev();
extern void _ZN7S7623C23v11Ev();
extern void _ZN7S7623C23v12Ev();
extern void _ZN7S7623C23v13Ev();
extern void _ZN7S7623C23v14Ev();
extern void _ZN7S7623C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7623C2__7S7623C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7623C2[0]),
  (VTBL_ENTRY)&_ZN7S7623C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7623C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7623C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7623C23v15Ev,
};
static  VTT_ENTRY vtt_S7623C1[] = {
  {&(_ZTV7S7623C1[7]),  7,22},
  {&(_tg__ZTV7S7623C2__7S7623C1[7]),  7,18},
  {&(_tg__ZTV7S7623C2__7S7623C1[7]),  7,18},
  {&(_ZTV7S7623C1[7]),  7,22},
};
extern VTBL_ENTRY _ZTI7S7623C1[];
extern  VTBL_ENTRY _ZTV7S7623C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7623C1[];
Class_Descriptor cd_S7623C1 = {  "S7623C1", // class name
  bases_S7623C1, 2,
  &(vtc_S7623C1[0]), // expected_vtbl_contents
  &(vtt_S7623C1[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI7S7623C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7623C1),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7623C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21545C1  {
  ::S10180C48 s21545c1f0;
  ::S10180C50 s21545c1f1;
  ::S15696C5_nt s21545c1f2;
  ::S15696C5_nt s21545c1f3;
  __tsi64 s21545c1f4;
  int s21545c1f5[8];
  void  mf21545c1(); // _ZN8S21545C19mf21545c1Ev
  virtual  ~S21545C1(); // _ZN8S21545C1D1Ev
  S21545C1(); // tgen
};
//SIG(1 S21545C1) C1{ vd m FC2{ vd m FC3{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC4{ BC5{ vd v7 v8 v9 v10 v11 v12 Fi Fp Fc} vd v1 v2 v3 v4 v5 v6 Fp} FC6{ m FC7{ FL[4]}} FC6 FL Fi[8]}


void  S21545C1 ::mf21545c1(){}
 S21545C1 ::~S21545C1(){ note_dtor("S21545C1", this);}
S21545C1 ::S21545C1(){ note_ctor("S21545C1", this);} // tgen

static void Test_S21545C1()
{
  extern Class_Descriptor cd_S21545C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,55)];
    init_test(&cd_S21545C1, buf);
    S21545C1 *dp, &lv = *(dp=new (buf) S21545C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,216), "sizeof(S21545C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21545C1)");
    check_field_offset(lv, s21545c1f0, ABISELECT(8,4), "S21545C1.s21545c1f0");
    check_field_offset(lv, s21545c1f1, ABISELECT(136,92), "S21545C1.s21545c1f1");
    check_field_offset(lv, s21545c1f2, ABISELECT(176,112), "S21545C1.s21545c1f2");
    check_field_offset(lv, s21545c1f3, ABISELECT(208,144), "S21545C1.s21545c1f3");
    check_field_offset(lv, s21545c1f4, ABISELECT(240,176), "S21545C1.s21545c1f4");
    check_field_offset(lv, s21545c1f5, ABISELECT(248,184), "S21545C1.s21545c1f5");
    test_class_info(&lv, &cd_S21545C1);
    dp->~S21545C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21545C1(Test_S21545C1, "S21545C1", ABISELECT(280,216));

#else // __cplusplus

extern void _ZN8S21545C1C1Ev();
extern void _ZN8S21545C1D1Ev();
Name_Map name_map_S21545C1[] = {
  NSPAIR(_ZN8S21545C1C1Ev),
  NSPAIR(_ZN8S21545C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21545C1[];
extern void _ZN8S21545C1D1Ev();
extern void _ZN8S21545C1D0Ev();
static  VTBL_ENTRY vtc_S21545C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21545C1[0]),
  (VTBL_ENTRY)&_ZN8S21545C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21545C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21545C1[];
extern  VTBL_ENTRY _ZTV8S21545C1[];
Class_Descriptor cd_S21545C1 = {  "S21545C1", // class name
  0,0,//no base classes
  &(vtc_S21545C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,216), // object size
  NSPAIRA(_ZTI8S21545C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21545C1),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  S21546C1  {
  ::S10180C48 s21546c1f0;
  ::S10180C50 s21546c1f1;
  ::S10181C37 s21546c1f2;
  ::S10181C37 s21546c1f3;
  __tsi64 s21546c1f4;
  int s21546c1f5[8];
  void  mf21546c1(); // _ZN8S21546C19mf21546c1Ev
  virtual  ~S21546C1(); // _ZN8S21546C1D1Ev
  S21546C1(); // tgen
};
//SIG(1 S21546C1) C1{ vd m FC2{ vd m FC3{ Fi[8] Fs Fi[3] Fc} Fp[4] Fi Fp Fi Fp} FC4{ BC5{ vd v7 v8 v9 v10 v11 v12 Fi Fp Fc} vd v1 v2 v3 v4 v5 v6 Fp} FC6{ m FL[4]} FC6 FL Fi[8]}


void  S21546C1 ::mf21546c1(){}
 S21546C1 ::~S21546C1(){ note_dtor("S21546C1", this);}
S21546C1 ::S21546C1(){ note_ctor("S21546C1", this);} // tgen

static void Test_S21546C1()
{
  extern Class_Descriptor cd_S21546C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,55)];
    init_test(&cd_S21546C1, buf);
    S21546C1 *dp, &lv = *(dp=new (buf) S21546C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,216), "sizeof(S21546C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21546C1)");
    check_field_offset(lv, s21546c1f0, ABISELECT(8,4), "S21546C1.s21546c1f0");
    check_field_offset(lv, s21546c1f1, ABISELECT(136,92), "S21546C1.s21546c1f1");
    check_field_offset(lv, s21546c1f2, ABISELECT(176,112), "S21546C1.s21546c1f2");
    check_field_offset(lv, s21546c1f3, ABISELECT(208,144), "S21546C1.s21546c1f3");
    check_field_offset(lv, s21546c1f4, ABISELECT(240,176), "S21546C1.s21546c1f4");
    check_field_offset(lv, s21546c1f5, ABISELECT(248,184), "S21546C1.s21546c1f5");
    test_class_info(&lv, &cd_S21546C1);
    dp->~S21546C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21546C1(Test_S21546C1, "S21546C1", ABISELECT(280,216));

#else // __cplusplus

extern void _ZN8S21546C1C1Ev();
extern void _ZN8S21546C1D1Ev();
Name_Map name_map_S21546C1[] = {
  NSPAIR(_ZN8S21546C1C1Ev),
  NSPAIR(_ZN8S21546C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21546C1[];
extern void _ZN8S21546C1D1Ev();
extern void _ZN8S21546C1D0Ev();
static  VTBL_ENTRY vtc_S21546C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21546C1[0]),
  (VTBL_ENTRY)&_ZN8S21546C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21546C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21546C1[];
extern  VTBL_ENTRY _ZTV8S21546C1[];
Class_Descriptor cd_S21546C1 = {  "S21546C1", // class name
  0,0,//no base classes
  &(vtc_S21546C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,216), // object size
  NSPAIRA(_ZTI8S21546C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21546C1),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  S7579C3  {
  int s7579c3f0;
  long double s7579c3f1[6];
  void *s7579c3f2[9];
  virtual void  v3(); // _ZN7S7579C32v3Ev
  virtual void  v4(); // _ZN7S7579C32v4Ev
  virtual void  v5(); // _ZN7S7579C32v5Ev
  ~S7579C3(); // tgen
  S7579C3(); // tgen
};
//SIG(-1 S7579C3) C1{ v1 v2 v3 Fi FD[6] Fp[9]}


void  S7579C3 ::v3(){vfunc_called(this, "_ZN7S7579C32v3Ev");}
void  S7579C3 ::v4(){vfunc_called(this, "_ZN7S7579C32v4Ev");}
void  S7579C3 ::v5(){vfunc_called(this, "_ZN7S7579C32v5Ev");}
S7579C3 ::~S7579C3(){ note_dtor("S7579C3", this);} // tgen
S7579C3 ::S7579C3(){ note_ctor("S7579C3", this);} // tgen

static void Test_S7579C3()
{
  extern Class_Descriptor cd_S7579C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S7579C3, buf);
    S7579C3 *dp, &lv = *(dp=new (buf) S7579C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S7579C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7579C3)");
    check_field_offset(lv, s7579c3f0, ABISELECT(8,4), "S7579C3.s7579c3f0");
    check_field_offset(lv, s7579c3f1, ABISELECT(16,8), "S7579C3.s7579c3f1");
    check_field_offset(lv, s7579c3f2, ABISELECT(112,80), "S7579C3.s7579c3f2");
    test_class_info(&lv, &cd_S7579C3);
    dp->~S7579C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7579C3(Test_S7579C3, "S7579C3", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN7S7579C3C1Ev();
extern void _ZN7S7579C3D1Ev();
Name_Map name_map_S7579C3[] = {
  NSPAIR(_ZN7S7579C3C1Ev),
  NSPAIR(_ZN7S7579C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7579C3[];
extern void _ZN7S7579C32v3Ev();
extern void _ZN7S7579C32v4Ev();
extern void _ZN7S7579C32v5Ev();
static  VTBL_ENTRY vtc_S7579C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C3[0]),
  (VTBL_ENTRY)&_ZN7S7579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S7579C3[];
extern  VTBL_ENTRY _ZTV7S7579C3[];
Class_Descriptor cd_S7579C3 = {  "S7579C3", // class name
  0,0,//no base classes
  &(vtc_S7579C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI7S7579C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7579C3),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  S7579C6  {
  void *s7579c6f0[6];
  virtual  ~S7579C6(); // _ZN7S7579C6D1Ev
  virtual void  v1(); // _ZN7S7579C62v1Ev
  S7579C6(); // tgen
};
//SIG(-1 S7579C6) C1{ vd v1 Fp[6]}


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

static void Test_S7579C6()
{
  extern Class_Descriptor cd_S7579C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7579C6, buf);
    S7579C6 *dp, &lv = *(dp=new (buf) S7579C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7579C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7579C6)");
    check_field_offset(lv, s7579c6f0, ABISELECT(8,4), "S7579C6.s7579c6f0");
    test_class_info(&lv, &cd_S7579C6);
    dp->~S7579C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7579C6(Test_S7579C6, "S7579C6", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7579C6C1Ev();
extern void _ZN7S7579C6D1Ev();
Name_Map name_map_S7579C6[] = {
  NSPAIR(_ZN7S7579C6C1Ev),
  NSPAIR(_ZN7S7579C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7579C6[];
extern void _ZN7S7579C6D1Ev();
extern void _ZN7S7579C6D0Ev();
extern void _ZN7S7579C62v1Ev();
static  VTBL_ENTRY vtc_S7579C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C6[0]),
  (VTBL_ENTRY)&_ZN7S7579C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
};
extern VTBL_ENTRY _ZTI7S7579C6[];
extern  VTBL_ENTRY _ZTV7S7579C6[];
Class_Descriptor cd_S7579C6 = {  "S7579C6", // class name
  0,0,//no base classes
  &(vtc_S7579C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7579C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7579C6),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  S7579C7  : virtual S7579C3 , S7579C6 {
  ~S7579C7(); // tgen
  S7579C7(); // tgen
};
//SIG(-1 S7579C7) C1{ VBC2{ v1 v2 v3 Fi FD[6] Fp[9]} BC3{ vd v4 Fp[6]}}


S7579C7 ::~S7579C7(){ note_dtor("S7579C7", this);} // tgen
S7579C7 ::S7579C7(){ note_ctor("S7579C7", this);} // tgen

static void Test_S7579C7()
{
  extern Class_Descriptor cd_S7579C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,37)];
    init_test(&cd_S7579C7, buf);
    S7579C7 *dp, &lv = *(dp=new (buf) S7579C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,144), "sizeof(S7579C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7579C7)");
    check_base_class_offset(lv, (S7579C3*), ABISELECT(64,28), "S7579C7");
    check_base_class_offset(lv, (S7579C6*), 0, "S7579C7");
    test_class_info(&lv, &cd_S7579C7);
    dp->~S7579C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7579C7(Test_S7579C7, "S7579C7", ABISELECT(256,144));

#else // __cplusplus

extern void _ZN7S7579C7C1Ev();
extern void _ZN7S7579C7D1Ev();
Name_Map name_map_S7579C7[] = {
  NSPAIR(_ZN7S7579C7C1Ev),
  NSPAIR(_ZN7S7579C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7579C3;
extern VTBL_ENTRY _ZTI7S7579C3[];
extern  VTBL_ENTRY _ZTV7S7579C3[];
extern Class_Descriptor cd_S7579C6;
extern VTBL_ENTRY _ZTI7S7579C6[];
extern  VTBL_ENTRY _ZTV7S7579C6[];
static Base_Class bases_S7579C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7579C3,    ABISELECT(64,28), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7579C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7579C7[];
extern void _ZN7S7579C7D1Ev();
extern void _ZN7S7579C7D0Ev();
extern void _ZN7S7579C62v1Ev();
extern void _ZN7S7579C32v3Ev();
extern void _ZN7S7579C32v4Ev();
extern void _ZN7S7579C32v5Ev();
static  VTBL_ENTRY vtc_S7579C7[] = {
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C7[0]),
  (VTBL_ENTRY)&_ZN7S7579C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI7S7579C7[0]),
  (VTBL_ENTRY)&_ZN7S7579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v5Ev,
};
extern VTBL_ENTRY _ZTV7S7579C7[];
static  VTT_ENTRY vtt_S7579C7[] = {
  {&(_ZTV7S7579C7[3]),  3,14},
  {&(_ZTV7S7579C7[11]),  11,14},
};
extern VTBL_ENTRY _ZTI7S7579C7[];
extern  VTBL_ENTRY _ZTV7S7579C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7579C7[];
Class_Descriptor cd_S7579C7 = {  "S7579C7", // class name
  bases_S7579C7, 2,
  &(vtc_S7579C7[0]), // expected_vtbl_contents
  &(vtt_S7579C7[0]), // expected_vtt_contents
  ABISELECT(256,144), // object size
  NSPAIRA(_ZTI7S7579C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7579C7),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7579C7),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7579C5  : S7579C6 {
  ::S7579C7 s7579c5f0;
  int s7579c5f1;
  __tsi64 s7579c5f2:52;
  virtual  ~S7579C5(); // _ZN7S7579C5D1Ev
  virtual void  v2(); // _ZN7S7579C52v2Ev
  S7579C5(); // tgen
};
//SIG(-1 S7579C5) C1{ BC2{ vd v2 Fp[6]} vd v1 FC3{ VBC4{ v3 v4 v5 Fi FD[6] Fp[9]} BC2} Fi FL:52}


 S7579C5 ::~S7579C5(){ note_dtor("S7579C5", this);}
void  S7579C5 ::v2(){vfunc_called(this, "_ZN7S7579C52v2Ev");}
S7579C5 ::S7579C5(){ note_ctor("S7579C5", this);} // tgen

static void Test_S7579C5()
{
  extern Class_Descriptor cd_S7579C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,47)];
    init_test(&cd_S7579C5, buf);
    S7579C5 *dp, &lv = *(dp=new (buf) S7579C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,184), "sizeof(S7579C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7579C5)");
    check_base_class_offset(lv, (S7579C6*), 0, "S7579C5");
    check_field_offset(lv, s7579c5f0, ABISELECT(64,28), "S7579C5.s7579c5f0");
    check_field_offset(lv, s7579c5f1, ABISELECT(320,172), "S7579C5.s7579c5f1");
    set_bf_and_test(lv, s7579c5f2, ABISELECT(328,176), 0, 52, 1, "S7579C5");
    set_bf_and_test(lv, s7579c5f2, ABISELECT(328,176), 0, 52, hide_sll(1LL<<51), "S7579C5");
    test_class_info(&lv, &cd_S7579C5);
    dp->~S7579C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7579C5(Test_S7579C5, "S7579C5", ABISELECT(336,184));

#else // __cplusplus

extern void _ZN7S7579C5C1Ev();
extern void _ZN7S7579C5D1Ev();
Name_Map name_map_S7579C5[] = {
  NSPAIR(_ZN7S7579C5C1Ev),
  NSPAIR(_ZN7S7579C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7579C6;
extern VTBL_ENTRY _ZTI7S7579C6[];
extern  VTBL_ENTRY _ZTV7S7579C6[];
static Base_Class bases_S7579C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7579C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7579C5[];
extern void _ZN7S7579C5D1Ev();
extern void _ZN7S7579C5D0Ev();
extern void _ZN7S7579C62v1Ev();
extern void _ZN7S7579C52v2Ev();
static  VTBL_ENTRY vtc_S7579C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C5[0]),
  (VTBL_ENTRY)&_ZN7S7579C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7579C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7579C5[];
extern  VTBL_ENTRY _ZTV7S7579C5[];
Class_Descriptor cd_S7579C5 = {  "S7579C5", // class name
  bases_S7579C5, 1,
  &(vtc_S7579C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,184), // object size
  NSPAIRA(_ZTI7S7579C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7579C5),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  S7579C4  : virtual S7579C5 , virtual S7579C3 {
  virtual  ~S7579C4(); // _ZN7S7579C4D2Ev
  virtual void  v6(); // _ZN7S7579C42v6Ev
  S7579C4(); // tgen
};
//SIG(-1 S7579C4) C1{ VBC2{ BC3{ vd v2 Fp[6]} vd v3 FC4{ VBC5{ v4 v5 v6 Fi FD[6] Fp[9]} BC3} Fi FL:52} VBC5 vd v1}


 S7579C4 ::~S7579C4(){ note_dtor("S7579C4", this);}
void  S7579C4 ::v6(){vfunc_called(this, "_ZN7S7579C42v6Ev");}
S7579C4 ::S7579C4(){ note_ctor("S7579C4", this);} // tgen

static void Test_S7579C4()
{
  extern Class_Descriptor cd_S7579C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(35,77)];
    init_test(&cd_S7579C4, buf);
    S7579C4 *dp, &lv = *(dp=new (buf) S7579C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(544,304), "sizeof(S7579C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7579C4)");
    check_base_class_offset(lv, (S7579C6*)(S7579C5*), ABISELECT(16,4), "S7579C4");
    check_base_class_offset(lv, (S7579C5*), ABISELECT(16,4), "S7579C4");
    check_base_class_offset(lv, (S7579C3*), ABISELECT(352,188), "S7579C4");
    test_class_info(&lv, &cd_S7579C4);
    dp->~S7579C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7579C4(Test_S7579C4, "S7579C4", ABISELECT(544,304));

#else // __cplusplus

extern void _ZN7S7579C4C1Ev();
extern void _ZN7S7579C4D2Ev();
Name_Map name_map_S7579C4[] = {
  NSPAIR(_ZN7S7579C4C1Ev),
  NSPAIR(_ZN7S7579C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7579C6;
extern VTBL_ENTRY _ZTI7S7579C6[];
extern  VTBL_ENTRY _ZTV7S7579C6[];
extern Class_Descriptor cd_S7579C5;
extern VTBL_ENTRY _ZTI7S7579C5[];
extern  VTBL_ENTRY _ZTV7S7579C5[];
extern Class_Descriptor cd_S7579C3;
extern VTBL_ENTRY _ZTI7S7579C3[];
extern  VTBL_ENTRY _ZTV7S7579C3[];
static Base_Class bases_S7579C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7579C6,    ABISELECT(16,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
  0, 0},
  {&cd_S7579C5,    ABISELECT(16,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7579C3,    ABISELECT(352,188), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7579C4[];
extern void _ZN7S7579C4D1Ev();
extern void _ZN7S7579C4D0Ev();
extern void _ZN7S7579C42v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S7579C4D1Ev,_ZTv0_n12_N7S7579C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7579C4D1Ev,_ZThn4_N7S7579C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7579C4D0Ev,_ZTv0_n12_N7S7579C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S7579C4D0Ev,_ZThn4_N7S7579C4D0Ev)() __attribute__((weak));
extern void _ZN7S7579C62v1Ev();
extern void _ZN7S7579C52v2Ev();
extern void _ZN7S7579C32v3Ev();
extern void _ZN7S7579C32v4Ev();
extern void _ZN7S7579C32v5Ev();
static  VTBL_ENTRY vtc_S7579C4[] = {
  ABISELECT(352,188),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C4[0]),
  (VTBL_ENTRY)&_ZN7S7579C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C42v6Ev,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7579C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C4D1Ev,_ZTv0_n12_N7S7579C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C4D0Ev,_ZTv0_n12_N7S7579C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7579C52v2Ev,
  0,
  0,
  0,
  ABISELECT(-352,-188),
  (VTBL_ENTRY)&(_ZTI7S7579C4[0]),
  (VTBL_ENTRY)&_ZN7S7579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v5Ev,
};
extern VTBL_ENTRY _ZTV7S7579C4[];
static  VTT_ENTRY vtt_S7579C4[] = {
  {&(_ZTV7S7579C4[4]),  4,24},
  {&(_ZTV7S7579C4[12]),  12,24},
  {&(_ZTV7S7579C4[21]),  21,24},
};
extern VTBL_ENTRY _ZTI7S7579C4[];
extern  VTBL_ENTRY _ZTV7S7579C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7579C4[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C4D0Ev,_ZTv0_n12_N7S7579C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7579C4D0Ev,_ZThn4_N7S7579C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C4D1Ev,_ZTv0_n12_N7S7579C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7579C4D1Ev,_ZThn4_N7S7579C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7579C4 = {  "S7579C4", // class name
  bases_S7579C4, 3,
  &(vtc_S7579C4[0]), // expected_vtbl_contents
  &(vtt_S7579C4[0]), // expected_vtt_contents
  ABISELECT(544,304), // object size
  NSPAIRA(_ZTI7S7579C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7579C4),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7579C4),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7579C2  : virtual S7579C3 , S7579C4 , S7579C6 , virtual S7579C7 {
  long double s7579c2f0;
  ::S7579C4 s7579c2f1;
  __tsi64 s7579c2f2;
  virtual  ~S7579C2(); // _ZN7S7579C2D2Ev
  virtual void  v7(); // _ZN7S7579C22v7Ev
  S7579C2(); // tgen
};
//SIG(-1 S7579C2) C1{ VBC2{ v2 v3 v4 Fi FD[6] Fp[9]} BC3{ VBC4{ BC5{ vd v5 Fp[6]} vd v6 FC6{ VBC2 BC5} Fi FL:52} VBC2 vd v7} BC5 VBC6 vd v1 FD FC3 FL}


 S7579C2 ::~S7579C2(){ note_dtor("S7579C2", this);}
void  S7579C2 ::v7(){vfunc_called(this, "_ZN7S7579C22v7Ev");}
S7579C2 ::S7579C2(){ note_ctor("S7579C2", this);} // tgen

static void Test_S7579C2()
{
  extern Class_Descriptor cd_S7579C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(78,172)];
    init_test(&cd_S7579C2, buf);
    S7579C2 *dp, &lv = *(dp=new (buf) S7579C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1232,684), "sizeof(S7579C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7579C2)");
    check_base_class_offset(lv, (S7579C3*), ABISELECT(640,356), "S7579C2");
    check_base_class_offset(lv, (S7579C3*)(S7579C4*), ABISELECT(640,356), "S7579C2");
    check_base_class_offset(lv, (S7579C3*)(S7579C7*), ABISELECT(640,356), "S7579C2");
    check_base_class_offset(lv, (S7579C6*)(S7579C5*), ABISELECT(832,472), "S7579C2");
    check_base_class_offset(lv, (S7579C5*)(S7579C4*), ABISELECT(832,472), "S7579C2");
    check_base_class_offset(lv, (S7579C4*), 0, "S7579C2");
    /*is_ambiguous_... S7579C2::S7579C6 */ AMB_check_base_class_offset(lv, (S7579C6*), ABISELECT(8,4), "S7579C2");
    check_base_class_offset(lv, (S7579C6*)(S7579C7*), ABISELECT(1168,656), "S7579C2");
    check_base_class_offset(lv, (S7579C7*), ABISELECT(1168,656), "S7579C2");
    check_field_offset(lv, s7579c2f0, ABISELECT(64,32), "S7579C2.s7579c2f0");
    check_field_offset(lv, s7579c2f1, ABISELECT(80,44), "S7579C2.s7579c2f1");
    check_field_offset(lv, s7579c2f2, ABISELECT(624,348), "S7579C2.s7579c2f2");
    test_class_info(&lv, &cd_S7579C2);
    dp->~S7579C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7579C2(Test_S7579C2, "S7579C2", ABISELECT(1232,684));

#else // __cplusplus

extern void _ZN7S7579C2C1Ev();
extern void _ZN7S7579C2D2Ev();
Name_Map name_map_S7579C2[] = {
  NSPAIR(_ZN7S7579C2C1Ev),
  NSPAIR(_ZN7S7579C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7579C3;
extern VTBL_ENTRY _ZTI7S7579C3[];
extern  VTBL_ENTRY _ZTV7S7579C3[];
extern Class_Descriptor cd_S7579C6;
extern VTBL_ENTRY _ZTI7S7579C6[];
extern  VTBL_ENTRY _ZTV7S7579C6[];
extern Class_Descriptor cd_S7579C5;
extern VTBL_ENTRY _ZTI7S7579C5[];
extern  VTBL_ENTRY _ZTV7S7579C5[];
extern Class_Descriptor cd_S7579C4;
extern VTBL_ENTRY _ZTI7S7579C4[];
extern  VTBL_ENTRY _ZTV7S7579C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7579C4[];
extern Class_Descriptor cd_S7579C6;
extern VTBL_ENTRY _ZTI7S7579C6[];
extern  VTBL_ENTRY _ZTV7S7579C6[];
extern Class_Descriptor cd_S7579C6;
extern VTBL_ENTRY _ZTI7S7579C6[];
extern  VTBL_ENTRY _ZTV7S7579C6[];
extern Class_Descriptor cd_S7579C7;
extern VTBL_ENTRY _ZTI7S7579C7[];
extern  VTBL_ENTRY _ZTV7S7579C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7579C7[];
static Base_Class bases_S7579C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7579C3,    ABISELECT(640,356), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7579C6,    ABISELECT(832,472), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7579C5,    ABISELECT(832,472), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7579C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7579C6,    ABISELECT(8,4), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7579C6,    ABISELECT(1168,656), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7579C7,    ABISELECT(1168,656), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7579C2[];
extern void _ZN7S7579C2D1Ev();
extern void _ZN7S7579C2D0Ev();
extern void _ZN7S7579C42v6Ev();
extern void _ZN7S7579C22v7Ev();
extern void ABISELECT(_ZThn8_N7S7579C2D1Ev,_ZThn4_N7S7579C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7579C2D0Ev,_ZThn4_N7S7579C2D0Ev)();
extern void _ZN7S7579C62v1Ev();
extern void _ZN7S7579C32v3Ev();
extern void _ZN7S7579C32v4Ev();
extern void _ZN7S7579C32v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S7579C2D1Ev,_ZTv0_n12_N7S7579C2D1Ev)();
extern void ABISELECT(_ZThn832_N7S7579C2D1Ev,_ZThn472_N7S7579C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7579C2D0Ev,_ZTv0_n12_N7S7579C2D0Ev)();
extern void ABISELECT(_ZThn832_N7S7579C2D0Ev,_ZThn472_N7S7579C2D0Ev)() __attribute__((weak));
extern void _ZN7S7579C62v1Ev();
extern void _ZN7S7579C52v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7579C2D1Ev,_ZTv0_n16_N7S7579C2D1Ev)();
extern void ABISELECT(_ZThn1168_N7S7579C2D1Ev,_ZThn656_N7S7579C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7579C2D0Ev,_ZTv0_n16_N7S7579C2D0Ev)();
extern void ABISELECT(_ZThn1168_N7S7579C2D0Ev,_ZThn656_N7S7579C2D0Ev)() __attribute__((weak));
extern void _ZN7S7579C62v1Ev();
static  VTBL_ENTRY vtc_S7579C2[] = {
  ABISELECT(1168,656),
  ABISELECT(640,356),
  ABISELECT(832,472),
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C2[0]),
  (VTBL_ENTRY)&_ZN7S7579C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7579C22v7Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7579C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7579C2D1Ev,_ZThn4_N7S7579C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7579C2D0Ev,_ZThn4_N7S7579C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
  0,
  0,
  0,
  ABISELECT(-640,-356),
  (VTBL_ENTRY)&(_ZTI7S7579C2[0]),
  (VTBL_ENTRY)&_ZN7S7579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v5Ev,
  0,
  0,
  ABISELECT(-832,-472),
  ABISELECT(-832,-472),
  (VTBL_ENTRY)&(_ZTI7S7579C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C2D1Ev,_ZTv0_n12_N7S7579C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C2D0Ev,_ZTv0_n12_N7S7579C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7579C52v2Ev,
  0,
  ABISELECT(-1168,-656),
  ABISELECT(-528,-300),
  ABISELECT(-1168,-656),
  (VTBL_ENTRY)&(_ZTI7S7579C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7579C2D1Ev,_ZTv0_n16_N7S7579C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7579C2D0Ev,_ZTv0_n16_N7S7579C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
};
extern VTBL_ENTRY _ZTV7S7579C2[];
extern void _ZN7S7579C4D1Ev();
extern void _ZN7S7579C4D0Ev();
extern void _ZN7S7579C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C4__7S7579C2[] = {
  ABISELECT(640,356),
  ABISELECT(832,472),
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C4[0]),
  (VTBL_ENTRY)&_ZN7S7579C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C42v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7579C4D1Ev,_ZTv0_n12_N7S7579C4D1Ev)();
extern void ABISELECT(_ZThn832_N7S7579C4D1Ev,_ZThn472_N7S7579C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7579C4D0Ev,_ZTv0_n12_N7S7579C4D0Ev)();
extern void ABISELECT(_ZThn832_N7S7579C4D0Ev,_ZThn472_N7S7579C4D0Ev)() __attribute__((weak));
extern void _ZN7S7579C62v1Ev();
extern void _ZN7S7579C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C5__7S7579C4__7S7579C2[] = {
  0,
  0,
  ABISELECT(-832,-472),
  ABISELECT(-832,-472),
  (VTBL_ENTRY)&(_ZTI7S7579C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C4D1Ev,_ZTv0_n12_N7S7579C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C4D0Ev,_ZTv0_n12_N7S7579C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7579C52v2Ev,
};
extern void _ZN7S7579C32v3Ev();
extern void _ZN7S7579C32v4Ev();
extern void _ZN7S7579C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C3__7S7579C4__7S7579C2[] = {
  0,
  0,
  0,
  ABISELECT(-640,-356),
  (VTBL_ENTRY)&(_ZTI7S7579C4[0]),
  (VTBL_ENTRY)&_ZN7S7579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v5Ev,
};
extern void _ZN7S7579C7D1Ev();
extern void _ZN7S7579C7D0Ev();
extern void _ZN7S7579C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C7__7S7579C2[] = {
  ABISELECT(-528,-300),
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C7[0]),
  (VTBL_ENTRY)&_ZN7S7579C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
};
extern void _ZN7S7579C32v3Ev();
extern void _ZN7S7579C32v4Ev();
extern void _ZN7S7579C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C3__7S7579C7__7S7579C2[] = {
  0,
  0,
  0,
  ABISELECT(528,300),
  (VTBL_ENTRY)&(_ZTI7S7579C7[0]),
  (VTBL_ENTRY)&_ZN7S7579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v5Ev,
};
static  VTT_ENTRY vtt_S7579C2[] = {
  {&(_ZTV7S7579C2[5]),  5,39},
  {&(_tg__ZTV7S7579C4__7S7579C2[4]),  4,7},
  {&(_tg__ZTV7S7579C5__7S7579C4__7S7579C2[5]),  5,9},
  {&(_tg__ZTV7S7579C3__7S7579C4__7S7579C2[5]),  5,8},
  {&(_ZTV7S7579C2[19]),  19,39},
  {&(_ZTV7S7579C2[27]),  27,39},
  {&(_ZTV7S7579C2[36]),  36,39},
  {&(_tg__ZTV7S7579C7__7S7579C2[3]),  3,6},
  {&(_tg__ZTV7S7579C3__7S7579C7__7S7579C2[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S7579C2[];
extern  VTBL_ENTRY _ZTV7S7579C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7579C2[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C4D0Ev,_ZTv0_n12_N7S7579C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S7579C4D0Ev,_ZThn472_N7S7579C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C4D1Ev,_ZTv0_n12_N7S7579C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S7579C4D1Ev,_ZThn472_N7S7579C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7579C2D0Ev,_ZTv0_n16_N7S7579C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N7S7579C2D0Ev,_ZThn656_N7S7579C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7579C2D1Ev,_ZTv0_n16_N7S7579C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N7S7579C2D1Ev,_ZThn656_N7S7579C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C2D0Ev,_ZTv0_n12_N7S7579C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S7579C2D0Ev,_ZThn472_N7S7579C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C2D1Ev,_ZTv0_n12_N7S7579C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S7579C2D1Ev,_ZThn472_N7S7579C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7579C2 = {  "S7579C2", // class name
  bases_S7579C2, 7,
  &(vtc_S7579C2[0]), // expected_vtbl_contents
  &(vtt_S7579C2[0]), // expected_vtt_contents
  ABISELECT(1232,684), // object size
  NSPAIRA(_ZTI7S7579C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7579C2),39, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7579C2),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7579C1  : S7579C2 , virtual S10180C63 {
  void *s7579c1f0;
  short s7579c1f1;
  ~S7579C1(); // tgen
  S7579C1(); // tgen
};
//SIG(1 S7579C1) C1{ BC2{ VBC3{ v1 v2 v3 Fi FD[6] Fp[9]} BC4{ VBC5{ BC6{ vd v4 Fp[6]} vd v5 FC7{ VBC3 BC6} Fi FL:52} VBC3 vd v6} BC6 VBC7 vd v7 FD FC4 FL} VBC8{ m Fi} Fp Fs}


S7579C1 ::~S7579C1(){ note_dtor("S7579C1", this);} // tgen
S7579C1 ::S7579C1(){ note_ctor("S7579C1", this);} // tgen

static void Test_S7579C1()
{
  extern Class_Descriptor cd_S7579C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(79,175)];
    init_test(&cd_S7579C1, buf);
    S7579C1 *dp, &lv = *(dp=new (buf) S7579C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1248,696), "sizeof(S7579C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7579C1)");
    check_base_class_offset(lv, (S7579C3*)(S7579C2*), ABISELECT(656,364), "S7579C1");
    check_base_class_offset(lv, (S7579C3*)(S7579C4*)(S7579C2*), ABISELECT(656,364), "S7579C1");
    check_base_class_offset(lv, (S7579C3*)(S7579C7*), ABISELECT(656,364), "S7579C1");
    check_base_class_offset(lv, (S7579C6*)(S7579C5*), ABISELECT(848,480), "S7579C1");
    check_base_class_offset(lv, (S7579C5*)(S7579C4*)(S7579C2*), ABISELECT(848,480), "S7579C1");
    check_base_class_offset(lv, (S7579C4*)(S7579C2*), 0, "S7579C1");
    /*is_ambiguous_... S7579C2::S7579C6 */ AMB_check_base_class_offset(lv, (S7579C6*)(S7579C2*), ABISELECT(8,4), "S7579C1");
    check_base_class_offset(lv, (S7579C6*)(S7579C7*), ABISELECT(1184,664), "S7579C1");
    check_base_class_offset(lv, (S7579C7*)(S7579C2*), ABISELECT(1184,664), "S7579C1");
    check_base_class_offset(lv, (S7579C2*), 0, "S7579C1");
    check_base_class_offset(lv, (S10180C63*), ABISELECT(1240,692), "S7579C1");
    check_field_offset(lv, s7579c1f0, ABISELECT(632,356), "S7579C1.s7579c1f0");
    check_field_offset(lv, s7579c1f1, ABISELECT(640,360), "S7579C1.s7579c1f1");
    test_class_info(&lv, &cd_S7579C1);
    dp->~S7579C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7579C1(Test_S7579C1, "S7579C1", ABISELECT(1248,696));

#else // __cplusplus

extern void _ZN7S7579C1C1Ev();
extern void _ZN7S7579C1D1Ev();
Name_Map name_map_S7579C1[] = {
  NSPAIR(_ZN7S7579C1C1Ev),
  NSPAIR(_ZN7S7579C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7579C3;
extern VTBL_ENTRY _ZTI7S7579C3[];
extern  VTBL_ENTRY _ZTV7S7579C3[];
extern Class_Descriptor cd_S7579C6;
extern VTBL_ENTRY _ZTI7S7579C6[];
extern  VTBL_ENTRY _ZTV7S7579C6[];
extern Class_Descriptor cd_S7579C5;
extern VTBL_ENTRY _ZTI7S7579C5[];
extern  VTBL_ENTRY _ZTV7S7579C5[];
extern Class_Descriptor cd_S7579C4;
extern VTBL_ENTRY _ZTI7S7579C4[];
extern  VTBL_ENTRY _ZTV7S7579C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7579C4[];
extern Class_Descriptor cd_S7579C6;
extern VTBL_ENTRY _ZTI7S7579C6[];
extern  VTBL_ENTRY _ZTV7S7579C6[];
extern Class_Descriptor cd_S7579C6;
extern VTBL_ENTRY _ZTI7S7579C6[];
extern  VTBL_ENTRY _ZTV7S7579C6[];
extern Class_Descriptor cd_S7579C7;
extern VTBL_ENTRY _ZTI7S7579C7[];
extern  VTBL_ENTRY _ZTV7S7579C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7579C7[];
extern Class_Descriptor cd_S7579C2;
extern VTBL_ENTRY _ZTI7S7579C2[];
extern  VTBL_ENTRY _ZTV7S7579C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7579C2[];
extern Class_Descriptor cd_S10180C63;
extern VTBL_ENTRY _ZTI9S10180C63[];
static Base_Class bases_S7579C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7579C3,    ABISELECT(656,364), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7579C6,    ABISELECT(848,480), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7579C5,    ABISELECT(848,480), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7579C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7579C6,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7579C6,    ABISELECT(1184,664), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7579C7,    ABISELECT(1184,664), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7579C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C63,    ABISELECT(1240,692), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7579C1[];
extern void _ZN7S7579C1D1Ev();
extern void _ZN7S7579C1D0Ev();
extern void _ZN7S7579C42v6Ev();
extern void _ZN7S7579C22v7Ev();
extern void ABISELECT(_ZThn8_N7S7579C1D1Ev,_ZThn4_N7S7579C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7579C1D0Ev,_ZThn4_N7S7579C1D0Ev)();
extern void _ZN7S7579C62v1Ev();
extern void _ZN7S7579C32v3Ev();
extern void _ZN7S7579C32v4Ev();
extern void _ZN7S7579C32v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S7579C1D1Ev,_ZTv0_n12_N7S7579C1D1Ev)();
extern void ABISELECT(_ZThn848_N7S7579C1D1Ev,_ZThn480_N7S7579C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7579C1D0Ev,_ZTv0_n12_N7S7579C1D0Ev)();
extern void ABISELECT(_ZThn848_N7S7579C1D0Ev,_ZThn480_N7S7579C1D0Ev)() __attribute__((weak));
extern void _ZN7S7579C62v1Ev();
extern void _ZN7S7579C52v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7579C1D1Ev,_ZTv0_n16_N7S7579C1D1Ev)();
extern void ABISELECT(_ZThn1184_N7S7579C1D1Ev,_ZThn664_N7S7579C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7579C1D0Ev,_ZTv0_n16_N7S7579C1D0Ev)();
extern void ABISELECT(_ZThn1184_N7S7579C1D0Ev,_ZThn664_N7S7579C1D0Ev)() __attribute__((weak));
extern void _ZN7S7579C62v1Ev();
static  VTBL_ENTRY vtc_S7579C1[] = {
  ABISELECT(1240,692),
  ABISELECT(1184,664),
  ABISELECT(656,364),
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C1[0]),
  (VTBL_ENTRY)&_ZN7S7579C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7579C22v7Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7579C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7579C1D1Ev,_ZThn4_N7S7579C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7579C1D0Ev,_ZThn4_N7S7579C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
  0,
  0,
  0,
  ABISELECT(-656,-364),
  (VTBL_ENTRY)&(_ZTI7S7579C1[0]),
  (VTBL_ENTRY)&_ZN7S7579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v5Ev,
  0,
  0,
  ABISELECT(-848,-480),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI7S7579C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C1D1Ev,_ZTv0_n12_N7S7579C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C1D0Ev,_ZTv0_n12_N7S7579C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7579C52v2Ev,
  0,
  ABISELECT(-1184,-664),
  ABISELECT(-528,-300),
  ABISELECT(-1184,-664),
  (VTBL_ENTRY)&(_ZTI7S7579C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7579C1D1Ev,_ZTv0_n16_N7S7579C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7579C1D0Ev,_ZTv0_n16_N7S7579C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
};
extern VTBL_ENTRY _ZTV7S7579C1[];
extern void _ZN7S7579C2D1Ev();
extern void _ZN7S7579C2D0Ev();
extern void _ZN7S7579C42v6Ev();
extern void _ZN7S7579C22v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C2__7S7579C1[] = {
  ABISELECT(1184,664),
  ABISELECT(656,364),
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C2[0]),
  (VTBL_ENTRY)&_ZN7S7579C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7579C22v7Ev,
};
extern void _ZN7S7579C4D1Ev();
extern void _ZN7S7579C4D0Ev();
extern void _ZN7S7579C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C47S7579C2__7S7579C1[] = {
  ABISELECT(656,364),
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C4[0]),
  (VTBL_ENTRY)&_ZN7S7579C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C42v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7579C4D1Ev,_ZTv0_n12_N7S7579C4D1Ev)();
extern void ABISELECT(_ZThn848_N7S7579C4D1Ev,_ZThn480_N7S7579C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7579C4D0Ev,_ZTv0_n12_N7S7579C4D0Ev)();
extern void ABISELECT(_ZThn848_N7S7579C4D0Ev,_ZThn480_N7S7579C4D0Ev)() __attribute__((weak));
extern void _ZN7S7579C62v1Ev();
extern void _ZN7S7579C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C5__7S7579C47S7579C2__7S7579C1[] = {
  0,
  0,
  ABISELECT(-848,-480),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI7S7579C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C4D1Ev,_ZTv0_n12_N7S7579C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C4D0Ev,_ZTv0_n12_N7S7579C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7579C52v2Ev,
};
extern void _ZN7S7579C32v3Ev();
extern void _ZN7S7579C32v4Ev();
extern void _ZN7S7579C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C3__7S7579C47S7579C2__7S7579C1[] = {
  0,
  0,
  0,
  ABISELECT(-656,-364),
  (VTBL_ENTRY)&(_ZTI7S7579C4[0]),
  (VTBL_ENTRY)&_ZN7S7579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v5Ev,
};
extern void _ZN7S7579C32v3Ev();
extern void _ZN7S7579C32v4Ev();
extern void _ZN7S7579C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C3__7S7579C2__7S7579C1[] = {
  0,
  0,
  0,
  ABISELECT(-656,-364),
  (VTBL_ENTRY)&(_ZTI7S7579C2[0]),
  (VTBL_ENTRY)&_ZN7S7579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7579C2D1Ev,_ZTv0_n12_N7S7579C2D1Ev)();
extern void ABISELECT(_ZThn848_N7S7579C2D1Ev,_ZThn480_N7S7579C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7579C2D0Ev,_ZTv0_n12_N7S7579C2D0Ev)();
extern void ABISELECT(_ZThn848_N7S7579C2D0Ev,_ZThn480_N7S7579C2D0Ev)() __attribute__((weak));
extern void _ZN7S7579C62v1Ev();
extern void _ZN7S7579C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C5__7S7579C2__7S7579C1[] = {
  0,
  0,
  ABISELECT(-848,-480),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI7S7579C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C2D1Ev,_ZTv0_n12_N7S7579C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7579C2D0Ev,_ZTv0_n12_N7S7579C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7579C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7579C2D1Ev,_ZTv0_n16_N7S7579C2D1Ev)();
extern void ABISELECT(_ZThn1184_N7S7579C2D1Ev,_ZThn664_N7S7579C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7579C2D0Ev,_ZTv0_n16_N7S7579C2D0Ev)();
extern void ABISELECT(_ZThn1184_N7S7579C2D0Ev,_ZThn664_N7S7579C2D0Ev)() __attribute__((weak));
extern void _ZN7S7579C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C7__7S7579C2__7S7579C1[] = {
  0,
  ABISELECT(-1184,-664),
  ABISELECT(-528,-300),
  ABISELECT(-1184,-664),
  (VTBL_ENTRY)&(_ZTI7S7579C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7579C2D1Ev,_ZTv0_n16_N7S7579C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7579C2D0Ev,_ZTv0_n16_N7S7579C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
};
extern void _ZN7S7579C7D1Ev();
extern void _ZN7S7579C7D0Ev();
extern void _ZN7S7579C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C7__7S7579C1[] = {
  ABISELECT(-528,-300),
  0,
  (VTBL_ENTRY)&(_ZTI7S7579C7[0]),
  (VTBL_ENTRY)&_ZN7S7579C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7579C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7579C62v1Ev,
};
extern void _ZN7S7579C32v3Ev();
extern void _ZN7S7579C32v4Ev();
extern void _ZN7S7579C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7579C3__7S7579C7__7S7579C1[] = {
  0,
  0,
  0,
  ABISELECT(528,300),
  (VTBL_ENTRY)&(_ZTI7S7579C7[0]),
  (VTBL_ENTRY)&_ZN7S7579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7579C32v5Ev,
};
static  VTT_ENTRY vtt_S7579C1[] = {
  {&(_ZTV7S7579C1[6]),  6,40},
  {&(_tg__ZTV7S7579C2__7S7579C1[5]),  5,9},
  {&(_tg__ZTV7S7579C47S7579C2__7S7579C1[4]),  4,7},
  {&(_tg__ZTV7S7579C5__7S7579C47S7579C2__7S7579C1[5]),  5,9},
  {&(_tg__ZTV7S7579C3__7S7579C47S7579C2__7S7579C1[5]),  5,8},
  {&(_tg__ZTV7S7579C3__7S7579C2__7S7579C1[5]),  5,8},
  {&(_tg__ZTV7S7579C5__7S7579C2__7S7579C1[5]),  5,9},
  {&(_tg__ZTV7S7579C7__7S7579C2__7S7579C1[5]),  5,8},
  {&(_ZTV7S7579C1[20]),  20,40},
  {&(_ZTV7S7579C1[28]),  28,40},
  {&(_ZTV7S7579C1[37]),  37,40},
  {&(_tg__ZTV7S7579C7__7S7579C1[3]),  3,6},
  {&(_tg__ZTV7S7579C3__7S7579C7__7S7579C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S7579C1[];
extern  VTBL_ENTRY _ZTV7S7579C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7579C1[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7579C2D0Ev,_ZTv0_n16_N7S7579C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S7579C2D0Ev,_ZThn664_N7S7579C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7579C2D1Ev,_ZTv0_n16_N7S7579C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S7579C2D1Ev,_ZThn664_N7S7579C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C2D0Ev,_ZTv0_n12_N7S7579C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7579C2D0Ev,_ZThn480_N7S7579C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C2D1Ev,_ZTv0_n12_N7S7579C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7579C2D1Ev,_ZThn480_N7S7579C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C4D0Ev,_ZTv0_n12_N7S7579C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7579C4D0Ev,_ZThn480_N7S7579C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C4D1Ev,_ZTv0_n12_N7S7579C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7579C4D1Ev,_ZThn480_N7S7579C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7579C1D0Ev,_ZTv0_n16_N7S7579C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S7579C1D0Ev,_ZThn664_N7S7579C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7579C1D1Ev,_ZTv0_n16_N7S7579C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S7579C1D1Ev,_ZThn664_N7S7579C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C1D0Ev,_ZTv0_n12_N7S7579C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7579C1D0Ev,_ZThn480_N7S7579C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7579C1D1Ev,_ZTv0_n12_N7S7579C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7579C1D1Ev,_ZThn480_N7S7579C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7579C1 = {  "S7579C1", // class name
  bases_S7579C1, 9,
  &(vtc_S7579C1[0]), // expected_vtbl_contents
  &(vtt_S7579C1[0]), // expected_vtt_contents
  ABISELECT(1248,696), // object size
  NSPAIRA(_ZTI7S7579C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7579C1),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7579C1),13, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7578C3  {
  int s7578c3f0;
  long double s7578c3f1[6];
  void *s7578c3f2[9];
  virtual void  v3(); // _ZN7S7578C32v3Ev
  virtual void  v4(); // _ZN7S7578C32v4Ev
  virtual void  v5(); // _ZN7S7578C32v5Ev
  ~S7578C3(); // tgen
  S7578C3(); // tgen
};
//SIG(-1 S7578C3) C1{ v1 v2 v3 Fi FD[6] Fp[9]}


void  S7578C3 ::v3(){vfunc_called(this, "_ZN7S7578C32v3Ev");}
void  S7578C3 ::v4(){vfunc_called(this, "_ZN7S7578C32v4Ev");}
void  S7578C3 ::v5(){vfunc_called(this, "_ZN7S7578C32v5Ev");}
S7578C3 ::~S7578C3(){ note_dtor("S7578C3", this);} // tgen
S7578C3 ::S7578C3(){ note_ctor("S7578C3", this);} // tgen

static void Test_S7578C3()
{
  extern Class_Descriptor cd_S7578C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S7578C3, buf);
    S7578C3 *dp, &lv = *(dp=new (buf) S7578C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S7578C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7578C3)");
    check_field_offset(lv, s7578c3f0, ABISELECT(8,4), "S7578C3.s7578c3f0");
    check_field_offset(lv, s7578c3f1, ABISELECT(16,8), "S7578C3.s7578c3f1");
    check_field_offset(lv, s7578c3f2, ABISELECT(112,80), "S7578C3.s7578c3f2");
    test_class_info(&lv, &cd_S7578C3);
    dp->~S7578C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7578C3(Test_S7578C3, "S7578C3", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN7S7578C3C1Ev();
extern void _ZN7S7578C3D1Ev();
Name_Map name_map_S7578C3[] = {
  NSPAIR(_ZN7S7578C3C1Ev),
  NSPAIR(_ZN7S7578C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7578C3[];
extern void _ZN7S7578C32v3Ev();
extern void _ZN7S7578C32v4Ev();
extern void _ZN7S7578C32v5Ev();
static  VTBL_ENTRY vtc_S7578C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C3[0]),
  (VTBL_ENTRY)&_ZN7S7578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S7578C3[];
extern  VTBL_ENTRY _ZTV7S7578C3[];
Class_Descriptor cd_S7578C3 = {  "S7578C3", // class name
  0,0,//no base classes
  &(vtc_S7578C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI7S7578C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7578C3),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  S7578C6  {
  void *s7578c6f0[6];
  virtual  ~S7578C6(); // _ZN7S7578C6D1Ev
  virtual void  v1(); // _ZN7S7578C62v1Ev
  S7578C6(); // tgen
};
//SIG(-1 S7578C6) C1{ vd v1 Fp[6]}


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

static void Test_S7578C6()
{
  extern Class_Descriptor cd_S7578C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7578C6, buf);
    S7578C6 *dp, &lv = *(dp=new (buf) S7578C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7578C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7578C6)");
    check_field_offset(lv, s7578c6f0, ABISELECT(8,4), "S7578C6.s7578c6f0");
    test_class_info(&lv, &cd_S7578C6);
    dp->~S7578C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7578C6(Test_S7578C6, "S7578C6", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7578C6C1Ev();
extern void _ZN7S7578C6D1Ev();
Name_Map name_map_S7578C6[] = {
  NSPAIR(_ZN7S7578C6C1Ev),
  NSPAIR(_ZN7S7578C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7578C6[];
extern void _ZN7S7578C6D1Ev();
extern void _ZN7S7578C6D0Ev();
extern void _ZN7S7578C62v1Ev();
static  VTBL_ENTRY vtc_S7578C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C6[0]),
  (VTBL_ENTRY)&_ZN7S7578C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
};
extern VTBL_ENTRY _ZTI7S7578C6[];
extern  VTBL_ENTRY _ZTV7S7578C6[];
Class_Descriptor cd_S7578C6 = {  "S7578C6", // class name
  0,0,//no base classes
  &(vtc_S7578C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7578C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7578C6),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  S7578C7  : virtual S7578C3 , S7578C6 {
  ~S7578C7(); // tgen
  S7578C7(); // tgen
};
//SIG(-1 S7578C7) C1{ VBC2{ v1 v2 v3 Fi FD[6] Fp[9]} BC3{ vd v4 Fp[6]}}


S7578C7 ::~S7578C7(){ note_dtor("S7578C7", this);} // tgen
S7578C7 ::S7578C7(){ note_ctor("S7578C7", this);} // tgen

static void Test_S7578C7()
{
  extern Class_Descriptor cd_S7578C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,37)];
    init_test(&cd_S7578C7, buf);
    S7578C7 *dp, &lv = *(dp=new (buf) S7578C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,144), "sizeof(S7578C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7578C7)");
    check_base_class_offset(lv, (S7578C3*), ABISELECT(64,28), "S7578C7");
    check_base_class_offset(lv, (S7578C6*), 0, "S7578C7");
    test_class_info(&lv, &cd_S7578C7);
    dp->~S7578C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7578C7(Test_S7578C7, "S7578C7", ABISELECT(256,144));

#else // __cplusplus

extern void _ZN7S7578C7C1Ev();
extern void _ZN7S7578C7D1Ev();
Name_Map name_map_S7578C7[] = {
  NSPAIR(_ZN7S7578C7C1Ev),
  NSPAIR(_ZN7S7578C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7578C3;
extern VTBL_ENTRY _ZTI7S7578C3[];
extern  VTBL_ENTRY _ZTV7S7578C3[];
extern Class_Descriptor cd_S7578C6;
extern VTBL_ENTRY _ZTI7S7578C6[];
extern  VTBL_ENTRY _ZTV7S7578C6[];
static Base_Class bases_S7578C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7578C3,    ABISELECT(64,28), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7578C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7578C7[];
extern void _ZN7S7578C7D1Ev();
extern void _ZN7S7578C7D0Ev();
extern void _ZN7S7578C62v1Ev();
extern void _ZN7S7578C32v3Ev();
extern void _ZN7S7578C32v4Ev();
extern void _ZN7S7578C32v5Ev();
static  VTBL_ENTRY vtc_S7578C7[] = {
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C7[0]),
  (VTBL_ENTRY)&_ZN7S7578C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI7S7578C7[0]),
  (VTBL_ENTRY)&_ZN7S7578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v5Ev,
};
extern VTBL_ENTRY _ZTV7S7578C7[];
static  VTT_ENTRY vtt_S7578C7[] = {
  {&(_ZTV7S7578C7[3]),  3,14},
  {&(_ZTV7S7578C7[11]),  11,14},
};
extern VTBL_ENTRY _ZTI7S7578C7[];
extern  VTBL_ENTRY _ZTV7S7578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7578C7[];
Class_Descriptor cd_S7578C7 = {  "S7578C7", // class name
  bases_S7578C7, 2,
  &(vtc_S7578C7[0]), // expected_vtbl_contents
  &(vtt_S7578C7[0]), // expected_vtt_contents
  ABISELECT(256,144), // object size
  NSPAIRA(_ZTI7S7578C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7578C7),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7578C7),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7578C5  : S7578C6 {
  ::S7578C7 s7578c5f0;
  int s7578c5f1;
  __tsi64 s7578c5f2:52;
  virtual  ~S7578C5(); // _ZN7S7578C5D1Ev
  virtual void  v2(); // _ZN7S7578C52v2Ev
  S7578C5(); // tgen
};
//SIG(-1 S7578C5) C1{ BC2{ vd v2 Fp[6]} vd v1 FC3{ VBC4{ v3 v4 v5 Fi FD[6] Fp[9]} BC2} Fi FL:52}


 S7578C5 ::~S7578C5(){ note_dtor("S7578C5", this);}
void  S7578C5 ::v2(){vfunc_called(this, "_ZN7S7578C52v2Ev");}
S7578C5 ::S7578C5(){ note_ctor("S7578C5", this);} // tgen

static void Test_S7578C5()
{
  extern Class_Descriptor cd_S7578C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,47)];
    init_test(&cd_S7578C5, buf);
    S7578C5 *dp, &lv = *(dp=new (buf) S7578C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,184), "sizeof(S7578C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7578C5)");
    check_base_class_offset(lv, (S7578C6*), 0, "S7578C5");
    check_field_offset(lv, s7578c5f0, ABISELECT(64,28), "S7578C5.s7578c5f0");
    check_field_offset(lv, s7578c5f1, ABISELECT(320,172), "S7578C5.s7578c5f1");
    set_bf_and_test(lv, s7578c5f2, ABISELECT(328,176), 0, 52, 1, "S7578C5");
    set_bf_and_test(lv, s7578c5f2, ABISELECT(328,176), 0, 52, hide_sll(1LL<<51), "S7578C5");
    test_class_info(&lv, &cd_S7578C5);
    dp->~S7578C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7578C5(Test_S7578C5, "S7578C5", ABISELECT(336,184));

#else // __cplusplus

extern void _ZN7S7578C5C1Ev();
extern void _ZN7S7578C5D1Ev();
Name_Map name_map_S7578C5[] = {
  NSPAIR(_ZN7S7578C5C1Ev),
  NSPAIR(_ZN7S7578C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7578C6;
extern VTBL_ENTRY _ZTI7S7578C6[];
extern  VTBL_ENTRY _ZTV7S7578C6[];
static Base_Class bases_S7578C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7578C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7578C5[];
extern void _ZN7S7578C5D1Ev();
extern void _ZN7S7578C5D0Ev();
extern void _ZN7S7578C62v1Ev();
extern void _ZN7S7578C52v2Ev();
static  VTBL_ENTRY vtc_S7578C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C5[0]),
  (VTBL_ENTRY)&_ZN7S7578C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7578C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7578C5[];
extern  VTBL_ENTRY _ZTV7S7578C5[];
Class_Descriptor cd_S7578C5 = {  "S7578C5", // class name
  bases_S7578C5, 1,
  &(vtc_S7578C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,184), // object size
  NSPAIRA(_ZTI7S7578C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7578C5),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  S7578C4  : virtual S7578C5 , virtual S7578C3 {
  virtual  ~S7578C4(); // _ZN7S7578C4D2Ev
  virtual void  v6(); // _ZN7S7578C42v6Ev
  S7578C4(); // tgen
};
//SIG(-1 S7578C4) C1{ VBC2{ BC3{ vd v2 Fp[6]} vd v3 FC4{ VBC5{ v4 v5 v6 Fi FD[6] Fp[9]} BC3} Fi FL:52} VBC5 vd v1}


 S7578C4 ::~S7578C4(){ note_dtor("S7578C4", this);}
void  S7578C4 ::v6(){vfunc_called(this, "_ZN7S7578C42v6Ev");}
S7578C4 ::S7578C4(){ note_ctor("S7578C4", this);} // tgen

static void Test_S7578C4()
{
  extern Class_Descriptor cd_S7578C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(35,77)];
    init_test(&cd_S7578C4, buf);
    S7578C4 *dp, &lv = *(dp=new (buf) S7578C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(544,304), "sizeof(S7578C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7578C4)");
    check_base_class_offset(lv, (S7578C6*)(S7578C5*), ABISELECT(16,4), "S7578C4");
    check_base_class_offset(lv, (S7578C5*), ABISELECT(16,4), "S7578C4");
    check_base_class_offset(lv, (S7578C3*), ABISELECT(352,188), "S7578C4");
    test_class_info(&lv, &cd_S7578C4);
    dp->~S7578C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7578C4(Test_S7578C4, "S7578C4", ABISELECT(544,304));

#else // __cplusplus

extern void _ZN7S7578C4C1Ev();
extern void _ZN7S7578C4D2Ev();
Name_Map name_map_S7578C4[] = {
  NSPAIR(_ZN7S7578C4C1Ev),
  NSPAIR(_ZN7S7578C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7578C6;
extern VTBL_ENTRY _ZTI7S7578C6[];
extern  VTBL_ENTRY _ZTV7S7578C6[];
extern Class_Descriptor cd_S7578C5;
extern VTBL_ENTRY _ZTI7S7578C5[];
extern  VTBL_ENTRY _ZTV7S7578C5[];
extern Class_Descriptor cd_S7578C3;
extern VTBL_ENTRY _ZTI7S7578C3[];
extern  VTBL_ENTRY _ZTV7S7578C3[];
static Base_Class bases_S7578C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7578C6,    ABISELECT(16,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
  0, 0},
  {&cd_S7578C5,    ABISELECT(16,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7578C3,    ABISELECT(352,188), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7578C4[];
extern void _ZN7S7578C4D1Ev();
extern void _ZN7S7578C4D0Ev();
extern void _ZN7S7578C42v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S7578C4D1Ev,_ZTv0_n12_N7S7578C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7578C4D1Ev,_ZThn4_N7S7578C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7578C4D0Ev,_ZTv0_n12_N7S7578C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S7578C4D0Ev,_ZThn4_N7S7578C4D0Ev)() __attribute__((weak));
extern void _ZN7S7578C62v1Ev();
extern void _ZN7S7578C52v2Ev();
extern void _ZN7S7578C32v3Ev();
extern void _ZN7S7578C32v4Ev();
extern void _ZN7S7578C32v5Ev();
static  VTBL_ENTRY vtc_S7578C4[] = {
  ABISELECT(352,188),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C4[0]),
  (VTBL_ENTRY)&_ZN7S7578C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C42v6Ev,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C4D1Ev,_ZTv0_n12_N7S7578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C4D0Ev,_ZTv0_n12_N7S7578C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7578C52v2Ev,
  0,
  0,
  0,
  ABISELECT(-352,-188),
  (VTBL_ENTRY)&(_ZTI7S7578C4[0]),
  (VTBL_ENTRY)&_ZN7S7578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v5Ev,
};
extern VTBL_ENTRY _ZTV7S7578C4[];
static  VTT_ENTRY vtt_S7578C4[] = {
  {&(_ZTV7S7578C4[4]),  4,24},
  {&(_ZTV7S7578C4[12]),  12,24},
  {&(_ZTV7S7578C4[21]),  21,24},
};
extern VTBL_ENTRY _ZTI7S7578C4[];
extern  VTBL_ENTRY _ZTV7S7578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7578C4[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C4D0Ev,_ZTv0_n12_N7S7578C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7578C4D0Ev,_ZThn4_N7S7578C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C4D1Ev,_ZTv0_n12_N7S7578C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7578C4D1Ev,_ZThn4_N7S7578C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7578C4 = {  "S7578C4", // class name
  bases_S7578C4, 3,
  &(vtc_S7578C4[0]), // expected_vtbl_contents
  &(vtt_S7578C4[0]), // expected_vtt_contents
  ABISELECT(544,304), // object size
  NSPAIRA(_ZTI7S7578C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7578C4),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7578C4),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7578C2  : virtual S7578C3 , S7578C4 , S7578C6 , virtual S7578C7 {
  long double s7578c2f0;
  ::S7578C4 s7578c2f1;
  long s7578c2f2;
  virtual  ~S7578C2(); // _ZN7S7578C2D2Ev
  virtual void  v7(); // _ZN7S7578C22v7Ev
  S7578C2(); // tgen
};
//SIG(-1 S7578C2) C1{ VBC2{ v2 v3 v4 Fi FD[6] Fp[9]} BC3{ VBC4{ BC5{ vd v5 Fp[6]} vd v6 FC6{ VBC2 BC5} Fi FL:52} VBC2 vd v7} BC5 VBC6 vd v1 FD FC3 Fl}


 S7578C2 ::~S7578C2(){ note_dtor("S7578C2", this);}
void  S7578C2 ::v7(){vfunc_called(this, "_ZN7S7578C22v7Ev");}
S7578C2 ::S7578C2(){ note_ctor("S7578C2", this);} // tgen

static void Test_S7578C2()
{
  extern Class_Descriptor cd_S7578C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(78,171)];
    init_test(&cd_S7578C2, buf);
    S7578C2 *dp, &lv = *(dp=new (buf) S7578C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1232,680), "sizeof(S7578C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7578C2)");
    check_base_class_offset(lv, (S7578C3*), ABISELECT(640,352), "S7578C2");
    check_base_class_offset(lv, (S7578C3*)(S7578C4*), ABISELECT(640,352), "S7578C2");
    check_base_class_offset(lv, (S7578C3*)(S7578C7*), ABISELECT(640,352), "S7578C2");
    check_base_class_offset(lv, (S7578C6*)(S7578C5*), ABISELECT(832,468), "S7578C2");
    check_base_class_offset(lv, (S7578C5*)(S7578C4*), ABISELECT(832,468), "S7578C2");
    check_base_class_offset(lv, (S7578C4*), 0, "S7578C2");
    /*is_ambiguous_... S7578C2::S7578C6 */ AMB_check_base_class_offset(lv, (S7578C6*), ABISELECT(8,4), "S7578C2");
    check_base_class_offset(lv, (S7578C6*)(S7578C7*), ABISELECT(1168,652), "S7578C2");
    check_base_class_offset(lv, (S7578C7*), ABISELECT(1168,652), "S7578C2");
    check_field_offset(lv, s7578c2f0, ABISELECT(64,32), "S7578C2.s7578c2f0");
    check_field_offset(lv, s7578c2f1, ABISELECT(80,44), "S7578C2.s7578c2f1");
    check_field_offset(lv, s7578c2f2, ABISELECT(624,348), "S7578C2.s7578c2f2");
    test_class_info(&lv, &cd_S7578C2);
    dp->~S7578C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7578C2(Test_S7578C2, "S7578C2", ABISELECT(1232,680));

#else // __cplusplus

extern void _ZN7S7578C2C1Ev();
extern void _ZN7S7578C2D2Ev();
Name_Map name_map_S7578C2[] = {
  NSPAIR(_ZN7S7578C2C1Ev),
  NSPAIR(_ZN7S7578C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7578C3;
extern VTBL_ENTRY _ZTI7S7578C3[];
extern  VTBL_ENTRY _ZTV7S7578C3[];
extern Class_Descriptor cd_S7578C6;
extern VTBL_ENTRY _ZTI7S7578C6[];
extern  VTBL_ENTRY _ZTV7S7578C6[];
extern Class_Descriptor cd_S7578C5;
extern VTBL_ENTRY _ZTI7S7578C5[];
extern  VTBL_ENTRY _ZTV7S7578C5[];
extern Class_Descriptor cd_S7578C4;
extern VTBL_ENTRY _ZTI7S7578C4[];
extern  VTBL_ENTRY _ZTV7S7578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7578C4[];
extern Class_Descriptor cd_S7578C6;
extern VTBL_ENTRY _ZTI7S7578C6[];
extern  VTBL_ENTRY _ZTV7S7578C6[];
extern Class_Descriptor cd_S7578C6;
extern VTBL_ENTRY _ZTI7S7578C6[];
extern  VTBL_ENTRY _ZTV7S7578C6[];
extern Class_Descriptor cd_S7578C7;
extern VTBL_ENTRY _ZTI7S7578C7[];
extern  VTBL_ENTRY _ZTV7S7578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7578C7[];
static Base_Class bases_S7578C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7578C3,    ABISELECT(640,352), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7578C6,    ABISELECT(832,468), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7578C5,    ABISELECT(832,468), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7578C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7578C6,    ABISELECT(8,4), //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7578C6,    ABISELECT(1168,652), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7578C7,    ABISELECT(1168,652), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7578C2[];
extern void _ZN7S7578C2D1Ev();
extern void _ZN7S7578C2D0Ev();
extern void _ZN7S7578C42v6Ev();
extern void _ZN7S7578C22v7Ev();
extern void ABISELECT(_ZThn8_N7S7578C2D1Ev,_ZThn4_N7S7578C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7578C2D0Ev,_ZThn4_N7S7578C2D0Ev)();
extern void _ZN7S7578C62v1Ev();
extern void _ZN7S7578C32v3Ev();
extern void _ZN7S7578C32v4Ev();
extern void _ZN7S7578C32v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S7578C2D1Ev,_ZTv0_n12_N7S7578C2D1Ev)();
extern void ABISELECT(_ZThn832_N7S7578C2D1Ev,_ZThn468_N7S7578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7578C2D0Ev,_ZTv0_n12_N7S7578C2D0Ev)();
extern void ABISELECT(_ZThn832_N7S7578C2D0Ev,_ZThn468_N7S7578C2D0Ev)() __attribute__((weak));
extern void _ZN7S7578C62v1Ev();
extern void _ZN7S7578C52v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7578C2D1Ev,_ZTv0_n16_N7S7578C2D1Ev)();
extern void ABISELECT(_ZThn1168_N7S7578C2D1Ev,_ZThn652_N7S7578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7578C2D0Ev,_ZTv0_n16_N7S7578C2D0Ev)();
extern void ABISELECT(_ZThn1168_N7S7578C2D0Ev,_ZThn652_N7S7578C2D0Ev)() __attribute__((weak));
extern void _ZN7S7578C62v1Ev();
static  VTBL_ENTRY vtc_S7578C2[] = {
  ABISELECT(1168,652),
  ABISELECT(640,352),
  ABISELECT(832,468),
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C2[0]),
  (VTBL_ENTRY)&_ZN7S7578C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7578C22v7Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7578C2D1Ev,_ZThn4_N7S7578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7578C2D0Ev,_ZThn4_N7S7578C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
  0,
  0,
  0,
  ABISELECT(-640,-352),
  (VTBL_ENTRY)&(_ZTI7S7578C2[0]),
  (VTBL_ENTRY)&_ZN7S7578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v5Ev,
  0,
  0,
  ABISELECT(-832,-468),
  ABISELECT(-832,-468),
  (VTBL_ENTRY)&(_ZTI7S7578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C2D1Ev,_ZTv0_n12_N7S7578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C2D0Ev,_ZTv0_n12_N7S7578C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7578C52v2Ev,
  0,
  ABISELECT(-1168,-652),
  ABISELECT(-528,-300),
  ABISELECT(-1168,-652),
  (VTBL_ENTRY)&(_ZTI7S7578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7578C2D1Ev,_ZTv0_n16_N7S7578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7578C2D0Ev,_ZTv0_n16_N7S7578C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
};
extern VTBL_ENTRY _ZTV7S7578C2[];
extern void _ZN7S7578C4D1Ev();
extern void _ZN7S7578C4D0Ev();
extern void _ZN7S7578C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C4__7S7578C2[] = {
  ABISELECT(640,352),
  ABISELECT(832,468),
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C4[0]),
  (VTBL_ENTRY)&_ZN7S7578C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C42v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7578C4D1Ev,_ZTv0_n12_N7S7578C4D1Ev)();
extern void ABISELECT(_ZThn832_N7S7578C4D1Ev,_ZThn468_N7S7578C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7578C4D0Ev,_ZTv0_n12_N7S7578C4D0Ev)();
extern void ABISELECT(_ZThn832_N7S7578C4D0Ev,_ZThn468_N7S7578C4D0Ev)() __attribute__((weak));
extern void _ZN7S7578C62v1Ev();
extern void _ZN7S7578C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C5__7S7578C4__7S7578C2[] = {
  0,
  0,
  ABISELECT(-832,-468),
  ABISELECT(-832,-468),
  (VTBL_ENTRY)&(_ZTI7S7578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C4D1Ev,_ZTv0_n12_N7S7578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C4D0Ev,_ZTv0_n12_N7S7578C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7578C52v2Ev,
};
extern void _ZN7S7578C32v3Ev();
extern void _ZN7S7578C32v4Ev();
extern void _ZN7S7578C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C3__7S7578C4__7S7578C2[] = {
  0,
  0,
  0,
  ABISELECT(-640,-352),
  (VTBL_ENTRY)&(_ZTI7S7578C4[0]),
  (VTBL_ENTRY)&_ZN7S7578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v5Ev,
};
extern void _ZN7S7578C7D1Ev();
extern void _ZN7S7578C7D0Ev();
extern void _ZN7S7578C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C7__7S7578C2[] = {
  ABISELECT(-528,-300),
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C7[0]),
  (VTBL_ENTRY)&_ZN7S7578C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
};
extern void _ZN7S7578C32v3Ev();
extern void _ZN7S7578C32v4Ev();
extern void _ZN7S7578C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C3__7S7578C7__7S7578C2[] = {
  0,
  0,
  0,
  ABISELECT(528,300),
  (VTBL_ENTRY)&(_ZTI7S7578C7[0]),
  (VTBL_ENTRY)&_ZN7S7578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v5Ev,
};
static  VTT_ENTRY vtt_S7578C2[] = {
  {&(_ZTV7S7578C2[5]),  5,39},
  {&(_tg__ZTV7S7578C4__7S7578C2[4]),  4,7},
  {&(_tg__ZTV7S7578C5__7S7578C4__7S7578C2[5]),  5,9},
  {&(_tg__ZTV7S7578C3__7S7578C4__7S7578C2[5]),  5,8},
  {&(_ZTV7S7578C2[19]),  19,39},
  {&(_ZTV7S7578C2[27]),  27,39},
  {&(_ZTV7S7578C2[36]),  36,39},
  {&(_tg__ZTV7S7578C7__7S7578C2[3]),  3,6},
  {&(_tg__ZTV7S7578C3__7S7578C7__7S7578C2[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S7578C2[];
extern  VTBL_ENTRY _ZTV7S7578C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7578C2[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C4D0Ev,_ZTv0_n12_N7S7578C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S7578C4D0Ev,_ZThn468_N7S7578C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C4D1Ev,_ZTv0_n12_N7S7578C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S7578C4D1Ev,_ZThn468_N7S7578C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7578C2D0Ev,_ZTv0_n16_N7S7578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N7S7578C2D0Ev,_ZThn652_N7S7578C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7578C2D1Ev,_ZTv0_n16_N7S7578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N7S7578C2D1Ev,_ZThn652_N7S7578C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C2D0Ev,_ZTv0_n12_N7S7578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S7578C2D0Ev,_ZThn468_N7S7578C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C2D1Ev,_ZTv0_n12_N7S7578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S7578C2D1Ev,_ZThn468_N7S7578C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7578C2 = {  "S7578C2", // class name
  bases_S7578C2, 7,
  &(vtc_S7578C2[0]), // expected_vtbl_contents
  &(vtt_S7578C2[0]), // expected_vtt_contents
  ABISELECT(1232,680), // object size
  NSPAIRA(_ZTI7S7578C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7578C2),39, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7578C2),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7578C1  : S7578C2 , virtual S10180C63 {
  void *s7578c1f0;
  short s7578c1f1;
  ~S7578C1(); // tgen
  S7578C1(); // tgen
};
//SIG(1 S7578C1) C1{ BC2{ VBC3{ v1 v2 v3 Fi FD[6] Fp[9]} BC4{ VBC5{ BC6{ vd v4 Fp[6]} vd v5 FC7{ VBC3 BC6} Fi FL:52} VBC3 vd v6} BC6 VBC7 vd v7 FD FC4 Fl} VBC8{ m Fi} Fp Fs}


S7578C1 ::~S7578C1(){ note_dtor("S7578C1", this);} // tgen
S7578C1 ::S7578C1(){ note_ctor("S7578C1", this);} // tgen

static void Test_S7578C1()
{
  extern Class_Descriptor cd_S7578C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(79,174)];
    init_test(&cd_S7578C1, buf);
    S7578C1 *dp, &lv = *(dp=new (buf) S7578C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1248,692), "sizeof(S7578C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7578C1)");
    check_base_class_offset(lv, (S7578C3*)(S7578C2*), ABISELECT(656,360), "S7578C1");
    check_base_class_offset(lv, (S7578C3*)(S7578C4*)(S7578C2*), ABISELECT(656,360), "S7578C1");
    check_base_class_offset(lv, (S7578C3*)(S7578C7*), ABISELECT(656,360), "S7578C1");
    check_base_class_offset(lv, (S7578C6*)(S7578C5*), ABISELECT(848,476), "S7578C1");
    check_base_class_offset(lv, (S7578C5*)(S7578C4*)(S7578C2*), ABISELECT(848,476), "S7578C1");
    check_base_class_offset(lv, (S7578C4*)(S7578C2*), 0, "S7578C1");
    /*is_ambiguous_... S7578C2::S7578C6 */ AMB_check_base_class_offset(lv, (S7578C6*)(S7578C2*), ABISELECT(8,4), "S7578C1");
    check_base_class_offset(lv, (S7578C6*)(S7578C7*), ABISELECT(1184,660), "S7578C1");
    check_base_class_offset(lv, (S7578C7*)(S7578C2*), ABISELECT(1184,660), "S7578C1");
    check_base_class_offset(lv, (S7578C2*), 0, "S7578C1");
    check_base_class_offset(lv, (S10180C63*), ABISELECT(1240,688), "S7578C1");
    check_field_offset(lv, s7578c1f0, ABISELECT(632,352), "S7578C1.s7578c1f0");
    check_field_offset(lv, s7578c1f1, ABISELECT(640,356), "S7578C1.s7578c1f1");
    test_class_info(&lv, &cd_S7578C1);
    dp->~S7578C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7578C1(Test_S7578C1, "S7578C1", ABISELECT(1248,692));

#else // __cplusplus

extern void _ZN7S7578C1C1Ev();
extern void _ZN7S7578C1D1Ev();
Name_Map name_map_S7578C1[] = {
  NSPAIR(_ZN7S7578C1C1Ev),
  NSPAIR(_ZN7S7578C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7578C3;
extern VTBL_ENTRY _ZTI7S7578C3[];
extern  VTBL_ENTRY _ZTV7S7578C3[];
extern Class_Descriptor cd_S7578C6;
extern VTBL_ENTRY _ZTI7S7578C6[];
extern  VTBL_ENTRY _ZTV7S7578C6[];
extern Class_Descriptor cd_S7578C5;
extern VTBL_ENTRY _ZTI7S7578C5[];
extern  VTBL_ENTRY _ZTV7S7578C5[];
extern Class_Descriptor cd_S7578C4;
extern VTBL_ENTRY _ZTI7S7578C4[];
extern  VTBL_ENTRY _ZTV7S7578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7578C4[];
extern Class_Descriptor cd_S7578C6;
extern VTBL_ENTRY _ZTI7S7578C6[];
extern  VTBL_ENTRY _ZTV7S7578C6[];
extern Class_Descriptor cd_S7578C6;
extern VTBL_ENTRY _ZTI7S7578C6[];
extern  VTBL_ENTRY _ZTV7S7578C6[];
extern Class_Descriptor cd_S7578C7;
extern VTBL_ENTRY _ZTI7S7578C7[];
extern  VTBL_ENTRY _ZTV7S7578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7578C7[];
extern Class_Descriptor cd_S7578C2;
extern VTBL_ENTRY _ZTI7S7578C2[];
extern  VTBL_ENTRY _ZTV7S7578C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7578C2[];
extern Class_Descriptor cd_S10180C63;
extern VTBL_ENTRY _ZTI9S10180C63[];
static Base_Class bases_S7578C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7578C3,    ABISELECT(656,360), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7578C6,    ABISELECT(848,476), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7578C5,    ABISELECT(848,476), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7578C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7578C6,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7578C6,    ABISELECT(1184,660), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7578C7,    ABISELECT(1184,660), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7578C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C63,    ABISELECT(1240,688), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7578C1[];
extern void _ZN7S7578C1D1Ev();
extern void _ZN7S7578C1D0Ev();
extern void _ZN7S7578C42v6Ev();
extern void _ZN7S7578C22v7Ev();
extern void ABISELECT(_ZThn8_N7S7578C1D1Ev,_ZThn4_N7S7578C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7578C1D0Ev,_ZThn4_N7S7578C1D0Ev)();
extern void _ZN7S7578C62v1Ev();
extern void _ZN7S7578C32v3Ev();
extern void _ZN7S7578C32v4Ev();
extern void _ZN7S7578C32v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S7578C1D1Ev,_ZTv0_n12_N7S7578C1D1Ev)();
extern void ABISELECT(_ZThn848_N7S7578C1D1Ev,_ZThn476_N7S7578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7578C1D0Ev,_ZTv0_n12_N7S7578C1D0Ev)();
extern void ABISELECT(_ZThn848_N7S7578C1D0Ev,_ZThn476_N7S7578C1D0Ev)() __attribute__((weak));
extern void _ZN7S7578C62v1Ev();
extern void _ZN7S7578C52v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7578C1D1Ev,_ZTv0_n16_N7S7578C1D1Ev)();
extern void ABISELECT(_ZThn1184_N7S7578C1D1Ev,_ZThn660_N7S7578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7578C1D0Ev,_ZTv0_n16_N7S7578C1D0Ev)();
extern void ABISELECT(_ZThn1184_N7S7578C1D0Ev,_ZThn660_N7S7578C1D0Ev)() __attribute__((weak));
extern void _ZN7S7578C62v1Ev();
static  VTBL_ENTRY vtc_S7578C1[] = {
  ABISELECT(1240,688),
  ABISELECT(1184,660),
  ABISELECT(656,360),
  ABISELECT(848,476),
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C1[0]),
  (VTBL_ENTRY)&_ZN7S7578C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7578C22v7Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7578C1D1Ev,_ZThn4_N7S7578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7578C1D0Ev,_ZThn4_N7S7578C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
  0,
  0,
  0,
  ABISELECT(-656,-360),
  (VTBL_ENTRY)&(_ZTI7S7578C1[0]),
  (VTBL_ENTRY)&_ZN7S7578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v5Ev,
  0,
  0,
  ABISELECT(-848,-476),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI7S7578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C1D1Ev,_ZTv0_n12_N7S7578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C1D0Ev,_ZTv0_n12_N7S7578C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7578C52v2Ev,
  0,
  ABISELECT(-1184,-660),
  ABISELECT(-528,-300),
  ABISELECT(-1184,-660),
  (VTBL_ENTRY)&(_ZTI7S7578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7578C1D1Ev,_ZTv0_n16_N7S7578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7578C1D0Ev,_ZTv0_n16_N7S7578C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
};
extern VTBL_ENTRY _ZTV7S7578C1[];
extern void _ZN7S7578C2D1Ev();
extern void _ZN7S7578C2D0Ev();
extern void _ZN7S7578C42v6Ev();
extern void _ZN7S7578C22v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C2__7S7578C1[] = {
  ABISELECT(1184,660),
  ABISELECT(656,360),
  ABISELECT(848,476),
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C2[0]),
  (VTBL_ENTRY)&_ZN7S7578C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7578C22v7Ev,
};
extern void _ZN7S7578C4D1Ev();
extern void _ZN7S7578C4D0Ev();
extern void _ZN7S7578C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C47S7578C2__7S7578C1[] = {
  ABISELECT(656,360),
  ABISELECT(848,476),
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C4[0]),
  (VTBL_ENTRY)&_ZN7S7578C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C42v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7578C4D1Ev,_ZTv0_n12_N7S7578C4D1Ev)();
extern void ABISELECT(_ZThn848_N7S7578C4D1Ev,_ZThn476_N7S7578C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7578C4D0Ev,_ZTv0_n12_N7S7578C4D0Ev)();
extern void ABISELECT(_ZThn848_N7S7578C4D0Ev,_ZThn476_N7S7578C4D0Ev)() __attribute__((weak));
extern void _ZN7S7578C62v1Ev();
extern void _ZN7S7578C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C5__7S7578C47S7578C2__7S7578C1[] = {
  0,
  0,
  ABISELECT(-848,-476),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI7S7578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C4D1Ev,_ZTv0_n12_N7S7578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C4D0Ev,_ZTv0_n12_N7S7578C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7578C52v2Ev,
};
extern void _ZN7S7578C32v3Ev();
extern void _ZN7S7578C32v4Ev();
extern void _ZN7S7578C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C3__7S7578C47S7578C2__7S7578C1[] = {
  0,
  0,
  0,
  ABISELECT(-656,-360),
  (VTBL_ENTRY)&(_ZTI7S7578C4[0]),
  (VTBL_ENTRY)&_ZN7S7578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v5Ev,
};
extern void _ZN7S7578C32v3Ev();
extern void _ZN7S7578C32v4Ev();
extern void _ZN7S7578C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C3__7S7578C2__7S7578C1[] = {
  0,
  0,
  0,
  ABISELECT(-656,-360),
  (VTBL_ENTRY)&(_ZTI7S7578C2[0]),
  (VTBL_ENTRY)&_ZN7S7578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7578C2D1Ev,_ZTv0_n12_N7S7578C2D1Ev)();
extern void ABISELECT(_ZThn848_N7S7578C2D1Ev,_ZThn476_N7S7578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7578C2D0Ev,_ZTv0_n12_N7S7578C2D0Ev)();
extern void ABISELECT(_ZThn848_N7S7578C2D0Ev,_ZThn476_N7S7578C2D0Ev)() __attribute__((weak));
extern void _ZN7S7578C62v1Ev();
extern void _ZN7S7578C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C5__7S7578C2__7S7578C1[] = {
  0,
  0,
  ABISELECT(-848,-476),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI7S7578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C2D1Ev,_ZTv0_n12_N7S7578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7578C2D0Ev,_ZTv0_n12_N7S7578C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7578C52v2Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7578C2D1Ev,_ZTv0_n16_N7S7578C2D1Ev)();
extern void ABISELECT(_ZThn1184_N7S7578C2D1Ev,_ZThn660_N7S7578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7578C2D0Ev,_ZTv0_n16_N7S7578C2D0Ev)();
extern void ABISELECT(_ZThn1184_N7S7578C2D0Ev,_ZThn660_N7S7578C2D0Ev)() __attribute__((weak));
extern void _ZN7S7578C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C7__7S7578C2__7S7578C1[] = {
  0,
  ABISELECT(-1184,-660),
  ABISELECT(-528,-300),
  ABISELECT(-1184,-660),
  (VTBL_ENTRY)&(_ZTI7S7578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7578C2D1Ev,_ZTv0_n16_N7S7578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7578C2D0Ev,_ZTv0_n16_N7S7578C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
};
extern void _ZN7S7578C7D1Ev();
extern void _ZN7S7578C7D0Ev();
extern void _ZN7S7578C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C7__7S7578C1[] = {
  ABISELECT(-528,-300),
  0,
  (VTBL_ENTRY)&(_ZTI7S7578C7[0]),
  (VTBL_ENTRY)&_ZN7S7578C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7578C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7578C62v1Ev,
};
extern void _ZN7S7578C32v3Ev();
extern void _ZN7S7578C32v4Ev();
extern void _ZN7S7578C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7578C3__7S7578C7__7S7578C1[] = {
  0,
  0,
  0,
  ABISELECT(528,300),
  (VTBL_ENTRY)&(_ZTI7S7578C7[0]),
  (VTBL_ENTRY)&_ZN7S7578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7578C32v5Ev,
};
static  VTT_ENTRY vtt_S7578C1[] = {
  {&(_ZTV7S7578C1[6]),  6,40},
  {&(_tg__ZTV7S7578C2__7S7578C1[5]),  5,9},
  {&(_tg__ZTV7S7578C47S7578C2__7S7578C1[4]),  4,7},
  {&(_tg__ZTV7S7578C5__7S7578C47S7578C2__7S7578C1[5]),  5,9},
  {&(_tg__ZTV7S7578C3__7S7578C47S7578C2__7S7578C1[5]),  5,8},
  {&(_tg__ZTV7S7578C3__7S7578C2__7S7578C1[5]),  5,8},
  {&(_tg__ZTV7S7578C5__7S7578C2__7S7578C1[5]),  5,9},
  {&(_tg__ZTV7S7578C7__7S7578C2__7S7578C1[5]),  5,8},
  {&(_ZTV7S7578C1[20]),  20,40},
  {&(_ZTV7S7578C1[28]),  28,40},
  {&(_ZTV7S7578C1[37]),  37,40},
  {&(_tg__ZTV7S7578C7__7S7578C1[3]),  3,6},
  {&(_tg__ZTV7S7578C3__7S7578C7__7S7578C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S7578C1[];
extern  VTBL_ENTRY _ZTV7S7578C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7578C1[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7578C2D0Ev,_ZTv0_n16_N7S7578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S7578C2D0Ev,_ZThn660_N7S7578C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7578C2D1Ev,_ZTv0_n16_N7S7578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S7578C2D1Ev,_ZThn660_N7S7578C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C2D0Ev,_ZTv0_n12_N7S7578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7578C2D0Ev,_ZThn476_N7S7578C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C2D1Ev,_ZTv0_n12_N7S7578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7578C2D1Ev,_ZThn476_N7S7578C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C4D0Ev,_ZTv0_n12_N7S7578C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7578C4D0Ev,_ZThn476_N7S7578C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C4D1Ev,_ZTv0_n12_N7S7578C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7578C4D1Ev,_ZThn476_N7S7578C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7578C1D0Ev,_ZTv0_n16_N7S7578C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S7578C1D0Ev,_ZThn660_N7S7578C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7578C1D1Ev,_ZTv0_n16_N7S7578C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N7S7578C1D1Ev,_ZThn660_N7S7578C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C1D0Ev,_ZTv0_n12_N7S7578C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7578C1D0Ev,_ZThn476_N7S7578C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7578C1D1Ev,_ZTv0_n12_N7S7578C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S7578C1D1Ev,_ZThn476_N7S7578C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7578C1 = {  "S7578C1", // class name
  bases_S7578C1, 9,
  &(vtc_S7578C1[0]), // expected_vtbl_contents
  &(vtt_S7578C1[0]), // expected_vtt_contents
  ABISELECT(1248,692), // object size
  NSPAIRA(_ZTI7S7578C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7578C1),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7578C1),13, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6138C3  : S10180C138 {
  ::S10180C13 s6138c3f0;
  ::S10180C13 s6138c3f1;
  ::S10180C13 s6138c3f2;
  ::S10180C13 s6138c3f3;
  ::S1168C12 s6138c3f4;
};
//SIG(-1 S6138C3) C1{ BC2{ m} FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC3 FC5{ BC6{ BC7{ m Fp Fi FC8{ m} FC2}}}}



static void Test_S6138C3()
{
  extern Class_Descriptor cd_S6138C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S6138C3, buf);
    S6138C3 &lv = *(new (buf) S6138C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S6138C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6138C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S6138C3");
    check_field_offset(lv, s6138c3f0, 0, "S6138C3.s6138c3f0");
    check_field_offset(lv, s6138c3f1, ABISELECT(16,12), "S6138C3.s6138c3f1");
    check_field_offset(lv, s6138c3f2, ABISELECT(32,24), "S6138C3.s6138c3f2");
    check_field_offset(lv, s6138c3f3, ABISELECT(48,36), "S6138C3.s6138c3f3");
    check_field_offset(lv, s6138c3f4, ABISELECT(64,48), "S6138C3.s6138c3f4");
    test_class_info(&lv, &cd_S6138C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6138C3(Test_S6138C3, "S6138C3", ABISELECT(80,60));

#else // __cplusplus

extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S6138C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6138C3 = {  "S6138C3", // class name
  bases_S6138C3, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(80,60), // 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  S6138C11  : S10180C138 {
  ::S10180C114 s6138c11f0;
  ::S10180C111 s6138c11f1;
  void *s6138c11f2;
  int s6138c11f3[2];
  ::S10180C13 s6138c11f4;
  ::S10180C13 s6138c11f5;
  char s6138c11f6;
};
//SIG(-1 S6138C11) C1{ BC2{ m} FC3{ m Fp} FC4{ m Fp} Fp Fi[2] FC5{ m Fp Fi FC6{ m}} FC5 Fc}



static void Test_S6138C11()
{
  extern Class_Descriptor cd_S6138C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S6138C11, buf);
    S6138C11 &lv = *(new (buf) S6138C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S6138C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6138C11)");
    check_base_class_offset(lv, (S10180C138*), 0, "S6138C11");
    check_field_offset(lv, s6138c11f0, 0, "S6138C11.s6138c11f0");
    check_field_offset(lv, s6138c11f1, ABISELECT(8,4), "S6138C11.s6138c11f1");
    check_field_offset(lv, s6138c11f2, ABISELECT(16,8), "S6138C11.s6138c11f2");
    check_field_offset(lv, s6138c11f3, ABISELECT(24,12), "S6138C11.s6138c11f3");
    check_field_offset(lv, s6138c11f4, ABISELECT(32,20), "S6138C11.s6138c11f4");
    check_field_offset(lv, s6138c11f5, ABISELECT(48,32), "S6138C11.s6138c11f5");
    check_field_offset(lv, s6138c11f6, ABISELECT(64,44), "S6138C11.s6138c11f6");
    test_class_info(&lv, &cd_S6138C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6138C11(Test_S6138C11, "S6138C11", ABISELECT(72,48));

#else // __cplusplus

extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S6138C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6138C11 = {  "S6138C11", // class name
  bases_S6138C11, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(72,48), // 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  S6138C1  : S10180C138 {
  ::S6138C3 s6138c1f0;
  ::S6138C11 s6138c1f1;
  void *s6138c1f2[2];
};
//SIG(1 S6138C1) C1{ BC2{ m} FC3{ BC2 FC4{ m Fp Fi FC5{ m}} FC4 FC4 FC4 FC6{ BC7{ BC8{ m Fp Fi FC9{ m} FC2}}}} FC10{ BC2 FC11{ m Fp} FC12{ m Fp} Fp Fi[2] FC4 FC4 Fc} Fp[2]}



static void Test_S6138C1()
{
  extern Class_Descriptor cd_S6138C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,31)];
    init_test(&cd_S6138C1, buf);
    S6138C1 &lv = *(new (buf) S6138C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,120), "sizeof(S6138C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6138C1)");
    check_base_class_offset(lv, (S10180C138*), 0, "S6138C1");
    check_field_offset(lv, s6138c1f0, ABISELECT(8,4), "S6138C1.s6138c1f0");
    check_field_offset(lv, s6138c1f1, ABISELECT(88,64), "S6138C1.s6138c1f1");
    check_field_offset(lv, s6138c1f2, ABISELECT(160,112), "S6138C1.s6138c1f2");
    test_class_info(&lv, &cd_S6138C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6138C1(Test_S6138C1, "S6138C1", ABISELECT(176,120));

#else // __cplusplus

extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S6138C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6138C1 = {  "S6138C1", // class name
  bases_S6138C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(176,120), // 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  S21420C3  {
  char s21420c3f0[4];
  int s21420c3f1[19];
  void  mf21420c3(); // _ZN8S21420C39mf21420c3Ev
};
//SIG(-1 S21420C3) C1{ m Fc[4] Fi[19]}


void  S21420C3 ::mf21420c3(){}

static void Test_S21420C3()
{
  {
    init_simple_test("S21420C3");
    S21420C3 lv;
    check2(sizeof(lv), 80, "sizeof(S21420C3)");
    check2(__alignof__(lv), 4, "__alignof__(S21420C3)");
    check_field_offset(lv, s21420c3f0, 0, "S21420C3.s21420c3f0");
    check_field_offset(lv, s21420c3f1, 4, "S21420C3.s21420c3f1");
  }
}
static Arrange_To_Call_Me vS21420C3(Test_S21420C3, "S21420C3", 80);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21420C2  {
  int s21420c2f0;
  ::S21420C3 s21420c2f1;
  void *s21420c2f2;
  int s21420c2f3;
  void *s21420c2f4;
  int s21420c2f5;
  void *s21420c2f6;
  int s21420c2f7;
  void *s21420c2f8;
  int s21420c2f9;
  void *s21420c2f10;
  int s21420c2f11;
  void *s21420c2f12;
  int s21420c2f13;
  void *s21420c2f14;
  int s21420c2f15;
  void *s21420c2f16;
  int s21420c2f17;
  void *s21420c2f18;
  int s21420c2f19;
  void *s21420c2f20[2];
  void  mf21420c2(); // _ZN8S21420C29mf21420c2Ev
};
//SIG(-1 S21420C2) C1{ m Fi FC2{ m Fc[4] Fi[19]} Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp[2]}


void  S21420C2 ::mf21420c2(){}

static void Test_S21420C2()
{
  {
    init_simple_test("S21420C2");
    S21420C2 lv;
    check2(sizeof(lv), ABISELECT(248,164), "sizeof(S21420C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21420C2)");
    check_field_offset(lv, s21420c2f0, 0, "S21420C2.s21420c2f0");
    check_field_offset(lv, s21420c2f1, 4, "S21420C2.s21420c2f1");
    check_field_offset(lv, s21420c2f2, ABISELECT(88,84), "S21420C2.s21420c2f2");
    check_field_offset(lv, s21420c2f3, ABISELECT(96,88), "S21420C2.s21420c2f3");
    check_field_offset(lv, s21420c2f4, ABISELECT(104,92), "S21420C2.s21420c2f4");
    check_field_offset(lv, s21420c2f5, ABISELECT(112,96), "S21420C2.s21420c2f5");
    check_field_offset(lv, s21420c2f6, ABISELECT(120,100), "S21420C2.s21420c2f6");
    check_field_offset(lv, s21420c2f7, ABISELECT(128,104), "S21420C2.s21420c2f7");
    check_field_offset(lv, s21420c2f8, ABISELECT(136,108), "S21420C2.s21420c2f8");
    check_field_offset(lv, s21420c2f9, ABISELECT(144,112), "S21420C2.s21420c2f9");
    check_field_offset(lv, s21420c2f10, ABISELECT(152,116), "S21420C2.s21420c2f10");
    check_field_offset(lv, s21420c2f11, ABISELECT(160,120), "S21420C2.s21420c2f11");
    check_field_offset(lv, s21420c2f12, ABISELECT(168,124), "S21420C2.s21420c2f12");
    check_field_offset(lv, s21420c2f13, ABISELECT(176,128), "S21420C2.s21420c2f13");
    check_field_offset(lv, s21420c2f14, ABISELECT(184,132), "S21420C2.s21420c2f14");
    check_field_offset(lv, s21420c2f15, ABISELECT(192,136), "S21420C2.s21420c2f15");
    check_field_offset(lv, s21420c2f16, ABISELECT(200,140), "S21420C2.s21420c2f16");
    check_field_offset(lv, s21420c2f17, ABISELECT(208,144), "S21420C2.s21420c2f17");
    check_field_offset(lv, s21420c2f18, ABISELECT(216,148), "S21420C2.s21420c2f18");
    check_field_offset(lv, s21420c2f19, ABISELECT(224,152), "S21420C2.s21420c2f19");
    check_field_offset(lv, s21420c2f20, ABISELECT(232,156), "S21420C2.s21420c2f20");
  }
}
static Arrange_To_Call_Me vS21420C2(Test_S21420C2, "S21420C2", ABISELECT(248,164));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21420C1  {
  ::S21420C2 s21420c1f0;
  ::S10180C150 s21420c1f1;
  ::S10180C13 s21420c1f2;
  ::S10180C13 s21420c1f3;
  int s21420c1f4;
  void  mf21420c1(); // _ZN8S21420C19mf21420c1Ev
  virtual  ~S21420C1(); // _ZN8S21420C1D1Ev
  S21420C1(); // tgen
};
//SIG(1 S21420C1) C1{ vd m FC2{ m Fi FC3{ m Fc[4] Fi[19]} Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp[2]} FC4{ m Fp[2]} FC5{ m Fp Fi FC6{ m}} FC5 Fi}


void  S21420C1 ::mf21420c1(){}
 S21420C1 ::~S21420C1(){ note_dtor("S21420C1", this);}
S21420C1 ::S21420C1(){ note_ctor("S21420C1", this);} // tgen

static void Test_S21420C1()
{
  extern Class_Descriptor cd_S21420C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,52)];
    init_test(&cd_S21420C1, buf);
    S21420C1 *dp, &lv = *(dp=new (buf) S21420C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,204), "sizeof(S21420C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21420C1)");
    check_field_offset(lv, s21420c1f0, ABISELECT(8,4), "S21420C1.s21420c1f0");
    check_field_offset(lv, s21420c1f1, ABISELECT(256,168), "S21420C1.s21420c1f1");
    check_field_offset(lv, s21420c1f2, ABISELECT(272,176), "S21420C1.s21420c1f2");
    check_field_offset(lv, s21420c1f3, ABISELECT(288,188), "S21420C1.s21420c1f3");
    check_field_offset(lv, s21420c1f4, ABISELECT(304,200), "S21420C1.s21420c1f4");
    test_class_info(&lv, &cd_S21420C1);
    dp->~S21420C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21420C1(Test_S21420C1, "S21420C1", ABISELECT(312,204));

#else // __cplusplus

extern void _ZN8S21420C1C1Ev();
extern void _ZN8S21420C1D1Ev();
Name_Map name_map_S21420C1[] = {
  NSPAIR(_ZN8S21420C1C1Ev),
  NSPAIR(_ZN8S21420C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21420C1[];
extern void _ZN8S21420C1D1Ev();
extern void _ZN8S21420C1D0Ev();
static  VTBL_ENTRY vtc_S21420C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21420C1[0]),
  (VTBL_ENTRY)&_ZN8S21420C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21420C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21420C1[];
extern  VTBL_ENTRY _ZTV8S21420C1[];
Class_Descriptor cd_S21420C1 = {  "S21420C1", // class name
  0,0,//no base classes
  &(vtc_S21420C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,204), // object size
  NSPAIRA(_ZTI8S21420C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21420C1),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  S3505C6  : virtual S10180C133 , S10180C93 {
  ~S3505C6(); // tgen
  S3505C6(); // tgen
};
//SIG(-1 S3505C6) C1{ VBC2{ m} BC3{ m FL}}


S3505C6 ::~S3505C6(){ note_dtor("S3505C6", this);} // tgen
S3505C6 ::S3505C6(){ note_ctor("S3505C6", this);} // tgen

static void Test_S3505C6()
{
  extern Class_Descriptor cd_S3505C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3505C6, buf);
    S3505C6 *dp, &lv = *(dp=new (buf) S3505C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3505C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3505C6)");
    check_base_class_offset(lv, (S10180C133*), 0, "S3505C6");
    check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S3505C6");
    test_class_info(&lv, &cd_S3505C6);
    dp->~S3505C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3505C6(Test_S3505C6, "S3505C6", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3505C6C1Ev();
extern void _ZN7S3505C6D1Ev();
Name_Map name_map_S3505C6[] = {
  NSPAIR(_ZN7S3505C6C1Ev),
  NSPAIR(_ZN7S3505C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S3505C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S3505C6[];
static  VTBL_ENTRY vtc_S3505C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C6[0]),
};
extern VTBL_ENTRY _ZTV7S3505C6[];
static  VTT_ENTRY vtt_S3505C6[] = {
  {&(_ZTV7S3505C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3505C6[];
extern  VTBL_ENTRY _ZTV7S3505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C6[];
Class_Descriptor cd_S3505C6 = {  "S3505C6", // class name
  bases_S3505C6, 2,
  &(vtc_S3505C6[0]), // expected_vtbl_contents
  &(vtt_S3505C6[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3505C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3505C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3505C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3505C3  : virtual S10180C138 , virtual S10180C93 , S3505C6 {
  ~S3505C3(); // tgen
  S3505C3(); // tgen
};
//SIG(-1 S3505C3) C1{ VBC2{ m} VBC3{ m FL} BC4{ VBC5{ m} BC3}}


S3505C3 ::~S3505C3(){ note_dtor("S3505C3", this);} // tgen
S3505C3 ::S3505C3(){ note_ctor("S3505C3", this);} // tgen

static void Test_S3505C3()
{
  extern Class_Descriptor cd_S3505C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S3505C3, buf);
    S3505C3 *dp, &lv = *(dp=new (buf) S3505C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S3505C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3505C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S3505C3");
    /*is_ambiguous_... S3505C3::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S3505C3");
    check_base_class_offset(lv, (S10180C133*)(S3505C6*), 0, "S3505C3");
    check_base_class_offset(lv, (S10180C93*)(S3505C6*), ABISELECT(8,4), "S3505C3");
    check_base_class_offset(lv, (S3505C6*), 0, "S3505C3");
    test_class_info(&lv, &cd_S3505C3);
    dp->~S3505C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3505C3(Test_S3505C3, "S3505C3", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S3505C3C1Ev();
extern void _ZN7S3505C3D1Ev();
Name_Map name_map_S3505C3[] = {
  NSPAIR(_ZN7S3505C3C1Ev),
  NSPAIR(_ZN7S3505C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S3505C6;
extern VTBL_ENTRY _ZTI7S3505C6[];
extern  VTBL_ENTRY _ZTV7S3505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C6[];
static Base_Class bases_S3505C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S3505C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3505C3[];
static  VTBL_ENTRY vtc_S3505C3[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C3[0]),
};
extern VTBL_ENTRY _ZTV7S3505C3[];
static  VTBL_ENTRY _tg__ZTV7S3505C6__7S3505C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C6[0]),
};
static  VTT_ENTRY vtt_S3505C3[] = {
  {&(_ZTV7S3505C3[5]),  5,5},
  {&(_tg__ZTV7S3505C6__7S3505C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3505C3[];
extern  VTBL_ENTRY _ZTV7S3505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C3[];
Class_Descriptor cd_S3505C3 = {  "S3505C3", // class name
  bases_S3505C3, 5,
  &(vtc_S3505C3[0]), // expected_vtbl_contents
  &(vtt_S3505C3[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S3505C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3505C3),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3505C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3505C2  : S3505C3 {
  ~S3505C2(); // tgen
  S3505C2(); // tgen
};
//SIG(-1 S3505C2) C1{ BC2{ VBC3{ m} VBC4{ m FL} BC5{ VBC6{ m} BC4}}}


S3505C2 ::~S3505C2(){ note_dtor("S3505C2", this);} // tgen
S3505C2 ::S3505C2(){ note_ctor("S3505C2", this);} // tgen

static void Test_S3505C2()
{
  extern Class_Descriptor cd_S3505C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S3505C2, buf);
    S3505C2 *dp, &lv = *(dp=new (buf) S3505C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S3505C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3505C2)");
    check_base_class_offset(lv, (S10180C138*)(S3505C3*), 0, "S3505C2");
    /*is_ambiguous_... S3505C3::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S3505C3*), ABISELECT(16,12), "S3505C2");
    check_base_class_offset(lv, (S10180C133*)(S3505C6*)(S3505C3*), 0, "S3505C2");
    check_base_class_offset(lv, (S10180C93*)(S3505C6*)(S3505C3*), ABISELECT(8,4), "S3505C2");
    check_base_class_offset(lv, (S3505C6*)(S3505C3*), 0, "S3505C2");
    check_base_class_offset(lv, (S3505C3*), 0, "S3505C2");
    test_class_info(&lv, &cd_S3505C2);
    dp->~S3505C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3505C2(Test_S3505C2, "S3505C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S3505C2C1Ev();
extern void _ZN7S3505C2D1Ev();
Name_Map name_map_S3505C2[] = {
  NSPAIR(_ZN7S3505C2C1Ev),
  NSPAIR(_ZN7S3505C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S3505C6;
extern VTBL_ENTRY _ZTI7S3505C6[];
extern  VTBL_ENTRY _ZTV7S3505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C6[];
extern Class_Descriptor cd_S3505C3;
extern VTBL_ENTRY _ZTI7S3505C3[];
extern  VTBL_ENTRY _ZTV7S3505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C3[];
static Base_Class bases_S3505C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S3505C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3505C2[];
static  VTBL_ENTRY vtc_S3505C2[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C2[0]),
};
extern VTBL_ENTRY _ZTV7S3505C2[];
static  VTBL_ENTRY _tg__ZTV7S3505C3__7S3505C2[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C67S3505C3__7S3505C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C6[0]),
};
static  VTT_ENTRY vtt_S3505C2[] = {
  {&(_ZTV7S3505C2[5]),  5,5},
  {&(_tg__ZTV7S3505C3__7S3505C2[5]),  5,5},
  {&(_tg__ZTV7S3505C67S3505C3__7S3505C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3505C2[];
extern  VTBL_ENTRY _ZTV7S3505C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C2[];
Class_Descriptor cd_S3505C2 = {  "S3505C2", // class name
  bases_S3505C2, 6,
  &(vtc_S3505C2[0]), // expected_vtbl_contents
  &(vtt_S3505C2[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S3505C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3505C2),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3505C2),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3505C9  : virtual S3505C6 {
  ::S10180C20 s3505c9f0;
  ~S3505C9(); // tgen
  S3505C9(); // tgen
};
//SIG(-1 S3505C9) C1{ VBC2{ VBC3{ m} BC4{ m FL}} FC5{ m}}


S3505C9 ::~S3505C9(){ note_dtor("S3505C9", this);} // tgen
S3505C9 ::S3505C9(){ note_ctor("S3505C9", this);} // tgen

static void Test_S3505C9()
{
  extern Class_Descriptor cd_S3505C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3505C9, buf);
    S3505C9 *dp, &lv = *(dp=new (buf) S3505C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3505C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3505C9)");
    check_base_class_offset(lv, (S10180C133*)(S3505C6*), 0, "S3505C9");
    check_base_class_offset(lv, (S10180C93*)(S3505C6*), ABISELECT(24,12), "S3505C9");
    check_base_class_offset(lv, (S3505C6*), ABISELECT(16,8), "S3505C9");
    check_field_offset(lv, s3505c9f0, ABISELECT(8,4), "S3505C9.s3505c9f0");
    test_class_info(&lv, &cd_S3505C9);
    dp->~S3505C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3505C9(Test_S3505C9, "S3505C9", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3505C9C1Ev();
extern void _ZN7S3505C9D1Ev();
Name_Map name_map_S3505C9[] = {
  NSPAIR(_ZN7S3505C9C1Ev),
  NSPAIR(_ZN7S3505C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S3505C6;
extern VTBL_ENTRY _ZTI7S3505C6[];
extern  VTBL_ENTRY _ZTV7S3505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C6[];
static Base_Class bases_S3505C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3505C6,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3505C9[];
static  VTBL_ENTRY vtc_S3505C9[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C9[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3505C9[0]),
};
extern VTBL_ENTRY _ZTV7S3505C9[];
static  VTBL_ENTRY _tg__ZTV7S3505C6__7S3505C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C6[0]),
};
static  VTT_ENTRY vtt_S3505C9[] = {
  {&(_ZTV7S3505C9[4]),  4,7},
  {&(_ZTV7S3505C9[7]),  7,7},
  {&(_tg__ZTV7S3505C6__7S3505C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3505C9[];
extern  VTBL_ENTRY _ZTV7S3505C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C9[];
Class_Descriptor cd_S3505C9 = {  "S3505C9", // class name
  bases_S3505C9, 3,
  &(vtc_S3505C9[0]), // expected_vtbl_contents
  &(vtt_S3505C9[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3505C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3505C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3505C9),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3505C8  : virtual S3505C6 , S3505C9 {
  int s3505c8f0:18;
  virtual  ~S3505C8(); // _ZN7S3505C8D2Ev
  S3505C8(); // tgen
};
//SIG(-1 S3505C8) C1{ VBC2{ VBC3{ m} BC4{ m FL}} BC5{ VBC2 FC6{ m}} vd Fi:18}


 S3505C8 ::~S3505C8(){ note_dtor("S3505C8", this);}
S3505C8 ::S3505C8(){ note_ctor("S3505C8", this);} // tgen

static void Test_S3505C8()
{
  extern Class_Descriptor cd_S3505C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3505C8, buf);
    S3505C8 *dp, &lv = *(dp=new (buf) S3505C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3505C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3505C8)");
    check_base_class_offset(lv, (S10180C133*)(S3505C6*), 0, "S3505C8");
    check_base_class_offset(lv, (S10180C93*)(S3505C6*), ABISELECT(24,12), "S3505C8");
    check_base_class_offset(lv, (S3505C6*), ABISELECT(16,8), "S3505C8");
    check_base_class_offset(lv, (S3505C6*)(S3505C9*), ABISELECT(16,8), "S3505C8");
    check_base_class_offset(lv, (S3505C9*), 0, "S3505C8");
    set_bf_and_test(lv, s3505c8f0, ABISELECT(9,5), 0, 18, 1, "S3505C8");
    set_bf_and_test(lv, s3505c8f0, ABISELECT(9,5), 0, 18, hide_sll(1LL<<17), "S3505C8");
    test_class_info(&lv, &cd_S3505C8);
    dp->~S3505C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3505C8(Test_S3505C8, "S3505C8", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3505C8C1Ev();
extern void _ZN7S3505C8D2Ev();
Name_Map name_map_S3505C8[] = {
  NSPAIR(_ZN7S3505C8C1Ev),
  NSPAIR(_ZN7S3505C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S3505C6;
extern VTBL_ENTRY _ZTI7S3505C6[];
extern  VTBL_ENTRY _ZTV7S3505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C6[];
extern Class_Descriptor cd_S3505C9;
extern VTBL_ENTRY _ZTI7S3505C9[];
extern  VTBL_ENTRY _ZTV7S3505C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C9[];
static Base_Class bases_S3505C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3505C6,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3505C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3505C8[];
extern void _ZN7S3505C8D1Ev();
extern void _ZN7S3505C8D0Ev();
static  VTBL_ENTRY vtc_S3505C8[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C8[0]),
  (VTBL_ENTRY)&_ZN7S3505C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3505C8D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3505C8[0]),
};
extern VTBL_ENTRY _ZTV7S3505C8[];
static  VTBL_ENTRY _tg__ZTV7S3505C9__7S3505C8[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C6__7S3505C9__7S3505C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3505C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C6__7S3505C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C6[0]),
};
static  VTT_ENTRY vtt_S3505C8[] = {
  {&(_ZTV7S3505C8[4]),  4,9},
  {&(_tg__ZTV7S3505C9__7S3505C8[4]),  4,4},
  {&(_tg__ZTV7S3505C6__7S3505C9__7S3505C8[3]),  3,3},
  {&(_ZTV7S3505C8[9]),  9,9},
  {&(_tg__ZTV7S3505C6__7S3505C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3505C8[];
extern  VTBL_ENTRY _ZTV7S3505C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C8[];
Class_Descriptor cd_S3505C8 = {  "S3505C8", // class name
  bases_S3505C8, 4,
  &(vtc_S3505C8[0]), // expected_vtbl_contents
  &(vtt_S3505C8[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3505C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3505C8),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3505C8),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3505C11  : virtual S3505C3 , S3505C9 {
  ::S21015C16 s3505c11f0;
  ~S3505C11(); // tgen
  S3505C11(); // tgen
};
//SIG(-1 S3505C11) C1{ VBC2{ VBC3{ m} VBC4{ m FL} BC5{ VBC6{ m} BC4}} BC7{ VBC5 FC8{ m}} FC9{ VBC6 BC3 VBC10{ VBC11{ VBC3 BC4} BC12{ VBC11 FC6} vd Fi:18} BC4}}


S3505C11 ::~S3505C11(){ note_dtor("S3505C11", this);} // tgen
S3505C11 ::S3505C11(){ note_ctor("S3505C11", this);} // tgen

static void Test_S3505C11()
{
  extern Class_Descriptor cd_S3505C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S3505C11, buf);
    S3505C11 *dp, &lv = *(dp=new (buf) S3505C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3505C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3505C11)");
    check_base_class_offset(lv, (S10180C138*)(S3505C3*), 0, "S3505C11");
    /*is_ambiguous_... S3505C3::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S3505C3*), ABISELECT(88,56), "S3505C11");
    check_base_class_offset(lv, (S10180C133*)(S3505C6*)(S3505C3*), 0, "S3505C11");
    /*is_ambiguous_... S3505C11::S3505C6 */ AMB_check_base_class_offset(lv, (S10180C133*)(S3505C6*), 0, "S3505C11");
    check_base_class_offset(lv, (S10180C93*)(S3505C6*)(S3505C3*), ABISELECT(80,48), "S3505C11");
    check_base_class_offset(lv, (S3505C6*)(S3505C3*), ABISELECT(72,44), "S3505C11");
    check_base_class_offset(lv, (S3505C3*), ABISELECT(72,44), "S3505C11");
    /*is_ambiguous_... S3505C11::S3505C6 */ AMB_check_base_class_offset(lv, (S10180C93*)(S3505C6*), ABISELECT(104,68), "S3505C11");
    check_base_class_offset(lv, (S3505C6*)(S3505C9*), ABISELECT(96,64), "S3505C11");
    check_base_class_offset(lv, (S3505C9*), 0, "S3505C11");
    check_field_offset(lv, s3505c11f0, ABISELECT(16,8), "S3505C11.s3505c11f0");
    test_class_info(&lv, &cd_S3505C11);
    dp->~S3505C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3505C11(Test_S3505C11, "S3505C11", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN8S3505C11C1Ev();
extern void _ZN8S3505C11D1Ev();
Name_Map name_map_S3505C11[] = {
  NSPAIR(_ZN8S3505C11C1Ev),
  NSPAIR(_ZN8S3505C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S3505C6;
extern VTBL_ENTRY _ZTI7S3505C6[];
extern  VTBL_ENTRY _ZTV7S3505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C6[];
extern Class_Descriptor cd_S3505C3;
extern VTBL_ENTRY _ZTI7S3505C3[];
extern  VTBL_ENTRY _ZTV7S3505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C3[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S3505C6;
extern VTBL_ENTRY _ZTI7S3505C6[];
extern  VTBL_ENTRY _ZTV7S3505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C6[];
extern Class_Descriptor cd_S3505C9;
extern VTBL_ENTRY _ZTI7S3505C9[];
extern  VTBL_ENTRY _ZTV7S3505C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C9[];
static Base_Class bases_S3505C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3505C6,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3505C3,    ABISELECT(72,44), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C93,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S3505C6,    ABISELECT(96,64), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3505C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3505C11[];
static  VTBL_ENTRY vtc_S3505C11[] = {
  ABISELECT(88,56),
  0,
  ABISELECT(72,44),
  0,
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S3505C11[0]),
  ABISELECT(16,12),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S3505C11[0]),
  ABISELECT(-96,-64),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S3505C11[0]),
};
extern VTBL_ENTRY _ZTV8S3505C11[];
static  VTBL_ENTRY _tg__ZTV7S3505C9__8S3505C11[] = {
  0,
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C6__7S3505C9__8S3505C11[] = {
  ABISELECT(-96,-64),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S3505C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C3__8S3505C11[] = {
  ABISELECT(16,12),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C67S3505C3__8S3505C11[] = {
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C6__A1__8S3505C11[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C6[0]),
};
static  VTT_ENTRY vtt_S3505C11[] = {
  {&(_ZTV8S3505C11[7]),  7,15},
  {&(_tg__ZTV7S3505C9__8S3505C11[4]),  4,4},
  {&(_tg__ZTV7S3505C6__7S3505C9__8S3505C11[3]),  3,3},
  {&(_ZTV8S3505C11[12]),  12,15},
  {&(_ZTV8S3505C11[15]),  15,15},
  {&(_tg__ZTV7S3505C3__8S3505C11[5]),  5,5},
  {&(_tg__ZTV7S3505C67S3505C3__8S3505C11[3]),  3,3},
  {&(_tg__ZTV7S3505C6__A1__8S3505C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3505C11[];
extern  VTBL_ENTRY _ZTV8S3505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3505C11[];
Class_Descriptor cd_S3505C11 = {  "S3505C11", // class name
  bases_S3505C11, 9,
  &(vtc_S3505C11[0]), // expected_vtbl_contents
  &(vtt_S3505C11[0]), // expected_vtt_contents
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI8S3505C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3505C11),15, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3505C11),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3505C1  : S3505C2 , virtual S3505C8 , virtual S10180C20 , S3505C11 , S10180C133 {
  virtual  ~S3505C1(); // _ZN7S3505C1D2Ev
  S3505C1(); // tgen
};
//SIG(1 S3505C1) C1{ BC2{ BC3{ VBC4{ m} VBC5{ m FL} BC6{ VBC7{ m} BC5}}} VBC8{ VBC6 BC9{ VBC6 FC10{ m}} vd Fi:18} VBC10 BC11{ VBC3 BC9 FC12{ VBC7 BC4 VBC13{ VBC14{ VBC4 BC5} BC15{ VBC14 FC7} vd Fi:18} BC5}} BC7 vd}


 S3505C1 ::~S3505C1(){ note_dtor("S3505C1", this);}
S3505C1 ::S3505C1(){ note_ctor("S3505C1", this);} // tgen

static void Test_S3505C1()
{
  extern Class_Descriptor cd_S3505C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S3505C1, buf);
    S3505C1 *dp, &lv = *(dp=new (buf) S3505C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S3505C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3505C1)");
    check_base_class_offset(lv, (S10180C138*)(S3505C3*)(S3505C2*), 0, "S3505C1");
    /*is_ambiguous_... S3505C1::S3505C3 */ AMB_check_base_class_offset(lv, (S10180C138*)(S3505C3*), 0, "S3505C1");
    /*is_ambiguous_... S3505C3::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S3505C3*)(S3505C2*), ABISELECT(88,56), "S3505C1");
    /*is_ambiguous_... S3505C1::S3505C3 */ AMB_check_base_class_offset(lv, (S10180C93*)(S3505C3*), ABISELECT(88,56), "S3505C1");
    check_base_class_offset(lv, (S10180C133*)(S3505C6*)(S3505C3*)(S3505C2*), ABISELECT(96,64), "S3505C1");
    /*is_ambiguous_... S3505C1::S3505C6 */ AMB_check_base_class_offset(lv, (S10180C133*)(S3505C6*), ABISELECT(96,64), "S3505C1");
    /*is_ambiguous_... S3505C1::S3505C3 */ AMB_check_base_class_offset(lv, (S10180C133*)(S3505C6*)(S3505C3*), ABISELECT(96,64), "S3505C1");
    check_base_class_offset(lv, (S10180C93*)(S3505C6*)(S3505C3*)(S3505C2*), ABISELECT(8,4), "S3505C1");
    check_base_class_offset(lv, (S3505C6*)(S3505C3*)(S3505C2*), 0, "S3505C1");
    check_base_class_offset(lv, (S3505C3*)(S3505C2*), 0, "S3505C1");
    check_base_class_offset(lv, (S3505C2*), 0, "S3505C1");
    /*is_ambiguous_... S3505C1::S3505C6 */ AMB_check_base_class_offset(lv, (S10180C93*)(S3505C6*), ABISELECT(120,76), "S3505C1");
    check_base_class_offset(lv, (S3505C6*)(S3505C8*), ABISELECT(112,72), "S3505C1");
    check_base_class_offset(lv, (S3505C6*)(S3505C9*)(S3505C8*), ABISELECT(112,72), "S3505C1");
    check_base_class_offset(lv, (S3505C6*)(S3505C9*)(S3505C11*), ABISELECT(112,72), "S3505C1");
    check_base_class_offset(lv, (S3505C9*)(S3505C8*), ABISELECT(96,64), "S3505C1");
    check_base_class_offset(lv, (S3505C8*), ABISELECT(96,64), "S3505C1");
    check_base_class_offset(lv, (S10180C20*), 0, "S3505C1");
    /*is_ambiguous_... S3505C1::S3505C3 */ AMB_check_base_class_offset(lv, (S10180C93*)(S3505C6*)(S3505C3*), ABISELECT(136,88), "S3505C1");
    /*is_ambiguous_... S3505C1::S3505C3 */ AMB_check_base_class_offset(lv, (S3505C6*)(S3505C3*), ABISELECT(128,84), "S3505C1");
    check_base_class_offset(lv, (S3505C3*)(S3505C11*), ABISELECT(128,84), "S3505C1");
    check_base_class_offset(lv, (S3505C9*)(S3505C11*), ABISELECT(16,12), "S3505C1");
    check_base_class_offset(lv, (S3505C11*), ABISELECT(16,12), "S3505C1");
    /*is_ambiguous_... S3505C1::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*), 0, "S3505C1");
    test_class_info(&lv, &cd_S3505C1);
    dp->~S3505C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3505C1(Test_S3505C1, "S3505C1", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN7S3505C1C1Ev();
extern void _ZN7S3505C1D2Ev();
Name_Map name_map_S3505C1[] = {
  NSPAIR(_ZN7S3505C1C1Ev),
  NSPAIR(_ZN7S3505C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S3505C6;
extern VTBL_ENTRY _ZTI7S3505C6[];
extern  VTBL_ENTRY _ZTV7S3505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C6[];
extern Class_Descriptor cd_S3505C3;
extern VTBL_ENTRY _ZTI7S3505C3[];
extern  VTBL_ENTRY _ZTV7S3505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C3[];
extern Class_Descriptor cd_S3505C2;
extern VTBL_ENTRY _ZTI7S3505C2[];
extern  VTBL_ENTRY _ZTV7S3505C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C2[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S3505C6;
extern VTBL_ENTRY _ZTI7S3505C6[];
extern  VTBL_ENTRY _ZTV7S3505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C6[];
extern Class_Descriptor cd_S3505C9;
extern VTBL_ENTRY _ZTI7S3505C9[];
extern  VTBL_ENTRY _ZTV7S3505C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C9[];
extern Class_Descriptor cd_S3505C8;
extern VTBL_ENTRY _ZTI7S3505C8[];
extern  VTBL_ENTRY _ZTV7S3505C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C8[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S3505C6;
extern VTBL_ENTRY _ZTI7S3505C6[];
extern  VTBL_ENTRY _ZTV7S3505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C6[];
extern Class_Descriptor cd_S3505C3;
extern VTBL_ENTRY _ZTI7S3505C3[];
extern  VTBL_ENTRY _ZTV7S3505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C3[];
extern Class_Descriptor cd_S3505C9;
extern VTBL_ENTRY _ZTI7S3505C9[];
extern  VTBL_ENTRY _ZTV7S3505C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C9[];
extern Class_Descriptor cd_S3505C11;
extern VTBL_ENTRY _ZTI8S3505C11[];
extern  VTBL_ENTRY _ZTV8S3505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3505C11[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
static Base_Class bases_S3505C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S3505C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3505C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C93,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S3505C6,    ABISELECT(112,72), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3505C9,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3505C8,    ABISELECT(96,64), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S3505C6,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3505C3,    ABISELECT(128,84), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3505C9,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3505C11,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3505C1[];
extern void _ZN7S3505C1D1Ev();
extern void _ZN7S3505C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S3505C1D1Ev,_ZTv0_n20_N7S3505C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S3505C1D1Ev,_ZThn64_N7S3505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3505C1D0Ev,_ZTv0_n20_N7S3505C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S3505C1D0Ev,_ZThn64_N7S3505C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3505C1[] = {
  ABISELECT(128,84),
  0,
  ABISELECT(112,72),
  ABISELECT(96,64),
  ABISELECT(88,56),
  0,
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C1[0]),
  (VTBL_ENTRY)&_ZN7S3505C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3505C1D0Ev,
  ABISELECT(72,44),
  ABISELECT(-16,-12),
  ABISELECT(112,72),
  ABISELECT(80,52),
  ABISELECT(96,60),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3505C1[0]),
  ABISELECT(-96,-64),
  0,
  ABISELECT(16,8),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S3505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3505C1D1Ev,_ZTv0_n20_N7S3505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3505C1D0Ev,_ZTv0_n20_N7S3505C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S3505C1[0]),
  ABISELECT(-40,-28),
  ABISELECT(-128,-84),
  ABISELECT(-32,-20),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI7S3505C1[0]),
};
extern VTBL_ENTRY _ZTV7S3505C1[];
static  VTBL_ENTRY _tg__ZTV7S3505C2__7S3505C1[] = {
  ABISELECT(88,56),
  0,
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C37S3505C2__7S3505C1[] = {
  ABISELECT(88,56),
  0,
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C67S3505C37S3505C2__7S3505C1[] = {
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3505C11__7S3505C1[] = {
  ABISELECT(72,44),
  ABISELECT(-16,-12),
  ABISELECT(112,72),
  ABISELECT(80,52),
  ABISELECT(96,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S3505C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C98S3505C11__A1__7S3505C1[] = {
  ABISELECT(80,52),
  ABISELECT(96,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C6__7S3505C98S3505C11__A1__7S3505C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S3505C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C3__8S3505C11__7S3505C1[] = {
  ABISELECT(-40,-28),
  ABISELECT(-128,-84),
  ABISELECT(-32,-20),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S3505C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C6__A1__8S3505C11__7S3505C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S3505C11[0]),
};
extern void _ZN7S3505C8D1Ev();
extern void _ZN7S3505C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3505C8__7S3505C1[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C8[0]),
  (VTBL_ENTRY)&_ZN7S3505C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3505C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3505C97S3505C8__7S3505C1[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C6__7S3505C97S3505C8__7S3505C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3505C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C6__7S3505C8__7S3505C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3505C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C6__A1__7S3505C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C3__A1__7S3505C1[] = {
  ABISELECT(-40,-28),
  ABISELECT(-128,-84),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3505C67S3505C3__A2__7S3505C1[] = {
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3505C6[0]),
};
static  VTT_ENTRY vtt_S3505C1[] = {
  {&(_ZTV7S3505C1[9]),  9,33},
  {&(_tg__ZTV7S3505C2__7S3505C1[5]),  5,5},
  {&(_tg__ZTV7S3505C37S3505C2__7S3505C1[5]),  5,5},
  {&(_tg__ZTV7S3505C67S3505C37S3505C2__7S3505C1[3]),  3,3},
  {&(_tg__ZTV8S3505C11__7S3505C1[7]),  7,7},
  {&(_tg__ZTV7S3505C98S3505C11__A1__7S3505C1[4]),  4,4},
  {&(_tg__ZTV7S3505C6__7S3505C98S3505C11__A1__7S3505C1[3]),  3,3},
  {&(_tg__ZTV7S3505C3__8S3505C11__7S3505C1[5]),  5,5},
  {&(_tg__ZTV7S3505C6__A1__8S3505C11__7S3505C1[3]),  3,3},
  {&(_ZTV7S3505C1[23]),  23,33},
  {&(_ZTV7S3505C1[28]),  28,33},
  {&(_ZTV7S3505C1[18]),  18,33},
  {&(_ZTV7S3505C1[33]),  33,33},
  {&(_tg__ZTV7S3505C8__7S3505C1[4]),  4,6},
  {&(_tg__ZTV7S3505C97S3505C8__7S3505C1[4]),  4,4},
  {&(_tg__ZTV7S3505C6__7S3505C97S3505C8__7S3505C1[3]),  3,3},
  {&(_tg__ZTV7S3505C6__7S3505C8__7S3505C1[3]),  3,3},
  {&(_tg__ZTV7S3505C6__A1__7S3505C1[3]),  3,3},
  {&(_tg__ZTV7S3505C3__A1__7S3505C1[5]),  5,5},
  {&(_tg__ZTV7S3505C67S3505C3__A2__7S3505C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3505C1[];
extern  VTBL_ENTRY _ZTV7S3505C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3505C1[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3505C1D0Ev,_ZTv0_n20_N7S3505C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3505C1D0Ev,_ZThn64_N7S3505C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3505C1D1Ev,_ZTv0_n20_N7S3505C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3505C1D1Ev,_ZThn64_N7S3505C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3505C1 = {  "S3505C1", // class name
  bases_S3505C1, 18,
  &(vtc_S3505C1[0]), // expected_vtbl_contents
  &(vtt_S3505C1[0]), // expected_vtt_contents
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI7S3505C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3505C1),33, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3505C1),20, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5973C10  {
  ::S10180C12 s5973c10f0;
  int s5973c10f1;
};
//SIG(1 S5973C10) C1{ FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fi}



static void Test_S5973C10()
{
  {
    init_simple_test("S5973C10");
    S5973C10 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S5973C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5973C10)");
    check_field_offset(lv, s5973c10f0, 0, "S5973C10.s5973c10f0");
    check_field_offset(lv, s5973c10f1, ABISELECT(24,16), "S5973C10.s5973c10f1");
  }
}
static Arrange_To_Call_Me vS5973C10(Test_S5973C10, "S5973C10", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5973C1  : S10180C70 {
  ::S5973C10 s5973c1f0[3];
};
//SIG(1 S5973C1) C1{ BC2{ m Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC4 FC4 Fi[3] FC6{ m FC7{ m FL[2]}} Fc Fi Fi:8 Fi:24 FC3 FC3 Fc} FC8{ FC3 Fi}[3]}



static void Test_S5973C1()
{
  extern Class_Descriptor cd_S5973C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,46)];
    init_test(&cd_S5973C1, buf);
    S5973C1 &lv = *(new (buf) S5973C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,180), "sizeof(S5973C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5973C1)");
    check_base_class_offset(lv, (S10180C70*), 0, "S5973C1");
    check_field_offset(lv, s5973c1f0, ABISELECT(168,120), "S5973C1.s5973c1f0");
    test_class_info(&lv, &cd_S5973C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5973C1(Test_S5973C1, "S5973C1", ABISELECT(264,180));

#else // __cplusplus

extern Class_Descriptor cd_S10180C70;
static Base_Class bases_S5973C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C70,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S5973C1 = {  "S5973C1", // class name
  bases_S5973C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(264,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  S1163C3  : S10180C138 {
  int s1163c3f0;
  void *s1163c3f1;
  ::S1168C5 s1163c3f2;
  ::S1168C8_nt s1163c3f3;
  char s1163c3f4;
  virtual  ~S1163C3(); // _ZN7S1163C3D1Ev
  virtual void  v3(); // _ZN7S1163C32v3Ev
  virtual void  v4(); // _ZN7S1163C32v4Ev
  virtual void  v5(); // _ZN7S1163C32v5Ev
  virtual void  v6(); // _ZN7S1163C32v6Ev
  virtual void  v7(); // _ZN7S1163C32v7Ev
  virtual void  v8(); // _ZN7S1163C32v8Ev
  virtual void  v9(); // _ZN7S1163C32v9Ev
  virtual void  v10(); // _ZN7S1163C33v10Ev
  S1163C3(); // tgen
};
//SIG(-1 S1163C3) C1{ BC2{ m} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp FC3{ BC4{ m Fp Fi[2] FC2}} FC5{ BC6{ m Fp}} Fc}


 S1163C3 ::~S1163C3(){ note_dtor("S1163C3", this);}
void  S1163C3 ::v3(){vfunc_called(this, "_ZN7S1163C32v3Ev");}
void  S1163C3 ::v4(){vfunc_called(this, "_ZN7S1163C32v4Ev");}
void  S1163C3 ::v5(){vfunc_called(this, "_ZN7S1163C32v5Ev");}
void  S1163C3 ::v6(){vfunc_called(this, "_ZN7S1163C32v6Ev");}
void  S1163C3 ::v7(){vfunc_called(this, "_ZN7S1163C32v7Ev");}
void  S1163C3 ::v8(){vfunc_called(this, "_ZN7S1163C32v8Ev");}
void  S1163C3 ::v9(){vfunc_called(this, "_ZN7S1163C32v9Ev");}
void  S1163C3 ::v10(){vfunc_called(this, "_ZN7S1163C33v10Ev");}
S1163C3 ::S1163C3(){ note_ctor("S1163C3", this);} // tgen

static void Test_S1163C3()
{
  extern Class_Descriptor cd_S1163C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1163C3, buf);
    S1163C3 *dp, &lv = *(dp=new (buf) S1163C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1163C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1163C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S1163C3");
    check_field_offset(lv, s1163c3f0, ABISELECT(8,4), "S1163C3.s1163c3f0");
    check_field_offset(lv, s1163c3f1, ABISELECT(16,8), "S1163C3.s1163c3f1");
    check_field_offset(lv, s1163c3f2, ABISELECT(24,12), "S1163C3.s1163c3f2");
    check_field_offset(lv, s1163c3f3, ABISELECT(48,28), "S1163C3.s1163c3f3");
    check_field_offset(lv, s1163c3f4, ABISELECT(56,32), "S1163C3.s1163c3f4");
    test_class_info(&lv, &cd_S1163C3);
    dp->~S1163C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1163C3(Test_S1163C3, "S1163C3", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1163C3C1Ev();
extern void _ZN7S1163C3D1Ev();
Name_Map name_map_S1163C3[] = {
  NSPAIR(_ZN7S1163C3C1Ev),
  NSPAIR(_ZN7S1163C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S1163C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1163C3[];
extern void _ZN7S1163C3D1Ev();
extern void _ZN7S1163C3D0Ev();
extern void _ZN7S1163C32v3Ev();
extern void _ZN7S1163C32v4Ev();
extern void _ZN7S1163C32v5Ev();
extern void _ZN7S1163C32v6Ev();
extern void _ZN7S1163C32v7Ev();
extern void _ZN7S1163C32v8Ev();
extern void _ZN7S1163C32v9Ev();
extern void _ZN7S1163C33v10Ev();
static  VTBL_ENTRY vtc_S1163C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1163C3[0]),
  (VTBL_ENTRY)&_ZN7S1163C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1163C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1163C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S1163C3[];
extern  VTBL_ENTRY _ZTV7S1163C3[];
Class_Descriptor cd_S1163C3 = {  "S1163C3", // class name
  bases_S1163C3, 1,
  &(vtc_S1163C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1163C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1163C3),12, //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  S1163C2  : S1163C3 {
  void *s1163c2f0;
  virtual void  v11(); // _ZN7S1163C23v11Ev
  virtual void  v12(); // _ZN7S1163C23v12Ev
  virtual void  v13(); // _ZN7S1163C23v13Ev
  virtual void  v14(); // _ZN7S1163C23v14Ev
  virtual void  v15(); // _ZN7S1163C23v15Ev
  virtual void  v16(); // _ZN7S1163C23v16Ev
  ~S1163C2(); // tgen
  S1163C2(); // tgen
};
//SIG(-1 S1163C2) C1{ BC2{ BC3{ m} vd v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp FC4{ BC5{ m Fp Fi[2] FC3}} FC6{ BC7{ m Fp}} Fc} v1 v2 v3 v4 v5 v6 Fp}


void  S1163C2 ::v11(){vfunc_called(this, "_ZN7S1163C23v11Ev");}
void  S1163C2 ::v12(){vfunc_called(this, "_ZN7S1163C23v12Ev");}
void  S1163C2 ::v13(){vfunc_called(this, "_ZN7S1163C23v13Ev");}
void  S1163C2 ::v14(){vfunc_called(this, "_ZN7S1163C23v14Ev");}
void  S1163C2 ::v15(){vfunc_called(this, "_ZN7S1163C23v15Ev");}
void  S1163C2 ::v16(){vfunc_called(this, "_ZN7S1163C23v16Ev");}
S1163C2 ::~S1163C2(){ note_dtor("S1163C2", this);} // tgen
S1163C2 ::S1163C2(){ note_ctor("S1163C2", this);} // tgen

static void Test_S1163C2()
{
  extern Class_Descriptor cd_S1163C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S1163C2, buf);
    S1163C2 *dp, &lv = *(dp=new (buf) S1163C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S1163C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1163C2)");
    check_base_class_offset(lv, (S10180C138*)(S1163C3*), 0, "S1163C2");
    check_base_class_offset(lv, (S1163C3*), 0, "S1163C2");
    check_field_offset(lv, s1163c2f0, ABISELECT(64,36), "S1163C2.s1163c2f0");
    test_class_info(&lv, &cd_S1163C2);
    dp->~S1163C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1163C2(Test_S1163C2, "S1163C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S1163C2C1Ev();
extern void _ZN7S1163C2D1Ev();
Name_Map name_map_S1163C2[] = {
  NSPAIR(_ZN7S1163C2C1Ev),
  NSPAIR(_ZN7S1163C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1163C3;
extern VTBL_ENTRY _ZTI7S1163C3[];
extern  VTBL_ENTRY _ZTV7S1163C3[];
static Base_Class bases_S1163C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1163C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1163C2[];
extern void _ZN7S1163C2D1Ev();
extern void _ZN7S1163C2D0Ev();
extern void _ZN7S1163C32v3Ev();
extern void _ZN7S1163C32v4Ev();
extern void _ZN7S1163C32v5Ev();
extern void _ZN7S1163C32v6Ev();
extern void _ZN7S1163C32v7Ev();
extern void _ZN7S1163C32v8Ev();
extern void _ZN7S1163C32v9Ev();
extern void _ZN7S1163C33v10Ev();
extern void _ZN7S1163C23v11Ev();
extern void _ZN7S1163C23v12Ev();
extern void _ZN7S1163C23v13Ev();
extern void _ZN7S1163C23v14Ev();
extern void _ZN7S1163C23v15Ev();
extern void _ZN7S1163C23v16Ev();
static  VTBL_ENTRY vtc_S1163C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1163C2[0]),
  (VTBL_ENTRY)&_ZN7S1163C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1163C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1163C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S1163C2[];
extern  VTBL_ENTRY _ZTV7S1163C2[];
Class_Descriptor cd_S1163C2 = {  "S1163C2", // class name
  bases_S1163C2, 2,
  &(vtc_S1163C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S1163C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1163C2),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  S1163C1  : S1163C2 {
  virtual  ~S1163C1(); // _ZN7S1163C1D1Ev
  virtual void  v1(); // _ZN7S1163C12v1Ev
  virtual void  v2(); // _ZN7S1163C12v2Ev
  S1163C1(); // tgen
};
//SIG(1 S1163C1) C1{ BC2{ BC3{ BC4{ m} vd v3 v4 v5 v6 v7 v8 v9 v10 Fi Fp FC5{ BC6{ m Fp Fi[2] FC4}} FC7{ BC8{ m Fp}} Fc} v11 v12 v13 v14 v15 v16 Fp} vd v1 v2}


 S1163C1 ::~S1163C1(){ note_dtor("S1163C1", this);}
void  S1163C1 ::v1(){vfunc_called(this, "_ZN7S1163C12v1Ev");}
void  S1163C1 ::v2(){vfunc_called(this, "_ZN7S1163C12v2Ev");}
S1163C1 ::S1163C1(){ note_ctor("S1163C1", this);} // tgen

static void Test_S1163C1()
{
  extern Class_Descriptor cd_S1163C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S1163C1, buf);
    S1163C1 *dp, &lv = *(dp=new (buf) S1163C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S1163C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1163C1)");
    check_base_class_offset(lv, (S10180C138*)(S1163C3*)(S1163C2*), 0, "S1163C1");
    check_base_class_offset(lv, (S1163C3*)(S1163C2*), 0, "S1163C1");
    check_base_class_offset(lv, (S1163C2*), 0, "S1163C1");
    test_class_info(&lv, &cd_S1163C1);
    dp->~S1163C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1163C1(Test_S1163C1, "S1163C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S1163C1C1Ev();
extern void _ZN7S1163C1D1Ev();
Name_Map name_map_S1163C1[] = {
  NSPAIR(_ZN7S1163C1C1Ev),
  NSPAIR(_ZN7S1163C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S1163C3;
extern VTBL_ENTRY _ZTI7S1163C3[];
extern  VTBL_ENTRY _ZTV7S1163C3[];
extern Class_Descriptor cd_S1163C2;
extern VTBL_ENTRY _ZTI7S1163C2[];
extern  VTBL_ENTRY _ZTV7S1163C2[];
static Base_Class bases_S1163C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1163C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1163C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1163C1[];
extern void _ZN7S1163C1D1Ev();
extern void _ZN7S1163C1D0Ev();
extern void _ZN7S1163C32v3Ev();
extern void _ZN7S1163C32v4Ev();
extern void _ZN7S1163C32v5Ev();
extern void _ZN7S1163C32v6Ev();
extern void _ZN7S1163C32v7Ev();
extern void _ZN7S1163C32v8Ev();
extern void _ZN7S1163C32v9Ev();
extern void _ZN7S1163C33v10Ev();
extern void _ZN7S1163C23v11Ev();
extern void _ZN7S1163C23v12Ev();
extern void _ZN7S1163C23v13Ev();
extern void _ZN7S1163C23v14Ev();
extern void _ZN7S1163C23v15Ev();
extern void _ZN7S1163C23v16Ev();
extern void _ZN7S1163C12v1Ev();
extern void _ZN7S1163C12v2Ev();
static  VTBL_ENTRY vtc_S1163C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1163C1[0]),
  (VTBL_ENTRY)&_ZN7S1163C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1163C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1163C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1163C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1163C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1163C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1163C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1163C1[];
extern  VTBL_ENTRY _ZTV7S1163C1[];
Class_Descriptor cd_S1163C1 = {  "S1163C1", // class name
  bases_S1163C1, 3,
  &(vtc_S1163C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S1163C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1163C1),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  S19815C5  : virtual S10180C20 , S10180C93 {
  ~S19815C5(); // tgen
  S19815C5(); // tgen
};
//SIG(-1 S19815C5) C1{ VBC2{ m} BC3{ m FL}}


S19815C5 ::~S19815C5(){ note_dtor("S19815C5", this);} // tgen
S19815C5 ::S19815C5(){ note_ctor("S19815C5", this);} // tgen

static void Test_S19815C5()
{
  extern Class_Descriptor cd_S19815C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19815C5, buf);
    S19815C5 *dp, &lv = *(dp=new (buf) S19815C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19815C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19815C5)");
    check_base_class_offset(lv, (S10180C20*), 0, "S19815C5");
    check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S19815C5");
    test_class_info(&lv, &cd_S19815C5);
    dp->~S19815C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19815C5(Test_S19815C5, "S19815C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19815C5C1Ev();
extern void _ZN8S19815C5D1Ev();
Name_Map name_map_S19815C5[] = {
  NSPAIR(_ZN8S19815C5C1Ev),
  NSPAIR(_ZN8S19815C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S19815C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19815C5[];
static  VTBL_ENTRY vtc_S19815C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C5[0]),
};
extern VTBL_ENTRY _ZTV8S19815C5[];
static  VTT_ENTRY vtt_S19815C5[] = {
  {&(_ZTV8S19815C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19815C5[];
extern  VTBL_ENTRY _ZTV8S19815C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C5[];
Class_Descriptor cd_S19815C5 = {  "S19815C5", // class name
  bases_S19815C5, 2,
  &(vtc_S19815C5[0]), // expected_vtbl_contents
  &(vtt_S19815C5[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19815C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19815C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19815C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19815C9  : virtual S19815C5 {
  ::S10180C138 s19815c9f0;
  ~S19815C9(); // tgen
  S19815C9(); // tgen
};
//SIG(-1 S19815C9) C1{ VBC2{ VBC3{ m} BC4{ m FL}} FC5{ m}}


S19815C9 ::~S19815C9(){ note_dtor("S19815C9", this);} // tgen
S19815C9 ::S19815C9(){ note_ctor("S19815C9", this);} // tgen

static void Test_S19815C9()
{
  extern Class_Descriptor cd_S19815C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19815C9, buf);
    S19815C9 *dp, &lv = *(dp=new (buf) S19815C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19815C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19815C9)");
    check_base_class_offset(lv, (S10180C20*)(S19815C5*), 0, "S19815C9");
    check_base_class_offset(lv, (S10180C93*)(S19815C5*), ABISELECT(24,12), "S19815C9");
    check_base_class_offset(lv, (S19815C5*), ABISELECT(16,8), "S19815C9");
    check_field_offset(lv, s19815c9f0, ABISELECT(8,4), "S19815C9.s19815c9f0");
    test_class_info(&lv, &cd_S19815C9);
    dp->~S19815C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19815C9(Test_S19815C9, "S19815C9", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19815C9C1Ev();
extern void _ZN8S19815C9D1Ev();
Name_Map name_map_S19815C9[] = {
  NSPAIR(_ZN8S19815C9C1Ev),
  NSPAIR(_ZN8S19815C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19815C5;
extern VTBL_ENTRY _ZTI8S19815C5[];
extern  VTBL_ENTRY _ZTV8S19815C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C5[];
static Base_Class bases_S19815C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19815C5,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19815C9[];
static  VTBL_ENTRY vtc_S19815C9[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C9[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19815C9[0]),
};
extern VTBL_ENTRY _ZTV8S19815C9[];
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C5[0]),
};
static  VTT_ENTRY vtt_S19815C9[] = {
  {&(_ZTV8S19815C9[4]),  4,7},
  {&(_ZTV8S19815C9[7]),  7,7},
  {&(_tg__ZTV8S19815C5__8S19815C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19815C9[];
extern  VTBL_ENTRY _ZTV8S19815C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C9[];
Class_Descriptor cd_S19815C9 = {  "S19815C9", // class name
  bases_S19815C9, 3,
  &(vtc_S19815C9[0]), // expected_vtbl_contents
  &(vtt_S19815C9[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19815C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19815C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19815C9),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19815C8  : virtual S19815C5 , S19815C9 {
  int s19815c8f0:18;
  virtual  ~S19815C8(); // _ZN8S19815C8D2Ev
  S19815C8(); // tgen
};
//SIG(-1 S19815C8) C1{ VBC2{ VBC3{ m} BC4{ m FL}} BC5{ VBC2 FC6{ m}} vd Fi:18}


 S19815C8 ::~S19815C8(){ note_dtor("S19815C8", this);}
S19815C8 ::S19815C8(){ note_ctor("S19815C8", this);} // tgen

static void Test_S19815C8()
{
  extern Class_Descriptor cd_S19815C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19815C8, buf);
    S19815C8 *dp, &lv = *(dp=new (buf) S19815C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19815C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19815C8)");
    check_base_class_offset(lv, (S10180C20*)(S19815C5*), 0, "S19815C8");
    check_base_class_offset(lv, (S10180C93*)(S19815C5*), ABISELECT(24,12), "S19815C8");
    check_base_class_offset(lv, (S19815C5*), ABISELECT(16,8), "S19815C8");
    check_base_class_offset(lv, (S19815C5*)(S19815C9*), ABISELECT(16,8), "S19815C8");
    check_base_class_offset(lv, (S19815C9*), 0, "S19815C8");
    set_bf_and_test(lv, s19815c8f0, ABISELECT(9,5), 0, 18, 1, "S19815C8");
    set_bf_and_test(lv, s19815c8f0, ABISELECT(9,5), 0, 18, hide_sll(1LL<<17), "S19815C8");
    test_class_info(&lv, &cd_S19815C8);
    dp->~S19815C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19815C8(Test_S19815C8, "S19815C8", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19815C8C1Ev();
extern void _ZN8S19815C8D2Ev();
Name_Map name_map_S19815C8[] = {
  NSPAIR(_ZN8S19815C8C1Ev),
  NSPAIR(_ZN8S19815C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19815C5;
extern VTBL_ENTRY _ZTI8S19815C5[];
extern  VTBL_ENTRY _ZTV8S19815C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C5[];
extern Class_Descriptor cd_S19815C9;
extern VTBL_ENTRY _ZTI8S19815C9[];
extern  VTBL_ENTRY _ZTV8S19815C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C9[];
static Base_Class bases_S19815C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19815C5,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19815C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19815C8[];
extern void _ZN8S19815C8D1Ev();
extern void _ZN8S19815C8D0Ev();
static  VTBL_ENTRY vtc_S19815C8[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C8[0]),
  (VTBL_ENTRY)&_ZN8S19815C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19815C8D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19815C8[0]),
};
extern VTBL_ENTRY _ZTV8S19815C8[];
static  VTBL_ENTRY _tg__ZTV8S19815C9__8S19815C8[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C9__8S19815C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19815C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C5[0]),
};
static  VTT_ENTRY vtt_S19815C8[] = {
  {&(_ZTV8S19815C8[4]),  4,9},
  {&(_tg__ZTV8S19815C9__8S19815C8[4]),  4,4},
  {&(_tg__ZTV8S19815C5__8S19815C9__8S19815C8[3]),  3,3},
  {&(_ZTV8S19815C8[9]),  9,9},
  {&(_tg__ZTV8S19815C5__8S19815C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19815C8[];
extern  VTBL_ENTRY _ZTV8S19815C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C8[];
Class_Descriptor cd_S19815C8 = {  "S19815C8", // class name
  bases_S19815C8, 4,
  &(vtc_S19815C8[0]), // expected_vtbl_contents
  &(vtt_S19815C8[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19815C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19815C8),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19815C8),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19815C10  : virtual S10180C138 , S10180C20 , virtual S19815C8 , S10180C93 {
  ~S19815C10(); // tgen
  S19815C10(); // tgen
};
//SIG(-1 S19815C10) C1{ VBC2{ m} BC3{ m} VBC4{ VBC5{ VBC3 BC6{ m FL}} BC7{ VBC5 FC2} vd Fi:18} BC6}


S19815C10 ::~S19815C10(){ note_dtor("S19815C10", this);} // tgen
S19815C10 ::S19815C10(){ note_ctor("S19815C10", this);} // tgen

static void Test_S19815C10()
{
  extern Class_Descriptor cd_S19815C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19815C10, buf);
    S19815C10 *dp, &lv = *(dp=new (buf) S19815C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19815C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19815C10)");
    check_base_class_offset(lv, (S10180C138*), 0, "S19815C10");
    /*is_ambiguous_... S19815C10::S10180C20 */ AMB_check_base_class_offset(lv, (S10180C20*), 0, "S19815C10");
    check_base_class_offset(lv, (S10180C20*)(S19815C5*), ABISELECT(48,32), "S19815C10");
    check_base_class_offset(lv, (S10180C93*)(S19815C5*), ABISELECT(40,24), "S19815C10");
    check_base_class_offset(lv, (S19815C5*)(S19815C8*), ABISELECT(32,20), "S19815C10");
    check_base_class_offset(lv, (S19815C5*)(S19815C9*)(S19815C8*), ABISELECT(32,20), "S19815C10");
    check_base_class_offset(lv, (S19815C9*)(S19815C8*), ABISELECT(16,12), "S19815C10");
    check_base_class_offset(lv, (S19815C8*), ABISELECT(16,12), "S19815C10");
    /*is_ambiguous_... S19815C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S19815C10");
    test_class_info(&lv, &cd_S19815C10);
    dp->~S19815C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19815C10(Test_S19815C10, "S19815C10", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN9S19815C10C1Ev();
extern void _ZN9S19815C10D1Ev();
Name_Map name_map_S19815C10[] = {
  NSPAIR(_ZN9S19815C10C1Ev),
  NSPAIR(_ZN9S19815C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19815C5;
extern VTBL_ENTRY _ZTI8S19815C5[];
extern  VTBL_ENTRY _ZTV8S19815C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C5[];
extern Class_Descriptor cd_S19815C9;
extern VTBL_ENTRY _ZTI8S19815C9[];
extern  VTBL_ENTRY _ZTV8S19815C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C9[];
extern Class_Descriptor cd_S19815C8;
extern VTBL_ENTRY _ZTI8S19815C8[];
extern  VTBL_ENTRY _ZTV8S19815C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C8[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S19815C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C20,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19815C5,    ABISELECT(32,20), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19815C9,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19815C8,    ABISELECT(16,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S19815C10[];
extern void _ZN9S19815C10D1Ev();
extern void _ZN9S19815C10D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19815C10D1Ev,_ZTv0_n20_N9S19815C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19815C10D1Ev,_ZThn12_N9S19815C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19815C10D0Ev,_ZTv0_n20_N9S19815C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19815C10D0Ev,_ZThn12_N9S19815C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19815C10[] = {
  ABISELECT(48,32),
  ABISELECT(32,20),
  ABISELECT(16,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19815C10[0]),
  (VTBL_ENTRY)&_ZN9S19815C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19815C10D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(32,20),
  ABISELECT(16,8),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19815C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19815C10D1Ev,_ZTv0_n20_N9S19815C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19815C10D0Ev,_ZTv0_n20_N9S19815C10D0Ev),
  ABISELECT(16,12),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19815C10[0]),
};
extern VTBL_ENTRY _ZTV9S19815C10[];
extern void _ZN8S19815C8D1Ev();
extern void _ZN8S19815C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19815C8__9S19815C10[] = {
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C8[0]),
  (VTBL_ENTRY)&_ZN8S19815C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19815C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19815C98S19815C8__9S19815C10[] = {
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C98S19815C8__9S19815C10[] = {
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19815C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C8__9S19815C10[] = {
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19815C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__9S19815C10[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C5[0]),
};
static  VTT_ENTRY vtt_S19815C10[] = {
  {&(_ZTV9S19815C10[6]),  6,18},
  {&(_ZTV9S19815C10[13]),  13,18},
  {&(_ZTV9S19815C10[18]),  18,18},
  {&(_tg__ZTV8S19815C8__9S19815C10[4]),  4,6},
  {&(_tg__ZTV8S19815C98S19815C8__9S19815C10[4]),  4,4},
  {&(_tg__ZTV8S19815C5__8S19815C98S19815C8__9S19815C10[3]),  3,3},
  {&(_tg__ZTV8S19815C5__8S19815C8__9S19815C10[3]),  3,3},
  {&(_tg__ZTV8S19815C5__9S19815C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19815C10[];
extern  VTBL_ENTRY _ZTV9S19815C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19815C10[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19815C10D0Ev,_ZTv0_n20_N9S19815C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19815C10D0Ev,_ZThn12_N9S19815C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19815C10D1Ev,_ZTv0_n20_N9S19815C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19815C10D1Ev,_ZThn12_N9S19815C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19815C10 = {  "S19815C10", // class name
  bases_S19815C10, 8,
  &(vtc_S19815C10[0]), // expected_vtbl_contents
  &(vtt_S19815C10[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI9S19815C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19815C10),18, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19815C10),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19815C11  : virtual S10180C133 , virtual S10180C93 , S19815C5 {
  ~S19815C11(); // tgen
  S19815C11(); // tgen
};
//SIG(-1 S19815C11) C1{ VBC2{ m} VBC3{ m FL} BC4{ VBC5{ m} BC3}}


S19815C11 ::~S19815C11(){ note_dtor("S19815C11", this);} // tgen
S19815C11 ::S19815C11(){ note_ctor("S19815C11", this);} // tgen

static void Test_S19815C11()
{
  extern Class_Descriptor cd_S19815C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S19815C11, buf);
    S19815C11 *dp, &lv = *(dp=new (buf) S19815C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S19815C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19815C11)");
    check_base_class_offset(lv, (S10180C133*), 0, "S19815C11");
    /*is_ambiguous_... S19815C11::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S19815C11");
    check_base_class_offset(lv, (S10180C20*)(S19815C5*), 0, "S19815C11");
    check_base_class_offset(lv, (S10180C93*)(S19815C5*), ABISELECT(8,4), "S19815C11");
    check_base_class_offset(lv, (S19815C5*), 0, "S19815C11");
    test_class_info(&lv, &cd_S19815C11);
    dp->~S19815C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19815C11(Test_S19815C11, "S19815C11", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN9S19815C11C1Ev();
extern void _ZN9S19815C11D1Ev();
Name_Map name_map_S19815C11[] = {
  NSPAIR(_ZN9S19815C11C1Ev),
  NSPAIR(_ZN9S19815C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19815C5;
extern VTBL_ENTRY _ZTI8S19815C5[];
extern  VTBL_ENTRY _ZTV8S19815C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C5[];
static Base_Class bases_S19815C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19815C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19815C11[];
static  VTBL_ENTRY vtc_S19815C11[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19815C11[0]),
};
extern VTBL_ENTRY _ZTV9S19815C11[];
static  VTBL_ENTRY _tg__ZTV8S19815C5__9S19815C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C5[0]),
};
static  VTT_ENTRY vtt_S19815C11[] = {
  {&(_ZTV9S19815C11[5]),  5,5},
  {&(_tg__ZTV8S19815C5__9S19815C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19815C11[];
extern  VTBL_ENTRY _ZTV9S19815C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19815C11[];
Class_Descriptor cd_S19815C11 = {  "S19815C11", // class name
  bases_S19815C11, 5,
  &(vtc_S19815C11[0]), // expected_vtbl_contents
  &(vtt_S19815C11[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI9S19815C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19815C11),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19815C11),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19815C3  : S10180C133 , virtual S19815C5 , virtual S19815C8 , virtual S19815C10 , virtual S19815C11 {
  void *s19815c3f0[9];
  ~S19815C3(); // tgen
  S19815C3(); // tgen
};
//SIG(-1 S19815C3) C1{ BC2{ m} VBC3{ VBC4{ m} BC5{ m FL}} VBC6{ VBC3 BC7{ VBC3 FC8{ m}} vd Fi:18} VBC9{ VBC8 BC4 VBC6 BC5} VBC10{ VBC2 VBC5 BC3} Fp[9]}


S19815C3 ::~S19815C3(){ note_dtor("S19815C3", this);} // tgen
S19815C3 ::S19815C3(){ note_ctor("S19815C3", this);} // tgen

static void Test_S19815C3()
{
  extern Class_Descriptor cd_S19815C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,24)];
    init_test(&cd_S19815C3, buf);
    S19815C3 *dp, &lv = *(dp=new (buf) S19815C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,92), "sizeof(S19815C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19815C3)");
    /*is_ambiguous_... S19815C3::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*), 0, "S19815C3");
    /*is_ambiguous_... S19815C3::S19815C5 */ AMB_check_base_class_offset(lv, (S10180C20*)(S19815C5*), 0, "S19815C3");
    check_base_class_offset(lv, (S10180C20*)(S19815C5*)(S19815C11*), 0, "S19815C3");
    /*is_ambiguous_... S19815C3::S19815C5 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19815C5*), ABISELECT(88,44), "S19815C3");
    /*is_ambiguous_... S19815C3::S19815C5 */ AMB_check_base_class_offset(lv, (S19815C5*), ABISELECT(80,40), "S19815C3");
    check_base_class_offset(lv, (S19815C5*)(S19815C8*), ABISELECT(80,40), "S19815C3");
    check_base_class_offset(lv, (S19815C5*)(S19815C9*)(S19815C8*), ABISELECT(80,40), "S19815C3");
    check_base_class_offset(lv, (S19815C9*)(S19815C8*), ABISELECT(96,52), "S19815C3");
    check_base_class_offset(lv, (S19815C8*), ABISELECT(96,52), "S19815C3");
    check_base_class_offset(lv, (S19815C8*)(S19815C10*), ABISELECT(96,52), "S19815C3");
    check_base_class_offset(lv, (S10180C138*)(S19815C10*), 0, "S19815C3");
    /*is_ambiguous_... S19815C10::S10180C20 */ AMB_check_base_class_offset(lv, (S10180C20*)(S19815C10*), ABISELECT(112,60), "S19815C3");
    /*is_ambiguous_... S19815C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19815C10*), ABISELECT(120,64), "S19815C3");
    check_base_class_offset(lv, (S19815C10*), ABISELECT(112,60), "S19815C3");
    check_base_class_offset(lv, (S10180C133*)(S19815C11*), ABISELECT(144,84), "S19815C3");
    /*is_ambiguous_... S19815C11::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19815C11*), ABISELECT(144,84), "S19815C3");
    check_base_class_offset(lv, (S10180C93*)(S19815C5*)(S19815C11*), ABISELECT(136,76), "S19815C3");
    check_base_class_offset(lv, (S19815C5*)(S19815C11*), ABISELECT(128,72), "S19815C3");
    check_base_class_offset(lv, (S19815C11*), ABISELECT(128,72), "S19815C3");
    check_field_offset(lv, s19815c3f0, ABISELECT(8,4), "S19815C3.s19815c3f0");
    test_class_info(&lv, &cd_S19815C3);
    dp->~S19815C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19815C3(Test_S19815C3, "S19815C3", ABISELECT(152,92));

#else // __cplusplus

extern void _ZN8S19815C3C1Ev();
extern void _ZN8S19815C3D1Ev();
Name_Map name_map_S19815C3[] = {
  NSPAIR(_ZN8S19815C3C1Ev),
  NSPAIR(_ZN8S19815C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19815C5;
extern VTBL_ENTRY _ZTI8S19815C5[];
extern  VTBL_ENTRY _ZTV8S19815C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C5[];
extern Class_Descriptor cd_S19815C9;
extern VTBL_ENTRY _ZTI8S19815C9[];
extern  VTBL_ENTRY _ZTV8S19815C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C9[];
extern Class_Descriptor cd_S19815C8;
extern VTBL_ENTRY _ZTI8S19815C8[];
extern  VTBL_ENTRY _ZTV8S19815C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C8[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19815C10;
extern VTBL_ENTRY _ZTI9S19815C10[];
extern  VTBL_ENTRY _ZTV9S19815C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19815C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19815C5;
extern VTBL_ENTRY _ZTI8S19815C5[];
extern  VTBL_ENTRY _ZTV8S19815C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C5[];
extern Class_Descriptor cd_S19815C11;
extern VTBL_ENTRY _ZTI9S19815C11[];
extern  VTBL_ENTRY _ZTV9S19815C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19815C11[];
static Base_Class bases_S19815C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19815C5,    ABISELECT(80,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19815C9,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19815C8,    ABISELECT(96,52), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 1},
  {&cd_S10180C20,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19815C10,    ABISELECT(112,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C133,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(136,76), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S19815C5,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19815C11,    ABISELECT(128,72), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19815C3[];
extern void _ZN8S19815C3D1Ev();
extern void _ZN8S19815C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19815C3D1Ev,_ZTv0_n20_N8S19815C3D1Ev)();
extern void ABISELECT(_ZThn96_N8S19815C3D1Ev,_ZThn52_N8S19815C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19815C3D0Ev,_ZTv0_n20_N8S19815C3D0Ev)();
extern void ABISELECT(_ZThn96_N8S19815C3D0Ev,_ZThn52_N8S19815C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19815C3D1Ev,_ZTv0_n28_N8S19815C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S19815C3D1Ev,_ZThn60_N8S19815C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19815C3D0Ev,_ZTv0_n28_N8S19815C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S19815C3D0Ev,_ZThn60_N8S19815C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19815C3[] = {
  ABISELECT(144,84),
  ABISELECT(144,84),
  ABISELECT(128,72),
  0,
  ABISELECT(112,60),
  ABISELECT(96,52),
  0,
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C3[0]),
  (VTBL_ENTRY)&_ZN8S19815C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19815C3D0Ev,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19815C3[0]),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19815C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19815C3D1Ev,_ZTv0_n20_N8S19815C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19815C3D0Ev,_ZTv0_n20_N8S19815C3D0Ev),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19815C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19815C3D1Ev,_ZTv0_n28_N8S19815C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19815C3D0Ev,_ZTv0_n28_N8S19815C3D0Ev),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19815C3[0]),
};
extern VTBL_ENTRY _ZTV8S19815C3[];
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C3[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C5[0]),
};
extern void _ZN8S19815C8D1Ev();
extern void _ZN8S19815C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19815C8__8S19815C3[] = {
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C8[0]),
  (VTBL_ENTRY)&_ZN8S19815C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19815C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19815C98S19815C8__8S19815C3[] = {
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C98S19815C8__8S19815C3[] = {
  ABISELECT(-80,-40),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19815C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C8__8S19815C3[] = {
  ABISELECT(-80,-40),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19815C8[0]),
};
extern void _ZN9S19815C10D1Ev();
extern void _ZN9S19815C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19815C10__8S19815C3[] = {
  ABISELECT(-112,-60),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19815C10[0]),
  (VTBL_ENTRY)&_ZN9S19815C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19815C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19815C10D1Ev,_ZTv0_n20_N9S19815C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19815C10D0Ev,_ZTv0_n20_N9S19815C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19815C8__9S19815C10__8S19815C3[] = {
  ABISELECT(16,8),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19815C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19815C10D1Ev,_ZTv0_n20_N9S19815C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19815C10D0Ev,_ZTv0_n20_N9S19815C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__9S19815C10__8S19815C3[] = {
  ABISELECT(-80,-40),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S19815C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19815C11__8S19815C3[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19815C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C59S19815C11__A1__8S19815C3[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C5[0]),
};
static  VTT_ENTRY vtt_S19815C3[] = {
  {&(_ZTV8S19815C3[10]),  10,36},
  {&(_ZTV8S19815C3[15]),  15,36},
  {&(_ZTV8S19815C3[20]),  20,36},
  {&(_ZTV8S19815C3[29]),  29,36},
  {&(_ZTV8S19815C3[36]),  36,36},
  {&(_tg__ZTV8S19815C5__8S19815C3[3]),  3,3},
  {&(_tg__ZTV8S19815C8__8S19815C3[4]),  4,6},
  {&(_tg__ZTV8S19815C98S19815C8__8S19815C3[4]),  4,4},
  {&(_tg__ZTV8S19815C5__8S19815C98S19815C8__8S19815C3[3]),  3,3},
  {&(_tg__ZTV8S19815C5__8S19815C8__8S19815C3[3]),  3,3},
  {&(_tg__ZTV9S19815C10__8S19815C3[6]),  6,8},
  {&(_tg__ZTV8S19815C8__9S19815C10__8S19815C3[5]),  5,7},
  {&(_tg__ZTV8S19815C5__9S19815C10__8S19815C3[3]),  3,3},
  {&(_tg__ZTV9S19815C11__8S19815C3[5]),  5,5},
  {&(_tg__ZTV8S19815C59S19815C11__A1__8S19815C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19815C3[];
extern  VTBL_ENTRY _ZTV8S19815C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C3[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19815C3D0Ev,_ZTv0_n28_N8S19815C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19815C3D0Ev,_ZThn60_N8S19815C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19815C3D1Ev,_ZTv0_n28_N8S19815C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19815C3D1Ev,_ZThn60_N8S19815C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19815C3D0Ev,_ZTv0_n20_N8S19815C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19815C3D0Ev,_ZThn52_N8S19815C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19815C3D1Ev,_ZTv0_n20_N8S19815C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19815C3D1Ev,_ZThn52_N8S19815C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19815C3 = {  "S19815C3", // class name
  bases_S19815C3, 15,
  &(vtc_S19815C3[0]), // expected_vtbl_contents
  &(vtt_S19815C3[0]), // expected_vtt_contents
  ABISELECT(152,92), // object size
  NSPAIRA(_ZTI8S19815C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19815C3),36, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19815C3),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19815C1  : virtual S10180C138 , S19815C3 {
  virtual  ~S19815C1(); // _ZN8S19815C1D2Ev
  S19815C1(); // tgen
};
//SIG(1 S19815C1) C1{ VBC2{ m} BC3{ BC4{ m} VBC5{ VBC6{ m} BC7{ m FL}} VBC8{ VBC5 BC9{ VBC5 FC2} vd Fi:18} VBC10{ VBC2 BC6 VBC8 BC7} VBC11{ VBC4 VBC7 BC5} Fp[9]} vd}


 S19815C1 ::~S19815C1(){ note_dtor("S19815C1", this);}
S19815C1 ::S19815C1(){ note_ctor("S19815C1", this);} // tgen

static void Test_S19815C1()
{
  extern Class_Descriptor cd_S19815C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,24)];
    init_test(&cd_S19815C1, buf);
    S19815C1 *dp, &lv = *(dp=new (buf) S19815C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,92), "sizeof(S19815C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19815C1)");
    check_base_class_offset(lv, (S10180C138*), 0, "S19815C1");
    check_base_class_offset(lv, (S10180C138*)(S19815C10*), 0, "S19815C1");
    /*is_ambiguous_... S19815C3::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19815C3*), 0, "S19815C1");
    /*is_ambiguous_... S19815C1::S19815C5 */ AMB_check_base_class_offset(lv, (S10180C20*)(S19815C5*), 0, "S19815C1");
    check_base_class_offset(lv, (S10180C20*)(S19815C5*)(S19815C11*), 0, "S19815C1");
    /*is_ambiguous_... S19815C1::S19815C5 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19815C5*), ABISELECT(88,44), "S19815C1");
    /*is_ambiguous_... S19815C3::S19815C5 */ AMB_check_base_class_offset(lv, (S19815C5*)(S19815C3*), ABISELECT(80,40), "S19815C1");
    check_base_class_offset(lv, (S19815C5*)(S19815C8*), ABISELECT(80,40), "S19815C1");
    check_base_class_offset(lv, (S19815C5*)(S19815C9*)(S19815C8*), ABISELECT(80,40), "S19815C1");
    check_base_class_offset(lv, (S19815C9*)(S19815C8*), ABISELECT(96,52), "S19815C1");
    check_base_class_offset(lv, (S19815C8*)(S19815C3*), ABISELECT(96,52), "S19815C1");
    check_base_class_offset(lv, (S19815C8*)(S19815C10*), ABISELECT(96,52), "S19815C1");
    /*is_ambiguous_... S19815C10::S10180C20 */ AMB_check_base_class_offset(lv, (S10180C20*)(S19815C10*), ABISELECT(112,60), "S19815C1");
    /*is_ambiguous_... S19815C10::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19815C10*), ABISELECT(120,64), "S19815C1");
    check_base_class_offset(lv, (S19815C10*)(S19815C3*), ABISELECT(112,60), "S19815C1");
    check_base_class_offset(lv, (S10180C133*)(S19815C11*), ABISELECT(144,84), "S19815C1");
    /*is_ambiguous_... S19815C11::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19815C11*), ABISELECT(144,84), "S19815C1");
    check_base_class_offset(lv, (S10180C93*)(S19815C5*)(S19815C11*), ABISELECT(136,76), "S19815C1");
    check_base_class_offset(lv, (S19815C5*)(S19815C11*), ABISELECT(128,72), "S19815C1");
    check_base_class_offset(lv, (S19815C11*)(S19815C3*), ABISELECT(128,72), "S19815C1");
    check_base_class_offset(lv, (S19815C3*), 0, "S19815C1");
    test_class_info(&lv, &cd_S19815C1);
    dp->~S19815C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19815C1(Test_S19815C1, "S19815C1", ABISELECT(152,92));

#else // __cplusplus

extern void _ZN8S19815C1C1Ev();
extern void _ZN8S19815C1D2Ev();
Name_Map name_map_S19815C1[] = {
  NSPAIR(_ZN8S19815C1C1Ev),
  NSPAIR(_ZN8S19815C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19815C5;
extern VTBL_ENTRY _ZTI8S19815C5[];
extern  VTBL_ENTRY _ZTV8S19815C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C5[];
extern Class_Descriptor cd_S19815C9;
extern VTBL_ENTRY _ZTI8S19815C9[];
extern  VTBL_ENTRY _ZTV8S19815C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C9[];
extern Class_Descriptor cd_S19815C8;
extern VTBL_ENTRY _ZTI8S19815C8[];
extern  VTBL_ENTRY _ZTV8S19815C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C8[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19815C10;
extern VTBL_ENTRY _ZTI9S19815C10[];
extern  VTBL_ENTRY _ZTV9S19815C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19815C10[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19815C5;
extern VTBL_ENTRY _ZTI8S19815C5[];
extern  VTBL_ENTRY _ZTV8S19815C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C5[];
extern Class_Descriptor cd_S19815C11;
extern VTBL_ENTRY _ZTI9S19815C11[];
extern  VTBL_ENTRY _ZTV9S19815C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19815C11[];
extern Class_Descriptor cd_S19815C3;
extern VTBL_ENTRY _ZTI8S19815C3[];
extern  VTBL_ENTRY _ZTV8S19815C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C3[];
static Base_Class bases_S19815C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19815C5,    ABISELECT(80,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19815C9,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19815C8,    ABISELECT(96,52), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S10180C20,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19815C10,    ABISELECT(112,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S10180C133,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(136,76), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S19815C5,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19815C11,    ABISELECT(128,72), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19815C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19815C1[];
extern void _ZN8S19815C1D1Ev();
extern void _ZN8S19815C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19815C1D1Ev,_ZTv0_n20_N8S19815C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19815C1D1Ev,_ZThn52_N8S19815C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19815C1D0Ev,_ZTv0_n20_N8S19815C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19815C1D0Ev,_ZThn52_N8S19815C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19815C1D1Ev,_ZTv0_n28_N8S19815C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S19815C1D1Ev,_ZThn60_N8S19815C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19815C1D0Ev,_ZTv0_n28_N8S19815C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S19815C1D0Ev,_ZThn60_N8S19815C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19815C1[] = {
  ABISELECT(144,84),
  ABISELECT(144,84),
  ABISELECT(128,72),
  0,
  ABISELECT(112,60),
  ABISELECT(96,52),
  0,
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C1[0]),
  (VTBL_ENTRY)&_ZN8S19815C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19815C1D0Ev,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19815C1[0]),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19815C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19815C1D1Ev,_ZTv0_n20_N8S19815C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19815C1D0Ev,_ZTv0_n20_N8S19815C1D0Ev),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19815C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19815C1D1Ev,_ZTv0_n28_N8S19815C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19815C1D0Ev,_ZTv0_n28_N8S19815C1D0Ev),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19815C1[0]),
};
extern VTBL_ENTRY _ZTV8S19815C1[];
extern void _ZN8S19815C3D1Ev();
extern void _ZN8S19815C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19815C3__8S19815C1[] = {
  ABISELECT(144,84),
  ABISELECT(144,84),
  ABISELECT(128,72),
  0,
  ABISELECT(112,60),
  ABISELECT(96,52),
  0,
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C3[0]),
  (VTBL_ENTRY)&_ZN8S19815C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19815C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C3__8S19815C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19815C3[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19815C3D1Ev,_ZTv0_n20_N8S19815C3D1Ev)();
extern void ABISELECT(_ZThn96_N8S19815C3D1Ev,_ZThn52_N8S19815C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19815C3D0Ev,_ZTv0_n20_N8S19815C3D0Ev)();
extern void ABISELECT(_ZThn96_N8S19815C3D0Ev,_ZThn52_N8S19815C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19815C8__8S19815C3__8S19815C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19815C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19815C3D1Ev,_ZTv0_n20_N8S19815C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19815C3D0Ev,_ZTv0_n20_N8S19815C3D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S19815C3D1Ev,_ZTv0_n28_N8S19815C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S19815C3D1Ev,_ZThn60_N8S19815C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19815C3D0Ev,_ZTv0_n28_N8S19815C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S19815C3D0Ev,_ZThn60_N8S19815C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19815C10__8S19815C3__8S19815C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19815C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19815C3D1Ev,_ZTv0_n28_N8S19815C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19815C3D0Ev,_ZTv0_n28_N8S19815C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19815C11__8S19815C3__8S19815C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19815C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C1[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C5[0]),
};
extern void _ZN8S19815C8D1Ev();
extern void _ZN8S19815C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19815C8__8S19815C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C8[0]),
  (VTBL_ENTRY)&_ZN8S19815C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19815C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19815C98S19815C8__8S19815C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C98S19815C8__8S19815C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19815C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__8S19815C8__8S19815C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19815C8[0]),
};
extern void _ZN9S19815C10D1Ev();
extern void _ZN9S19815C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19815C10__8S19815C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19815C10[0]),
  (VTBL_ENTRY)&_ZN9S19815C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19815C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19815C10D1Ev,_ZTv0_n20_N9S19815C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19815C10D0Ev,_ZTv0_n20_N9S19815C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19815C8__9S19815C10__8S19815C1[] = {
  ABISELECT(16,8),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19815C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19815C10D1Ev,_ZTv0_n20_N9S19815C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19815C10D0Ev,_ZTv0_n20_N9S19815C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19815C5__9S19815C10__8S19815C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S19815C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19815C11__8S19815C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19815C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19815C59S19815C11__A1__8S19815C1[] = {
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19815C5[0]),
};
static  VTT_ENTRY vtt_S19815C1[] = {
  {&(_ZTV8S19815C1[10]),  10,36},
  {&(_tg__ZTV8S19815C3__8S19815C1[10]),  10,12},
  {&(_tg__ZTV8S19815C5__8S19815C3__8S19815C1[3]),  3,3},
  {&(_tg__ZTV8S19815C8__8S19815C3__8S19815C1[5]),  5,7},
  {&(_tg__ZTV9S19815C10__8S19815C3__8S19815C1[7]),  7,9},
  {&(_tg__ZTV9S19815C11__8S19815C3__8S19815C1[5]),  5,5},
  {&(_ZTV8S19815C1[15]),  15,36},
  {&(_ZTV8S19815C1[20]),  20,36},
  {&(_ZTV8S19815C1[29]),  29,36},
  {&(_ZTV8S19815C1[36]),  36,36},
  {&(_tg__ZTV8S19815C5__8S19815C1[3]),  3,3},
  {&(_tg__ZTV8S19815C8__8S19815C1[4]),  4,6},
  {&(_tg__ZTV8S19815C98S19815C8__8S19815C1[4]),  4,4},
  {&(_tg__ZTV8S19815C5__8S19815C98S19815C8__8S19815C1[3]),  3,3},
  {&(_tg__ZTV8S19815C5__8S19815C8__8S19815C1[3]),  3,3},
  {&(_tg__ZTV9S19815C10__8S19815C1[6]),  6,8},
  {&(_tg__ZTV8S19815C8__9S19815C10__8S19815C1[5]),  5,7},
  {&(_tg__ZTV8S19815C5__9S19815C10__8S19815C1[3]),  3,3},
  {&(_tg__ZTV9S19815C11__8S19815C1[5]),  5,5},
  {&(_tg__ZTV8S19815C59S19815C11__A1__8S19815C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19815C1[];
extern  VTBL_ENTRY _ZTV8S19815C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19815C1[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19815C3D0Ev,_ZTv0_n28_N8S19815C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19815C3D0Ev,_ZThn60_N8S19815C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19815C3D1Ev,_ZTv0_n28_N8S19815C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19815C3D1Ev,_ZThn60_N8S19815C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19815C3D0Ev,_ZTv0_n20_N8S19815C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19815C3D0Ev,_ZThn52_N8S19815C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19815C3D1Ev,_ZTv0_n20_N8S19815C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19815C3D1Ev,_ZThn52_N8S19815C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19815C1D0Ev,_ZTv0_n28_N8S19815C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19815C1D0Ev,_ZThn60_N8S19815C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19815C1D1Ev,_ZTv0_n28_N8S19815C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19815C1D1Ev,_ZThn60_N8S19815C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19815C1D0Ev,_ZTv0_n20_N8S19815C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19815C1D0Ev,_ZThn52_N8S19815C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19815C1D1Ev,_ZTv0_n20_N8S19815C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19815C1D1Ev,_ZThn52_N8S19815C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19815C1 = {  "S19815C1", // class name
  bases_S19815C1, 16,
  &(vtc_S19815C1[0]), // expected_vtbl_contents
  &(vtt_S19815C1[0]), // expected_vtt_contents
  ABISELECT(152,92), // object size
  NSPAIRA(_ZTI8S19815C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19815C1),36, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19815C1),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7644C3  {
  virtual void  v6(); // _ZN7S7644C32v6Ev
  ~S7644C3(); // tgen
  S7644C3(); // tgen
};
//SIG(-1 S7644C3) C1{ v1}


void  S7644C3 ::v6(){vfunc_called(this, "_ZN7S7644C32v6Ev");}
S7644C3 ::~S7644C3(){ note_dtor("S7644C3", this);} // tgen
S7644C3 ::S7644C3(){ note_ctor("S7644C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7644C3C1Ev();
extern void _ZN7S7644C3D1Ev();
Name_Map name_map_S7644C3[] = {
  NSPAIR(_ZN7S7644C3C1Ev),
  NSPAIR(_ZN7S7644C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7644C3[];
extern void _ZN7S7644C32v6Ev();
static  VTBL_ENTRY vtc_S7644C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7644C3[0]),
  (VTBL_ENTRY)&_ZN7S7644C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S7644C3[];
extern  VTBL_ENTRY _ZTV7S7644C3[];
Class_Descriptor cd_S7644C3 = {  "S7644C3", // class name
  0,0,//no base classes
  &(vtc_S7644C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7644C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7644C3),3, //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  S7644C4  : S7644C3 {
  void *s7644c4f0;
  virtual void  v7(); // _ZN7S7644C42v7Ev
  virtual void  v8(); // _ZN7S7644C42v8Ev
  virtual void  v9(); // _ZN7S7644C42v9Ev
  virtual void  v10(); // _ZN7S7644C43v10Ev
  virtual void  v11(); // _ZN7S7644C43v11Ev
  virtual void  v12(); // _ZN7S7644C43v12Ev
  virtual void  v13(); // _ZN7S7644C43v13Ev
  ~S7644C4(); // tgen
  S7644C4(); // tgen
};
//SIG(-1 S7644C4) C1{ BC2{ v8} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S7644C4 ::v7(){vfunc_called(this, "_ZN7S7644C42v7Ev");}
void  S7644C4 ::v8(){vfunc_called(this, "_ZN7S7644C42v8Ev");}
void  S7644C4 ::v9(){vfunc_called(this, "_ZN7S7644C42v9Ev");}
void  S7644C4 ::v10(){vfunc_called(this, "_ZN7S7644C43v10Ev");}
void  S7644C4 ::v11(){vfunc_called(this, "_ZN7S7644C43v11Ev");}
void  S7644C4 ::v12(){vfunc_called(this, "_ZN7S7644C43v12Ev");}
void  S7644C4 ::v13(){vfunc_called(this, "_ZN7S7644C43v13Ev");}
S7644C4 ::~S7644C4(){ note_dtor("S7644C4", this);} // tgen
S7644C4 ::S7644C4(){ note_ctor("S7644C4", this);} // tgen

static void Test_S7644C4()
{
  extern Class_Descriptor cd_S7644C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7644C4, buf);
    S7644C4 *dp, &lv = *(dp=new (buf) S7644C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7644C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7644C4)");
    check_base_class_offset(lv, (S7644C3*), 0, "S7644C4");
    check_field_offset(lv, s7644c4f0, ABISELECT(8,4), "S7644C4.s7644c4f0");
    test_class_info(&lv, &cd_S7644C4);
    dp->~S7644C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7644C4(Test_S7644C4, "S7644C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7644C4C1Ev();
extern void _ZN7S7644C4D1Ev();
Name_Map name_map_S7644C4[] = {
  NSPAIR(_ZN7S7644C4C1Ev),
  NSPAIR(_ZN7S7644C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7644C3;
extern VTBL_ENTRY _ZTI7S7644C3[];
extern  VTBL_ENTRY _ZTV7S7644C3[];
static Base_Class bases_S7644C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7644C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7644C4[];
extern void _ZN7S7644C32v6Ev();
extern void _ZN7S7644C42v7Ev();
extern void _ZN7S7644C42v8Ev();
extern void _ZN7S7644C42v9Ev();
extern void _ZN7S7644C43v10Ev();
extern void _ZN7S7644C43v11Ev();
extern void _ZN7S7644C43v12Ev();
extern void _ZN7S7644C43v13Ev();
static  VTBL_ENTRY vtc_S7644C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7644C4[0]),
  (VTBL_ENTRY)&_ZN7S7644C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v13Ev,
};
extern VTBL_ENTRY _ZTI7S7644C4[];
extern  VTBL_ENTRY _ZTV7S7644C4[];
Class_Descriptor cd_S7644C4 = {  "S7644C4", // class name
  bases_S7644C4, 1,
  &(vtc_S7644C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7644C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7644C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7644C2  : virtual S7644C3 , S7644C4 {
  virtual void  v14(); // _ZN7S7644C23v14Ev
  virtual void  v15(); // _ZN7S7644C23v15Ev
  ~S7644C2(); // tgen
  S7644C2(); // tgen
};
//SIG(-1 S7644C2) C1{ VBC2{ v3} BC3{ BC2 v4 v5 v6 v7 v8 v9 v10 Fp} v1 v2}


void  S7644C2 ::v14(){vfunc_called(this, "_ZN7S7644C23v14Ev");}
void  S7644C2 ::v15(){vfunc_called(this, "_ZN7S7644C23v15Ev");}
S7644C2 ::~S7644C2(){ note_dtor("S7644C2", this);} // tgen
S7644C2 ::S7644C2(){ note_ctor("S7644C2", this);} // tgen

static void Test_S7644C2()
{
  extern Class_Descriptor cd_S7644C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7644C2, buf);
    S7644C2 *dp, &lv = *(dp=new (buf) S7644C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7644C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7644C2)");
    /*is_ambiguous_... S7644C2::S7644C3 */ AMB_check_base_class_offset(lv, (S7644C3*), ABISELECT(16,8), "S7644C2");
    check_base_class_offset(lv, (S7644C3*)(S7644C4*), 0, "S7644C2");
    check_base_class_offset(lv, (S7644C4*), 0, "S7644C2");
    test_class_info(&lv, &cd_S7644C2);
    dp->~S7644C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7644C2(Test_S7644C2, "S7644C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7644C2C1Ev();
extern void _ZN7S7644C2D1Ev();
Name_Map name_map_S7644C2[] = {
  NSPAIR(_ZN7S7644C2C1Ev),
  NSPAIR(_ZN7S7644C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7644C3;
extern VTBL_ENTRY _ZTI7S7644C3[];
extern  VTBL_ENTRY _ZTV7S7644C3[];
extern Class_Descriptor cd_S7644C3;
extern VTBL_ENTRY _ZTI7S7644C3[];
extern  VTBL_ENTRY _ZTV7S7644C3[];
extern Class_Descriptor cd_S7644C4;
extern VTBL_ENTRY _ZTI7S7644C4[];
extern  VTBL_ENTRY _ZTV7S7644C4[];
static Base_Class bases_S7644C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7644C3,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7644C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7644C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7644C2[];
extern void _ZN7S7644C32v6Ev();
extern void _ZN7S7644C42v7Ev();
extern void _ZN7S7644C42v8Ev();
extern void _ZN7S7644C42v9Ev();
extern void _ZN7S7644C43v10Ev();
extern void _ZN7S7644C43v11Ev();
extern void _ZN7S7644C43v12Ev();
extern void _ZN7S7644C43v13Ev();
extern void _ZN7S7644C23v14Ev();
extern void _ZN7S7644C23v15Ev();
extern void _ZN7S7644C32v6Ev();
static  VTBL_ENTRY vtc_S7644C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7644C2[0]),
  (VTBL_ENTRY)&_ZN7S7644C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7644C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7644C23v15Ev,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7644C2[0]),
  (VTBL_ENTRY)&_ZN7S7644C32v6Ev,
};
extern VTBL_ENTRY _ZTV7S7644C2[];
static  VTT_ENTRY vtt_S7644C2[] = {
  {&(_ZTV7S7644C2[3]),  3,17},
  {&(_ZTV7S7644C2[16]),  16,17},
};
extern VTBL_ENTRY _ZTI7S7644C2[];
extern  VTBL_ENTRY _ZTV7S7644C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7644C2[];
Class_Descriptor cd_S7644C2 = {  "S7644C2", // class name
  bases_S7644C2, 3,
  &(vtc_S7644C2[0]), // expected_vtbl_contents
  &(vtt_S7644C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7644C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7644C2),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7644C2),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7644C6  {
  void *s7644c6f0[2];
  virtual void  v16(); // _ZN7S7644C63v16Ev
  virtual void  v17(); // _ZN7S7644C63v17Ev
  virtual void  v18(); // _ZN7S7644C63v18Ev
  virtual void  v19(); // _ZN7S7644C63v19Ev
  virtual void  v20(); // _ZN7S7644C63v20Ev
  ~S7644C6(); // tgen
  S7644C6(); // tgen
};
//SIG(-1 S7644C6) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S7644C6 ::v16(){vfunc_called(this, "_ZN7S7644C63v16Ev");}
void  S7644C6 ::v17(){vfunc_called(this, "_ZN7S7644C63v17Ev");}
void  S7644C6 ::v18(){vfunc_called(this, "_ZN7S7644C63v18Ev");}
void  S7644C6 ::v19(){vfunc_called(this, "_ZN7S7644C63v19Ev");}
void  S7644C6 ::v20(){vfunc_called(this, "_ZN7S7644C63v20Ev");}
S7644C6 ::~S7644C6(){ note_dtor("S7644C6", this);} // tgen
S7644C6 ::S7644C6(){ note_ctor("S7644C6", this);} // tgen

static void Test_S7644C6()
{
  extern Class_Descriptor cd_S7644C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7644C6, buf);
    S7644C6 *dp, &lv = *(dp=new (buf) S7644C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7644C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7644C6)");
    check_field_offset(lv, s7644c6f0, ABISELECT(8,4), "S7644C6.s7644c6f0");
    test_class_info(&lv, &cd_S7644C6);
    dp->~S7644C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7644C6(Test_S7644C6, "S7644C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7644C6C1Ev();
extern void _ZN7S7644C6D1Ev();
Name_Map name_map_S7644C6[] = {
  NSPAIR(_ZN7S7644C6C1Ev),
  NSPAIR(_ZN7S7644C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7644C6[];
extern void _ZN7S7644C63v16Ev();
extern void _ZN7S7644C63v17Ev();
extern void _ZN7S7644C63v18Ev();
extern void _ZN7S7644C63v19Ev();
extern void _ZN7S7644C63v20Ev();
static  VTBL_ENTRY vtc_S7644C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7644C6[0]),
  (VTBL_ENTRY)&_ZN7S7644C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v20Ev,
};
extern VTBL_ENTRY _ZTI7S7644C6[];
extern  VTBL_ENTRY _ZTV7S7644C6[];
Class_Descriptor cd_S7644C6 = {  "S7644C6", // class name
  0,0,//no base classes
  &(vtc_S7644C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7644C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7644C6),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  S7644C5  : S7644C6 , virtual S7644C3 {
  virtual void  v21(); // _ZN7S7644C53v21Ev
  virtual void  v22(); // _ZN7S7644C53v22Ev
  ~S7644C5(); // tgen
  S7644C5(); // tgen
};
//SIG(-1 S7644C5) C1{ BC2{ v3 v4 v5 v6 v7 Fp[2]} VBC3{ v8} v1 v2}


void  S7644C5 ::v21(){vfunc_called(this, "_ZN7S7644C53v21Ev");}
void  S7644C5 ::v22(){vfunc_called(this, "_ZN7S7644C53v22Ev");}
S7644C5 ::~S7644C5(){ note_dtor("S7644C5", this);} // tgen
S7644C5 ::S7644C5(){ note_ctor("S7644C5", this);} // tgen

static void Test_S7644C5()
{
  extern Class_Descriptor cd_S7644C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7644C5, buf);
    S7644C5 *dp, &lv = *(dp=new (buf) S7644C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7644C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7644C5)");
    check_base_class_offset(lv, (S7644C6*), 0, "S7644C5");
    check_base_class_offset(lv, (S7644C3*), ABISELECT(24,12), "S7644C5");
    test_class_info(&lv, &cd_S7644C5);
    dp->~S7644C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7644C5(Test_S7644C5, "S7644C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7644C5C1Ev();
extern void _ZN7S7644C5D1Ev();
Name_Map name_map_S7644C5[] = {
  NSPAIR(_ZN7S7644C5C1Ev),
  NSPAIR(_ZN7S7644C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7644C6;
extern VTBL_ENTRY _ZTI7S7644C6[];
extern  VTBL_ENTRY _ZTV7S7644C6[];
extern Class_Descriptor cd_S7644C3;
extern VTBL_ENTRY _ZTI7S7644C3[];
extern  VTBL_ENTRY _ZTV7S7644C3[];
static Base_Class bases_S7644C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7644C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S7644C3,    ABISELECT(24,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7644C5[];
extern void _ZN7S7644C63v16Ev();
extern void _ZN7S7644C63v17Ev();
extern void _ZN7S7644C63v18Ev();
extern void _ZN7S7644C63v19Ev();
extern void _ZN7S7644C63v20Ev();
extern void _ZN7S7644C53v21Ev();
extern void _ZN7S7644C53v22Ev();
extern void _ZN7S7644C32v6Ev();
static  VTBL_ENTRY vtc_S7644C5[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7644C5[0]),
  (VTBL_ENTRY)&_ZN7S7644C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7644C53v21Ev,
  (VTBL_ENTRY)&_ZN7S7644C53v22Ev,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7644C5[0]),
  (VTBL_ENTRY)&_ZN7S7644C32v6Ev,
};
extern VTBL_ENTRY _ZTV7S7644C5[];
static  VTT_ENTRY vtt_S7644C5[] = {
  {&(_ZTV7S7644C5[3]),  3,14},
  {&(_ZTV7S7644C5[13]),  13,14},
};
extern VTBL_ENTRY _ZTI7S7644C5[];
extern  VTBL_ENTRY _ZTV7S7644C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7644C5[];
Class_Descriptor cd_S7644C5 = {  "S7644C5", // class name
  bases_S7644C5, 2,
  &(vtc_S7644C5[0]), // expected_vtbl_contents
  &(vtt_S7644C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7644C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7644C5),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7644C5),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7644C1  : S7644C2 , S7644C5 {
  int s7644c1f0[8];
  virtual void  v1(); // _ZN7S7644C12v1Ev
  virtual void  v2(); // _ZN7S7644C12v2Ev
  virtual void  v3(); // _ZN7S7644C12v3Ev
  virtual void  v4(); // _ZN7S7644C12v4Ev
  virtual void  v5(); // _ZN7S7644C12v5Ev
  ~S7644C1(); // tgen
  S7644C1(); // tgen
};
//SIG(1 S7644C1) C1{ BC2{ VBC3{ v6} BC4{ BC3 v7 v8 v9 v10 v11 v12 v13 Fp} v14 v15} BC5{ BC6{ v16 v17 v18 v19 v20 Fp[2]} VBC3 v21 v22} v1 v2 v3 v4 v5 Fi[8]}


void  S7644C1 ::v1(){vfunc_called(this, "_ZN7S7644C12v1Ev");}
void  S7644C1 ::v2(){vfunc_called(this, "_ZN7S7644C12v2Ev");}
void  S7644C1 ::v3(){vfunc_called(this, "_ZN7S7644C12v3Ev");}
void  S7644C1 ::v4(){vfunc_called(this, "_ZN7S7644C12v4Ev");}
void  S7644C1 ::v5(){vfunc_called(this, "_ZN7S7644C12v5Ev");}
S7644C1 ::~S7644C1(){ note_dtor("S7644C1", this);} // tgen
S7644C1 ::S7644C1(){ note_ctor("S7644C1", this);} // tgen

static void Test_S7644C1()
{
  extern Class_Descriptor cd_S7644C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S7644C1, buf);
    S7644C1 *dp, &lv = *(dp=new (buf) S7644C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S7644C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7644C1)");
    /*is_ambiguous_... S7644C2::S7644C3 */ AMB_check_base_class_offset(lv, (S7644C3*)(S7644C2*), ABISELECT(72,52), "S7644C1");
    check_base_class_offset(lv, (S7644C3*)(S7644C5*), ABISELECT(72,52), "S7644C1");
    check_base_class_offset(lv, (S7644C3*)(S7644C4*)(S7644C2*), 0, "S7644C1");
    check_base_class_offset(lv, (S7644C4*)(S7644C2*), 0, "S7644C1");
    check_base_class_offset(lv, (S7644C2*), 0, "S7644C1");
    check_base_class_offset(lv, (S7644C6*)(S7644C5*), ABISELECT(16,8), "S7644C1");
    check_base_class_offset(lv, (S7644C5*), ABISELECT(16,8), "S7644C1");
    check_field_offset(lv, s7644c1f0, ABISELECT(40,20), "S7644C1.s7644c1f0");
    test_class_info(&lv, &cd_S7644C1);
    dp->~S7644C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7644C1(Test_S7644C1, "S7644C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S7644C1C1Ev();
extern void _ZN7S7644C1D1Ev();
Name_Map name_map_S7644C1[] = {
  NSPAIR(_ZN7S7644C1C1Ev),
  NSPAIR(_ZN7S7644C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7644C3;
extern VTBL_ENTRY _ZTI7S7644C3[];
extern  VTBL_ENTRY _ZTV7S7644C3[];
extern Class_Descriptor cd_S7644C3;
extern VTBL_ENTRY _ZTI7S7644C3[];
extern  VTBL_ENTRY _ZTV7S7644C3[];
extern Class_Descriptor cd_S7644C4;
extern VTBL_ENTRY _ZTI7S7644C4[];
extern  VTBL_ENTRY _ZTV7S7644C4[];
extern Class_Descriptor cd_S7644C2;
extern VTBL_ENTRY _ZTI7S7644C2[];
extern  VTBL_ENTRY _ZTV7S7644C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7644C2[];
extern Class_Descriptor cd_S7644C6;
extern VTBL_ENTRY _ZTI7S7644C6[];
extern  VTBL_ENTRY _ZTV7S7644C6[];
extern Class_Descriptor cd_S7644C5;
extern VTBL_ENTRY _ZTI7S7644C5[];
extern  VTBL_ENTRY _ZTV7S7644C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7644C5[];
static Base_Class bases_S7644C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7644C3,    ABISELECT(72,52), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7644C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7644C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7644C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7644C6,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7644C5,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7644C1[];
extern void _ZN7S7644C32v6Ev();
extern void _ZN7S7644C42v7Ev();
extern void _ZN7S7644C42v8Ev();
extern void _ZN7S7644C42v9Ev();
extern void _ZN7S7644C43v10Ev();
extern void _ZN7S7644C43v11Ev();
extern void _ZN7S7644C43v12Ev();
extern void _ZN7S7644C43v13Ev();
extern void _ZN7S7644C23v14Ev();
extern void _ZN7S7644C23v15Ev();
extern void _ZN7S7644C12v1Ev();
extern void _ZN7S7644C12v2Ev();
extern void _ZN7S7644C12v3Ev();
extern void _ZN7S7644C12v4Ev();
extern void _ZN7S7644C12v5Ev();
extern void _ZN7S7644C63v16Ev();
extern void _ZN7S7644C63v17Ev();
extern void _ZN7S7644C63v18Ev();
extern void _ZN7S7644C63v19Ev();
extern void _ZN7S7644C63v20Ev();
extern void _ZN7S7644C53v21Ev();
extern void _ZN7S7644C53v22Ev();
extern void _ZN7S7644C32v6Ev();
static  VTBL_ENTRY vtc_S7644C1[] = {
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7644C1[0]),
  (VTBL_ENTRY)&_ZN7S7644C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7644C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7644C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7644C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7644C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7644C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7644C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7644C12v5Ev,
  ABISELECT(56,44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7644C1[0]),
  (VTBL_ENTRY)&_ZN7S7644C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7644C53v21Ev,
  (VTBL_ENTRY)&_ZN7S7644C53v22Ev,
  0,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7644C1[0]),
  (VTBL_ENTRY)&_ZN7S7644C32v6Ev,
};
extern VTBL_ENTRY _ZTV7S7644C1[];
extern void _ZN7S7644C32v6Ev();
extern void _ZN7S7644C42v7Ev();
extern void _ZN7S7644C42v8Ev();
extern void _ZN7S7644C42v9Ev();
extern void _ZN7S7644C43v10Ev();
extern void _ZN7S7644C43v11Ev();
extern void _ZN7S7644C43v12Ev();
extern void _ZN7S7644C43v13Ev();
extern void _ZN7S7644C23v14Ev();
extern void _ZN7S7644C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7644C2__7S7644C1[] = {
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7644C2[0]),
  (VTBL_ENTRY)&_ZN7S7644C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7644C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7644C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7644C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7644C23v15Ev,
};
extern void _ZN7S7644C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7644C3__7S7644C2__7S7644C1[] = {
  0,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7644C2[0]),
  (VTBL_ENTRY)&_ZN7S7644C32v6Ev,
};
extern void _ZN7S7644C63v16Ev();
extern void _ZN7S7644C63v17Ev();
extern void _ZN7S7644C63v18Ev();
extern void _ZN7S7644C63v19Ev();
extern void _ZN7S7644C63v20Ev();
extern void _ZN7S7644C53v21Ev();
extern void _ZN7S7644C53v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7644C5__7S7644C1[] = {
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7644C5[0]),
  (VTBL_ENTRY)&_ZN7S7644C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7644C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7644C53v21Ev,
  (VTBL_ENTRY)&_ZN7S7644C53v22Ev,
};
extern void _ZN7S7644C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7644C3__7S7644C5__7S7644C1[] = {
  0,
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI7S7644C5[0]),
  (VTBL_ENTRY)&_ZN7S7644C32v6Ev,
};
static  VTT_ENTRY vtt_S7644C1[] = {
  {&(_ZTV7S7644C1[3]),  3,32},
  {&(_tg__ZTV7S7644C2__7S7644C1[3]),  3,13},
  {&(_tg__ZTV7S7644C3__7S7644C2__7S7644C1[3]),  3,4},
  {&(_tg__ZTV7S7644C5__7S7644C1[3]),  3,10},
  {&(_tg__ZTV7S7644C3__7S7644C5__7S7644C1[3]),  3,4},
  {&(_ZTV7S7644C1[31]),  31,32},
  {&(_ZTV7S7644C1[21]),  21,32},
};
extern VTBL_ENTRY _ZTI7S7644C1[];
extern  VTBL_ENTRY _ZTV7S7644C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7644C1[];
Class_Descriptor cd_S7644C1 = {  "S7644C1", // class name
  bases_S7644C1, 6,
  &(vtc_S7644C1[0]), // expected_vtbl_contents
  &(vtt_S7644C1[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S7644C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7644C1),32, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7644C1),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20203C2  {
  int s20203c2f0;
  virtual void  v4(); // _ZN8S20203C22v4Ev
  virtual void  v5(); // _ZN8S20203C22v5Ev
  virtual void  v6(); // _ZN8S20203C22v6Ev
  virtual void  v7(); // _ZN8S20203C22v7Ev
  virtual void  v8(); // _ZN8S20203C22v8Ev
  virtual void  v9(); // _ZN8S20203C22v9Ev
  virtual void  v10(); // _ZN8S20203C23v10Ev
  virtual void  v11(); // _ZN8S20203C23v11Ev
  ~S20203C2(); // tgen
  S20203C2(); // tgen
};
//SIG(-1 S20203C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fi}


void  S20203C2 ::v4(){vfunc_called(this, "_ZN8S20203C22v4Ev");}
void  S20203C2 ::v5(){vfunc_called(this, "_ZN8S20203C22v5Ev");}
void  S20203C2 ::v6(){vfunc_called(this, "_ZN8S20203C22v6Ev");}
void  S20203C2 ::v7(){vfunc_called(this, "_ZN8S20203C22v7Ev");}
void  S20203C2 ::v8(){vfunc_called(this, "_ZN8S20203C22v8Ev");}
void  S20203C2 ::v9(){vfunc_called(this, "_ZN8S20203C22v9Ev");}
void  S20203C2 ::v10(){vfunc_called(this, "_ZN8S20203C23v10Ev");}
void  S20203C2 ::v11(){vfunc_called(this, "_ZN8S20203C23v11Ev");}
S20203C2 ::~S20203C2(){ note_dtor("S20203C2", this);} // tgen
S20203C2 ::S20203C2(){ note_ctor("S20203C2", this);} // tgen

static void Test_S20203C2()
{
  extern Class_Descriptor cd_S20203C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20203C2, buf);
    S20203C2 *dp, &lv = *(dp=new (buf) S20203C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20203C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20203C2)");
    check_field_offset(lv, s20203c2f0, ABISELECT(8,4), "S20203C2.s20203c2f0");
    test_class_info(&lv, &cd_S20203C2);
    dp->~S20203C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20203C2(Test_S20203C2, "S20203C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20203C2C1Ev();
extern void _ZN8S20203C2D1Ev();
Name_Map name_map_S20203C2[] = {
  NSPAIR(_ZN8S20203C2C1Ev),
  NSPAIR(_ZN8S20203C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20203C2[];
extern void _ZN8S20203C22v4Ev();
extern void _ZN8S20203C22v5Ev();
extern void _ZN8S20203C22v6Ev();
extern void _ZN8S20203C22v7Ev();
extern void _ZN8S20203C22v8Ev();
extern void _ZN8S20203C22v9Ev();
extern void _ZN8S20203C23v10Ev();
extern void _ZN8S20203C23v11Ev();
static  VTBL_ENTRY vtc_S20203C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20203C2[0]),
  (VTBL_ENTRY)&_ZN8S20203C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20203C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20203C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20203C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20203C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20203C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20203C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20203C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S20203C2[];
extern  VTBL_ENTRY _ZTV8S20203C2[];
Class_Descriptor cd_S20203C2 = {  "S20203C2", // class name
  0,0,//no base classes
  &(vtc_S20203C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20203C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20203C2),10, //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  S20203C4  {
  void *s20203c4f0[2];
  virtual void  v12(); // _ZN8S20203C43v12Ev
  virtual void  v13(); // _ZN8S20203C43v13Ev
  virtual void  v14(); // _ZN8S20203C43v14Ev
  virtual void  v15(); // _ZN8S20203C43v15Ev
  virtual void  v16(); // _ZN8S20203C43v16Ev
  ~S20203C4(); // tgen
  S20203C4(); // tgen
};
//SIG(-1 S20203C4) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S20203C4 ::v12(){vfunc_called(this, "_ZN8S20203C43v12Ev");}
void  S20203C4 ::v13(){vfunc_called(this, "_ZN8S20203C43v13Ev");}
void  S20203C4 ::v14(){vfunc_called(this, "_ZN8S20203C43v14Ev");}
void  S20203C4 ::v15(){vfunc_called(this, "_ZN8S20203C43v15Ev");}
void  S20203C4 ::v16(){vfunc_called(this, "_ZN8S20203C43v16Ev");}
S20203C4 ::~S20203C4(){ note_dtor("S20203C4", this);} // tgen
S20203C4 ::S20203C4(){ note_ctor("S20203C4", this);} // tgen

static void Test_S20203C4()
{
  extern Class_Descriptor cd_S20203C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20203C4, buf);
    S20203C4 *dp, &lv = *(dp=new (buf) S20203C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20203C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20203C4)");
    check_field_offset(lv, s20203c4f0, ABISELECT(8,4), "S20203C4.s20203c4f0");
    test_class_info(&lv, &cd_S20203C4);
    dp->~S20203C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20203C4(Test_S20203C4, "S20203C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20203C4C1Ev();
extern void _ZN8S20203C4D1Ev();
Name_Map name_map_S20203C4[] = {
  NSPAIR(_ZN8S20203C4C1Ev),
  NSPAIR(_ZN8S20203C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20203C4[];
extern void _ZN8S20203C43v12Ev();
extern void _ZN8S20203C43v13Ev();
extern void _ZN8S20203C43v14Ev();
extern void _ZN8S20203C43v15Ev();
extern void _ZN8S20203C43v16Ev();
static  VTBL_ENTRY vtc_S20203C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20203C4[0]),
  (VTBL_ENTRY)&_ZN8S20203C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v16Ev,
};
extern VTBL_ENTRY _ZTI8S20203C4[];
extern  VTBL_ENTRY _ZTV8S20203C4[];
Class_Descriptor cd_S20203C4 = {  "S20203C4", // class name
  0,0,//no base classes
  &(vtc_S20203C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20203C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20203C4),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  S20203C3  : virtual S20203C4 {
  int s20203c3f0;
  virtual void  v17(); // _ZN8S20203C33v17Ev
  virtual void  v18(); // _ZN8S20203C33v18Ev
  virtual void  v19(); // _ZN8S20203C33v19Ev
  virtual void  v20(); // _ZN8S20203C33v20Ev
  virtual void  v21(); // _ZN8S20203C33v21Ev
  virtual void  v22(); // _ZN8S20203C33v22Ev
  virtual void  v23(); // _ZN8S20203C33v23Ev
  virtual void  v24(); // _ZN8S20203C33v24Ev
  virtual void  v25(); // _ZN8S20203C33v25Ev
  ~S20203C3(); // tgen
  S20203C3(); // tgen
};
//SIG(-1 S20203C3) C1{ VBC2{ v10 v11 v12 v13 v14 Fp[2]} v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi}


void  S20203C3 ::v17(){vfunc_called(this, "_ZN8S20203C33v17Ev");}
void  S20203C3 ::v18(){vfunc_called(this, "_ZN8S20203C33v18Ev");}
void  S20203C3 ::v19(){vfunc_called(this, "_ZN8S20203C33v19Ev");}
void  S20203C3 ::v20(){vfunc_called(this, "_ZN8S20203C33v20Ev");}
void  S20203C3 ::v21(){vfunc_called(this, "_ZN8S20203C33v21Ev");}
void  S20203C3 ::v22(){vfunc_called(this, "_ZN8S20203C33v22Ev");}
void  S20203C3 ::v23(){vfunc_called(this, "_ZN8S20203C33v23Ev");}
void  S20203C3 ::v24(){vfunc_called(this, "_ZN8S20203C33v24Ev");}
void  S20203C3 ::v25(){vfunc_called(this, "_ZN8S20203C33v25Ev");}
S20203C3 ::~S20203C3(){ note_dtor("S20203C3", this);} // tgen
S20203C3 ::S20203C3(){ note_ctor("S20203C3", this);} // tgen

static void Test_S20203C3()
{
  extern Class_Descriptor cd_S20203C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20203C3, buf);
    S20203C3 *dp, &lv = *(dp=new (buf) S20203C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20203C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20203C3)");
    check_base_class_offset(lv, (S20203C4*), ABISELECT(16,8), "S20203C3");
    check_field_offset(lv, s20203c3f0, ABISELECT(8,4), "S20203C3.s20203c3f0");
    test_class_info(&lv, &cd_S20203C3);
    dp->~S20203C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20203C3(Test_S20203C3, "S20203C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20203C3C1Ev();
extern void _ZN8S20203C3D1Ev();
Name_Map name_map_S20203C3[] = {
  NSPAIR(_ZN8S20203C3C1Ev),
  NSPAIR(_ZN8S20203C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20203C4;
extern VTBL_ENTRY _ZTI8S20203C4[];
extern  VTBL_ENTRY _ZTV8S20203C4[];
static Base_Class bases_S20203C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20203C4,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20203C3[];
extern void _ZN8S20203C33v17Ev();
extern void _ZN8S20203C33v18Ev();
extern void _ZN8S20203C33v19Ev();
extern void _ZN8S20203C33v20Ev();
extern void _ZN8S20203C33v21Ev();
extern void _ZN8S20203C33v22Ev();
extern void _ZN8S20203C33v23Ev();
extern void _ZN8S20203C33v24Ev();
extern void _ZN8S20203C33v25Ev();
extern void _ZN8S20203C43v12Ev();
extern void _ZN8S20203C43v13Ev();
extern void _ZN8S20203C43v14Ev();
extern void _ZN8S20203C43v15Ev();
extern void _ZN8S20203C43v16Ev();
static  VTBL_ENTRY vtc_S20203C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20203C3[0]),
  (VTBL_ENTRY)&_ZN8S20203C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v24Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v25Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20203C3[0]),
  (VTBL_ENTRY)&_ZN8S20203C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v16Ev,
};
extern VTBL_ENTRY _ZTV8S20203C3[];
static  VTT_ENTRY vtt_S20203C3[] = {
  {&(_ZTV8S20203C3[3]),  3,24},
  {&(_ZTV8S20203C3[19]),  19,24},
};
extern VTBL_ENTRY _ZTI8S20203C3[];
extern  VTBL_ENTRY _ZTV8S20203C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20203C3[];
Class_Descriptor cd_S20203C3 = {  "S20203C3", // class name
  bases_S20203C3, 1,
  &(vtc_S20203C3[0]), // expected_vtbl_contents
  &(vtt_S20203C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20203C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20203C3),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20203C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20203C1  : virtual S20203C2 , virtual S20203C3 {
  __tsi64 s20203c1f0;
  virtual  ~S20203C1(); // _ZN8S20203C1D2Ev
  virtual void  v1(); // _ZN8S20203C12v1Ev
  virtual void  v2(); // _ZN8S20203C12v2Ev
  virtual void  v3(); // _ZN8S20203C12v3Ev
  S20203C1(); // tgen
};
//SIG(1 S20203C1) C1{ VBC2{ v4 v5 v6 v7 v8 v9 v10 v11 Fi} VBC3{ VBC4{ v12 v13 v14 v15 v16 Fp[2]} v17 v18 v19 v20 v21 v22 v23 v24 v25 Fi} vd v1 v2 v3 FL}


 S20203C1 ::~S20203C1(){ note_dtor("S20203C1", this);}
void  S20203C1 ::v1(){vfunc_called(this, "_ZN8S20203C12v1Ev");}
void  S20203C1 ::v2(){vfunc_called(this, "_ZN8S20203C12v2Ev");}
void  S20203C1 ::v3(){vfunc_called(this, "_ZN8S20203C12v3Ev");}
S20203C1 ::S20203C1(){ note_ctor("S20203C1", this);} // tgen

static void Test_S20203C1()
{
  extern Class_Descriptor cd_S20203C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S20203C1, buf);
    S20203C1 *dp, &lv = *(dp=new (buf) S20203C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S20203C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20203C1)");
    check_base_class_offset(lv, (S20203C2*), ABISELECT(16,12), "S20203C1");
    check_base_class_offset(lv, (S20203C4*)(S20203C3*), ABISELECT(48,28), "S20203C1");
    check_base_class_offset(lv, (S20203C3*), ABISELECT(32,20), "S20203C1");
    check_field_offset(lv, s20203c1f0, ABISELECT(8,4), "S20203C1.s20203c1f0");
    test_class_info(&lv, &cd_S20203C1);
    dp->~S20203C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20203C1(Test_S20203C1, "S20203C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S20203C1C1Ev();
extern void _ZN8S20203C1D2Ev();
Name_Map name_map_S20203C1[] = {
  NSPAIR(_ZN8S20203C1C1Ev),
  NSPAIR(_ZN8S20203C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20203C2;
extern VTBL_ENTRY _ZTI8S20203C2[];
extern  VTBL_ENTRY _ZTV8S20203C2[];
extern Class_Descriptor cd_S20203C4;
extern VTBL_ENTRY _ZTI8S20203C4[];
extern  VTBL_ENTRY _ZTV8S20203C4[];
extern Class_Descriptor cd_S20203C3;
extern VTBL_ENTRY _ZTI8S20203C3[];
extern  VTBL_ENTRY _ZTV8S20203C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20203C3[];
static Base_Class bases_S20203C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20203C2,    ABISELECT(16,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20203C4,    ABISELECT(48,28), //bcp->offset
    49, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20203C3,    ABISELECT(32,20), //bcp->offset
    28, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20203C1[];
extern void _ZN8S20203C1D1Ev();
extern void _ZN8S20203C1D0Ev();
extern void _ZN8S20203C12v1Ev();
extern void _ZN8S20203C12v2Ev();
extern void _ZN8S20203C12v3Ev();
extern void _ZN8S20203C22v4Ev();
extern void _ZN8S20203C22v5Ev();
extern void _ZN8S20203C22v6Ev();
extern void _ZN8S20203C22v7Ev();
extern void _ZN8S20203C22v8Ev();
extern void _ZN8S20203C22v9Ev();
extern void _ZN8S20203C23v10Ev();
extern void _ZN8S20203C23v11Ev();
extern void _ZN8S20203C33v17Ev();
extern void _ZN8S20203C33v18Ev();
extern void _ZN8S20203C33v19Ev();
extern void _ZN8S20203C33v20Ev();
extern void _ZN8S20203C33v21Ev();
extern void _ZN8S20203C33v22Ev();
extern void _ZN8S20203C33v23Ev();
extern void _ZN8S20203C33v24Ev();
extern void _ZN8S20203C33v25Ev();
extern void _ZN8S20203C43v12Ev();
extern void _ZN8S20203C43v13Ev();
extern void _ZN8S20203C43v14Ev();
extern void _ZN8S20203C43v15Ev();
extern void _ZN8S20203C43v16Ev();
static  VTBL_ENTRY vtc_S20203C1[] = {
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20203C1[0]),
  (VTBL_ENTRY)&_ZN8S20203C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20203C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20203C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20203C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20203C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20203C1[0]),
  (VTBL_ENTRY)&_ZN8S20203C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20203C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20203C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20203C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20203C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20203C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20203C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20203C23v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20203C1[0]),
  (VTBL_ENTRY)&_ZN8S20203C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v24Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v25Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20203C1[0]),
  (VTBL_ENTRY)&_ZN8S20203C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v16Ev,
};
extern VTBL_ENTRY _ZTV8S20203C1[];
extern void _ZN8S20203C33v17Ev();
extern void _ZN8S20203C33v18Ev();
extern void _ZN8S20203C33v19Ev();
extern void _ZN8S20203C33v20Ev();
extern void _ZN8S20203C33v21Ev();
extern void _ZN8S20203C33v22Ev();
extern void _ZN8S20203C33v23Ev();
extern void _ZN8S20203C33v24Ev();
extern void _ZN8S20203C33v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20203C3__8S20203C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20203C3[0]),
  (VTBL_ENTRY)&_ZN8S20203C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v23Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v24Ev,
  (VTBL_ENTRY)&_ZN8S20203C33v25Ev,
};
extern void _ZN8S20203C43v12Ev();
extern void _ZN8S20203C43v13Ev();
extern void _ZN8S20203C43v14Ev();
extern void _ZN8S20203C43v15Ev();
extern void _ZN8S20203C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20203C4__8S20203C3__8S20203C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20203C3[0]),
  (VTBL_ENTRY)&_ZN8S20203C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20203C43v16Ev,
};
static  VTT_ENTRY vtt_S20203C1[] = {
  {&(_ZTV8S20203C1[5]),  5,61},
  {&(_ZTV8S20203C1[20]),  20,61},
  {&(_ZTV8S20203C1[40]),  40,61},
  {&(_ZTV8S20203C1[56]),  56,61},
  {&(_tg__ZTV8S20203C3__8S20203C1[3]),  3,12},
  {&(_tg__ZTV8S20203C4__8S20203C3__8S20203C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI8S20203C1[];
extern  VTBL_ENTRY _ZTV8S20203C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20203C1[];
Class_Descriptor cd_S20203C1 = {  "S20203C1", // class name
  bases_S20203C1, 3,
  &(vtc_S20203C1[0]), // expected_vtbl_contents
  &(vtt_S20203C1[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S20203C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20203C1),61, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20203C1),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19581C8  : virtual S10180C133 , S10180C93 {
  ~S19581C8(); // tgen
  S19581C8(); // tgen
};
//SIG(-1 S19581C8) C1{ VBC2{ m} BC3{ m FL}}


S19581C8 ::~S19581C8(){ note_dtor("S19581C8", this);} // tgen
S19581C8 ::S19581C8(){ note_ctor("S19581C8", this);} // tgen

static void Test_S19581C8()
{
  extern Class_Descriptor cd_S19581C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19581C8, buf);
    S19581C8 *dp, &lv = *(dp=new (buf) S19581C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19581C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19581C8)");
    check_base_class_offset(lv, (S10180C133*), 0, "S19581C8");
    check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S19581C8");
    test_class_info(&lv, &cd_S19581C8);
    dp->~S19581C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19581C8(Test_S19581C8, "S19581C8", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19581C8C1Ev();
extern void _ZN8S19581C8D1Ev();
Name_Map name_map_S19581C8[] = {
  NSPAIR(_ZN8S19581C8C1Ev),
  NSPAIR(_ZN8S19581C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S19581C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19581C8[];
static  VTBL_ENTRY vtc_S19581C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
extern VTBL_ENTRY _ZTV8S19581C8[];
static  VTT_ENTRY vtt_S19581C8[] = {
  {&(_ZTV8S19581C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
Class_Descriptor cd_S19581C8 = {  "S19581C8", // class name
  bases_S19581C8, 2,
  &(vtc_S19581C8[0]), // expected_vtbl_contents
  &(vtt_S19581C8[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19581C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19581C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19581C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19581C5  : virtual S10180C138 , virtual S10180C93 , S19581C8 {
  ~S19581C5(); // tgen
  S19581C5(); // tgen
};
//SIG(-1 S19581C5) C1{ VBC2{ m} VBC3{ m FL} BC4{ VBC5{ m} BC3}}


S19581C5 ::~S19581C5(){ note_dtor("S19581C5", this);} // tgen
S19581C5 ::S19581C5(){ note_ctor("S19581C5", this);} // tgen

static void Test_S19581C5()
{
  extern Class_Descriptor cd_S19581C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S19581C5, buf);
    S19581C5 *dp, &lv = *(dp=new (buf) S19581C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S19581C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19581C5)");
    check_base_class_offset(lv, (S10180C138*), 0, "S19581C5");
    /*is_ambiguous_... S19581C5::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S19581C5");
    check_base_class_offset(lv, (S10180C133*)(S19581C8*), 0, "S19581C5");
    check_base_class_offset(lv, (S10180C93*)(S19581C8*), ABISELECT(8,4), "S19581C5");
    check_base_class_offset(lv, (S19581C8*), 0, "S19581C5");
    test_class_info(&lv, &cd_S19581C5);
    dp->~S19581C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19581C5(Test_S19581C5, "S19581C5", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S19581C5C1Ev();
extern void _ZN8S19581C5D1Ev();
Name_Map name_map_S19581C5[] = {
  NSPAIR(_ZN8S19581C5C1Ev),
  NSPAIR(_ZN8S19581C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19581C8;
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
static Base_Class bases_S19581C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19581C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19581C5[];
static  VTBL_ENTRY vtc_S19581C5[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C5[0]),
};
extern VTBL_ENTRY _ZTV8S19581C5[];
static  VTBL_ENTRY _tg__ZTV8S19581C8__8S19581C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
static  VTT_ENTRY vtt_S19581C5[] = {
  {&(_ZTV8S19581C5[5]),  5,5},
  {&(_tg__ZTV8S19581C8__8S19581C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19581C5[];
extern  VTBL_ENTRY _ZTV8S19581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C5[];
Class_Descriptor cd_S19581C5 = {  "S19581C5", // class name
  bases_S19581C5, 5,
  &(vtc_S19581C5[0]), // expected_vtbl_contents
  &(vtt_S19581C5[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S19581C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19581C5),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19581C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19581C10  : virtual S19581C8 {
  ::S10180C20 s19581c10f0;
  ~S19581C10(); // tgen
  S19581C10(); // tgen
};
//SIG(-1 S19581C10) C1{ VBC2{ VBC3{ m} BC4{ m FL}} FC5{ m}}


S19581C10 ::~S19581C10(){ note_dtor("S19581C10", this);} // tgen
S19581C10 ::S19581C10(){ note_ctor("S19581C10", this);} // tgen

static void Test_S19581C10()
{
  extern Class_Descriptor cd_S19581C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19581C10, buf);
    S19581C10 *dp, &lv = *(dp=new (buf) S19581C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19581C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19581C10)");
    check_base_class_offset(lv, (S10180C133*)(S19581C8*), 0, "S19581C10");
    check_base_class_offset(lv, (S10180C93*)(S19581C8*), ABISELECT(24,12), "S19581C10");
    check_base_class_offset(lv, (S19581C8*), ABISELECT(16,8), "S19581C10");
    check_field_offset(lv, s19581c10f0, ABISELECT(8,4), "S19581C10.s19581c10f0");
    test_class_info(&lv, &cd_S19581C10);
    dp->~S19581C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19581C10(Test_S19581C10, "S19581C10", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19581C10C1Ev();
extern void _ZN9S19581C10D1Ev();
Name_Map name_map_S19581C10[] = {
  NSPAIR(_ZN9S19581C10C1Ev),
  NSPAIR(_ZN9S19581C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19581C8;
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
static Base_Class bases_S19581C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19581C8,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19581C10[];
static  VTBL_ENTRY vtc_S19581C10[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19581C10[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19581C10[0]),
};
extern VTBL_ENTRY _ZTV9S19581C10[];
static  VTBL_ENTRY _tg__ZTV8S19581C8__9S19581C10[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
static  VTT_ENTRY vtt_S19581C10[] = {
  {&(_ZTV9S19581C10[4]),  4,7},
  {&(_ZTV9S19581C10[7]),  7,7},
  {&(_tg__ZTV8S19581C8__9S19581C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19581C10[];
extern  VTBL_ENTRY _ZTV9S19581C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19581C10[];
Class_Descriptor cd_S19581C10 = {  "S19581C10", // class name
  bases_S19581C10, 3,
  &(vtc_S19581C10[0]), // expected_vtbl_contents
  &(vtt_S19581C10[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19581C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19581C10),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19581C10),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19581C4  : virtual S19581C5 , S19581C10 {
  ::S21015C16 s19581c4f0;
  ~S19581C4(); // tgen
  S19581C4(); // tgen
};
//SIG(-1 S19581C4) C1{ VBC2{ VBC3{ m} VBC4{ m FL} BC5{ VBC6{ m} BC4}} BC7{ VBC5 FC8{ m}} FC9{ VBC6 BC3 VBC10{ VBC11{ VBC3 BC4} BC12{ VBC11 FC6} vd Fi:18} BC4}}


S19581C4 ::~S19581C4(){ note_dtor("S19581C4", this);} // tgen
S19581C4 ::S19581C4(){ note_ctor("S19581C4", this);} // tgen

static void Test_S19581C4()
{
  extern Class_Descriptor cd_S19581C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S19581C4, buf);
    S19581C4 *dp, &lv = *(dp=new (buf) S19581C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S19581C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19581C4)");
    check_base_class_offset(lv, (S10180C138*)(S19581C5*), 0, "S19581C4");
    /*is_ambiguous_... S19581C5::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19581C5*), ABISELECT(88,56), "S19581C4");
    check_base_class_offset(lv, (S10180C133*)(S19581C8*)(S19581C5*), 0, "S19581C4");
    /*is_ambiguous_... S19581C4::S19581C8 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19581C8*), 0, "S19581C4");
    check_base_class_offset(lv, (S10180C93*)(S19581C8*)(S19581C5*), ABISELECT(80,48), "S19581C4");
    check_base_class_offset(lv, (S19581C8*)(S19581C5*), ABISELECT(72,44), "S19581C4");
    check_base_class_offset(lv, (S19581C5*), ABISELECT(72,44), "S19581C4");
    /*is_ambiguous_... S19581C4::S19581C8 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19581C8*), ABISELECT(104,68), "S19581C4");
    check_base_class_offset(lv, (S19581C8*)(S19581C10*), ABISELECT(96,64), "S19581C4");
    check_base_class_offset(lv, (S19581C10*), 0, "S19581C4");
    check_field_offset(lv, s19581c4f0, ABISELECT(16,8), "S19581C4.s19581c4f0");
    test_class_info(&lv, &cd_S19581C4);
    dp->~S19581C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19581C4(Test_S19581C4, "S19581C4", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN8S19581C4C1Ev();
extern void _ZN8S19581C4D1Ev();
Name_Map name_map_S19581C4[] = {
  NSPAIR(_ZN8S19581C4C1Ev),
  NSPAIR(_ZN8S19581C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19581C8;
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
extern Class_Descriptor cd_S19581C5;
extern VTBL_ENTRY _ZTI8S19581C5[];
extern  VTBL_ENTRY _ZTV8S19581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C5[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19581C8;
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
extern Class_Descriptor cd_S19581C10;
extern VTBL_ENTRY _ZTI9S19581C10[];
extern  VTBL_ENTRY _ZTV9S19581C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19581C10[];
static Base_Class bases_S19581C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19581C8,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19581C5,    ABISELECT(72,44), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C93,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19581C8,    ABISELECT(96,64), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19581C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19581C4[];
static  VTBL_ENTRY vtc_S19581C4[] = {
  ABISELECT(88,56),
  0,
  ABISELECT(72,44),
  0,
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
  ABISELECT(16,12),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
  ABISELECT(-96,-64),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
};
extern VTBL_ENTRY _ZTV8S19581C4[];
static  VTBL_ENTRY _tg__ZTV9S19581C10__8S19581C4[] = {
  0,
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19581C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__9S19581C10__8S19581C4[] = {
  ABISELECT(-96,-64),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI9S19581C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C5__8S19581C4[] = {
  ABISELECT(16,12),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C88S19581C5__8S19581C4[] = {
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__A1__8S19581C4[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
static  VTT_ENTRY vtt_S19581C4[] = {
  {&(_ZTV8S19581C4[7]),  7,15},
  {&(_tg__ZTV9S19581C10__8S19581C4[4]),  4,4},
  {&(_tg__ZTV8S19581C8__9S19581C10__8S19581C4[3]),  3,3},
  {&(_ZTV8S19581C4[12]),  12,15},
  {&(_ZTV8S19581C4[15]),  15,15},
  {&(_tg__ZTV8S19581C5__8S19581C4[5]),  5,5},
  {&(_tg__ZTV8S19581C88S19581C5__8S19581C4[3]),  3,3},
  {&(_tg__ZTV8S19581C8__A1__8S19581C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19581C4[];
extern  VTBL_ENTRY _ZTV8S19581C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C4[];
Class_Descriptor cd_S19581C4 = {  "S19581C4", // class name
  bases_S19581C4, 9,
  &(vtc_S19581C4[0]), // expected_vtbl_contents
  &(vtt_S19581C4[0]), // expected_vtt_contents
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI8S19581C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19581C4),15, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19581C4),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19581C3  : virtual S19581C4 {
  void *s19581c3f0;
  ~S19581C3(); // tgen
  S19581C3(); // tgen
};
//SIG(-1 S19581C3) C1{ VBC2{ VBC3{ VBC4{ m} VBC5{ m FL} BC6{ VBC7{ m} BC5}} BC8{ VBC6 FC9{ m}} FC10{ VBC7 BC4 VBC11{ VBC12{ VBC4 BC5} BC13{ VBC12 FC7} vd Fi:18} BC5}} Fp}


S19581C3 ::~S19581C3(){ note_dtor("S19581C3", this);} // tgen
S19581C3 ::S19581C3(){ note_ctor("S19581C3", this);} // tgen

static void Test_S19581C3()
{
  extern Class_Descriptor cd_S19581C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S19581C3, buf);
    S19581C3 *dp, &lv = *(dp=new (buf) S19581C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S19581C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19581C3)");
    check_base_class_offset(lv, (S10180C138*)(S19581C5*), 0, "S19581C3");
    /*is_ambiguous_... S19581C5::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19581C5*), ABISELECT(104,64), "S19581C3");
    check_base_class_offset(lv, (S10180C133*)(S19581C8*)(S19581C5*), 0, "S19581C3");
    /*is_ambiguous_... S19581C3::S19581C8 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19581C8*), 0, "S19581C3");
    check_base_class_offset(lv, (S10180C93*)(S19581C8*)(S19581C5*), ABISELECT(96,56), "S19581C3");
    check_base_class_offset(lv, (S19581C8*)(S19581C5*), ABISELECT(88,52), "S19581C3");
    check_base_class_offset(lv, (S19581C5*)(S19581C4*), ABISELECT(88,52), "S19581C3");
    /*is_ambiguous_... S19581C3::S19581C8 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19581C8*), ABISELECT(120,76), "S19581C3");
    check_base_class_offset(lv, (S19581C8*)(S19581C10*)(S19581C4*), ABISELECT(112,72), "S19581C3");
    check_base_class_offset(lv, (S19581C10*)(S19581C4*), ABISELECT(16,8), "S19581C3");
    check_base_class_offset(lv, (S19581C4*), ABISELECT(16,8), "S19581C3");
    check_field_offset(lv, s19581c3f0, ABISELECT(8,4), "S19581C3.s19581c3f0");
    test_class_info(&lv, &cd_S19581C3);
    dp->~S19581C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19581C3(Test_S19581C3, "S19581C3", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN8S19581C3C1Ev();
extern void _ZN8S19581C3D1Ev();
Name_Map name_map_S19581C3[] = {
  NSPAIR(_ZN8S19581C3C1Ev),
  NSPAIR(_ZN8S19581C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19581C8;
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
extern Class_Descriptor cd_S19581C5;
extern VTBL_ENTRY _ZTI8S19581C5[];
extern  VTBL_ENTRY _ZTV8S19581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C5[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19581C8;
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
extern Class_Descriptor cd_S19581C10;
extern VTBL_ENTRY _ZTI9S19581C10[];
extern  VTBL_ENTRY _ZTV9S19581C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19581C10[];
extern Class_Descriptor cd_S19581C4;
extern VTBL_ENTRY _ZTI8S19581C4[];
extern  VTBL_ENTRY _ZTV8S19581C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C4[];
static Base_Class bases_S19581C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(104,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19581C8,    ABISELECT(88,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19581C5,    ABISELECT(88,52), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19581C8,    ABISELECT(112,72), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19581C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19581C4,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19581C3[];
static  VTBL_ENTRY vtc_S19581C3[] = {
  ABISELECT(112,72),
  0,
  ABISELECT(104,64),
  0,
  ABISELECT(88,52),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
  ABISELECT(88,56),
  ABISELECT(-16,-8),
  ABISELECT(72,44),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
  ABISELECT(16,12),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
};
extern VTBL_ENTRY _ZTV8S19581C3[];
static  VTBL_ENTRY _tg__ZTV8S19581C4__8S19581C3[] = {
  ABISELECT(88,56),
  ABISELECT(-16,-8),
  ABISELECT(72,44),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19581C108S19581C4__8S19581C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19581C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__9S19581C108S19581C4__8S19581C3[] = {
  ABISELECT(-112,-72),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI9S19581C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C5__8S19581C4__8S19581C3[] = {
  ABISELECT(16,12),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__A1__8S19581C4__8S19581C3[] = {
  ABISELECT(-112,-72),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C5__8S19581C3[] = {
  ABISELECT(16,12),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C88S19581C5__8S19581C3[] = {
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__A1__8S19581C3[] = {
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
static  VTT_ENTRY vtt_S19581C3[] = {
  {&(_ZTV8S19581C3[8]),  8,23},
  {&(_ZTV8S19581C3[15]),  15,23},
  {&(_ZTV8S19581C3[20]),  20,23},
  {&(_ZTV8S19581C3[23]),  23,23},
  {&(_tg__ZTV8S19581C4__8S19581C3[7]),  7,7},
  {&(_tg__ZTV9S19581C108S19581C4__8S19581C3[4]),  4,4},
  {&(_tg__ZTV8S19581C8__9S19581C108S19581C4__8S19581C3[3]),  3,3},
  {&(_tg__ZTV8S19581C5__8S19581C4__8S19581C3[5]),  5,5},
  {&(_tg__ZTV8S19581C8__A1__8S19581C4__8S19581C3[3]),  3,3},
  {&(_tg__ZTV8S19581C5__8S19581C3[5]),  5,5},
  {&(_tg__ZTV8S19581C88S19581C5__8S19581C3[3]),  3,3},
  {&(_tg__ZTV8S19581C8__A1__8S19581C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19581C3[];
extern  VTBL_ENTRY _ZTV8S19581C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C3[];
Class_Descriptor cd_S19581C3 = {  "S19581C3", // class name
  bases_S19581C3, 10,
  &(vtc_S19581C3[0]), // expected_vtbl_contents
  &(vtt_S19581C3[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI8S19581C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19581C3),23, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19581C3),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19581C2  : S19581C3 {
  ~S19581C2(); // tgen
  S19581C2(); // tgen
};
//SIG(-1 S19581C2) C1{ BC2{ VBC3{ VBC4{ VBC5{ m} VBC6{ m FL} BC7{ VBC8{ m} BC6}} BC9{ VBC7 FC10{ m}} FC11{ VBC8 BC5 VBC12{ VBC13{ VBC5 BC6} BC14{ VBC13 FC8} vd Fi:18} BC6}} Fp}}


S19581C2 ::~S19581C2(){ note_dtor("S19581C2", this);} // tgen
S19581C2 ::S19581C2(){ note_ctor("S19581C2", this);} // tgen

static void Test_S19581C2()
{
  extern Class_Descriptor cd_S19581C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S19581C2, buf);
    S19581C2 *dp, &lv = *(dp=new (buf) S19581C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S19581C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19581C2)");
    check_base_class_offset(lv, (S10180C138*)(S19581C5*), 0, "S19581C2");
    /*is_ambiguous_... S19581C5::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19581C5*), ABISELECT(104,64), "S19581C2");
    check_base_class_offset(lv, (S10180C133*)(S19581C8*)(S19581C5*), 0, "S19581C2");
    /*is_ambiguous_... S19581C2::S19581C8 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19581C8*), 0, "S19581C2");
    check_base_class_offset(lv, (S10180C93*)(S19581C8*)(S19581C5*), ABISELECT(96,56), "S19581C2");
    check_base_class_offset(lv, (S19581C8*)(S19581C5*), ABISELECT(88,52), "S19581C2");
    check_base_class_offset(lv, (S19581C5*)(S19581C4*), ABISELECT(88,52), "S19581C2");
    /*is_ambiguous_... S19581C2::S19581C8 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19581C8*), ABISELECT(120,76), "S19581C2");
    check_base_class_offset(lv, (S19581C8*)(S19581C10*)(S19581C4*), ABISELECT(112,72), "S19581C2");
    check_base_class_offset(lv, (S19581C10*)(S19581C4*), ABISELECT(16,8), "S19581C2");
    check_base_class_offset(lv, (S19581C4*)(S19581C3*), ABISELECT(16,8), "S19581C2");
    check_base_class_offset(lv, (S19581C3*), 0, "S19581C2");
    test_class_info(&lv, &cd_S19581C2);
    dp->~S19581C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19581C2(Test_S19581C2, "S19581C2", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN8S19581C2C1Ev();
extern void _ZN8S19581C2D1Ev();
Name_Map name_map_S19581C2[] = {
  NSPAIR(_ZN8S19581C2C1Ev),
  NSPAIR(_ZN8S19581C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19581C8;
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
extern Class_Descriptor cd_S19581C5;
extern VTBL_ENTRY _ZTI8S19581C5[];
extern  VTBL_ENTRY _ZTV8S19581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C5[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19581C8;
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
extern Class_Descriptor cd_S19581C10;
extern VTBL_ENTRY _ZTI9S19581C10[];
extern  VTBL_ENTRY _ZTV9S19581C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19581C10[];
extern Class_Descriptor cd_S19581C4;
extern VTBL_ENTRY _ZTI8S19581C4[];
extern  VTBL_ENTRY _ZTV8S19581C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C4[];
extern Class_Descriptor cd_S19581C3;
extern VTBL_ENTRY _ZTI8S19581C3[];
extern  VTBL_ENTRY _ZTV8S19581C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C3[];
static Base_Class bases_S19581C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(104,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19581C8,    ABISELECT(88,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19581C5,    ABISELECT(88,52), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19581C8,    ABISELECT(112,72), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19581C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19581C4,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19581C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19581C2[];
static  VTBL_ENTRY vtc_S19581C2[] = {
  ABISELECT(112,72),
  0,
  ABISELECT(104,64),
  0,
  ABISELECT(88,52),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C2[0]),
  ABISELECT(88,56),
  ABISELECT(-16,-8),
  ABISELECT(72,44),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19581C2[0]),
  ABISELECT(16,12),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S19581C2[0]),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19581C2[0]),
};
extern VTBL_ENTRY _ZTV8S19581C2[];
static  VTBL_ENTRY _tg__ZTV8S19581C3__8S19581C2[] = {
  ABISELECT(112,72),
  0,
  ABISELECT(104,64),
  0,
  ABISELECT(88,52),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C4__8S19581C3__8S19581C2[] = {
  ABISELECT(88,56),
  ABISELECT(-16,-8),
  ABISELECT(72,44),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C5__8S19581C3__8S19581C2[] = {
  ABISELECT(16,12),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__A1__8S19581C3__8S19581C2[] = {
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C4__8S19581C2[] = {
  ABISELECT(88,56),
  ABISELECT(-16,-8),
  ABISELECT(72,44),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19581C108S19581C4__8S19581C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19581C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__9S19581C108S19581C4__8S19581C2[] = {
  ABISELECT(-112,-72),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI9S19581C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C5__8S19581C4__8S19581C2[] = {
  ABISELECT(16,12),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__A1__8S19581C4__8S19581C2[] = {
  ABISELECT(-112,-72),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C5__8S19581C2[] = {
  ABISELECT(16,12),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C88S19581C5__8S19581C2[] = {
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__A1__8S19581C2[] = {
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
static  VTT_ENTRY vtt_S19581C2[] = {
  {&(_ZTV8S19581C2[8]),  8,23},
  {&(_tg__ZTV8S19581C3__8S19581C2[8]),  8,8},
  {&(_tg__ZTV8S19581C4__8S19581C3__8S19581C2[7]),  7,7},
  {&(_tg__ZTV8S19581C5__8S19581C3__8S19581C2[5]),  5,5},
  {&(_tg__ZTV8S19581C8__A1__8S19581C3__8S19581C2[3]),  3,3},
  {&(_ZTV8S19581C2[15]),  15,23},
  {&(_ZTV8S19581C2[20]),  20,23},
  {&(_ZTV8S19581C2[23]),  23,23},
  {&(_tg__ZTV8S19581C4__8S19581C2[7]),  7,7},
  {&(_tg__ZTV9S19581C108S19581C4__8S19581C2[4]),  4,4},
  {&(_tg__ZTV8S19581C8__9S19581C108S19581C4__8S19581C2[3]),  3,3},
  {&(_tg__ZTV8S19581C5__8S19581C4__8S19581C2[5]),  5,5},
  {&(_tg__ZTV8S19581C8__A1__8S19581C4__8S19581C2[3]),  3,3},
  {&(_tg__ZTV8S19581C5__8S19581C2[5]),  5,5},
  {&(_tg__ZTV8S19581C88S19581C5__8S19581C2[3]),  3,3},
  {&(_tg__ZTV8S19581C8__A1__8S19581C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19581C2[];
extern  VTBL_ENTRY _ZTV8S19581C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C2[];
Class_Descriptor cd_S19581C2 = {  "S19581C2", // class name
  bases_S19581C2, 11,
  &(vtc_S19581C2[0]), // expected_vtbl_contents
  &(vtt_S19581C2[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI8S19581C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19581C2),23, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19581C2),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19581C1  : virtual S19581C2 {
  void *s19581c1f0;
  ~S19581C1(); // tgen
  S19581C1(); // tgen
};
//SIG(1 S19581C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ VBC6{ m} VBC7{ m FL} BC8{ VBC9{ m} BC7}} BC10{ VBC8 FC11{ m}} FC12{ VBC9 BC6 VBC13{ VBC14{ VBC6 BC7} BC15{ VBC14 FC9} vd Fi:18} BC7}} Fp}} Fp}


S19581C1 ::~S19581C1(){ note_dtor("S19581C1", this);} // tgen
S19581C1 ::S19581C1(){ note_ctor("S19581C1", this);} // tgen

static void Test_S19581C1()
{
  extern Class_Descriptor cd_S19581C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S19581C1, buf);
    S19581C1 *dp, &lv = *(dp=new (buf) S19581C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S19581C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19581C1)");
    check_base_class_offset(lv, (S10180C138*)(S19581C5*), 0, "S19581C1");
    /*is_ambiguous_... S19581C5::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19581C5*), ABISELECT(120,72), "S19581C1");
    check_base_class_offset(lv, (S10180C133*)(S19581C8*)(S19581C5*), 0, "S19581C1");
    /*is_ambiguous_... S19581C1::S19581C8 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19581C8*), 0, "S19581C1");
    check_base_class_offset(lv, (S10180C93*)(S19581C8*)(S19581C5*), ABISELECT(112,64), "S19581C1");
    check_base_class_offset(lv, (S19581C8*)(S19581C5*), ABISELECT(104,60), "S19581C1");
    check_base_class_offset(lv, (S19581C5*)(S19581C4*), ABISELECT(104,60), "S19581C1");
    /*is_ambiguous_... S19581C1::S19581C8 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19581C8*), ABISELECT(136,84), "S19581C1");
    check_base_class_offset(lv, (S19581C8*)(S19581C10*)(S19581C4*), ABISELECT(128,80), "S19581C1");
    check_base_class_offset(lv, (S19581C10*)(S19581C4*), ABISELECT(32,16), "S19581C1");
    check_base_class_offset(lv, (S19581C4*)(S19581C3*)(S19581C2*), ABISELECT(32,16), "S19581C1");
    check_base_class_offset(lv, (S19581C3*)(S19581C2*), ABISELECT(16,8), "S19581C1");
    check_base_class_offset(lv, (S19581C2*), ABISELECT(16,8), "S19581C1");
    check_field_offset(lv, s19581c1f0, ABISELECT(8,4), "S19581C1.s19581c1f0");
    test_class_info(&lv, &cd_S19581C1);
    dp->~S19581C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19581C1(Test_S19581C1, "S19581C1", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN8S19581C1C1Ev();
extern void _ZN8S19581C1D1Ev();
Name_Map name_map_S19581C1[] = {
  NSPAIR(_ZN8S19581C1C1Ev),
  NSPAIR(_ZN8S19581C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19581C8;
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
extern Class_Descriptor cd_S19581C5;
extern VTBL_ENTRY _ZTI8S19581C5[];
extern  VTBL_ENTRY _ZTV8S19581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C5[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19581C8;
extern VTBL_ENTRY _ZTI8S19581C8[];
extern  VTBL_ENTRY _ZTV8S19581C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C8[];
extern Class_Descriptor cd_S19581C10;
extern VTBL_ENTRY _ZTI9S19581C10[];
extern  VTBL_ENTRY _ZTV9S19581C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19581C10[];
extern Class_Descriptor cd_S19581C4;
extern VTBL_ENTRY _ZTI8S19581C4[];
extern  VTBL_ENTRY _ZTV8S19581C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C4[];
extern Class_Descriptor cd_S19581C3;
extern VTBL_ENTRY _ZTI8S19581C3[];
extern  VTBL_ENTRY _ZTV8S19581C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C3[];
extern Class_Descriptor cd_S19581C2;
extern VTBL_ENTRY _ZTI8S19581C2[];
extern  VTBL_ENTRY _ZTV8S19581C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C2[];
static Base_Class bases_S19581C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(112,64), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19581C8,    ABISELECT(104,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19581C5,    ABISELECT(104,60), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19581C8,    ABISELECT(128,80), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19581C10,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19581C4,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19581C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19581C2,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19581C1[];
static  VTBL_ENTRY vtc_S19581C1[] = {
  ABISELECT(128,80),
  0,
  ABISELECT(120,72),
  0,
  ABISELECT(104,60),
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C1[0]),
  ABISELECT(112,72),
  ABISELECT(-16,-8),
  ABISELECT(104,64),
  ABISELECT(-16,-8),
  ABISELECT(88,52),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19581C1[0]),
  ABISELECT(88,56),
  ABISELECT(-32,-16),
  ABISELECT(72,44),
  ABISELECT(-32,-16),
  ABISELECT(96,64),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19581C1[0]),
  ABISELECT(16,12),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S19581C1[0]),
  ABISELECT(-128,-80),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19581C1[0]),
};
extern VTBL_ENTRY _ZTV8S19581C1[];
static  VTBL_ENTRY _tg__ZTV8S19581C2__8S19581C1[] = {
  ABISELECT(112,72),
  ABISELECT(-16,-8),
  ABISELECT(104,64),
  ABISELECT(-16,-8),
  ABISELECT(88,52),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C38S19581C2__8S19581C1[] = {
  ABISELECT(112,72),
  ABISELECT(-16,-8),
  ABISELECT(104,64),
  ABISELECT(-16,-8),
  ABISELECT(88,52),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C4__8S19581C38S19581C2__8S19581C1[] = {
  ABISELECT(88,56),
  ABISELECT(-32,-16),
  ABISELECT(72,44),
  ABISELECT(-32,-16),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C5__8S19581C38S19581C2__8S19581C1[] = {
  ABISELECT(16,12),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__A1__8S19581C38S19581C2__8S19581C1[] = {
  ABISELECT(-128,-80),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19581C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C4__8S19581C2__8S19581C1[] = {
  ABISELECT(88,56),
  ABISELECT(-32,-16),
  ABISELECT(72,44),
  ABISELECT(-32,-16),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19581C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C5__8S19581C2__8S19581C1[] = {
  ABISELECT(16,12),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S19581C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__A1__8S19581C2__8S19581C1[] = {
  ABISELECT(-128,-80),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19581C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C4__8S19581C1[] = {
  ABISELECT(88,56),
  ABISELECT(-32,-16),
  ABISELECT(72,44),
  ABISELECT(-32,-16),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19581C108S19581C4__8S19581C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19581C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__9S19581C108S19581C4__8S19581C1[] = {
  ABISELECT(-128,-80),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI9S19581C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C5__8S19581C4__8S19581C1[] = {
  ABISELECT(16,12),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__A1__8S19581C4__8S19581C1[] = {
  ABISELECT(-128,-80),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S19581C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C5__8S19581C1[] = {
  ABISELECT(16,12),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C88S19581C5__8S19581C1[] = {
  ABISELECT(-104,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19581C8__A1__8S19581C1[] = {
  ABISELECT(-128,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19581C8[0]),
};
static  VTT_ENTRY vtt_S19581C1[] = {
  {&(_ZTV8S19581C1[9]),  9,32},
  {&(_ZTV8S19581C1[17]),  17,32},
  {&(_ZTV8S19581C1[24]),  24,32},
  {&(_ZTV8S19581C1[29]),  29,32},
  {&(_ZTV8S19581C1[32]),  32,32},
  {&(_tg__ZTV8S19581C2__8S19581C1[8]),  8,8},
  {&(_tg__ZTV8S19581C38S19581C2__8S19581C1[8]),  8,8},
  {&(_tg__ZTV8S19581C4__8S19581C38S19581C2__8S19581C1[7]),  7,7},
  {&(_tg__ZTV8S19581C5__8S19581C38S19581C2__8S19581C1[5]),  5,5},
  {&(_tg__ZTV8S19581C8__A1__8S19581C38S19581C2__8S19581C1[3]),  3,3},
  {&(_tg__ZTV8S19581C4__8S19581C2__8S19581C1[7]),  7,7},
  {&(_tg__ZTV8S19581C5__8S19581C2__8S19581C1[5]),  5,5},
  {&(_tg__ZTV8S19581C8__A1__8S19581C2__8S19581C1[3]),  3,3},
  {&(_tg__ZTV8S19581C4__8S19581C1[7]),  7,7},
  {&(_tg__ZTV9S19581C108S19581C4__8S19581C1[4]),  4,4},
  {&(_tg__ZTV8S19581C8__9S19581C108S19581C4__8S19581C1[3]),  3,3},
  {&(_tg__ZTV8S19581C5__8S19581C4__8S19581C1[5]),  5,5},
  {&(_tg__ZTV8S19581C8__A1__8S19581C4__8S19581C1[3]),  3,3},
  {&(_tg__ZTV8S19581C5__8S19581C1[5]),  5,5},
  {&(_tg__ZTV8S19581C88S19581C5__8S19581C1[3]),  3,3},
  {&(_tg__ZTV8S19581C8__A1__8S19581C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19581C1[];
extern  VTBL_ENTRY _ZTV8S19581C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19581C1[];
Class_Descriptor cd_S19581C1 = {  "S19581C1", // class name
  bases_S19581C1, 12,
  &(vtc_S19581C1[0]), // expected_vtbl_contents
  &(vtt_S19581C1[0]), // expected_vtt_contents
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI8S19581C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19581C1),32, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19581C1),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19831C6  : virtual S10180C133 , S10180C93 {
  ~S19831C6(); // tgen
  S19831C6(); // tgen
};
//SIG(-1 S19831C6) C1{ VBC2{ m} BC3{ m FL}}


S19831C6 ::~S19831C6(){ note_dtor("S19831C6", this);} // tgen
S19831C6 ::S19831C6(){ note_ctor("S19831C6", this);} // tgen

static void Test_S19831C6()
{
  extern Class_Descriptor cd_S19831C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19831C6, buf);
    S19831C6 *dp, &lv = *(dp=new (buf) S19831C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19831C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19831C6)");
    check_base_class_offset(lv, (S10180C133*), 0, "S19831C6");
    check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S19831C6");
    test_class_info(&lv, &cd_S19831C6);
    dp->~S19831C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19831C6(Test_S19831C6, "S19831C6", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19831C6C1Ev();
extern void _ZN8S19831C6D1Ev();
Name_Map name_map_S19831C6[] = {
  NSPAIR(_ZN8S19831C6C1Ev),
  NSPAIR(_ZN8S19831C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S19831C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19831C6[];
static  VTBL_ENTRY vtc_S19831C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
extern VTBL_ENTRY _ZTV8S19831C6[];
static  VTT_ENTRY vtt_S19831C6[] = {
  {&(_ZTV8S19831C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
Class_Descriptor cd_S19831C6 = {  "S19831C6", // class name
  bases_S19831C6, 2,
  &(vtc_S19831C6[0]), // expected_vtbl_contents
  &(vtt_S19831C6[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19831C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19831C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19831C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19831C4  : virtual S10180C138 , virtual S10180C93 , S19831C6 {
  ~S19831C4(); // tgen
  S19831C4(); // tgen
};
//SIG(-1 S19831C4) C1{ VBC2{ m} VBC3{ m FL} BC4{ VBC5{ m} BC3}}


S19831C4 ::~S19831C4(){ note_dtor("S19831C4", this);} // tgen
S19831C4 ::S19831C4(){ note_ctor("S19831C4", this);} // tgen

static void Test_S19831C4()
{
  extern Class_Descriptor cd_S19831C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S19831C4, buf);
    S19831C4 *dp, &lv = *(dp=new (buf) S19831C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S19831C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19831C4)");
    check_base_class_offset(lv, (S10180C138*), 0, "S19831C4");
    /*is_ambiguous_... S19831C4::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S19831C4");
    check_base_class_offset(lv, (S10180C133*)(S19831C6*), 0, "S19831C4");
    check_base_class_offset(lv, (S10180C93*)(S19831C6*), ABISELECT(8,4), "S19831C4");
    check_base_class_offset(lv, (S19831C6*), 0, "S19831C4");
    test_class_info(&lv, &cd_S19831C4);
    dp->~S19831C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19831C4(Test_S19831C4, "S19831C4", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S19831C4C1Ev();
extern void _ZN8S19831C4D1Ev();
Name_Map name_map_S19831C4[] = {
  NSPAIR(_ZN8S19831C4C1Ev),
  NSPAIR(_ZN8S19831C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
static Base_Class bases_S19831C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19831C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19831C4[];
static  VTBL_ENTRY vtc_S19831C4[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C4[0]),
};
extern VTBL_ENTRY _ZTV8S19831C4[];
static  VTBL_ENTRY _tg__ZTV8S19831C6__8S19831C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTT_ENTRY vtt_S19831C4[] = {
  {&(_ZTV8S19831C4[5]),  5,5},
  {&(_tg__ZTV8S19831C6__8S19831C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19831C4[];
extern  VTBL_ENTRY _ZTV8S19831C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C4[];
Class_Descriptor cd_S19831C4 = {  "S19831C4", // class name
  bases_S19831C4, 5,
  &(vtc_S19831C4[0]), // expected_vtbl_contents
  &(vtt_S19831C4[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S19831C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19831C4),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19831C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19831C8  : virtual S19831C6 {
  ::S10180C20 s19831c8f0;
  ~S19831C8(); // tgen
  S19831C8(); // tgen
};
//SIG(-1 S19831C8) C1{ VBC2{ VBC3{ m} BC4{ m FL}} FC5{ m}}


S19831C8 ::~S19831C8(){ note_dtor("S19831C8", this);} // tgen
S19831C8 ::S19831C8(){ note_ctor("S19831C8", this);} // tgen

static void Test_S19831C8()
{
  extern Class_Descriptor cd_S19831C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19831C8, buf);
    S19831C8 *dp, &lv = *(dp=new (buf) S19831C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19831C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19831C8)");
    check_base_class_offset(lv, (S10180C133*)(S19831C6*), 0, "S19831C8");
    check_base_class_offset(lv, (S10180C93*)(S19831C6*), ABISELECT(24,12), "S19831C8");
    check_base_class_offset(lv, (S19831C6*), ABISELECT(16,8), "S19831C8");
    check_field_offset(lv, s19831c8f0, ABISELECT(8,4), "S19831C8.s19831c8f0");
    test_class_info(&lv, &cd_S19831C8);
    dp->~S19831C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19831C8(Test_S19831C8, "S19831C8", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19831C8C1Ev();
extern void _ZN8S19831C8D1Ev();
Name_Map name_map_S19831C8[] = {
  NSPAIR(_ZN8S19831C8C1Ev),
  NSPAIR(_ZN8S19831C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
static Base_Class bases_S19831C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19831C6,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19831C8[];
static  VTBL_ENTRY vtc_S19831C8[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
extern VTBL_ENTRY _ZTV8S19831C8[];
static  VTBL_ENTRY _tg__ZTV8S19831C6__8S19831C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTT_ENTRY vtt_S19831C8[] = {
  {&(_ZTV8S19831C8[4]),  4,7},
  {&(_ZTV8S19831C8[7]),  7,7},
  {&(_tg__ZTV8S19831C6__8S19831C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19831C8[];
extern  VTBL_ENTRY _ZTV8S19831C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C8[];
Class_Descriptor cd_S19831C8 = {  "S19831C8", // class name
  bases_S19831C8, 3,
  &(vtc_S19831C8[0]), // expected_vtbl_contents
  &(vtt_S19831C8[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19831C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19831C8),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19831C8),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19831C10  : S19831C8 {
  void *s19831c10f0;
  ~S19831C10(); // tgen
  S19831C10(); // tgen
};
//SIG(-1 S19831C10) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m FL}} FC6{ m}} Fp}


S19831C10 ::~S19831C10(){ note_dtor("S19831C10", this);} // tgen
S19831C10 ::S19831C10(){ note_ctor("S19831C10", this);} // tgen

static void Test_S19831C10()
{
  extern Class_Descriptor cd_S19831C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19831C10, buf);
    S19831C10 *dp, &lv = *(dp=new (buf) S19831C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19831C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19831C10)");
    check_base_class_offset(lv, (S10180C133*)(S19831C6*), 0, "S19831C10");
    check_base_class_offset(lv, (S10180C93*)(S19831C6*), ABISELECT(32,16), "S19831C10");
    check_base_class_offset(lv, (S19831C6*)(S19831C8*), ABISELECT(24,12), "S19831C10");
    check_base_class_offset(lv, (S19831C8*), 0, "S19831C10");
    check_field_offset(lv, s19831c10f0, ABISELECT(16,8), "S19831C10.s19831c10f0");
    test_class_info(&lv, &cd_S19831C10);
    dp->~S19831C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19831C10(Test_S19831C10, "S19831C10", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19831C10C1Ev();
extern void _ZN9S19831C10D1Ev();
Name_Map name_map_S19831C10[] = {
  NSPAIR(_ZN9S19831C10C1Ev),
  NSPAIR(_ZN9S19831C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
extern Class_Descriptor cd_S19831C8;
extern VTBL_ENTRY _ZTI8S19831C8[];
extern  VTBL_ENTRY _ZTV8S19831C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C8[];
static Base_Class bases_S19831C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19831C6,    ABISELECT(24,12), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19831C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19831C10[];
static  VTBL_ENTRY vtc_S19831C10[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19831C10[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19831C10[0]),
};
extern VTBL_ENTRY _ZTV9S19831C10[];
static  VTBL_ENTRY _tg__ZTV8S19831C8__9S19831C10[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__8S19831C8__9S19831C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__9S19831C10[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTT_ENTRY vtt_S19831C10[] = {
  {&(_ZTV9S19831C10[4]),  4,7},
  {&(_tg__ZTV8S19831C8__9S19831C10[4]),  4,4},
  {&(_tg__ZTV8S19831C6__8S19831C8__9S19831C10[3]),  3,3},
  {&(_ZTV9S19831C10[7]),  7,7},
  {&(_tg__ZTV8S19831C6__9S19831C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19831C10[];
extern  VTBL_ENTRY _ZTV9S19831C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19831C10[];
Class_Descriptor cd_S19831C10 = {  "S19831C10", // class name
  bases_S19831C10, 4,
  &(vtc_S19831C10[0]), // expected_vtbl_contents
  &(vtt_S19831C10[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19831C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19831C10),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19831C10),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19831C11  : virtual S10180C93 , S10180C138 , S19831C4 {
  ~S19831C11(); // tgen
  S19831C11(); // tgen
};
//SIG(-1 S19831C11) C1{ VBC2{ m FL} BC3{ m} BC4{ VBC3 VBC2 BC5{ VBC6{ m} BC2}}}


S19831C11 ::~S19831C11(){ note_dtor("S19831C11", this);} // tgen
S19831C11 ::S19831C11(){ note_ctor("S19831C11", this);} // tgen

static void Test_S19831C11()
{
  extern Class_Descriptor cd_S19831C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S19831C11, buf);
    S19831C11 *dp, &lv = *(dp=new (buf) S19831C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S19831C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19831C11)");
    /*is_ambiguous_... S19831C11::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S19831C11");
    /*is_ambiguous_... S19831C4::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C4*), ABISELECT(16,12), "S19831C11");
    /*is_ambiguous_... S19831C11::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*), 0, "S19831C11");
    check_base_class_offset(lv, (S10180C138*)(S19831C4*), ABISELECT(24,20), "S19831C11");
    check_base_class_offset(lv, (S10180C133*)(S19831C6*)(S19831C4*), 0, "S19831C11");
    check_base_class_offset(lv, (S10180C93*)(S19831C6*)(S19831C4*), ABISELECT(8,4), "S19831C11");
    check_base_class_offset(lv, (S19831C6*)(S19831C4*), 0, "S19831C11");
    check_base_class_offset(lv, (S19831C4*), 0, "S19831C11");
    test_class_info(&lv, &cd_S19831C11);
    dp->~S19831C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19831C11(Test_S19831C11, "S19831C11", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN9S19831C11C1Ev();
extern void _ZN9S19831C11D1Ev();
Name_Map name_map_S19831C11[] = {
  NSPAIR(_ZN9S19831C11C1Ev),
  NSPAIR(_ZN9S19831C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
extern Class_Descriptor cd_S19831C4;
extern VTBL_ENTRY _ZTI8S19831C4[];
extern  VTBL_ENTRY _ZTV8S19831C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C4[];
static Base_Class bases_S19831C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C138,    ABISELECT(24,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19831C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19831C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19831C11[];
static  VTBL_ENTRY vtc_S19831C11[] = {
  ABISELECT(16,12),
  ABISELECT(24,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19831C11[0]),
};
extern VTBL_ENTRY _ZTV9S19831C11[];
static  VTBL_ENTRY _tg__ZTV8S19831C4__9S19831C11[] = {
  ABISELECT(16,12),
  ABISELECT(24,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C68S19831C4__9S19831C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTT_ENTRY vtt_S19831C11[] = {
  {&(_ZTV9S19831C11[5]),  5,5},
  {&(_tg__ZTV8S19831C4__9S19831C11[5]),  5,5},
  {&(_tg__ZTV8S19831C68S19831C4__9S19831C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19831C11[];
extern  VTBL_ENTRY _ZTV9S19831C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19831C11[];
Class_Descriptor cd_S19831C11 = {  "S19831C11", // class name
  bases_S19831C11, 7,
  &(vtc_S19831C11[0]), // expected_vtbl_contents
  &(vtt_S19831C11[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI9S19831C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19831C11),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19831C11),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19831C3  : virtual S10180C138 , S19831C4 , virtual S19831C8 , S19831C10 , virtual S19831C11 {
  ~S19831C3(); // tgen
  S19831C3(); // tgen
};
//SIG(-1 S19831C3) C1{ VBC2{ m} BC3{ VBC2 VBC4{ m FL} BC5{ VBC6{ m} BC4}} VBC7{ VBC5 FC8{ m}} BC9{ BC7 Fp} VBC10{ VBC4 BC2 BC3}}


S19831C3 ::~S19831C3(){ note_dtor("S19831C3", this);} // tgen
S19831C3 ::S19831C3(){ note_ctor("S19831C3", this);} // tgen

static void Test_S19831C3()
{
  extern Class_Descriptor cd_S19831C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S19831C3, buf);
    S19831C3 *dp, &lv = *(dp=new (buf) S19831C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S19831C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19831C3)");
    /*is_ambiguous_... S19831C3::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*), 0, "S19831C3");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19831C4*), 0, "S19831C3");
    check_base_class_offset(lv, (S10180C138*)(S19831C4*)(S19831C11*), 0, "S19831C3");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C4*), ABISELECT(40,24), "S19831C3");
    /*is_ambiguous_... S19831C11::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C11*), ABISELECT(40,24), "S19831C3");
    /*is_ambiguous_... S19831C4::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C4*)(S19831C11*), ABISELECT(40,24), "S19831C3");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19831C6*)(S19831C4*), 0, "S19831C3");
    /*is_ambiguous_... S19831C3::S19831C6 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19831C6*), 0, "S19831C3");
    check_base_class_offset(lv, (S10180C133*)(S19831C6*)(S19831C4*)(S19831C11*), 0, "S19831C3");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C6*)(S19831C4*), ABISELECT(8,4), "S19831C3");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S19831C6*)(S19831C4*), 0, "S19831C3");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S19831C4*), 0, "S19831C3");
    /*is_ambiguous_... S19831C3::S19831C6 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C6*), ABISELECT(72,44), "S19831C3");
    /*is_ambiguous_... S19831C3::S19831C8 */ AMB_check_base_class_offset(lv, (S19831C6*)(S19831C8*), ABISELECT(64,40), "S19831C3");
    check_base_class_offset(lv, (S19831C6*)(S19831C8*)(S19831C10*), ABISELECT(64,40), "S19831C3");
    /*is_ambiguous_... S19831C3::S19831C8 */ AMB_check_base_class_offset(lv, (S19831C8*), ABISELECT(48,32), "S19831C3");
    check_base_class_offset(lv, (S19831C8*)(S19831C10*), ABISELECT(16,12), "S19831C3");
    check_base_class_offset(lv, (S19831C10*), ABISELECT(16,12), "S19831C3");
    /*is_ambiguous_... S19831C11::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19831C11*), ABISELECT(80,52), "S19831C3");
    check_base_class_offset(lv, (S10180C93*)(S19831C6*)(S19831C4*)(S19831C11*), ABISELECT(88,56), "S19831C3");
    check_base_class_offset(lv, (S19831C6*)(S19831C4*)(S19831C11*), ABISELECT(80,52), "S19831C3");
    check_base_class_offset(lv, (S19831C4*)(S19831C11*), ABISELECT(80,52), "S19831C3");
    check_base_class_offset(lv, (S19831C11*), ABISELECT(80,52), "S19831C3");
    test_class_info(&lv, &cd_S19831C3);
    dp->~S19831C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19831C3(Test_S19831C3, "S19831C3", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN8S19831C3C1Ev();
extern void _ZN8S19831C3D1Ev();
Name_Map name_map_S19831C3[] = {
  NSPAIR(_ZN8S19831C3C1Ev),
  NSPAIR(_ZN8S19831C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
extern Class_Descriptor cd_S19831C4;
extern VTBL_ENTRY _ZTI8S19831C4[];
extern  VTBL_ENTRY _ZTV8S19831C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C4[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
extern Class_Descriptor cd_S19831C8;
extern VTBL_ENTRY _ZTI8S19831C8[];
extern  VTBL_ENTRY _ZTV8S19831C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C8[];
extern Class_Descriptor cd_S19831C8;
extern VTBL_ENTRY _ZTI8S19831C8[];
extern  VTBL_ENTRY _ZTV8S19831C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C8[];
extern Class_Descriptor cd_S19831C10;
extern VTBL_ENTRY _ZTI9S19831C10[];
extern  VTBL_ENTRY _ZTV9S19831C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19831C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
extern Class_Descriptor cd_S19831C4;
extern VTBL_ENTRY _ZTI8S19831C4[];
extern  VTBL_ENTRY _ZTV8S19831C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C4[];
extern Class_Descriptor cd_S19831C11;
extern VTBL_ENTRY _ZTI9S19831C11[];
extern  VTBL_ENTRY _ZTV9S19831C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19831C11[];
static Base_Class bases_S19831C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19831C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19831C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C93,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19831C6,    ABISELECT(64,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19831C8,    ABISELECT(48,32), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19831C8,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19831C10,    ABISELECT(16,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C138,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S19831C6,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19831C4,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19831C11,    ABISELECT(80,52), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19831C3[];
static  VTBL_ENTRY vtc_S19831C3[] = {
  ABISELECT(80,52),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(40,24),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C3[0]),
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19831C3[0]),
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19831C3[0]),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19831C3[0]),
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19831C3[0]),
};
extern VTBL_ENTRY _ZTV8S19831C3[];
static  VTBL_ENTRY _tg__ZTV8S19831C4__8S19831C3[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C68S19831C4__8S19831C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19831C10__8S19831C3[] = {
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19831C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C89S19831C10__A1__8S19831C3[] = {
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__8S19831C89S19831C10__A1__8S19831C3[] = {
  ABISELECT(-64,-40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__9S19831C10__8S19831C3[] = {
  ABISELECT(-64,-40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19831C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C8__8S19831C3[] = {
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__8S19831C8__8S19831C3[] = {
  ABISELECT(-64,-40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__A1__8S19831C3[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19831C11__8S19831C3[] = {
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19831C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C49S19831C11__A1__8S19831C3[] = {
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C68S19831C49S19831C11__A2__8S19831C3[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTT_ENTRY vtt_S19831C3[] = {
  {&(_ZTV8S19831C3[8]),  8,24},
  {&(_tg__ZTV8S19831C4__8S19831C3[5]),  5,5},
  {&(_tg__ZTV8S19831C68S19831C4__8S19831C3[3]),  3,3},
  {&(_tg__ZTV9S19831C10__8S19831C3[4]),  4,4},
  {&(_tg__ZTV8S19831C89S19831C10__A1__8S19831C3[4]),  4,4},
  {&(_tg__ZTV8S19831C6__8S19831C89S19831C10__A1__8S19831C3[3]),  3,3},
  {&(_tg__ZTV8S19831C6__9S19831C10__8S19831C3[3]),  3,3},
  {&(_ZTV8S19831C3[16]),  16,24},
  {&(_ZTV8S19831C3[19]),  19,24},
  {&(_ZTV8S19831C3[12]),  12,24},
  {&(_ZTV8S19831C3[24]),  24,24},
  {&(_tg__ZTV8S19831C8__8S19831C3[4]),  4,4},
  {&(_tg__ZTV8S19831C6__8S19831C8__8S19831C3[3]),  3,3},
  {&(_tg__ZTV8S19831C6__A1__8S19831C3[3]),  3,3},
  {&(_tg__ZTV9S19831C11__8S19831C3[5]),  5,5},
  {&(_tg__ZTV8S19831C49S19831C11__A1__8S19831C3[5]),  5,5},
  {&(_tg__ZTV8S19831C68S19831C49S19831C11__A2__8S19831C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19831C3[];
extern  VTBL_ENTRY _ZTV8S19831C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C3[];
Class_Descriptor cd_S19831C3 = {  "S19831C3", // class name
  bases_S19831C3, 16,
  &(vtc_S19831C3[0]), // expected_vtbl_contents
  &(vtt_S19831C3[0]), // expected_vtt_contents
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI8S19831C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19831C3),24, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19831C3),17, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19831C12  : virtual S10180C93 , S19831C8 , virtual S10180C20 {
  ~S19831C12(); // tgen
  S19831C12(); // tgen
};
//SIG(-1 S19831C12) C1{ VBC2{ m FL} BC3{ VBC4{ VBC5{ m} BC2} FC6{ m}} VBC6}


S19831C12 ::~S19831C12(){ note_dtor("S19831C12", this);} // tgen
S19831C12 ::S19831C12(){ note_ctor("S19831C12", this);} // tgen

static void Test_S19831C12()
{
  extern Class_Descriptor cd_S19831C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S19831C12, buf);
    S19831C12 *dp, &lv = *(dp=new (buf) S19831C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S19831C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19831C12)");
    /*is_ambiguous_... S19831C12::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,8), "S19831C12");
    check_base_class_offset(lv, (S10180C133*)(S19831C6*), 0, "S19831C12");
    check_base_class_offset(lv, (S10180C93*)(S19831C6*), ABISELECT(32,20), "S19831C12");
    check_base_class_offset(lv, (S19831C6*)(S19831C8*), ABISELECT(24,16), "S19831C12");
    check_base_class_offset(lv, (S19831C8*), 0, "S19831C12");
    check_base_class_offset(lv, (S10180C20*), 0, "S19831C12");
    test_class_info(&lv, &cd_S19831C12);
    dp->~S19831C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19831C12(Test_S19831C12, "S19831C12", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN9S19831C12C1Ev();
extern void _ZN9S19831C12D1Ev();
Name_Map name_map_S19831C12[] = {
  NSPAIR(_ZN9S19831C12C1Ev),
  NSPAIR(_ZN9S19831C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
extern Class_Descriptor cd_S19831C8;
extern VTBL_ENTRY _ZTI8S19831C8[];
extern  VTBL_ENTRY _ZTV8S19831C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C8[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
static Base_Class bases_S19831C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C93,    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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19831C6,    ABISELECT(24,16), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19831C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19831C12[];
static  VTBL_ENTRY vtc_S19831C12[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19831C12[0]),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19831C12[0]),
};
extern VTBL_ENTRY _ZTV9S19831C12[];
static  VTBL_ENTRY _tg__ZTV8S19831C8__9S19831C12[] = {
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__8S19831C8__9S19831C12[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__9S19831C12[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTT_ENTRY vtt_S19831C12[] = {
  {&(_ZTV9S19831C12[6]),  6,9},
  {&(_tg__ZTV8S19831C8__9S19831C12[4]),  4,4},
  {&(_tg__ZTV8S19831C6__8S19831C8__9S19831C12[3]),  3,3},
  {&(_ZTV9S19831C12[9]),  9,9},
  {&(_tg__ZTV8S19831C6__9S19831C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19831C12[];
extern  VTBL_ENTRY _ZTV9S19831C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19831C12[];
Class_Descriptor cd_S19831C12 = {  "S19831C12", // class name
  bases_S19831C12, 6,
  &(vtc_S19831C12[0]), // expected_vtbl_contents
  &(vtt_S19831C12[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI9S19831C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19831C12),9, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19831C12),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19831C1  : virtual S10180C138 , S19831C3 , virtual S19831C12 {
  ~S19831C1(); // tgen
  S19831C1(); // tgen
};
//SIG(1 S19831C1) C1{ VBC2{ m} BC3{ VBC2 BC4{ VBC2 VBC5{ m FL} BC6{ VBC7{ m} BC5}} VBC8{ VBC6 FC9{ m}} BC10{ BC8 Fp} VBC11{ VBC5 BC2 BC4}} VBC12{ VBC5 BC8 VBC9}}


S19831C1 ::~S19831C1(){ note_dtor("S19831C1", this);} // tgen
S19831C1 ::S19831C1(){ note_ctor("S19831C1", this);} // tgen

static void Test_S19831C1()
{
  extern Class_Descriptor cd_S19831C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S19831C1, buf);
    S19831C1 *dp, &lv = *(dp=new (buf) S19831C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S19831C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19831C1)");
    /*is_ambiguous_... S19831C1::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*), 0, "S19831C1");
    /*is_ambiguous_... S19831C3::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19831C3*), 0, "S19831C1");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19831C4*)(S19831C3*), 0, "S19831C1");
    check_base_class_offset(lv, (S10180C138*)(S19831C4*)(S19831C11*), 0, "S19831C1");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C4*)(S19831C3*), ABISELECT(40,24), "S19831C1");
    /*is_ambiguous_... S19831C11::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C11*), ABISELECT(40,24), "S19831C1");
    /*is_ambiguous_... S19831C4::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C4*)(S19831C11*), ABISELECT(40,24), "S19831C1");
    /*is_ambiguous_... S19831C12::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C12*), ABISELECT(40,24), "S19831C1");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19831C6*)(S19831C4*)(S19831C3*), 0, "S19831C1");
    /*is_ambiguous_... S19831C1::S19831C6 */ AMB_check_base_class_offset(lv, (S10180C133*)(S19831C6*), 0, "S19831C1");
    check_base_class_offset(lv, (S10180C133*)(S19831C6*)(S19831C4*)(S19831C11*), 0, "S19831C1");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C6*)(S19831C4*)(S19831C3*), ABISELECT(8,4), "S19831C1");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S19831C6*)(S19831C4*)(S19831C3*), 0, "S19831C1");
    /*is_ambiguous_... S19831C3::S19831C4 */ AMB_check_base_class_offset(lv, (S19831C4*)(S19831C3*), 0, "S19831C1");
    /*is_ambiguous_... S19831C1::S19831C6 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19831C6*), ABISELECT(72,44), "S19831C1");
    /*is_ambiguous_... S19831C1::S19831C8 */ AMB_check_base_class_offset(lv, (S19831C6*)(S19831C8*), ABISELECT(64,40), "S19831C1");
    check_base_class_offset(lv, (S19831C6*)(S19831C8*)(S19831C10*)(S19831C3*), ABISELECT(64,40), "S19831C1");
    check_base_class_offset(lv, (S19831C6*)(S19831C8*)(S19831C12*), ABISELECT(64,40), "S19831C1");
    /*is_ambiguous_... S19831C3::S19831C8 */ AMB_check_base_class_offset(lv, (S19831C8*)(S19831C3*), ABISELECT(48,32), "S19831C1");
    check_base_class_offset(lv, (S19831C8*)(S19831C10*)(S19831C3*), ABISELECT(16,12), "S19831C1");
    check_base_class_offset(lv, (S19831C10*)(S19831C3*), ABISELECT(16,12), "S19831C1");
    /*is_ambiguous_... S19831C11::S10180C138 */ AMB_check_base_class_offset(lv, (S10180C138*)(S19831C11*), ABISELECT(80,52), "S19831C1");
    check_base_class_offset(lv, (S10180C93*)(S19831C6*)(S19831C4*)(S19831C11*), ABISELECT(88,56), "S19831C1");
    check_base_class_offset(lv, (S19831C6*)(S19831C4*)(S19831C11*), ABISELECT(80,52), "S19831C1");
    check_base_class_offset(lv, (S19831C4*)(S19831C11*), ABISELECT(80,52), "S19831C1");
    check_base_class_offset(lv, (S19831C11*)(S19831C3*), ABISELECT(80,52), "S19831C1");
    check_base_class_offset(lv, (S19831C3*), 0, "S19831C1");
    check_base_class_offset(lv, (S19831C8*)(S19831C12*), ABISELECT(96,64), "S19831C1");
    check_base_class_offset(lv, (S10180C20*)(S19831C12*), 0, "S19831C1");
    check_base_class_offset(lv, (S19831C12*), ABISELECT(96,64), "S19831C1");
    test_class_info(&lv, &cd_S19831C1);
    dp->~S19831C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19831C1(Test_S19831C1, "S19831C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN8S19831C1C1Ev();
extern void _ZN8S19831C1D1Ev();
Name_Map name_map_S19831C1[] = {
  NSPAIR(_ZN8S19831C1C1Ev),
  NSPAIR(_ZN8S19831C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
extern Class_Descriptor cd_S19831C4;
extern VTBL_ENTRY _ZTI8S19831C4[];
extern  VTBL_ENTRY _ZTV8S19831C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C4[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
extern Class_Descriptor cd_S19831C8;
extern VTBL_ENTRY _ZTI8S19831C8[];
extern  VTBL_ENTRY _ZTV8S19831C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C8[];
extern Class_Descriptor cd_S19831C8;
extern VTBL_ENTRY _ZTI8S19831C8[];
extern  VTBL_ENTRY _ZTV8S19831C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C8[];
extern Class_Descriptor cd_S19831C10;
extern VTBL_ENTRY _ZTI9S19831C10[];
extern  VTBL_ENTRY _ZTV9S19831C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19831C10[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19831C6;
extern VTBL_ENTRY _ZTI8S19831C6[];
extern  VTBL_ENTRY _ZTV8S19831C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C6[];
extern Class_Descriptor cd_S19831C4;
extern VTBL_ENTRY _ZTI8S19831C4[];
extern  VTBL_ENTRY _ZTV8S19831C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C4[];
extern Class_Descriptor cd_S19831C11;
extern VTBL_ENTRY _ZTI9S19831C11[];
extern  VTBL_ENTRY _ZTV9S19831C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19831C11[];
extern Class_Descriptor cd_S19831C3;
extern VTBL_ENTRY _ZTI8S19831C3[];
extern  VTBL_ENTRY _ZTV8S19831C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C3[];
extern Class_Descriptor cd_S19831C8;
extern VTBL_ENTRY _ZTI8S19831C8[];
extern  VTBL_ENTRY _ZTV8S19831C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C8[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S19831C12;
extern VTBL_ENTRY _ZTI9S19831C12[];
extern  VTBL_ENTRY _ZTV9S19831C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19831C12[];
static Base_Class bases_S19831C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19831C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19831C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19831C6,    ABISELECT(64,40), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19831C8,    ABISELECT(48,32), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19831C8,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19831C10,    ABISELECT(16,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S10180C138,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S10180C93,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S19831C6,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19831C4,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19831C11,    ABISELECT(80,52), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19831C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19831C8,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 1},
  {&cd_S19831C12,    ABISELECT(96,64), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19831C1[];
static  VTBL_ENTRY vtc_S19831C1[] = {
  0,
  ABISELECT(96,64),
  ABISELECT(80,52),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(40,24),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C1[0]),
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19831C1[0]),
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19831C1[0]),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19831C1[0]),
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19831C1[0]),
  ABISELECT(-96,-64),
  ABISELECT(-56,-40),
  ABISELECT(-96,-64),
  ABISELECT(-32,-24),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S19831C1[0]),
};
extern VTBL_ENTRY _ZTV8S19831C1[];
static  VTBL_ENTRY _tg__ZTV8S19831C3__8S19831C1[] = {
  ABISELECT(80,52),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(40,24),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C48S19831C3__8S19831C1[] = {
  ABISELECT(40,24),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C68S19831C48S19831C3__8S19831C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19831C108S19831C3__8S19831C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19831C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C89S19831C108S19831C3__A1__8S19831C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__8S19831C89S19831C108S19831C3__A1__8S19831C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__9S19831C108S19831C3__8S19831C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19831C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C8__8S19831C3__8S19831C1[] = {
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19831C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__A1__8S19831C3__8S19831C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19831C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19831C10__8S19831C3__8S19831C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(48,28),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19831C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19831C11__8S19831C3__8S19831C1[] = {
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19831C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C8__8S19831C1[] = {
  ABISELECT(-48,-32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__8S19831C8__8S19831C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__A1__8S19831C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19831C11__8S19831C1[] = {
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19831C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C49S19831C11__A1__8S19831C1[] = {
  ABISELECT(-40,-28),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C68S19831C49S19831C11__A2__8S19831C1[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19831C12__8S19831C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(-56,-40),
  ABISELECT(-96,-64),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19831C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C89S19831C12__A2__8S19831C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__8S19831C89S19831C12__A2__8S19831C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S19831C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19831C6__9S19831C12__8S19831C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI9S19831C12[0]),
};
static  VTT_ENTRY vtt_S19831C1[] = {
  {&(_ZTV8S19831C1[10]),  10,32},
  {&(_tg__ZTV8S19831C3__8S19831C1[8]),  8,8},
  {&(_tg__ZTV8S19831C48S19831C3__8S19831C1[5]),  5,5},
  {&(_tg__ZTV8S19831C68S19831C48S19831C3__8S19831C1[3]),  3,3},
  {&(_tg__ZTV9S19831C108S19831C3__8S19831C1[4]),  4,4},
  {&(_tg__ZTV8S19831C89S19831C108S19831C3__A1__8S19831C1[4]),  4,4},
  {&(_tg__ZTV8S19831C6__8S19831C89S19831C108S19831C3__A1__8S19831C1[3]),  3,3},
  {&(_tg__ZTV8S19831C6__9S19831C108S19831C3__8S19831C1[3]),  3,3},
  {&(_tg__ZTV8S19831C8__8S19831C3__8S19831C1[4]),  4,4},
  {&(_tg__ZTV8S19831C6__A1__8S19831C3__8S19831C1[3]),  3,3},
  {&(_tg__ZTV9S19831C10__8S19831C3__8S19831C1[4]),  4,4},
  {&(_tg__ZTV9S19831C11__8S19831C3__8S19831C1[5]),  5,5},
  {&(_ZTV8S19831C1[18]),  18,32},
  {&(_ZTV8S19831C1[21]),  21,32},
  {&(_ZTV8S19831C1[14]),  14,32},
  {&(_ZTV8S19831C1[26]),  26,32},
  {&(_ZTV8S19831C1[32]),  32,32},
  {&(_tg__ZTV8S19831C8__8S19831C1[4]),  4,4},
  {&(_tg__ZTV8S19831C6__8S19831C8__8S19831C1[3]),  3,3},
  {&(_tg__ZTV8S19831C6__A1__8S19831C1[3]),  3,3},
  {&(_tg__ZTV9S19831C11__8S19831C1[5]),  5,5},
  {&(_tg__ZTV8S19831C49S19831C11__A1__8S19831C1[5]),  5,5},
  {&(_tg__ZTV8S19831C68S19831C49S19831C11__A2__8S19831C1[3]),  3,3},
  {&(_tg__ZTV9S19831C12__8S19831C1[6]),  6,6},
  {&(_tg__ZTV8S19831C89S19831C12__A2__8S19831C1[4]),  4,4},
  {&(_tg__ZTV8S19831C6__8S19831C89S19831C12__A2__8S19831C1[3]),  3,3},
  {&(_tg__ZTV8S19831C6__9S19831C12__8S19831C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19831C1[];
extern  VTBL_ENTRY _ZTV8S19831C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19831C1[];
Class_Descriptor cd_S19831C1 = {  "S19831C1", // class name
  bases_S19831C1, 20,
  &(vtc_S19831C1[0]), // expected_vtbl_contents
  &(vtt_S19831C1[0]), // expected_vtt_contents
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI8S19831C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19831C1),32, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19831C1),27, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5974C4_nt  {
  void *s5974c4f0;
  int s5974c4f1;
  ::S10180C138 s5974c4f2;
  void  mf5974c4(); // _ZN10S5974C4_nt8mf5974c4Ev
};
//SIG(-1 S5974C4_nt) C1{ m Fp Fi FC2{ m}}


void  S5974C4_nt ::mf5974c4(){}

//skip512 S5974C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5974C2_nt  {
  void *s5974c2f0;
  ::S10180C12 s5974c2f1;
  ::S10180C13 s5974c2f2;
  ::S5974C4_nt s5974c2f3;
  int s5974c2f4[3];
  ::S10180C73 s5974c2f5;
  char s5974c2f6;
  int s5974c2f7;
  int s5974c2f8:8;
  int s5974c2f9:24;
  void  mf5974c2(); // _ZN10S5974C2_nt8mf5974c2Ev
};
//SIG(-1 S5974C2_nt) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC3 FC5{ m Fp Fi FC6{ m}} Fi[3] FC7{ m FC8{ m FL[2]}} Fc Fi Fi:8 Fi:24}


void  S5974C2_nt ::mf5974c2(){}

//skip512 S5974C2_nt

#else // __cplusplus

Class_Descriptor cd_S5974C2_nt = {  "S5974C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(112,84), // 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  S5974C1  : S5974C2_nt {
  ::S5973C10 s5974c1f0[3];
};
//SIG(1 S5974C1) C1{ BC2{ m Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC4 FC6{ m Fp Fi FC7{ m}} Fi[3] FC8{ m FC9{ m FL[2]}} Fc Fi Fi:8 Fi:24} FC10{ FC3 Fi}[3]}



static void Test_S5974C1()
{
  extern Class_Descriptor cd_S5974C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S5974C1, buf);
    S5974C1 &lv = *(new (buf) S5974C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S5974C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5974C1)");
    check_base_class_offset(lv, (S5974C2_nt*), 0, "S5974C1");
    check_field_offset(lv, s5974c1f0, ABISELECT(112,84), "S5974C1.s5974c1f0");
    test_class_info(&lv, &cd_S5974C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5974C1(Test_S5974C1, "S5974C1", ABISELECT(208,144));

#else // __cplusplus

extern Class_Descriptor cd_S5974C2_nt;
static Base_Class bases_S5974C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5974C2_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_S5974C1 = {  "S5974C1", // class name
  bases_S5974C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(208,144), // 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  S3729C2_nt  : S10180C178 {
  virtual  ~S3729C2_nt(); // _ZN10S3729C2_ntD1Ev
  virtual void  v4(); // _ZN10S3729C2_nt2v4Ev
  virtual void  v5(); // _ZN10S3729C2_nt2v5Ev
  virtual void  v6(); // _ZN10S3729C2_nt2v6Ev
  S3729C2_nt(); // tgen
};
//SIG(-1 S3729C2_nt) C1{ BC2{ vd m Fi} vd v1 v2 v3}


 S3729C2_nt ::~S3729C2_nt(){ note_dtor("S3729C2_nt", this);}
void  S3729C2_nt ::v4(){vfunc_called(this, "_ZN10S3729C2_nt2v4Ev");}
void  S3729C2_nt ::v5(){vfunc_called(this, "_ZN10S3729C2_nt2v5Ev");}
void  S3729C2_nt ::v6(){vfunc_called(this, "_ZN10S3729C2_nt2v6Ev");}
S3729C2_nt ::S3729C2_nt(){ note_ctor("S3729C2_nt", this);} // tgen

//skip512 S3729C2_nt

#else // __cplusplus

extern void _ZN10S3729C2_ntC1Ev();
extern void _ZN10S3729C2_ntD1Ev();
Name_Map name_map_S3729C2_nt[] = {
  NSPAIR(_ZN10S3729C2_ntC1Ev),
  NSPAIR(_ZN10S3729C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
static Base_Class bases_S3729C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S3729C2_nt[];
extern void _ZN10S3729C2_ntD1Ev();
extern void _ZN10S3729C2_ntD0Ev();
extern void _ZN10S3729C2_nt2v4Ev();
extern void _ZN10S3729C2_nt2v5Ev();
extern void _ZN10S3729C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S3729C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3729C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3729C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3729C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3729C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3729C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3729C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S3729C2_nt[];
VTBL_ENTRY *P__ZTI10S3729C2_nt = _ZTI10S3729C2_nt; 
extern  VTBL_ENTRY _ZTV10S3729C2_nt[];
Class_Descriptor cd_S3729C2_nt = {  "S3729C2_nt", // class name
  bases_S3729C2_nt, 1,
  &(vtc_S3729C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S3729C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3729C2_nt),7, //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  S3729C1  : S3729C2_nt {
  ::S10180C114 s3729c1f0;
  ::S7073C3 s3729c1f1;
  ::S10180C13 s3729c1f2;
  ::S10180C13 s3729c1f3;
  int s3729c1f4;
  virtual void  v1(); // _ZN7S3729C12v1Ev
  virtual void  v2(); // _ZN7S3729C12v2Ev
  virtual void  v3(); // _ZN7S3729C12v3Ev
  ~S3729C1(); // tgen
  S3729C1(); // tgen
};
//SIG(1 S3729C1) C1{ BC2{ BC3{ vd m Fi} vd v4 v5 v6} v1 v2 v3 FC4{ m Fp} FC5{ m FC6{ m Fp Fi FC7{ m}} Fi[2] FC6 Fp FC8{ m Fp[2]} FC8} FC6 FC6 Fi}


void  S3729C1 ::v1(){vfunc_called(this, "_ZN7S3729C12v1Ev");}
void  S3729C1 ::v2(){vfunc_called(this, "_ZN7S3729C12v2Ev");}
void  S3729C1 ::v3(){vfunc_called(this, "_ZN7S3729C12v3Ev");}
S3729C1 ::~S3729C1(){ note_dtor("S3729C1", this);} // tgen
S3729C1 ::S3729C1(){ note_ctor("S3729C1", this);} // tgen

static void Test_S3729C1()
{
  extern Class_Descriptor cd_S3729C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S3729C1, buf);
    S3729C1 *dp, &lv = *(dp=new (buf) S3729C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S3729C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3729C1)");
    check_base_class_offset(lv, (S10180C178*)(S3729C2_nt*), 0, "S3729C1");
    check_base_class_offset(lv, (S3729C2_nt*), 0, "S3729C1");
    check_field_offset(lv, s3729c1f0, ABISELECT(16,8), "S3729C1.s3729c1f0");
    check_field_offset(lv, s3729c1f1, ABISELECT(24,12), "S3729C1.s3729c1f1");
    check_field_offset(lv, s3729c1f2, ABISELECT(104,64), "S3729C1.s3729c1f2");
    check_field_offset(lv, s3729c1f3, ABISELECT(120,76), "S3729C1.s3729c1f3");
    check_field_offset(lv, s3729c1f4, ABISELECT(136,88), "S3729C1.s3729c1f4");
    test_class_info(&lv, &cd_S3729C1);
    dp->~S3729C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3729C1(Test_S3729C1, "S3729C1", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN7S3729C1C1Ev();
extern void _ZN7S3729C1D1Ev();
Name_Map name_map_S3729C1[] = {
  NSPAIR(_ZN7S3729C1C1Ev),
  NSPAIR(_ZN7S3729C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
extern Class_Descriptor cd_S3729C2_nt;
extern VTBL_ENTRY _ZTI10S3729C2_nt[];
extern  VTBL_ENTRY _ZTV10S3729C2_nt[];
static Base_Class bases_S3729C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3729C2_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 _ZTI7S3729C1[];
extern void _ZN7S3729C1D1Ev();
extern void _ZN7S3729C1D0Ev();
extern void _ZN10S3729C2_nt2v4Ev();
extern void _ZN10S3729C2_nt2v5Ev();
extern void _ZN10S3729C2_nt2v6Ev();
extern void _ZN7S3729C12v1Ev();
extern void _ZN7S3729C12v2Ev();
extern void _ZN7S3729C12v3Ev();
static  VTBL_ENTRY vtc_S3729C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3729C1[0]),
  (VTBL_ENTRY)&_ZN7S3729C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3729C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3729C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3729C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3729C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3729C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3729C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3729C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3729C1[];
extern  VTBL_ENTRY _ZTV7S3729C1[];
Class_Descriptor cd_S3729C1 = {  "S3729C1", // class name
  bases_S3729C1, 2,
  &(vtc_S3729C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI7S3729C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3729C1),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  S19301C3  {
  short s19301c3f0;
  ::S20563C7 s19301c3f1;
  virtual void  v2(); // _ZN8S19301C32v2Ev
  virtual void  v3(); // _ZN8S19301C32v3Ev
  virtual void  v4(); // _ZN8S19301C32v4Ev
  virtual void  v5(); // _ZN8S19301C32v5Ev
  ~S19301C3(); // tgen
  S19301C3(); // tgen
};
//SIG(-1 S19301C3) C1{ v1 v2 v3 v4 Fs FC2{ v5 v6 FL}}


void  S19301C3 ::v2(){vfunc_called(this, "_ZN8S19301C32v2Ev");}
void  S19301C3 ::v3(){vfunc_called(this, "_ZN8S19301C32v3Ev");}
void  S19301C3 ::v4(){vfunc_called(this, "_ZN8S19301C32v4Ev");}
void  S19301C3 ::v5(){vfunc_called(this, "_ZN8S19301C32v5Ev");}
S19301C3 ::~S19301C3(){ note_dtor("S19301C3", this);} // tgen
S19301C3 ::S19301C3(){ note_ctor("S19301C3", this);} // tgen

static void Test_S19301C3()
{
  extern Class_Descriptor cd_S19301C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19301C3, buf);
    S19301C3 *dp, &lv = *(dp=new (buf) S19301C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19301C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19301C3)");
    check_field_offset(lv, s19301c3f0, ABISELECT(8,4), "S19301C3.s19301c3f0");
    check_field_offset(lv, s19301c3f1, ABISELECT(16,8), "S19301C3.s19301c3f1");
    test_class_info(&lv, &cd_S19301C3);
    dp->~S19301C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19301C3(Test_S19301C3, "S19301C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19301C3C1Ev();
extern void _ZN8S19301C3D1Ev();
Name_Map name_map_S19301C3[] = {
  NSPAIR(_ZN8S19301C3C1Ev),
  NSPAIR(_ZN8S19301C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19301C3[];
extern void _ZN8S19301C32v2Ev();
extern void _ZN8S19301C32v3Ev();
extern void _ZN8S19301C32v4Ev();
extern void _ZN8S19301C32v5Ev();
static  VTBL_ENTRY vtc_S19301C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19301C3[0]),
  (VTBL_ENTRY)&_ZN8S19301C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v5Ev,
};
extern VTBL_ENTRY _ZTI8S19301C3[];
extern  VTBL_ENTRY _ZTV8S19301C3[];
Class_Descriptor cd_S19301C3 = {  "S19301C3", // class name
  0,0,//no base classes
  &(vtc_S19301C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19301C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19301C3),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  S19301C2  : S19301C3 {
  void *s19301c2f0[5];
  virtual void  v6(); // _ZN8S19301C22v6Ev
  virtual void  v7(); // _ZN8S19301C22v7Ev
  virtual void  v8(); // _ZN8S19301C22v8Ev
  ~S19301C2(); // tgen
  S19301C2(); // tgen
};
//SIG(-1 S19301C2) C1{ BC2{ v4 v5 v6 v7 Fs FC3{ v8 v9 FL}} v1 v2 v3 Fp[5]}


void  S19301C2 ::v6(){vfunc_called(this, "_ZN8S19301C22v6Ev");}
void  S19301C2 ::v7(){vfunc_called(this, "_ZN8S19301C22v7Ev");}
void  S19301C2 ::v8(){vfunc_called(this, "_ZN8S19301C22v8Ev");}
S19301C2 ::~S19301C2(){ note_dtor("S19301C2", this);} // tgen
S19301C2 ::S19301C2(){ note_ctor("S19301C2", this);} // tgen

static void Test_S19301C2()
{
  extern Class_Descriptor cd_S19301C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S19301C2, buf);
    S19301C2 *dp, &lv = *(dp=new (buf) S19301C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S19301C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19301C2)");
    check_base_class_offset(lv, (S19301C3*), 0, "S19301C2");
    check_field_offset(lv, s19301c2f0, ABISELECT(32,20), "S19301C2.s19301c2f0");
    test_class_info(&lv, &cd_S19301C2);
    dp->~S19301C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19301C2(Test_S19301C2, "S19301C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S19301C2C1Ev();
extern void _ZN8S19301C2D1Ev();
Name_Map name_map_S19301C2[] = {
  NSPAIR(_ZN8S19301C2C1Ev),
  NSPAIR(_ZN8S19301C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19301C3;
extern VTBL_ENTRY _ZTI8S19301C3[];
extern  VTBL_ENTRY _ZTV8S19301C3[];
static Base_Class bases_S19301C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19301C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19301C2[];
extern void _ZN8S19301C32v2Ev();
extern void _ZN8S19301C32v3Ev();
extern void _ZN8S19301C32v4Ev();
extern void _ZN8S19301C32v5Ev();
extern void _ZN8S19301C22v6Ev();
extern void _ZN8S19301C22v7Ev();
extern void _ZN8S19301C22v8Ev();
static  VTBL_ENTRY vtc_S19301C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19301C2[0]),
  (VTBL_ENTRY)&_ZN8S19301C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v8Ev,
};
extern VTBL_ENTRY _ZTI8S19301C2[];
extern  VTBL_ENTRY _ZTV8S19301C2[];
Class_Descriptor cd_S19301C2 = {  "S19301C2", // class name
  bases_S19301C2, 1,
  &(vtc_S19301C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S19301C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19301C2),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  S19301C5  : virtual S19301C2 , virtual S19301C3 {
  virtual  ~S19301C5(); // _ZN8S19301C5D2Ev
  virtual void  v9(); // _ZN8S19301C52v9Ev
  virtual void  v10(); // _ZN8S19301C53v10Ev
  virtual void  v11(); // _ZN8S19301C53v11Ev
  virtual void  v12(); // _ZN8S19301C53v12Ev
  virtual void  v13(); // _ZN8S19301C53v13Ev
  virtual void  v14(); // _ZN8S19301C53v14Ev
  virtual void  v15(); // _ZN8S19301C53v15Ev
  virtual void  v16(); // _ZN8S19301C53v16Ev
  S19301C5(); // tgen
};
//SIG(-1 S19301C5) C1{ VBC2{ BC3{ v9 v10 v11 v12 Fs FC4{ v16 v17 FL}} v13 v14 v15 Fp[5]} VBC3 vd v1 v2 v3 v4 v5 v6 v7 v8}


 S19301C5 ::~S19301C5(){ note_dtor("S19301C5", this);}
void  S19301C5 ::v9(){vfunc_called(this, "_ZN8S19301C52v9Ev");}
void  S19301C5 ::v10(){vfunc_called(this, "_ZN8S19301C53v10Ev");}
void  S19301C5 ::v11(){vfunc_called(this, "_ZN8S19301C53v11Ev");}
void  S19301C5 ::v12(){vfunc_called(this, "_ZN8S19301C53v12Ev");}
void  S19301C5 ::v13(){vfunc_called(this, "_ZN8S19301C53v13Ev");}
void  S19301C5 ::v14(){vfunc_called(this, "_ZN8S19301C53v14Ev");}
void  S19301C5 ::v15(){vfunc_called(this, "_ZN8S19301C53v15Ev");}
void  S19301C5 ::v16(){vfunc_called(this, "_ZN8S19301C53v16Ev");}
S19301C5 ::S19301C5(){ note_ctor("S19301C5", this);} // tgen

static void Test_S19301C5()
{
  extern Class_Descriptor cd_S19301C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S19301C5, buf);
    S19301C5 *dp, &lv = *(dp=new (buf) S19301C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S19301C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19301C5)");
    check_base_class_offset(lv, (S19301C3*)(S19301C2*), ABISELECT(8,4), "S19301C5");
    check_base_class_offset(lv, (S19301C2*), ABISELECT(8,4), "S19301C5");
    /*is_ambiguous_... S19301C5::S19301C3 */ AMB_check_base_class_offset(lv, (S19301C3*), ABISELECT(80,44), "S19301C5");
    test_class_info(&lv, &cd_S19301C5);
    dp->~S19301C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19301C5(Test_S19301C5, "S19301C5", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S19301C5C1Ev();
extern void _ZN8S19301C5D2Ev();
Name_Map name_map_S19301C5[] = {
  NSPAIR(_ZN8S19301C5C1Ev),
  NSPAIR(_ZN8S19301C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19301C3;
extern VTBL_ENTRY _ZTI8S19301C3[];
extern  VTBL_ENTRY _ZTV8S19301C3[];
extern Class_Descriptor cd_S19301C2;
extern VTBL_ENTRY _ZTI8S19301C2[];
extern  VTBL_ENTRY _ZTV8S19301C2[];
extern Class_Descriptor cd_S19301C3;
extern VTBL_ENTRY _ZTI8S19301C3[];
extern  VTBL_ENTRY _ZTV8S19301C3[];
static Base_Class bases_S19301C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19301C3,    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
  0, 0},
  {&cd_S19301C2,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19301C3,    ABISELECT(80,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19301C5[];
extern void _ZN8S19301C5D1Ev();
extern void _ZN8S19301C5D0Ev();
extern void _ZN8S19301C52v9Ev();
extern void _ZN8S19301C53v10Ev();
extern void _ZN8S19301C53v11Ev();
extern void _ZN8S19301C53v12Ev();
extern void _ZN8S19301C53v13Ev();
extern void _ZN8S19301C53v14Ev();
extern void _ZN8S19301C53v15Ev();
extern void _ZN8S19301C53v16Ev();
extern void _ZN8S19301C32v2Ev();
extern void _ZN8S19301C32v3Ev();
extern void _ZN8S19301C32v4Ev();
extern void _ZN8S19301C32v5Ev();
extern void _ZN8S19301C22v6Ev();
extern void _ZN8S19301C22v7Ev();
extern void _ZN8S19301C22v8Ev();
extern void _ZN8S19301C32v2Ev();
extern void _ZN8S19301C32v3Ev();
extern void _ZN8S19301C32v4Ev();
extern void _ZN8S19301C32v5Ev();
static  VTBL_ENTRY vtc_S19301C5[] = {
  ABISELECT(80,44),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19301C5[0]),
  (VTBL_ENTRY)&_ZN8S19301C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19301C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19301C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19301C5[0]),
  (VTBL_ENTRY)&_ZN8S19301C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19301C5[0]),
  (VTBL_ENTRY)&_ZN8S19301C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v5Ev,
};
extern VTBL_ENTRY _ZTV8S19301C5[];
static  VTT_ENTRY vtt_S19301C5[] = {
  {&(_ZTV8S19301C5[4]),  4,40},
  {&(_ZTV8S19301C5[23]),  23,40},
  {&(_ZTV8S19301C5[36]),  36,40},
};
extern VTBL_ENTRY _ZTI8S19301C5[];
extern  VTBL_ENTRY _ZTV8S19301C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19301C5[];
Class_Descriptor cd_S19301C5 = {  "S19301C5", // class name
  bases_S19301C5, 3,
  &(vtc_S19301C5[0]), // expected_vtbl_contents
  &(vtt_S19301C5[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S19301C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19301C5),40, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19301C5),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19301C1  : virtual S19301C2 , virtual S19301C5 {
  virtual  ~S19301C1(); // _ZN8S19301C1D2Ev
  virtual void  v1(); // _ZN8S19301C12v1Ev
  S19301C1(); // tgen
};
//SIG(1 S19301C1) C1{ VBC2{ BC3{ v2 v3 v4 v5 Fs FC4{ v17 v18 FL}} v6 v7 v8 Fp[5]} VBC5{ VBC2 VBC3 vd v9 v10 v11 v12 v13 v14 v15 v16} vd v1}


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

static void Test_S19301C1()
{
  extern Class_Descriptor cd_S19301C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S19301C1, buf);
    S19301C1 *dp, &lv = *(dp=new (buf) S19301C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S19301C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19301C1)");
    check_base_class_offset(lv, (S19301C3*)(S19301C2*), ABISELECT(8,4), "S19301C1");
    check_base_class_offset(lv, (S19301C2*), ABISELECT(8,4), "S19301C1");
    check_base_class_offset(lv, (S19301C2*)(S19301C5*), ABISELECT(8,4), "S19301C1");
    /*is_ambiguous_... S19301C5::S19301C3 */ AMB_check_base_class_offset(lv, (S19301C3*)(S19301C5*), ABISELECT(80,44), "S19301C1");
    check_base_class_offset(lv, (S19301C5*), 0, "S19301C1");
    test_class_info(&lv, &cd_S19301C1);
    dp->~S19301C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19301C1(Test_S19301C1, "S19301C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S19301C1C1Ev();
extern void _ZN8S19301C1D2Ev();
Name_Map name_map_S19301C1[] = {
  NSPAIR(_ZN8S19301C1C1Ev),
  NSPAIR(_ZN8S19301C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19301C3;
extern VTBL_ENTRY _ZTI8S19301C3[];
extern  VTBL_ENTRY _ZTV8S19301C3[];
extern Class_Descriptor cd_S19301C2;
extern VTBL_ENTRY _ZTI8S19301C2[];
extern  VTBL_ENTRY _ZTV8S19301C2[];
extern Class_Descriptor cd_S19301C3;
extern VTBL_ENTRY _ZTI8S19301C3[];
extern  VTBL_ENTRY _ZTV8S19301C3[];
extern Class_Descriptor cd_S19301C5;
extern VTBL_ENTRY _ZTI8S19301C5[];
extern  VTBL_ENTRY _ZTV8S19301C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19301C5[];
static Base_Class bases_S19301C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19301C3,    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
  0, 0},
  {&cd_S19301C2,    ABISELECT(8,4), //bcp->offset
    25, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19301C3,    ABISELECT(80,44), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19301C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19301C1[];
extern void _ZN8S19301C1D1Ev();
extern void _ZN8S19301C1D0Ev();
extern void _ZN8S19301C52v9Ev();
extern void _ZN8S19301C53v10Ev();
extern void _ZN8S19301C53v11Ev();
extern void _ZN8S19301C53v12Ev();
extern void _ZN8S19301C53v13Ev();
extern void _ZN8S19301C53v14Ev();
extern void _ZN8S19301C53v15Ev();
extern void _ZN8S19301C53v16Ev();
extern void _ZN8S19301C12v1Ev();
extern void _ZN8S19301C32v2Ev();
extern void _ZN8S19301C32v3Ev();
extern void _ZN8S19301C32v4Ev();
extern void _ZN8S19301C32v5Ev();
extern void _ZN8S19301C22v6Ev();
extern void _ZN8S19301C22v7Ev();
extern void _ZN8S19301C22v8Ev();
extern void _ZN8S19301C32v2Ev();
extern void _ZN8S19301C32v3Ev();
extern void _ZN8S19301C32v4Ev();
extern void _ZN8S19301C32v5Ev();
static  VTBL_ENTRY vtc_S19301C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,44),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19301C1[0]),
  (VTBL_ENTRY)&_ZN8S19301C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19301C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19301C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19301C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19301C1[0]),
  (VTBL_ENTRY)&_ZN8S19301C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19301C1[0]),
  (VTBL_ENTRY)&_ZN8S19301C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v5Ev,
};
extern VTBL_ENTRY _ZTV8S19301C1[];
extern void _ZN8S19301C5D1Ev();
extern void _ZN8S19301C5D0Ev();
extern void _ZN8S19301C52v9Ev();
extern void _ZN8S19301C53v10Ev();
extern void _ZN8S19301C53v11Ev();
extern void _ZN8S19301C53v12Ev();
extern void _ZN8S19301C53v13Ev();
extern void _ZN8S19301C53v14Ev();
extern void _ZN8S19301C53v15Ev();
extern void _ZN8S19301C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19301C5__8S19301C1[] = {
  ABISELECT(80,44),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19301C5[0]),
  (VTBL_ENTRY)&_ZN8S19301C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19301C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19301C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19301C53v16Ev,
};
extern void _ZN8S19301C32v2Ev();
extern void _ZN8S19301C32v3Ev();
extern void _ZN8S19301C32v4Ev();
extern void _ZN8S19301C32v5Ev();
extern void _ZN8S19301C22v6Ev();
extern void _ZN8S19301C22v7Ev();
extern void _ZN8S19301C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19301C2__8S19301C5__8S19301C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19301C5[0]),
  (VTBL_ENTRY)&_ZN8S19301C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19301C22v8Ev,
};
extern void _ZN8S19301C32v2Ev();
extern void _ZN8S19301C32v3Ev();
extern void _ZN8S19301C32v4Ev();
extern void _ZN8S19301C32v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19301C3__A1__8S19301C5__8S19301C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19301C5[0]),
  (VTBL_ENTRY)&_ZN8S19301C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19301C32v5Ev,
};
static  VTT_ENTRY vtt_S19301C1[] = {
  {&(_ZTV8S19301C1[14]),  14,51},
  {&(_ZTV8S19301C1[34]),  34,51},
  {&(_ZTV8S19301C1[14]),  14,51},
  {&(_ZTV8S19301C1[47]),  47,51},
  {&(_tg__ZTV8S19301C5__8S19301C1[4]),  4,14},
  {&(_tg__ZTV8S19301C2__8S19301C5__8S19301C1[9]),  9,16},
  {&(_tg__ZTV8S19301C3__A1__8S19301C5__8S19301C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19301C1[];
extern  VTBL_ENTRY _ZTV8S19301C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19301C1[];
Class_Descriptor cd_S19301C1 = {  "S19301C1", // class name
  bases_S19301C1, 4,
  &(vtc_S19301C1[0]), // expected_vtbl_contents
  &(vtt_S19301C1[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S19301C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19301C1),51, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19301C1),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10163C2  {
  virtual  ~S10163C2(); // _ZN8S10163C2D1Ev
  virtual void  v7(); // _ZN8S10163C22v7Ev
  virtual void  v8(); // _ZN8S10163C22v8Ev
  virtual void  v9(); // _ZN8S10163C22v9Ev
  virtual void  v10(); // _ZN8S10163C23v10Ev
  virtual void  v11(); // _ZN8S10163C23v11Ev
  virtual void  v12(); // _ZN8S10163C23v12Ev
  S10163C2(); // tgen
};
//SIG(-1 S10163C2) C1{ vd v1 v2 v3 v4 v5 v6}


 S10163C2 ::~S10163C2(){ note_dtor("S10163C2", this);}
void  S10163C2 ::v7(){vfunc_called(this, "_ZN8S10163C22v7Ev");}
void  S10163C2 ::v8(){vfunc_called(this, "_ZN8S10163C22v8Ev");}
void  S10163C2 ::v9(){vfunc_called(this, "_ZN8S10163C22v9Ev");}
void  S10163C2 ::v10(){vfunc_called(this, "_ZN8S10163C23v10Ev");}
void  S10163C2 ::v11(){vfunc_called(this, "_ZN8S10163C23v11Ev");}
void  S10163C2 ::v12(){vfunc_called(this, "_ZN8S10163C23v12Ev");}
S10163C2 ::S10163C2(){ note_ctor("S10163C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10163C2C1Ev();
extern void _ZN8S10163C2D1Ev();
Name_Map name_map_S10163C2[] = {
  NSPAIR(_ZN8S10163C2C1Ev),
  NSPAIR(_ZN8S10163C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10163C2[];
extern void _ZN8S10163C2D1Ev();
extern void _ZN8S10163C2D0Ev();
extern void _ZN8S10163C22v7Ev();
extern void _ZN8S10163C22v8Ev();
extern void _ZN8S10163C22v9Ev();
extern void _ZN8S10163C23v10Ev();
extern void _ZN8S10163C23v11Ev();
extern void _ZN8S10163C23v12Ev();
static  VTBL_ENTRY vtc_S10163C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10163C2[0]),
  (VTBL_ENTRY)&_ZN8S10163C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10163C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10163C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10163C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10163C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10163C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10163C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10163C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10163C2[];
extern  VTBL_ENTRY _ZTV8S10163C2[];
Class_Descriptor cd_S10163C2 = {  "S10163C2", // class name
  0,0,//no base classes
  &(vtc_S10163C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10163C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10163C2),10, //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  S10163C1  : S10163C2 {
  void *s10163c1f0;
  ::S15696C5_nt s10163c1f1;
  int s10163c1f2;
  void *s10163c1f3[4];
  int s10163c1f4;
  char s10163c1f5;
  void *s10163c1f6[4];
  char s10163c1f7[3];
  void *s10163c1f8[9];
  char s10163c1f9;
  virtual  ~S10163C1(); // _ZN8S10163C1D1Ev
  virtual void  v1(); // _ZN8S10163C12v1Ev
  virtual void  v2(); // _ZN8S10163C12v2Ev
  virtual void  v3(); // _ZN8S10163C12v3Ev
  virtual void  v4(); // _ZN8S10163C12v4Ev
  virtual void  v5(); // _ZN8S10163C12v5Ev
  virtual void  v6(); // _ZN8S10163C12v6Ev
  S10163C1(); // tgen
};
//SIG(1 S10163C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 v6 Fp FC3{ m FC4{ FL[4]}} Fi Fp[4] Fi Fc Fp[4] Fc[3] Fp[9] Fc}


 S10163C1 ::~S10163C1(){ note_dtor("S10163C1", this);}
void  S10163C1 ::v1(){vfunc_called(this, "_ZN8S10163C12v1Ev");}
void  S10163C1 ::v2(){vfunc_called(this, "_ZN8S10163C12v2Ev");}
void  S10163C1 ::v3(){vfunc_called(this, "_ZN8S10163C12v3Ev");}
void  S10163C1 ::v4(){vfunc_called(this, "_ZN8S10163C12v4Ev");}
void  S10163C1 ::v5(){vfunc_called(this, "_ZN8S10163C12v5Ev");}
void  S10163C1 ::v6(){vfunc_called(this, "_ZN8S10163C12v6Ev");}
S10163C1 ::S10163C1(){ note_ctor("S10163C1", this);} // tgen

static void Test_S10163C1()
{
  extern Class_Descriptor cd_S10163C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,33)];
    init_test(&cd_S10163C1, buf);
    S10163C1 *dp, &lv = *(dp=new (buf) S10163C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,128), "sizeof(S10163C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10163C1)");
    check_base_class_offset(lv, (S10163C2*), 0, "S10163C1");
    check_field_offset(lv, s10163c1f0, ABISELECT(8,4), "S10163C1.s10163c1f0");
    check_field_offset(lv, s10163c1f1, ABISELECT(16,8), "S10163C1.s10163c1f1");
    check_field_offset(lv, s10163c1f2, ABISELECT(48,40), "S10163C1.s10163c1f2");
    check_field_offset(lv, s10163c1f3, ABISELECT(56,44), "S10163C1.s10163c1f3");
    check_field_offset(lv, s10163c1f4, ABISELECT(88,60), "S10163C1.s10163c1f4");
    check_field_offset(lv, s10163c1f5, ABISELECT(92,64), "S10163C1.s10163c1f5");
    check_field_offset(lv, s10163c1f6, ABISELECT(96,68), "S10163C1.s10163c1f6");
    check_field_offset(lv, s10163c1f7, ABISELECT(128,84), "S10163C1.s10163c1f7");
    check_field_offset(lv, s10163c1f8, ABISELECT(136,88), "S10163C1.s10163c1f8");
    check_field_offset(lv, s10163c1f9, ABISELECT(208,124), "S10163C1.s10163c1f9");
    test_class_info(&lv, &cd_S10163C1);
    dp->~S10163C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10163C1(Test_S10163C1, "S10163C1", ABISELECT(216,128));

#else // __cplusplus

extern void _ZN8S10163C1C1Ev();
extern void _ZN8S10163C1D1Ev();
Name_Map name_map_S10163C1[] = {
  NSPAIR(_ZN8S10163C1C1Ev),
  NSPAIR(_ZN8S10163C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10163C2;
extern VTBL_ENTRY _ZTI8S10163C2[];
extern  VTBL_ENTRY _ZTV8S10163C2[];
static Base_Class bases_S10163C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10163C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S10163C1[];
extern void _ZN8S10163C1D1Ev();
extern void _ZN8S10163C1D0Ev();
extern void _ZN8S10163C22v7Ev();
extern void _ZN8S10163C22v8Ev();
extern void _ZN8S10163C22v9Ev();
extern void _ZN8S10163C23v10Ev();
extern void _ZN8S10163C23v11Ev();
extern void _ZN8S10163C23v12Ev();
extern void _ZN8S10163C12v1Ev();
extern void _ZN8S10163C12v2Ev();
extern void _ZN8S10163C12v3Ev();
extern void _ZN8S10163C12v4Ev();
extern void _ZN8S10163C12v5Ev();
extern void _ZN8S10163C12v6Ev();
static  VTBL_ENTRY vtc_S10163C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10163C1[0]),
  (VTBL_ENTRY)&_ZN8S10163C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10163C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10163C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10163C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10163C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10163C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10163C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10163C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10163C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10163C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10163C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10163C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10163C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10163C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10163C1[];
extern  VTBL_ENTRY _ZTV8S10163C1[];
Class_Descriptor cd_S10163C1 = {  "S10163C1", // class name
  bases_S10163C1, 1,
  &(vtc_S10163C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,128), // object size
  NSPAIRA(_ZTI8S10163C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10163C1),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  S20519C4  {
  short s20519c4f0;
  ::S20563C7 s20519c4f1;
  virtual void  v2(); // _ZN8S20519C42v2Ev
  virtual void  v3(); // _ZN8S20519C42v3Ev
  virtual void  v4(); // _ZN8S20519C42v4Ev
  virtual void  v5(); // _ZN8S20519C42v5Ev
  ~S20519C4(); // tgen
  S20519C4(); // tgen
};
//SIG(-1 S20519C4) C1{ v1 v2 v3 v4 Fs FC2{ v5 v6 FL}}


void  S20519C4 ::v2(){vfunc_called(this, "_ZN8S20519C42v2Ev");}
void  S20519C4 ::v3(){vfunc_called(this, "_ZN8S20519C42v3Ev");}
void  S20519C4 ::v4(){vfunc_called(this, "_ZN8S20519C42v4Ev");}
void  S20519C4 ::v5(){vfunc_called(this, "_ZN8S20519C42v5Ev");}
S20519C4 ::~S20519C4(){ note_dtor("S20519C4", this);} // tgen
S20519C4 ::S20519C4(){ note_ctor("S20519C4", this);} // tgen

static void Test_S20519C4()
{
  extern Class_Descriptor cd_S20519C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20519C4, buf);
    S20519C4 *dp, &lv = *(dp=new (buf) S20519C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20519C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20519C4)");
    check_field_offset(lv, s20519c4f0, ABISELECT(8,4), "S20519C4.s20519c4f0");
    check_field_offset(lv, s20519c4f1, ABISELECT(16,8), "S20519C4.s20519c4f1");
    test_class_info(&lv, &cd_S20519C4);
    dp->~S20519C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20519C4(Test_S20519C4, "S20519C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20519C4C1Ev();
extern void _ZN8S20519C4D1Ev();
Name_Map name_map_S20519C4[] = {
  NSPAIR(_ZN8S20519C4C1Ev),
  NSPAIR(_ZN8S20519C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20519C4[];
extern void _ZN8S20519C42v2Ev();
extern void _ZN8S20519C42v3Ev();
extern void _ZN8S20519C42v4Ev();
extern void _ZN8S20519C42v5Ev();
static  VTBL_ENTRY vtc_S20519C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20519C4[0]),
  (VTBL_ENTRY)&_ZN8S20519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v5Ev,
};
extern VTBL_ENTRY _ZTI8S20519C4[];
extern  VTBL_ENTRY _ZTV8S20519C4[];
Class_Descriptor cd_S20519C4 = {  "S20519C4", // class name
  0,0,//no base classes
  &(vtc_S20519C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20519C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20519C4),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  S20519C3  : S20519C4 {
  void *s20519c3f0[5];
  virtual void  v6(); // _ZN8S20519C32v6Ev
  virtual void  v7(); // _ZN8S20519C32v7Ev
  virtual void  v8(); // _ZN8S20519C32v8Ev
  ~S20519C3(); // tgen
  S20519C3(); // tgen
};
//SIG(-1 S20519C3) C1{ BC2{ v4 v5 v6 v7 Fs FC3{ v8 v9 FL}} v1 v2 v3 Fp[5]}


void  S20519C3 ::v6(){vfunc_called(this, "_ZN8S20519C32v6Ev");}
void  S20519C3 ::v7(){vfunc_called(this, "_ZN8S20519C32v7Ev");}
void  S20519C3 ::v8(){vfunc_called(this, "_ZN8S20519C32v8Ev");}
S20519C3 ::~S20519C3(){ note_dtor("S20519C3", this);} // tgen
S20519C3 ::S20519C3(){ note_ctor("S20519C3", this);} // tgen

static void Test_S20519C3()
{
  extern Class_Descriptor cd_S20519C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S20519C3, buf);
    S20519C3 *dp, &lv = *(dp=new (buf) S20519C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S20519C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20519C3)");
    check_base_class_offset(lv, (S20519C4*), 0, "S20519C3");
    check_field_offset(lv, s20519c3f0, ABISELECT(32,20), "S20519C3.s20519c3f0");
    test_class_info(&lv, &cd_S20519C3);
    dp->~S20519C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20519C3(Test_S20519C3, "S20519C3", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S20519C3C1Ev();
extern void _ZN8S20519C3D1Ev();
Name_Map name_map_S20519C3[] = {
  NSPAIR(_ZN8S20519C3C1Ev),
  NSPAIR(_ZN8S20519C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20519C4;
extern VTBL_ENTRY _ZTI8S20519C4[];
extern  VTBL_ENTRY _ZTV8S20519C4[];
static Base_Class bases_S20519C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20519C3[];
extern void _ZN8S20519C42v2Ev();
extern void _ZN8S20519C42v3Ev();
extern void _ZN8S20519C42v4Ev();
extern void _ZN8S20519C42v5Ev();
extern void _ZN8S20519C32v6Ev();
extern void _ZN8S20519C32v7Ev();
extern void _ZN8S20519C32v8Ev();
static  VTBL_ENTRY vtc_S20519C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20519C3[0]),
  (VTBL_ENTRY)&_ZN8S20519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S20519C3[];
extern  VTBL_ENTRY _ZTV8S20519C3[];
Class_Descriptor cd_S20519C3 = {  "S20519C3", // class name
  bases_S20519C3, 1,
  &(vtc_S20519C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S20519C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20519C3),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  S20519C2  : virtual S20519C3 , virtual S20519C4 {
  virtual  ~S20519C2(); // _ZN8S20519C2D2Ev
  virtual void  v9(); // _ZN8S20519C22v9Ev
  virtual void  v10(); // _ZN8S20519C23v10Ev
  virtual void  v11(); // _ZN8S20519C23v11Ev
  virtual void  v12(); // _ZN8S20519C23v12Ev
  virtual void  v13(); // _ZN8S20519C23v13Ev
  virtual void  v14(); // _ZN8S20519C23v14Ev
  virtual void  v15(); // _ZN8S20519C23v15Ev
  virtual void  v16(); // _ZN8S20519C23v16Ev
  S20519C2(); // tgen
};
//SIG(-1 S20519C2) C1{ VBC2{ BC3{ v9 v10 v11 v12 Fs FC4{ v16 v17 FL}} v13 v14 v15 Fp[5]} VBC3 vd v1 v2 v3 v4 v5 v6 v7 v8}


 S20519C2 ::~S20519C2(){ note_dtor("S20519C2", this);}
void  S20519C2 ::v9(){vfunc_called(this, "_ZN8S20519C22v9Ev");}
void  S20519C2 ::v10(){vfunc_called(this, "_ZN8S20519C23v10Ev");}
void  S20519C2 ::v11(){vfunc_called(this, "_ZN8S20519C23v11Ev");}
void  S20519C2 ::v12(){vfunc_called(this, "_ZN8S20519C23v12Ev");}
void  S20519C2 ::v13(){vfunc_called(this, "_ZN8S20519C23v13Ev");}
void  S20519C2 ::v14(){vfunc_called(this, "_ZN8S20519C23v14Ev");}
void  S20519C2 ::v15(){vfunc_called(this, "_ZN8S20519C23v15Ev");}
void  S20519C2 ::v16(){vfunc_called(this, "_ZN8S20519C23v16Ev");}
S20519C2 ::S20519C2(){ note_ctor("S20519C2", this);} // tgen

static void Test_S20519C2()
{
  extern Class_Descriptor cd_S20519C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S20519C2, buf);
    S20519C2 *dp, &lv = *(dp=new (buf) S20519C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S20519C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20519C2)");
    check_base_class_offset(lv, (S20519C4*)(S20519C3*), ABISELECT(8,4), "S20519C2");
    check_base_class_offset(lv, (S20519C3*), ABISELECT(8,4), "S20519C2");
    /*is_ambiguous_... S20519C2::S20519C4 */ AMB_check_base_class_offset(lv, (S20519C4*), ABISELECT(80,44), "S20519C2");
    test_class_info(&lv, &cd_S20519C2);
    dp->~S20519C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20519C2(Test_S20519C2, "S20519C2", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S20519C2C1Ev();
extern void _ZN8S20519C2D2Ev();
Name_Map name_map_S20519C2[] = {
  NSPAIR(_ZN8S20519C2C1Ev),
  NSPAIR(_ZN8S20519C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20519C4;
extern VTBL_ENTRY _ZTI8S20519C4[];
extern  VTBL_ENTRY _ZTV8S20519C4[];
extern Class_Descriptor cd_S20519C3;
extern VTBL_ENTRY _ZTI8S20519C3[];
extern  VTBL_ENTRY _ZTV8S20519C3[];
extern Class_Descriptor cd_S20519C4;
extern VTBL_ENTRY _ZTI8S20519C4[];
extern  VTBL_ENTRY _ZTV8S20519C4[];
static Base_Class bases_S20519C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20519C4,    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
  0, 0},
  {&cd_S20519C3,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20519C4,    ABISELECT(80,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20519C2[];
extern void _ZN8S20519C2D1Ev();
extern void _ZN8S20519C2D0Ev();
extern void _ZN8S20519C22v9Ev();
extern void _ZN8S20519C23v10Ev();
extern void _ZN8S20519C23v11Ev();
extern void _ZN8S20519C23v12Ev();
extern void _ZN8S20519C23v13Ev();
extern void _ZN8S20519C23v14Ev();
extern void _ZN8S20519C23v15Ev();
extern void _ZN8S20519C23v16Ev();
extern void _ZN8S20519C42v2Ev();
extern void _ZN8S20519C42v3Ev();
extern void _ZN8S20519C42v4Ev();
extern void _ZN8S20519C42v5Ev();
extern void _ZN8S20519C32v6Ev();
extern void _ZN8S20519C32v7Ev();
extern void _ZN8S20519C32v8Ev();
extern void _ZN8S20519C42v2Ev();
extern void _ZN8S20519C42v3Ev();
extern void _ZN8S20519C42v4Ev();
extern void _ZN8S20519C42v5Ev();
static  VTBL_ENTRY vtc_S20519C2[] = {
  ABISELECT(80,44),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20519C2[0]),
  (VTBL_ENTRY)&_ZN8S20519C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20519C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20519C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20519C2[0]),
  (VTBL_ENTRY)&_ZN8S20519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20519C2[0]),
  (VTBL_ENTRY)&_ZN8S20519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v5Ev,
};
extern VTBL_ENTRY _ZTV8S20519C2[];
static  VTT_ENTRY vtt_S20519C2[] = {
  {&(_ZTV8S20519C2[4]),  4,40},
  {&(_ZTV8S20519C2[23]),  23,40},
  {&(_ZTV8S20519C2[36]),  36,40},
};
extern VTBL_ENTRY _ZTI8S20519C2[];
extern  VTBL_ENTRY _ZTV8S20519C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20519C2[];
Class_Descriptor cd_S20519C2 = {  "S20519C2", // class name
  bases_S20519C2, 3,
  &(vtc_S20519C2[0]), // expected_vtbl_contents
  &(vtt_S20519C2[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S20519C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20519C2),40, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20519C2),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20519C1  : virtual S20519C2 {
  virtual  ~S20519C1(); // _ZN8S20519C1D2Ev
  virtual void  v1(); // _ZN8S20519C12v1Ev
  S20519C1(); // tgen
};
//SIG(1 S20519C1) C1{ VBC2{ VBC3{ BC4{ v2 v3 v4 v5 Fs FC5{ v17 v18 FL}} v6 v7 v8 Fp[5]} VBC4 vd v9 v10 v11 v12 v13 v14 v15 v16} vd v1}


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

static void Test_S20519C1()
{
  extern Class_Descriptor cd_S20519C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S20519C1, buf);
    S20519C1 *dp, &lv = *(dp=new (buf) S20519C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S20519C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20519C1)");
    check_base_class_offset(lv, (S20519C4*)(S20519C3*), ABISELECT(8,4), "S20519C1");
    check_base_class_offset(lv, (S20519C3*)(S20519C2*), ABISELECT(8,4), "S20519C1");
    /*is_ambiguous_... S20519C2::S20519C4 */ AMB_check_base_class_offset(lv, (S20519C4*)(S20519C2*), ABISELECT(80,44), "S20519C1");
    check_base_class_offset(lv, (S20519C2*), 0, "S20519C1");
    test_class_info(&lv, &cd_S20519C1);
    dp->~S20519C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20519C1(Test_S20519C1, "S20519C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S20519C1C1Ev();
extern void _ZN8S20519C1D2Ev();
Name_Map name_map_S20519C1[] = {
  NSPAIR(_ZN8S20519C1C1Ev),
  NSPAIR(_ZN8S20519C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20519C4;
extern VTBL_ENTRY _ZTI8S20519C4[];
extern  VTBL_ENTRY _ZTV8S20519C4[];
extern Class_Descriptor cd_S20519C3;
extern VTBL_ENTRY _ZTI8S20519C3[];
extern  VTBL_ENTRY _ZTV8S20519C3[];
extern Class_Descriptor cd_S20519C4;
extern VTBL_ENTRY _ZTI8S20519C4[];
extern  VTBL_ENTRY _ZTV8S20519C4[];
extern Class_Descriptor cd_S20519C2;
extern VTBL_ENTRY _ZTI8S20519C2[];
extern  VTBL_ENTRY _ZTV8S20519C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20519C2[];
static Base_Class bases_S20519C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20519C4,    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
  0, 0},
  {&cd_S20519C3,    ABISELECT(8,4), //bcp->offset
    25, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20519C4,    ABISELECT(80,44), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20519C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20519C1[];
extern void _ZN8S20519C1D1Ev();
extern void _ZN8S20519C1D0Ev();
extern void _ZN8S20519C22v9Ev();
extern void _ZN8S20519C23v10Ev();
extern void _ZN8S20519C23v11Ev();
extern void _ZN8S20519C23v12Ev();
extern void _ZN8S20519C23v13Ev();
extern void _ZN8S20519C23v14Ev();
extern void _ZN8S20519C23v15Ev();
extern void _ZN8S20519C23v16Ev();
extern void _ZN8S20519C12v1Ev();
extern void _ZN8S20519C42v2Ev();
extern void _ZN8S20519C42v3Ev();
extern void _ZN8S20519C42v4Ev();
extern void _ZN8S20519C42v5Ev();
extern void _ZN8S20519C32v6Ev();
extern void _ZN8S20519C32v7Ev();
extern void _ZN8S20519C32v8Ev();
extern void _ZN8S20519C42v2Ev();
extern void _ZN8S20519C42v3Ev();
extern void _ZN8S20519C42v4Ev();
extern void _ZN8S20519C42v5Ev();
static  VTBL_ENTRY vtc_S20519C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,44),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20519C1[0]),
  (VTBL_ENTRY)&_ZN8S20519C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20519C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20519C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20519C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20519C1[0]),
  (VTBL_ENTRY)&_ZN8S20519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20519C1[0]),
  (VTBL_ENTRY)&_ZN8S20519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v5Ev,
};
extern VTBL_ENTRY _ZTV8S20519C1[];
extern void _ZN8S20519C2D1Ev();
extern void _ZN8S20519C2D0Ev();
extern void _ZN8S20519C22v9Ev();
extern void _ZN8S20519C23v10Ev();
extern void _ZN8S20519C23v11Ev();
extern void _ZN8S20519C23v12Ev();
extern void _ZN8S20519C23v13Ev();
extern void _ZN8S20519C23v14Ev();
extern void _ZN8S20519C23v15Ev();
extern void _ZN8S20519C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20519C2__8S20519C1[] = {
  ABISELECT(80,44),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20519C2[0]),
  (VTBL_ENTRY)&_ZN8S20519C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20519C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20519C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20519C23v16Ev,
};
extern void _ZN8S20519C42v2Ev();
extern void _ZN8S20519C42v3Ev();
extern void _ZN8S20519C42v4Ev();
extern void _ZN8S20519C42v5Ev();
extern void _ZN8S20519C32v6Ev();
extern void _ZN8S20519C32v7Ev();
extern void _ZN8S20519C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20519C3__8S20519C2__8S20519C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20519C2[0]),
  (VTBL_ENTRY)&_ZN8S20519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20519C32v8Ev,
};
extern void _ZN8S20519C42v2Ev();
extern void _ZN8S20519C42v3Ev();
extern void _ZN8S20519C42v4Ev();
extern void _ZN8S20519C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20519C4__A1__8S20519C2__8S20519C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20519C2[0]),
  (VTBL_ENTRY)&_ZN8S20519C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20519C42v5Ev,
};
static  VTT_ENTRY vtt_S20519C1[] = {
  {&(_ZTV8S20519C1[14]),  14,51},
  {&(_ZTV8S20519C1[14]),  14,51},
  {&(_ZTV8S20519C1[34]),  34,51},
  {&(_ZTV8S20519C1[47]),  47,51},
  {&(_tg__ZTV8S20519C2__8S20519C1[4]),  4,14},
  {&(_tg__ZTV8S20519C3__8S20519C2__8S20519C1[9]),  9,16},
  {&(_tg__ZTV8S20519C4__A1__8S20519C2__8S20519C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20519C1[];
extern  VTBL_ENTRY _ZTV8S20519C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20519C1[];
Class_Descriptor cd_S20519C1 = {  "S20519C1", // class name
  bases_S20519C1, 4,
  &(vtc_S20519C1[0]), // expected_vtbl_contents
  &(vtt_S20519C1[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S20519C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20519C1),51, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20519C1),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21525C4_nt  {
  int s21525c4f0;
  void *s21525c4f1[7];
  short s21525c4f2;
  char s21525c4f3[10];
};
//SIG(-1 S21525C4_nt) C1{ Fi Fp[7] Fs Fc[10]}



//skip512 S21525C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21525C5_nt  {
  ::S10180C13 s21525c5f0;
  ::S5974C4_nt s21525c5f1;
  void  mf21525c5(); // _ZN11S21525C5_nt9mf21525c5Ev
};
//SIG(-1 S21525C5_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC5{ m}}}


void  S21525C5_nt ::mf21525c5(){}

//skip512 S21525C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21525C3_nt  {
  ::S21525C4_nt s21525c3f0;
  void *s21525c3f1;
  char s21525c3f2[2];
  ::S21525C5_nt s21525c3f3;
  void  mf21525c3(); // _ZN11S21525C3_nt9mf21525c3Ev
  virtual  ~S21525C3_nt(); // _ZN11S21525C3_ntD1Ev
  S21525C3_nt(); // tgen
};
//SIG(-1 S21525C3_nt) C1{ vd m FC2{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC3{ m FC4{ m Fp Fi FC5{ m}} FC6{ m Fp Fi FC7{ m}}}}


void  S21525C3_nt ::mf21525c3(){}
 S21525C3_nt ::~S21525C3_nt(){ note_dtor("S21525C3_nt", this);}
S21525C3_nt ::S21525C3_nt(){ note_ctor("S21525C3_nt", this);} // tgen

//skip512 S21525C3_nt

#else // __cplusplus

extern void _ZN11S21525C3_ntC1Ev();
extern void _ZN11S21525C3_ntD1Ev();
Name_Map name_map_S21525C3_nt[] = {
  NSPAIR(_ZN11S21525C3_ntC1Ev),
  NSPAIR(_ZN11S21525C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S21525C3_nt[];
extern void _ZN11S21525C3_ntD1Ev();
extern void _ZN11S21525C3_ntD0Ev();
static  VTBL_ENTRY vtc_S21525C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S21525C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S21525C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S21525C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S21525C3_nt[];
VTBL_ENTRY *P__ZTI11S21525C3_nt = _ZTI11S21525C3_nt; 
extern  VTBL_ENTRY _ZTV11S21525C3_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21525C1  {
  ::S10180C114 s21525c1f0;
  ::S21525C3_nt s21525c1f1;
  void  mf21525c1(); // _ZN8S21525C19mf21525c1Ev
  virtual  ~S21525C1(); // _ZN8S21525C1D1Ev
  S21525C1(); // tgen
};
//SIG(1 S21525C1) C1{ vd m FC2{ m Fp} FC3{ vd m FC4{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC5{ m FC6{ m Fp Fi FC7{ m}} FC8{ m Fp Fi FC9{ m}}}}}


void  S21525C1 ::mf21525c1(){}
 S21525C1 ::~S21525C1(){ note_dtor("S21525C1", this);}
S21525C1 ::S21525C1(){ note_ctor("S21525C1", this);} // tgen

static void Test_S21525C1()
{
  extern Class_Descriptor cd_S21525C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S21525C1, buf);
    S21525C1 *dp, &lv = *(dp=new (buf) S21525C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S21525C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21525C1)");
    check_field_offset(lv, s21525c1f0, ABISELECT(8,4), "S21525C1.s21525c1f0");
    check_field_offset(lv, s21525c1f1, ABISELECT(16,8), "S21525C1.s21525c1f1");
    test_class_info(&lv, &cd_S21525C1);
    dp->~S21525C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21525C1(Test_S21525C1, "S21525C1", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN8S21525C1C1Ev();
extern void _ZN8S21525C1D1Ev();
Name_Map name_map_S21525C1[] = {
  NSPAIR(_ZN8S21525C1C1Ev),
  NSPAIR(_ZN8S21525C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21525C1[];
extern void _ZN8S21525C1D1Ev();
extern void _ZN8S21525C1D0Ev();
static  VTBL_ENTRY vtc_S21525C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21525C1[0]),
  (VTBL_ENTRY)&_ZN8S21525C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21525C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21525C1[];
extern  VTBL_ENTRY _ZTV8S21525C1[];
Class_Descriptor cd_S21525C1 = {  "S21525C1", // class name
  0,0,//no base classes
  &(vtc_S21525C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI8S21525C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21525C1),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  S20071C3  {
  void *s20071c3f0[2];
  virtual void  v7(); // _ZN8S20071C32v7Ev
  virtual void  v8(); // _ZN8S20071C32v8Ev
  virtual void  v9(); // _ZN8S20071C32v9Ev
  virtual void  v10(); // _ZN8S20071C33v10Ev
  virtual void  v11(); // _ZN8S20071C33v11Ev
  ~S20071C3(); // tgen
  S20071C3(); // tgen
};
//SIG(-1 S20071C3) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S20071C3 ::v7(){vfunc_called(this, "_ZN8S20071C32v7Ev");}
void  S20071C3 ::v8(){vfunc_called(this, "_ZN8S20071C32v8Ev");}
void  S20071C3 ::v9(){vfunc_called(this, "_ZN8S20071C32v9Ev");}
void  S20071C3 ::v10(){vfunc_called(this, "_ZN8S20071C33v10Ev");}
void  S20071C3 ::v11(){vfunc_called(this, "_ZN8S20071C33v11Ev");}
S20071C3 ::~S20071C3(){ note_dtor("S20071C3", this);} // tgen
S20071C3 ::S20071C3(){ note_ctor("S20071C3", this);} // tgen

static void Test_S20071C3()
{
  extern Class_Descriptor cd_S20071C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20071C3, buf);
    S20071C3 *dp, &lv = *(dp=new (buf) S20071C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20071C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20071C3)");
    check_field_offset(lv, s20071c3f0, ABISELECT(8,4), "S20071C3.s20071c3f0");
    test_class_info(&lv, &cd_S20071C3);
    dp->~S20071C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20071C3(Test_S20071C3, "S20071C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20071C3C1Ev();
extern void _ZN8S20071C3D1Ev();
Name_Map name_map_S20071C3[] = {
  NSPAIR(_ZN8S20071C3C1Ev),
  NSPAIR(_ZN8S20071C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20071C3[];
extern void _ZN8S20071C32v7Ev();
extern void _ZN8S20071C32v8Ev();
extern void _ZN8S20071C32v9Ev();
extern void _ZN8S20071C33v10Ev();
extern void _ZN8S20071C33v11Ev();
static  VTBL_ENTRY vtc_S20071C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20071C3[0]),
  (VTBL_ENTRY)&_ZN8S20071C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20071C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20071C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20071C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20071C33v11Ev,
};
extern VTBL_ENTRY _ZTI8S20071C3[];
extern  VTBL_ENTRY _ZTV8S20071C3[];
Class_Descriptor cd_S20071C3 = {  "S20071C3", // class name
  0,0,//no base classes
  &(vtc_S20071C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20071C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20071C3),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  S20071C2  {
  ::S20071C3 s20071c2f0;
  virtual  ~S20071C2(); // _ZN8S20071C2D1Ev
  virtual void  v2(); // _ZN8S20071C22v2Ev
  virtual void  v3(); // _ZN8S20071C22v3Ev
  virtual void  v4(); // _ZN8S20071C22v4Ev
  virtual void  v5(); // _ZN8S20071C22v5Ev
  virtual void  v6(); // _ZN8S20071C22v6Ev
  S20071C2(); // tgen
};
//SIG(-1 S20071C2) C1{ vd v1 v2 v3 v4 v5 FC2{ v6 v7 v8 v9 v10 Fp[2]}}


 S20071C2 ::~S20071C2(){ note_dtor("S20071C2", this);}
void  S20071C2 ::v2(){vfunc_called(this, "_ZN8S20071C22v2Ev");}
void  S20071C2 ::v3(){vfunc_called(this, "_ZN8S20071C22v3Ev");}
void  S20071C2 ::v4(){vfunc_called(this, "_ZN8S20071C22v4Ev");}
void  S20071C2 ::v5(){vfunc_called(this, "_ZN8S20071C22v5Ev");}
void  S20071C2 ::v6(){vfunc_called(this, "_ZN8S20071C22v6Ev");}
S20071C2 ::S20071C2(){ note_ctor("S20071C2", this);} // tgen

static void Test_S20071C2()
{
  extern Class_Descriptor cd_S20071C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20071C2, buf);
    S20071C2 *dp, &lv = *(dp=new (buf) S20071C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20071C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20071C2)");
    check_field_offset(lv, s20071c2f0, ABISELECT(8,4), "S20071C2.s20071c2f0");
    test_class_info(&lv, &cd_S20071C2);
    dp->~S20071C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20071C2(Test_S20071C2, "S20071C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20071C2C1Ev();
extern void _ZN8S20071C2D1Ev();
Name_Map name_map_S20071C2[] = {
  NSPAIR(_ZN8S20071C2C1Ev),
  NSPAIR(_ZN8S20071C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20071C2[];
extern void _ZN8S20071C2D1Ev();
extern void _ZN8S20071C2D0Ev();
extern void _ZN8S20071C22v2Ev();
extern void _ZN8S20071C22v3Ev();
extern void _ZN8S20071C22v4Ev();
extern void _ZN8S20071C22v5Ev();
extern void _ZN8S20071C22v6Ev();
static  VTBL_ENTRY vtc_S20071C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20071C2[0]),
  (VTBL_ENTRY)&_ZN8S20071C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20071C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20071C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20071C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20071C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20071C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20071C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20071C2[];
extern  VTBL_ENTRY _ZTV8S20071C2[];
Class_Descriptor cd_S20071C2 = {  "S20071C2", // class name
  0,0,//no base classes
  &(vtc_S20071C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20071C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20071C2),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  S20071C6  {
  char s20071c6f0;
  virtual void  v12(); // _ZN8S20071C63v12Ev
  virtual void  v13(); // _ZN8S20071C63v13Ev
  ~S20071C6(); // tgen
  S20071C6(); // tgen
};
//SIG(-1 S20071C6) C1{ v1 v2 Fc}


void  S20071C6 ::v12(){vfunc_called(this, "_ZN8S20071C63v12Ev");}
void  S20071C6 ::v13(){vfunc_called(this, "_ZN8S20071C63v13Ev");}
S20071C6 ::~S20071C6(){ note_dtor("S20071C6", this);} // tgen
S20071C6 ::S20071C6(){ note_ctor("S20071C6", this);} // tgen

static void Test_S20071C6()
{
  extern Class_Descriptor cd_S20071C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20071C6, buf);
    S20071C6 *dp, &lv = *(dp=new (buf) S20071C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20071C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20071C6)");
    check_field_offset(lv, s20071c6f0, ABISELECT(8,4), "S20071C6.s20071c6f0");
    test_class_info(&lv, &cd_S20071C6);
    dp->~S20071C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20071C6(Test_S20071C6, "S20071C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20071C6C1Ev();
extern void _ZN8S20071C6D1Ev();
Name_Map name_map_S20071C6[] = {
  NSPAIR(_ZN8S20071C6C1Ev),
  NSPAIR(_ZN8S20071C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20071C6[];
extern void _ZN8S20071C63v12Ev();
extern void _ZN8S20071C63v13Ev();
static  VTBL_ENTRY vtc_S20071C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20071C6[0]),
  (VTBL_ENTRY)&_ZN8S20071C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20071C63v13Ev,
};
extern VTBL_ENTRY _ZTI8S20071C6[];
extern  VTBL_ENTRY _ZTV8S20071C6[];
Class_Descriptor cd_S20071C6 = {  "S20071C6", // class name
  0,0,//no base classes
  &(vtc_S20071C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20071C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20071C6),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  S20071C5  : virtual S20071C6 {
  void *s20071c5f0;
  virtual void  v14(); // _ZN8S20071C53v14Ev
  virtual void  v15(); // _ZN8S20071C53v15Ev
  ~S20071C5(); // tgen
  S20071C5(); // tgen
};
//SIG(-1 S20071C5) C1{ VBC2{ v3 v4 Fc} v1 v2 Fp}


void  S20071C5 ::v14(){vfunc_called(this, "_ZN8S20071C53v14Ev");}
void  S20071C5 ::v15(){vfunc_called(this, "_ZN8S20071C53v15Ev");}
S20071C5 ::~S20071C5(){ note_dtor("S20071C5", this);} // tgen
S20071C5 ::S20071C5(){ note_ctor("S20071C5", this);} // tgen

static void Test_S20071C5()
{
  extern Class_Descriptor cd_S20071C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20071C5, buf);
    S20071C5 *dp, &lv = *(dp=new (buf) S20071C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20071C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20071C5)");
    check_base_class_offset(lv, (S20071C6*), ABISELECT(16,8), "S20071C5");
    check_field_offset(lv, s20071c5f0, ABISELECT(8,4), "S20071C5.s20071c5f0");
    test_class_info(&lv, &cd_S20071C5);
    dp->~S20071C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20071C5(Test_S20071C5, "S20071C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20071C5C1Ev();
extern void _ZN8S20071C5D1Ev();
Name_Map name_map_S20071C5[] = {
  NSPAIR(_ZN8S20071C5C1Ev),
  NSPAIR(_ZN8S20071C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20071C6;
extern VTBL_ENTRY _ZTI8S20071C6[];
extern  VTBL_ENTRY _ZTV8S20071C6[];
static Base_Class bases_S20071C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20071C6,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20071C5[];
extern void _ZN8S20071C53v14Ev();
extern void _ZN8S20071C53v15Ev();
extern void _ZN8S20071C63v12Ev();
extern void _ZN8S20071C63v13Ev();
static  VTBL_ENTRY vtc_S20071C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20071C5[0]),
  (VTBL_ENTRY)&_ZN8S20071C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20071C53v15Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20071C5[0]),
  (VTBL_ENTRY)&_ZN8S20071C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20071C63v13Ev,
};
extern VTBL_ENTRY _ZTV8S20071C5[];
static  VTT_ENTRY vtt_S20071C5[] = {
  {&(_ZTV8S20071C5[3]),  3,11},
  {&(_ZTV8S20071C5[9]),  9,11},
};
extern VTBL_ENTRY _ZTI8S20071C5[];
extern  VTBL_ENTRY _ZTV8S20071C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20071C5[];
Class_Descriptor cd_S20071C5 = {  "S20071C5", // class name
  bases_S20071C5, 1,
  &(vtc_S20071C5[0]), // expected_vtbl_contents
  &(vtt_S20071C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20071C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20071C5),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20071C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20071C4  : S20071C3 , S20071C5 {
  virtual void  v16(); // _ZN8S20071C43v16Ev
  ~S20071C4(); // tgen
  S20071C4(); // tgen
};
//SIG(-1 S20071C4) C1{ BC2{ v2 v3 v4 v5 v6 Fp[2]} BC3{ VBC4{ v7 v8 Fc} v9 v10 Fp} v1}


void  S20071C4 ::v16(){vfunc_called(this, "_ZN8S20071C43v16Ev");}
S20071C4 ::~S20071C4(){ note_dtor("S20071C4", this);} // tgen
S20071C4 ::S20071C4(){ note_ctor("S20071C4", this);} // tgen

static void Test_S20071C4()
{
  extern Class_Descriptor cd_S20071C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20071C4, buf);
    S20071C4 *dp, &lv = *(dp=new (buf) S20071C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20071C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20071C4)");
    check_base_class_offset(lv, (S20071C3*), 0, "S20071C4");
    check_base_class_offset(lv, (S20071C6*)(S20071C5*), ABISELECT(40,20), "S20071C4");
    check_base_class_offset(lv, (S20071C5*), ABISELECT(24,12), "S20071C4");
    test_class_info(&lv, &cd_S20071C4);
    dp->~S20071C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20071C4(Test_S20071C4, "S20071C4", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20071C4C1Ev();
extern void _ZN8S20071C4D1Ev();
Name_Map name_map_S20071C4[] = {
  NSPAIR(_ZN8S20071C4C1Ev),
  NSPAIR(_ZN8S20071C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20071C3;
extern VTBL_ENTRY _ZTI8S20071C3[];
extern  VTBL_ENTRY _ZTV8S20071C3[];
extern Class_Descriptor cd_S20071C6;
extern VTBL_ENTRY _ZTI8S20071C6[];
extern  VTBL_ENTRY _ZTV8S20071C6[];
extern Class_Descriptor cd_S20071C5;
extern VTBL_ENTRY _ZTI8S20071C5[];
extern  VTBL_ENTRY _ZTV8S20071C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20071C5[];
static Base_Class bases_S20071C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20071C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S20071C6,    ABISELECT(40,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20071C5,    ABISELECT(24,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20071C4[];
extern void _ZN8S20071C32v7Ev();
extern void _ZN8S20071C32v8Ev();
extern void _ZN8S20071C32v9Ev();
extern void _ZN8S20071C33v10Ev();
extern void _ZN8S20071C33v11Ev();
extern void _ZN8S20071C43v16Ev();
extern void _ZN8S20071C53v14Ev();
extern void _ZN8S20071C53v15Ev();
extern void _ZN8S20071C63v12Ev();
extern void _ZN8S20071C63v13Ev();
static  VTBL_ENTRY vtc_S20071C4[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20071C4[0]),
  (VTBL_ENTRY)&_ZN8S20071C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20071C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20071C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20071C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20071C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20071C43v16Ev,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20071C4[0]),
  (VTBL_ENTRY)&_ZN8S20071C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20071C53v15Ev,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20071C4[0]),
  (VTBL_ENTRY)&_ZN8S20071C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20071C63v13Ev,
};
extern VTBL_ENTRY _ZTV8S20071C4[];
extern void _ZN8S20071C53v14Ev();
extern void _ZN8S20071C53v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20071C5__8S20071C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20071C5[0]),
  (VTBL_ENTRY)&_ZN8S20071C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20071C53v15Ev,
};
extern void _ZN8S20071C63v12Ev();
extern void _ZN8S20071C63v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20071C6__8S20071C5__8S20071C4[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20071C5[0]),
  (VTBL_ENTRY)&_ZN8S20071C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20071C63v13Ev,
};
static  VTT_ENTRY vtt_S20071C4[] = {
  {&(_ZTV8S20071C4[3]),  3,20},
  {&(_tg__ZTV8S20071C5__8S20071C4[3]),  3,5},
  {&(_tg__ZTV8S20071C6__8S20071C5__8S20071C4[4]),  4,6},
  {&(_ZTV8S20071C4[12]),  12,20},
  {&(_ZTV8S20071C4[18]),  18,20},
};
extern VTBL_ENTRY _ZTI8S20071C4[];
extern  VTBL_ENTRY _ZTV8S20071C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20071C4[];
Class_Descriptor cd_S20071C4 = {  "S20071C4", // class name
  bases_S20071C4, 3,
  &(vtc_S20071C4[0]), // expected_vtbl_contents
  &(vtt_S20071C4[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20071C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20071C4),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20071C4),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20071C1  : virtual S20071C2 , virtual S20071C4 {
  virtual  ~S20071C1(); // _ZN8S20071C1D2Ev
  virtual void  v1(); // _ZN8S20071C12v1Ev
  S20071C1(); // tgen
};
//SIG(1 S20071C1) C1{ VBC2{ vd v2 v3 v4 v5 v6 FC3{ v7 v8 v9 v10 v11 Fp[2]}} VBC4{ BC3 BC5{ VBC6{ v12 v13 Fc} v14 v15 Fp} v16} vd v1}


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

static void Test_S20071C1()
{
  extern Class_Descriptor cd_S20071C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S20071C1, buf);
    S20071C1 *dp, &lv = *(dp=new (buf) S20071C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20071C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20071C1)");
    check_base_class_offset(lv, (S20071C2*), ABISELECT(8,4), "S20071C1");
    check_base_class_offset(lv, (S20071C3*)(S20071C4*), ABISELECT(40,20), "S20071C1");
    check_base_class_offset(lv, (S20071C6*)(S20071C5*)(S20071C4*), ABISELECT(80,40), "S20071C1");
    check_base_class_offset(lv, (S20071C5*)(S20071C4*), ABISELECT(64,32), "S20071C1");
    check_base_class_offset(lv, (S20071C4*), ABISELECT(40,20), "S20071C1");
    test_class_info(&lv, &cd_S20071C1);
    dp->~S20071C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20071C1(Test_S20071C1, "S20071C1", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20071C1C1Ev();
extern void _ZN8S20071C1D2Ev();
Name_Map name_map_S20071C1[] = {
  NSPAIR(_ZN8S20071C1C1Ev),
  NSPAIR(_ZN8S20071C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20071C2;
extern VTBL_ENTRY _ZTI8S20071C2[];
extern  VTBL_ENTRY _ZTV8S20071C2[];
extern Class_Descriptor cd_S20071C3;
extern VTBL_ENTRY _ZTI8S20071C3[];
extern  VTBL_ENTRY _ZTV8S20071C3[];
extern Class_Descriptor cd_S20071C6;
extern VTBL_ENTRY _ZTI8S20071C6[];
extern  VTBL_ENTRY _ZTV8S20071C6[];
extern Class_Descriptor cd_S20071C5;
extern VTBL_ENTRY _ZTI8S20071C5[];
extern  VTBL_ENTRY _ZTV8S20071C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20071C5[];
extern Class_Descriptor cd_S20071C4;
extern VTBL_ENTRY _ZTI8S20071C4[];
extern  VTBL_ENTRY _ZTV8S20071C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20071C4[];
static Base_Class bases_S20071C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20071C2,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20071C3,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S20071C6,    ABISELECT(80,40), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20071C5,    ABISELECT(64,32), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20071C4,    ABISELECT(40,20), //bcp->offset
    23, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20071C1[];
extern void _ZN8S20071C1D1Ev();
extern void _ZN8S20071C1D0Ev();
extern void _ZN8S20071C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S20071C1D1Ev,_ZTv0_n12_N8S20071C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20071C1D1Ev,_ZThn4_N8S20071C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20071C1D0Ev,_ZTv0_n12_N8S20071C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20071C1D0Ev,_ZThn4_N8S20071C1D0Ev)() __attribute__((weak));
extern void _ZN8S20071C22v2Ev();
extern void _ZN8S20071C22v3Ev();
extern void _ZN8S20071C22v4Ev();
extern void _ZN8S20071C22v5Ev();
extern void _ZN8S20071C22v6Ev();
extern void _ZN8S20071C32v7Ev();
extern void _ZN8S20071C32v8Ev();
extern void _ZN8S20071C32v9Ev();
extern void _ZN8S20071C33v10Ev();
extern void _ZN8S20071C33v11Ev();
extern void _ZN8S20071C43v16Ev();
extern void _ZN8S20071C53v14Ev();
extern void _ZN8S20071C53v15Ev();
extern void _ZN8S20071C63v12Ev();
extern void _ZN8S20071C63v13Ev();
static  VTBL_ENTRY vtc_S20071C1[] = {
  ABISELECT(80,40),
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20071C1[0]),
  (VTBL_ENTRY)&_ZN8S20071C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20071C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20071C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20071C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20071C1D1Ev,_ZTv0_n12_N8S20071C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20071C1D0Ev,_ZTv0_n12_N8S20071C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20071C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20071C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20071C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20071C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20071C22v6Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20071C1[0]),
  (VTBL_ENTRY)&_ZN8S20071C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20071C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20071C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20071C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20071C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20071C43v16Ev,
  ABISELECT(16,8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20071C1[0]),
  (VTBL_ENTRY)&_ZN8S20071C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20071C53v15Ev,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20071C1[0]),
  (VTBL_ENTRY)&_ZN8S20071C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20071C63v13Ev,
};
extern VTBL_ENTRY _ZTV8S20071C1[];
extern void _ZN8S20071C32v7Ev();
extern void _ZN8S20071C32v8Ev();
extern void _ZN8S20071C32v9Ev();
extern void _ZN8S20071C33v10Ev();
extern void _ZN8S20071C33v11Ev();
extern void _ZN8S20071C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20071C4__8S20071C1[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20071C4[0]),
  (VTBL_ENTRY)&_ZN8S20071C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20071C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20071C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20071C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20071C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20071C43v16Ev,
};
extern void _ZN8S20071C53v14Ev();
extern void _ZN8S20071C53v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20071C58S20071C4__8S20071C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20071C5[0]),
  (VTBL_ENTRY)&_ZN8S20071C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20071C53v15Ev,
};
extern void _ZN8S20071C63v12Ev();
extern void _ZN8S20071C63v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20071C6__8S20071C58S20071C4__8S20071C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20071C5[0]),
  (VTBL_ENTRY)&_ZN8S20071C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20071C63v13Ev,
};
extern void _ZN8S20071C53v14Ev();
extern void _ZN8S20071C53v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20071C5__8S20071C4__8S20071C1[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20071C4[0]),
  (VTBL_ENTRY)&_ZN8S20071C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20071C53v15Ev,
};
extern void _ZN8S20071C63v12Ev();
extern void _ZN8S20071C63v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20071C6__8S20071C4__8S20071C1[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20071C4[0]),
  (VTBL_ENTRY)&_ZN8S20071C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20071C63v13Ev,
};
static  VTT_ENTRY vtt_S20071C1[] = {
  {&(_ZTV8S20071C1[5]),  5,51},
  {&(_ZTV8S20071C1[16]),  16,51},
  {&(_ZTV8S20071C1[34]),  34,51},
  {&(_ZTV8S20071C1[43]),  43,51},
  {&(_ZTV8S20071C1[49]),  49,51},
  {&(_tg__ZTV8S20071C4__8S20071C1[3]),  3,9},
  {&(_tg__ZTV8S20071C58S20071C4__8S20071C1[3]),  3,5},
  {&(_tg__ZTV8S20071C6__8S20071C58S20071C4__8S20071C1[4]),  4,6},
  {&(_tg__ZTV8S20071C5__8S20071C4__8S20071C1[3]),  3,5},
  {&(_tg__ZTV8S20071C6__8S20071C4__8S20071C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20071C1[];
extern  VTBL_ENTRY _ZTV8S20071C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20071C1[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20071C1D0Ev,_ZTv0_n12_N8S20071C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20071C1D0Ev,_ZThn4_N8S20071C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20071C1D1Ev,_ZTv0_n12_N8S20071C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20071C1D1Ev,_ZThn4_N8S20071C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20071C1 = {  "S20071C1", // class name
  bases_S20071C1, 5,
  &(vtc_S20071C1[0]), // expected_vtbl_contents
  &(vtt_S20071C1[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20071C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20071C1),51, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20071C1),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14111C4  {
  int s14111c4f0;
  long s14111c4f1[2];
};
//SIG(1 S14111C4) C1{ Fi Fl[2]}



static void Test_S14111C4()
{
  {
    init_simple_test("S14111C4");
    S14111C4 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S14111C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14111C4)");
    check_field_offset(lv, s14111c4f0, 0, "S14111C4.s14111c4f0");
    check_field_offset(lv, s14111c4f1, ABISELECT(8,4), "S14111C4.s14111c4f1");
  }
}
static Arrange_To_Call_Me vS14111C4(Test_S14111C4, "S14111C4", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14111C3  {
  int s14111c3f0;
  ::S14111C4 s14111c3f1[16];
};
//SIG(-1 S14111C3) C1{ Fi FC2{ Fi Fl[2]}[16]}



static void Test_S14111C3()
{
  {
    init_simple_test("S14111C3");
    S14111C3 lv;
    check2(sizeof(lv), ABISELECT(392,196), "sizeof(S14111C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14111C3)");
    check_field_offset(lv, s14111c3f0, 0, "S14111C3.s14111c3f0");
    check_field_offset(lv, s14111c3f1, ABISELECT(8,4), "S14111C3.s14111c3f1");
  }
}
static Arrange_To_Call_Me vS14111C3(Test_S14111C3, "S14111C3", ABISELECT(392,196));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14111C2  {
  ::S14111C3 s14111c2f0;
  long s14111c2f1[2];
};
//SIG(1 S14111C2) C1{ FC2{ Fi FC3{ Fi Fl[2]}[16]} Fl[2]}



static void Test_S14111C2()
{
  {
    init_simple_test("S14111C2");
    S14111C2 lv;
    check2(sizeof(lv), ABISELECT(408,204), "sizeof(S14111C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14111C2)");
    check_field_offset(lv, s14111c2f0, 0, "S14111C2.s14111c2f0");
    check_field_offset(lv, s14111c2f1, ABISELECT(392,196), "S14111C2.s14111c2f1");
  }
}
static Arrange_To_Call_Me vS14111C2(Test_S14111C2, "S14111C2", ABISELECT(408,204));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14111C7  {
  int s14111c7f0[4];
  long s14111c7f1[4];
};
//SIG(1 S14111C7) C1{ Fi[4] Fl[4]}



static void Test_S14111C7()
{
  {
    init_simple_test("S14111C7");
    S14111C7 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S14111C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14111C7)");
    check_field_offset(lv, s14111c7f0, 0, "S14111C7.s14111c7f0");
    check_field_offset(lv, s14111c7f1, 16, "S14111C7.s14111c7f1");
  }
}
static Arrange_To_Call_Me vS14111C7(Test_S14111C7, "S14111C7", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14111C6  {
  int s14111c6f0;
  ::S14111C7 s14111c6f1[16];
};
//SIG(-1 S14111C6) C1{ Fi FC2{ Fi[4] Fl[4]}[16]}



static void Test_S14111C6()
{
  {
    init_simple_test("S14111C6");
    S14111C6 lv;
    check2(sizeof(lv), ABISELECT(776,516), "sizeof(S14111C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14111C6)");
    check_field_offset(lv, s14111c6f0, 0, "S14111C6.s14111c6f0");
    check_field_offset(lv, s14111c6f1, ABISELECT(8,4), "S14111C6.s14111c6f1");
  }
}
static Arrange_To_Call_Me vS14111C6(Test_S14111C6, "S14111C6", ABISELECT(776,516));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14111C5  {
  ::S14111C6 s14111c5f0;
  ::S14111C6 s14111c5f1;
  ::S14111C6 s14111c5f2;
  ::S14111C6 s14111c5f3;
  long s14111c5f4;
  int s14111c5f5[3];
  char s14111c5f6;
};
//SIG(-1 S14111C5) C1{ FC2{ Fi FC3{ Fi[4] Fl[4]}[16]} FC2 FC2 FC2 Fl Fi[3] Fc}



static void Test_S14111C5()
{
  {
    init_simple_test("S14111C5");
    S14111C5 lv;
    check2(sizeof(lv), ABISELECT(3128,2084), "sizeof(S14111C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14111C5)");
    check_field_offset(lv, s14111c5f0, 0, "S14111C5.s14111c5f0");
    check_field_offset(lv, s14111c5f1, ABISELECT(776,516), "S14111C5.s14111c5f1");
    check_field_offset(lv, s14111c5f2, ABISELECT(1552,1032), "S14111C5.s14111c5f2");
    check_field_offset(lv, s14111c5f3, ABISELECT(2328,1548), "S14111C5.s14111c5f3");
    check_field_offset(lv, s14111c5f4, ABISELECT(3104,2064), "S14111C5.s14111c5f4");
    check_field_offset(lv, s14111c5f5, ABISELECT(3112,2068), "S14111C5.s14111c5f5");
    check_field_offset(lv, s14111c5f6, ABISELECT(3124,2080), "S14111C5.s14111c5f6");
  }
}
static Arrange_To_Call_Me vS14111C5(Test_S14111C5, "S14111C5", ABISELECT(3128,2084));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14111C1  {
  void *s14111c1f0;
  ::S14111C2 s14111c1f1[2];
  ::S14111C5 s14111c1f2;
};
//SIG(1 S14111C1) C1{ Fp FC2{ FC3{ Fi FC4{ Fi Fl[2]}[16]} Fl[2]}[2] FC5{ FC6{ Fi FC7{ Fi[4] Fl[4]}[16]} FC6 FC6 FC6 Fl Fi[3] Fc}}



static void Test_S14111C1()
{
  {
    init_simple_test("S14111C1");
    S14111C1 lv;
    check2(sizeof(lv), ABISELECT(3952,2496), "sizeof(S14111C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14111C1)");
    check_field_offset(lv, s14111c1f0, 0, "S14111C1.s14111c1f0");
    check_field_offset(lv, s14111c1f1, ABISELECT(8,4), "S14111C1.s14111c1f1");
    check_field_offset(lv, s14111c1f2, ABISELECT(824,412), "S14111C1.s14111c1f2");
  }
}
static Arrange_To_Call_Me vS14111C1(Test_S14111C1, "S14111C1", ABISELECT(3952,2496));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2298C4_nt  {
  char s2298c4f0;
  int s2298c4f1;
  virtual  ~S2298C4_nt(); // _ZN10S2298C4_ntD1Ev
  virtual void  v5(); // _ZN10S2298C4_nt2v5Ev
  S2298C4_nt(); // tgen
};
//SIG(-1 S2298C4_nt) C1{ vd v1 Fc Fi}


 S2298C4_nt ::~S2298C4_nt(){ note_dtor("S2298C4_nt", this);}
void  S2298C4_nt ::v5(){vfunc_called(this, "_ZN10S2298C4_nt2v5Ev");}
S2298C4_nt ::S2298C4_nt(){ note_ctor("S2298C4_nt", this);} // tgen

//skip512 S2298C4_nt

#else // __cplusplus

extern void _ZN10S2298C4_ntC1Ev();
extern void _ZN10S2298C4_ntD1Ev();
Name_Map name_map_S2298C4_nt[] = {
  NSPAIR(_ZN10S2298C4_ntC1Ev),
  NSPAIR(_ZN10S2298C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2298C4_nt[];
extern void _ZN10S2298C4_ntD1Ev();
extern void _ZN10S2298C4_ntD0Ev();
extern void _ZN10S2298C4_nt2v5Ev();
static  VTBL_ENTRY vtc_S2298C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2298C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2298C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2298C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2298C4_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S2298C4_nt[];
VTBL_ENTRY *P__ZTI10S2298C4_nt = _ZTI10S2298C4_nt; 
extern  VTBL_ENTRY _ZTV10S2298C4_nt[];
Class_Descriptor cd_S2298C4_nt = {  "S2298C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2298C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S2298C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2298C4_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  S2298C3_nt  : S2298C4_nt {
  void *s2298c3f0;
  char s2298c3f1[2];
  virtual  ~S2298C3_nt(); // _ZN10S2298C3_ntD1Ev
  virtual void  v6(); // _ZN10S2298C3_nt2v6Ev
  S2298C3_nt(); // tgen
};
//SIG(-1 S2298C3_nt) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


 S2298C3_nt ::~S2298C3_nt(){ note_dtor("S2298C3_nt", this);}
void  S2298C3_nt ::v6(){vfunc_called(this, "_ZN10S2298C3_nt2v6Ev");}
S2298C3_nt ::S2298C3_nt(){ note_ctor("S2298C3_nt", this);} // tgen

//skip512 S2298C3_nt

#else // __cplusplus

extern void _ZN10S2298C3_ntC1Ev();
extern void _ZN10S2298C3_ntD1Ev();
Name_Map name_map_S2298C3_nt[] = {
  NSPAIR(_ZN10S2298C3_ntC1Ev),
  NSPAIR(_ZN10S2298C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2298C4_nt;
extern VTBL_ENTRY _ZTI10S2298C4_nt[];
extern  VTBL_ENTRY _ZTV10S2298C4_nt[];
static Base_Class bases_S2298C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2298C4_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 _ZTI10S2298C3_nt[];
extern void _ZN10S2298C3_ntD1Ev();
extern void _ZN10S2298C3_ntD0Ev();
extern void _ZN10S2298C4_nt2v5Ev();
extern void _ZN10S2298C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S2298C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2298C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2298C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2298C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2298C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2298C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S2298C3_nt[];
VTBL_ENTRY *P__ZTI10S2298C3_nt = _ZTI10S2298C3_nt; 
extern  VTBL_ENTRY _ZTV10S2298C3_nt[];
Class_Descriptor cd_S2298C3_nt = {  "S2298C3_nt", // class name
  bases_S2298C3_nt, 1,
  &(vtc_S2298C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI10S2298C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2298C3_nt),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2298C2_nt  : S2298C3_nt {
  void *s2298c2f0[2];
  int s2298c2f1[3];
  char s2298c2f2[2];
  void *s2298c2f3;
  virtual  ~S2298C2_nt(); // _ZN10S2298C2_ntD1Ev
  virtual void  v7(); // _ZN10S2298C2_nt2v7Ev
  virtual void  v8(); // _ZN10S2298C2_nt2v8Ev
  virtual void  v9(); // _ZN10S2298C2_nt2v9Ev
  virtual void  v10(); // _ZN10S2298C2_nt3v10Ev
  S2298C2_nt(); // tgen
};
//SIG(-1 S2298C2_nt) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2298C2_nt ::~S2298C2_nt(){ note_dtor("S2298C2_nt", this);}
void  S2298C2_nt ::v7(){vfunc_called(this, "_ZN10S2298C2_nt2v7Ev");}
void  S2298C2_nt ::v8(){vfunc_called(this, "_ZN10S2298C2_nt2v8Ev");}
void  S2298C2_nt ::v9(){vfunc_called(this, "_ZN10S2298C2_nt2v9Ev");}
void  S2298C2_nt ::v10(){vfunc_called(this, "_ZN10S2298C2_nt3v10Ev");}
S2298C2_nt ::S2298C2_nt(){ note_ctor("S2298C2_nt", this);} // tgen

//skip512 S2298C2_nt

#else // __cplusplus

extern void _ZN10S2298C2_ntC1Ev();
extern void _ZN10S2298C2_ntD1Ev();
Name_Map name_map_S2298C2_nt[] = {
  NSPAIR(_ZN10S2298C2_ntC1Ev),
  NSPAIR(_ZN10S2298C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2298C4_nt;
extern VTBL_ENTRY _ZTI10S2298C4_nt[];
extern  VTBL_ENTRY _ZTV10S2298C4_nt[];
extern Class_Descriptor cd_S2298C3_nt;
extern VTBL_ENTRY _ZTI10S2298C3_nt[];
extern  VTBL_ENTRY _ZTV10S2298C3_nt[];
static Base_Class bases_S2298C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2298C4_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_S2298C3_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 _ZTI10S2298C2_nt[];
extern void _ZN10S2298C2_ntD1Ev();
extern void _ZN10S2298C2_ntD0Ev();
extern void _ZN10S2298C4_nt2v5Ev();
extern void _ZN10S2298C3_nt2v6Ev();
extern void _ZN10S2298C2_nt2v7Ev();
extern void _ZN10S2298C2_nt2v8Ev();
extern void _ZN10S2298C2_nt2v9Ev();
extern void _ZN10S2298C2_nt3v10Ev();
static  VTBL_ENTRY vtc_S2298C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2298C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2298C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2298C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2298C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2298C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2298C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2298C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2298C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2298C2_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S2298C2_nt[];
VTBL_ENTRY *P__ZTI10S2298C2_nt = _ZTI10S2298C2_nt; 
extern  VTBL_ENTRY _ZTV10S2298C2_nt[];
Class_Descriptor cd_S2298C2_nt = {  "S2298C2_nt", // class name
  bases_S2298C2_nt, 2,
  &(vtc_S2298C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI10S2298C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2298C2_nt),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2298C1  : S2298C2_nt {
  int s2298c1f0;
  void *s2298c1f1;
  virtual  ~S2298C1(); // _ZN7S2298C1D1Ev
  virtual void  v1(); // _ZN7S2298C12v1Ev
  virtual void  v2(); // _ZN7S2298C12v2Ev
  virtual void  v3(); // _ZN7S2298C12v3Ev
  virtual void  v4(); // _ZN7S2298C12v4Ev
  S2298C1(); // tgen
};
//SIG(1 S2298C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi Fp}


 S2298C1 ::~S2298C1(){ note_dtor("S2298C1", this);}
void  S2298C1 ::v1(){vfunc_called(this, "_ZN7S2298C12v1Ev");}
void  S2298C1 ::v2(){vfunc_called(this, "_ZN7S2298C12v2Ev");}
void  S2298C1 ::v3(){vfunc_called(this, "_ZN7S2298C12v3Ev");}
void  S2298C1 ::v4(){vfunc_called(this, "_ZN7S2298C12v4Ev");}
S2298C1 ::S2298C1(){ note_ctor("S2298C1", this);} // tgen

static void Test_S2298C1()
{
  extern Class_Descriptor cd_S2298C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2298C1, buf);
    S2298C1 *dp, &lv = *(dp=new (buf) S2298C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2298C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2298C1)");
    check_base_class_offset(lv, (S2298C4_nt*)(S2298C3_nt*)(S2298C2_nt*), 0, "S2298C1");
    check_base_class_offset(lv, (S2298C3_nt*)(S2298C2_nt*), 0, "S2298C1");
    check_base_class_offset(lv, (S2298C2_nt*), 0, "S2298C1");
    check_field_offset(lv, s2298c1f0, ABISELECT(72,48), "S2298C1.s2298c1f0");
    check_field_offset(lv, s2298c1f1, ABISELECT(80,52), "S2298C1.s2298c1f1");
    test_class_info(&lv, &cd_S2298C1);
    dp->~S2298C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2298C1(Test_S2298C1, "S2298C1", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2298C1C1Ev();
extern void _ZN7S2298C1D1Ev();
Name_Map name_map_S2298C1[] = {
  NSPAIR(_ZN7S2298C1C1Ev),
  NSPAIR(_ZN7S2298C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2298C4_nt;
extern VTBL_ENTRY _ZTI10S2298C4_nt[];
extern  VTBL_ENTRY _ZTV10S2298C4_nt[];
extern Class_Descriptor cd_S2298C3_nt;
extern VTBL_ENTRY _ZTI10S2298C3_nt[];
extern  VTBL_ENTRY _ZTV10S2298C3_nt[];
extern Class_Descriptor cd_S2298C2_nt;
extern VTBL_ENTRY _ZTI10S2298C2_nt[];
extern  VTBL_ENTRY _ZTV10S2298C2_nt[];
static Base_Class bases_S2298C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2298C4_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_S2298C3_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_S2298C2_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 _ZTI7S2298C1[];
extern void _ZN7S2298C1D1Ev();
extern void _ZN7S2298C1D0Ev();
extern void _ZN10S2298C4_nt2v5Ev();
extern void _ZN10S2298C3_nt2v6Ev();
extern void _ZN10S2298C2_nt2v7Ev();
extern void _ZN10S2298C2_nt2v8Ev();
extern void _ZN10S2298C2_nt2v9Ev();
extern void _ZN10S2298C2_nt3v10Ev();
extern void _ZN7S2298C12v1Ev();
extern void _ZN7S2298C12v2Ev();
extern void _ZN7S2298C12v3Ev();
extern void _ZN7S2298C12v4Ev();
static  VTBL_ENTRY vtc_S2298C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2298C1[0]),
  (VTBL_ENTRY)&_ZN7S2298C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2298C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2298C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2298C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2298C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2298C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2298C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2298C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S2298C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2298C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2298C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2298C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2298C1[];
extern  VTBL_ENTRY _ZTV7S2298C1[];
Class_Descriptor cd_S2298C1 = {  "S2298C1", // class name
  bases_S2298C1, 3,
  &(vtc_S2298C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2298C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2298C1),14, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9659C2  {
  ::S10180C13 s9659c2f0;
  int s9659c2f1[2];
  char s9659c2f2;
  virtual  ~S9659C2(); // _ZN7S9659C2D1Ev
  virtual void  v4(); // _ZN7S9659C22v4Ev
  virtual void  v5(); // _ZN7S9659C22v5Ev
  virtual void  v6(); // _ZN7S9659C22v6Ev
  S9659C2(); // tgen
};
//SIG(-1 S9659C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9659C2 ::~S9659C2(){ note_dtor("S9659C2", this);}
void  S9659C2 ::v4(){vfunc_called(this, "_ZN7S9659C22v4Ev");}
void  S9659C2 ::v5(){vfunc_called(this, "_ZN7S9659C22v5Ev");}
void  S9659C2 ::v6(){vfunc_called(this, "_ZN7S9659C22v6Ev");}
S9659C2 ::S9659C2(){ note_ctor("S9659C2", this);} // tgen

static void Test_S9659C2()
{
  extern Class_Descriptor cd_S9659C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9659C2, buf);
    S9659C2 *dp, &lv = *(dp=new (buf) S9659C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9659C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9659C2)");
    check_field_offset(lv, s9659c2f0, ABISELECT(8,4), "S9659C2.s9659c2f0");
    check_field_offset(lv, s9659c2f1, ABISELECT(24,16), "S9659C2.s9659c2f1");
    check_field_offset(lv, s9659c2f2, ABISELECT(32,24), "S9659C2.s9659c2f2");
    test_class_info(&lv, &cd_S9659C2);
    dp->~S9659C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9659C2(Test_S9659C2, "S9659C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9659C2C1Ev();
extern void _ZN7S9659C2D1Ev();
Name_Map name_map_S9659C2[] = {
  NSPAIR(_ZN7S9659C2C1Ev),
  NSPAIR(_ZN7S9659C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9659C2[];
extern void _ZN7S9659C2D1Ev();
extern void _ZN7S9659C2D0Ev();
extern void _ZN7S9659C22v4Ev();
extern void _ZN7S9659C22v5Ev();
extern void _ZN7S9659C22v6Ev();
static  VTBL_ENTRY vtc_S9659C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9659C2[0]),
  (VTBL_ENTRY)&_ZN7S9659C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9659C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9659C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9659C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9659C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9659C2[];
extern  VTBL_ENTRY _ZTV7S9659C2[];
Class_Descriptor cd_S9659C2 = {  "S9659C2", // class name
  0,0,//no base classes
  &(vtc_S9659C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9659C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9659C2),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  S9659C6_nt  {
  char s9659c6f0[20];
};
//SIG(-1 S9659C6_nt) C1{ Fc[20]}



//skip512 S9659C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9659C5_nt  {
  ::S9659C6_nt s9659c5f0;
  char s9659c5f1[16];
};
//SIG(-1 S9659C5_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S9659C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9659C1  : S9659C2 {
  ::S9659C5_nt s9659c1f0;
  void *s9659c1f1;
  int s9659c1f2;
  char s9659c1f3;
  void *s9659c1f4[2];
  char s9659c1f5;
  virtual  ~S9659C1(); // _ZN7S9659C1D1Ev
  virtual void  v1(); // _ZN7S9659C12v1Ev
  virtual void  v2(); // _ZN7S9659C12v2Ev
  virtual void  v3(); // _ZN7S9659C12v3Ev
  S9659C1(); // tgen
};
//SIG(1 S9659C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 FC5{ FC6{ Fc[20]} Fc[16]} Fp Fi Fc Fp[2] Fc}


 S9659C1 ::~S9659C1(){ note_dtor("S9659C1", this);}
void  S9659C1 ::v1(){vfunc_called(this, "_ZN7S9659C12v1Ev");}
void  S9659C1 ::v2(){vfunc_called(this, "_ZN7S9659C12v2Ev");}
void  S9659C1 ::v3(){vfunc_called(this, "_ZN7S9659C12v3Ev");}
S9659C1 ::S9659C1(){ note_ctor("S9659C1", this);} // tgen

static void Test_S9659C1()
{
  extern Class_Descriptor cd_S9659C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S9659C1, buf);
    S9659C1 *dp, &lv = *(dp=new (buf) S9659C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S9659C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9659C1)");
    check_base_class_offset(lv, (S9659C2*), 0, "S9659C1");
    check_field_offset(lv, s9659c1f0, ABISELECT(33,25), "S9659C1.s9659c1f0");
    check_field_offset(lv, s9659c1f1, ABISELECT(72,64), "S9659C1.s9659c1f1");
    check_field_offset(lv, s9659c1f2, ABISELECT(80,68), "S9659C1.s9659c1f2");
    check_field_offset(lv, s9659c1f3, ABISELECT(84,72), "S9659C1.s9659c1f3");
    check_field_offset(lv, s9659c1f4, ABISELECT(88,76), "S9659C1.s9659c1f4");
    check_field_offset(lv, s9659c1f5, ABISELECT(104,84), "S9659C1.s9659c1f5");
    test_class_info(&lv, &cd_S9659C1);
    dp->~S9659C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9659C1(Test_S9659C1, "S9659C1", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN7S9659C1C1Ev();
extern void _ZN7S9659C1D1Ev();
Name_Map name_map_S9659C1[] = {
  NSPAIR(_ZN7S9659C1C1Ev),
  NSPAIR(_ZN7S9659C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9659C2;
extern VTBL_ENTRY _ZTI7S9659C2[];
extern  VTBL_ENTRY _ZTV7S9659C2[];
static Base_Class bases_S9659C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9659C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S9659C1[];
extern void _ZN7S9659C1D1Ev();
extern void _ZN7S9659C1D0Ev();
extern void _ZN7S9659C22v4Ev();
extern void _ZN7S9659C22v5Ev();
extern void _ZN7S9659C22v6Ev();
extern void _ZN7S9659C12v1Ev();
extern void _ZN7S9659C12v2Ev();
extern void _ZN7S9659C12v3Ev();
static  VTBL_ENTRY vtc_S9659C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9659C1[0]),
  (VTBL_ENTRY)&_ZN7S9659C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9659C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9659C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9659C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9659C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9659C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9659C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9659C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9659C1[];
extern  VTBL_ENTRY _ZTV7S9659C1[];
Class_Descriptor cd_S9659C1 = {  "S9659C1", // class name
  bases_S9659C1, 1,
  &(vtc_S9659C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI7S9659C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9659C1),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  S3338C3  {
  __tsi64 s3338c3f0;
  virtual void  v6(); // _ZN7S3338C32v6Ev
  virtual void  v7(); // _ZN7S3338C32v7Ev
  ~S3338C3(); // tgen
  S3338C3(); // tgen
};
//SIG(-1 S3338C3) C1{ v1 v2 FL}


void  S3338C3 ::v6(){vfunc_called(this, "_ZN7S3338C32v6Ev");}
void  S3338C3 ::v7(){vfunc_called(this, "_ZN7S3338C32v7Ev");}
S3338C3 ::~S3338C3(){ note_dtor("S3338C3", this);} // tgen
S3338C3 ::S3338C3(){ note_ctor("S3338C3", this);} // tgen

static void Test_S3338C3()
{
  extern Class_Descriptor cd_S3338C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3338C3, buf);
    S3338C3 *dp, &lv = *(dp=new (buf) S3338C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3338C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3338C3)");
    check_field_offset(lv, s3338c3f0, ABISELECT(8,4), "S3338C3.s3338c3f0");
    test_class_info(&lv, &cd_S3338C3);
    dp->~S3338C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3338C3(Test_S3338C3, "S3338C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3338C3C1Ev();
extern void _ZN7S3338C3D1Ev();
Name_Map name_map_S3338C3[] = {
  NSPAIR(_ZN7S3338C3C1Ev),
  NSPAIR(_ZN7S3338C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3338C3[];
extern void _ZN7S3338C32v6Ev();
extern void _ZN7S3338C32v7Ev();
static  VTBL_ENTRY vtc_S3338C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3338C3[0]),
  (VTBL_ENTRY)&_ZN7S3338C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3338C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S3338C3[];
extern  VTBL_ENTRY _ZTV7S3338C3[];
Class_Descriptor cd_S3338C3 = {  "S3338C3", // class name
  0,0,//no base classes
  &(vtc_S3338C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3338C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3338C3),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  S3338C4  {
  ::S20442C5 s3338c4f0;
  virtual  ~S3338C4(); // _ZN7S3338C4D1Ev
  virtual void  v8(); // _ZN7S3338C42v8Ev
  virtual void  v9(); // _ZN7S3338C42v9Ev
  virtual void  v10(); // _ZN7S3338C43v10Ev
  virtual void  v11(); // _ZN7S3338C43v11Ev
  virtual void  v12(); // _ZN7S3338C43v12Ev
  S3338C4(); // tgen
};
//SIG(-1 S3338C4) C1{ vd v1 v2 v3 v4 v5 FC2{ v6 v7 v8 v9 v10 Fp[2]}}


 S3338C4 ::~S3338C4(){ note_dtor("S3338C4", this);}
void  S3338C4 ::v8(){vfunc_called(this, "_ZN7S3338C42v8Ev");}
void  S3338C4 ::v9(){vfunc_called(this, "_ZN7S3338C42v9Ev");}
void  S3338C4 ::v10(){vfunc_called(this, "_ZN7S3338C43v10Ev");}
void  S3338C4 ::v11(){vfunc_called(this, "_ZN7S3338C43v11Ev");}
void  S3338C4 ::v12(){vfunc_called(this, "_ZN7S3338C43v12Ev");}
S3338C4 ::S3338C4(){ note_ctor("S3338C4", this);} // tgen

static void Test_S3338C4()
{
  extern Class_Descriptor cd_S3338C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3338C4, buf);
    S3338C4 *dp, &lv = *(dp=new (buf) S3338C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3338C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3338C4)");
    check_field_offset(lv, s3338c4f0, ABISELECT(8,4), "S3338C4.s3338c4f0");
    test_class_info(&lv, &cd_S3338C4);
    dp->~S3338C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3338C4(Test_S3338C4, "S3338C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3338C4C1Ev();
extern void _ZN7S3338C4D1Ev();
Name_Map name_map_S3338C4[] = {
  NSPAIR(_ZN7S3338C4C1Ev),
  NSPAIR(_ZN7S3338C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3338C4[];
extern void _ZN7S3338C4D1Ev();
extern void _ZN7S3338C4D0Ev();
extern void _ZN7S3338C42v8Ev();
extern void _ZN7S3338C42v9Ev();
extern void _ZN7S3338C43v10Ev();
extern void _ZN7S3338C43v11Ev();
extern void _ZN7S3338C43v12Ev();
static  VTBL_ENTRY vtc_S3338C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3338C4[0]),
  (VTBL_ENTRY)&_ZN7S3338C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3338C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3338C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3338C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v12Ev,
};
extern VTBL_ENTRY _ZTI7S3338C4[];
extern  VTBL_ENTRY _ZTV7S3338C4[];
Class_Descriptor cd_S3338C4 = {  "S3338C4", // class name
  0,0,//no base classes
  &(vtc_S3338C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3338C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3338C4),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  S3338C2  : S3338C3 , virtual S3338C4 {
  virtual  ~S3338C2(); // _ZN7S3338C2D2Ev
  S3338C2(); // tgen
};
//SIG(-1 S3338C2) C1{ BC2{ v1 v2 FL} VBC3{ vd v3 v4 v5 v6 v7 FC4{ v8 v9 v10 v11 v12 Fp[2]}} vd}


 S3338C2 ::~S3338C2(){ note_dtor("S3338C2", this);}
S3338C2 ::S3338C2(){ note_ctor("S3338C2", this);} // tgen

static void Test_S3338C2()
{
  extern Class_Descriptor cd_S3338C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3338C2, buf);
    S3338C2 *dp, &lv = *(dp=new (buf) S3338C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3338C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3338C2)");
    check_base_class_offset(lv, (S3338C3*), 0, "S3338C2");
    check_base_class_offset(lv, (S3338C4*), ABISELECT(16,12), "S3338C2");
    test_class_info(&lv, &cd_S3338C2);
    dp->~S3338C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3338C2(Test_S3338C2, "S3338C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3338C2C1Ev();
extern void _ZN7S3338C2D2Ev();
Name_Map name_map_S3338C2[] = {
  NSPAIR(_ZN7S3338C2C1Ev),
  NSPAIR(_ZN7S3338C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3338C3;
extern VTBL_ENTRY _ZTI7S3338C3[];
extern  VTBL_ENTRY _ZTV7S3338C3[];
extern Class_Descriptor cd_S3338C4;
extern VTBL_ENTRY _ZTI7S3338C4[];
extern  VTBL_ENTRY _ZTV7S3338C4[];
static Base_Class bases_S3338C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3338C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3338C4,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3338C2[];
extern void _ZN7S3338C32v6Ev();
extern void _ZN7S3338C32v7Ev();
extern void _ZN7S3338C2D1Ev();
extern void _ZN7S3338C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S3338C2D1Ev,_ZTv0_n12_N7S3338C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3338C2D1Ev,_ZThn12_N7S3338C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3338C2D0Ev,_ZTv0_n12_N7S3338C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3338C2D0Ev,_ZThn12_N7S3338C2D0Ev)() __attribute__((weak));
extern void _ZN7S3338C42v8Ev();
extern void _ZN7S3338C42v9Ev();
extern void _ZN7S3338C43v10Ev();
extern void _ZN7S3338C43v11Ev();
extern void _ZN7S3338C43v12Ev();
static  VTBL_ENTRY vtc_S3338C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3338C2[0]),
  (VTBL_ENTRY)&_ZN7S3338C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3338C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3338C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3338C2D0Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3338C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3338C2D1Ev,_ZTv0_n12_N7S3338C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3338C2D0Ev,_ZTv0_n12_N7S3338C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3338C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3338C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S3338C2[];
static  VTT_ENTRY vtt_S3338C2[] = {
  {&(_ZTV7S3338C2[3]),  3,22},
  {&(_ZTV7S3338C2[15]),  15,22},
};
extern VTBL_ENTRY _ZTI7S3338C2[];
extern  VTBL_ENTRY _ZTV7S3338C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3338C2[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3338C2D0Ev,_ZTv0_n12_N7S3338C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3338C2D0Ev,_ZThn12_N7S3338C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3338C2D1Ev,_ZTv0_n12_N7S3338C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3338C2D1Ev,_ZThn12_N7S3338C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3338C2 = {  "S3338C2", // class name
  bases_S3338C2, 2,
  &(vtc_S3338C2[0]), // expected_vtbl_contents
  &(vtt_S3338C2[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3338C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3338C2),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3338C2),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3338C1  : S3338C2 {
  int s3338c1f0;
  virtual void  v1(); // _ZN7S3338C12v1Ev
  virtual void  v2(); // _ZN7S3338C12v2Ev
  virtual void  v3(); // _ZN7S3338C12v3Ev
  virtual void  v4(); // _ZN7S3338C12v4Ev
  virtual void  v5(); // _ZN7S3338C12v5Ev
  ~S3338C1(); // tgen
  S3338C1(); // tgen
};
//SIG(1 S3338C1) C1{ BC2{ BC3{ v6 v7 FL} VBC4{ vd v8 v9 v10 v11 v12 FC5{ v13 v14 v15 v16 v17 Fp[2]}} vd} v1 v2 v3 v4 v5 Fi}


void  S3338C1 ::v1(){vfunc_called(this, "_ZN7S3338C12v1Ev");}
void  S3338C1 ::v2(){vfunc_called(this, "_ZN7S3338C12v2Ev");}
void  S3338C1 ::v3(){vfunc_called(this, "_ZN7S3338C12v3Ev");}
void  S3338C1 ::v4(){vfunc_called(this, "_ZN7S3338C12v4Ev");}
void  S3338C1 ::v5(){vfunc_called(this, "_ZN7S3338C12v5Ev");}
S3338C1 ::~S3338C1(){ note_dtor("S3338C1", this);} // tgen
S3338C1 ::S3338C1(){ note_ctor("S3338C1", this);} // tgen

static void Test_S3338C1()
{
  extern Class_Descriptor cd_S3338C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S3338C1, buf);
    S3338C1 *dp, &lv = *(dp=new (buf) S3338C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S3338C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3338C1)");
    check_base_class_offset(lv, (S3338C3*)(S3338C2*), 0, "S3338C1");
    check_base_class_offset(lv, (S3338C4*)(S3338C2*), ABISELECT(24,16), "S3338C1");
    check_base_class_offset(lv, (S3338C2*), 0, "S3338C1");
    check_field_offset(lv, s3338c1f0, ABISELECT(16,12), "S3338C1.s3338c1f0");
    test_class_info(&lv, &cd_S3338C1);
    dp->~S3338C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3338C1(Test_S3338C1, "S3338C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S3338C1C1Ev();
extern void _ZN7S3338C1D1Ev();
Name_Map name_map_S3338C1[] = {
  NSPAIR(_ZN7S3338C1C1Ev),
  NSPAIR(_ZN7S3338C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3338C3;
extern VTBL_ENTRY _ZTI7S3338C3[];
extern  VTBL_ENTRY _ZTV7S3338C3[];
extern Class_Descriptor cd_S3338C4;
extern VTBL_ENTRY _ZTI7S3338C4[];
extern  VTBL_ENTRY _ZTV7S3338C4[];
extern Class_Descriptor cd_S3338C2;
extern VTBL_ENTRY _ZTI7S3338C2[];
extern  VTBL_ENTRY _ZTV7S3338C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3338C2[];
static Base_Class bases_S3338C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3338C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3338C4,    ABISELECT(24,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3338C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3338C1[];
extern void _ZN7S3338C32v6Ev();
extern void _ZN7S3338C32v7Ev();
extern void _ZN7S3338C1D1Ev();
extern void _ZN7S3338C1D0Ev();
extern void _ZN7S3338C12v1Ev();
extern void _ZN7S3338C12v2Ev();
extern void _ZN7S3338C12v3Ev();
extern void _ZN7S3338C12v4Ev();
extern void _ZN7S3338C12v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S3338C1D1Ev,_ZTv0_n12_N7S3338C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S3338C1D1Ev,_ZThn16_N7S3338C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3338C1D0Ev,_ZTv0_n12_N7S3338C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S3338C1D0Ev,_ZThn16_N7S3338C1D0Ev)() __attribute__((weak));
extern void _ZN7S3338C42v8Ev();
extern void _ZN7S3338C42v9Ev();
extern void _ZN7S3338C43v10Ev();
extern void _ZN7S3338C43v11Ev();
extern void _ZN7S3338C43v12Ev();
static  VTBL_ENTRY vtc_S3338C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3338C1[0]),
  (VTBL_ENTRY)&_ZN7S3338C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3338C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3338C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3338C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3338C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3338C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3338C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3338C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3338C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3338C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3338C1D1Ev,_ZTv0_n12_N7S3338C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3338C1D0Ev,_ZTv0_n12_N7S3338C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3338C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3338C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S3338C1[];
extern void _ZN7S3338C32v6Ev();
extern void _ZN7S3338C32v7Ev();
extern void _ZN7S3338C2D1Ev();
extern void _ZN7S3338C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3338C2__7S3338C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3338C2[0]),
  (VTBL_ENTRY)&_ZN7S3338C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3338C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3338C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3338C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3338C2D1Ev,_ZTv0_n12_N7S3338C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S3338C2D1Ev,_ZThn16_N7S3338C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3338C2D0Ev,_ZTv0_n12_N7S3338C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S3338C2D0Ev,_ZThn16_N7S3338C2D0Ev)() __attribute__((weak));
extern void _ZN7S3338C42v8Ev();
extern void _ZN7S3338C42v9Ev();
extern void _ZN7S3338C43v10Ev();
extern void _ZN7S3338C43v11Ev();
extern void _ZN7S3338C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3338C4__7S3338C2__7S3338C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3338C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3338C2D1Ev,_ZTv0_n12_N7S3338C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3338C2D0Ev,_ZTv0_n12_N7S3338C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3338C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3338C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3338C43v12Ev,
};
static  VTT_ENTRY vtt_S3338C1[] = {
  {&(_ZTV7S3338C1[3]),  3,27},
  {&(_tg__ZTV7S3338C2__7S3338C1[3]),  3,7},
  {&(_tg__ZTV7S3338C4__7S3338C2__7S3338C1[8]),  8,15},
  {&(_ZTV7S3338C1[20]),  20,27},
};
extern VTBL_ENTRY _ZTI7S3338C1[];
extern  VTBL_ENTRY _ZTV7S3338C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3338C1[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3338C2D0Ev,_ZTv0_n12_N7S3338C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3338C2D0Ev,_ZThn16_N7S3338C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3338C2D1Ev,_ZTv0_n12_N7S3338C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3338C2D1Ev,_ZThn16_N7S3338C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3338C1D0Ev,_ZTv0_n12_N7S3338C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3338C1D0Ev,_ZThn16_N7S3338C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3338C1D1Ev,_ZTv0_n12_N7S3338C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3338C1D1Ev,_ZThn16_N7S3338C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3338C1 = {  "S3338C1", // class name
  bases_S3338C1, 3,
  &(vtc_S3338C1[0]), // expected_vtbl_contents
  &(vtt_S3338C1[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S3338C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3338C1),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3338C1),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9535C2  {
  virtual  ~S9535C2(); // _ZN7S9535C2D1Ev
  virtual void  v3(); // _ZN7S9535C22v3Ev
  virtual void  v4(); // _ZN7S9535C22v4Ev
  S9535C2(); // tgen
};
//SIG(-1 S9535C2) C1{ vd v1 v2}


 S9535C2 ::~S9535C2(){ note_dtor("S9535C2", this);}
void  S9535C2 ::v3(){vfunc_called(this, "_ZN7S9535C22v3Ev");}
void  S9535C2 ::v4(){vfunc_called(this, "_ZN7S9535C22v4Ev");}
S9535C2 ::S9535C2(){ note_ctor("S9535C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9535C2C1Ev();
extern void _ZN7S9535C2D1Ev();
Name_Map name_map_S9535C2[] = {
  NSPAIR(_ZN7S9535C2C1Ev),
  NSPAIR(_ZN7S9535C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9535C2[];
extern void _ZN7S9535C2D1Ev();
extern void _ZN7S9535C2D0Ev();
extern void _ZN7S9535C22v3Ev();
extern void _ZN7S9535C22v4Ev();
static  VTBL_ENTRY vtc_S9535C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9535C2[0]),
  (VTBL_ENTRY)&_ZN7S9535C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9535C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9535C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9535C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9535C2[];
extern  VTBL_ENTRY _ZTV7S9535C2[];
Class_Descriptor cd_S9535C2 = {  "S9535C2", // class name
  0,0,//no base classes
  &(vtc_S9535C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9535C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9535C2),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  S9535C3  : S7073C3 {
  ::S10180C13 s9535c3f0;
  int s9535c3f1;
  __tsi64 s9535c3f2[2];
  int s9535c3f3;
};
//SIG(-1 S9535C3) C1{ BC2{ m FC3{ m Fp Fi FC4{ m}} Fi[2] FC3 Fp FC5{ m Fp[2]} FC5} FC3 Fi FL[2] Fi}



static void Test_S9535C3()
{
  extern Class_Descriptor cd_S9535C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S9535C3, buf);
    S9535C3 &lv = *(new (buf) S9535C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S9535C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9535C3)");
    check_base_class_offset(lv, (S7073C3*), 0, "S9535C3");
    check_field_offset(lv, s9535c3f0, ABISELECT(80,52), "S9535C3.s9535c3f0");
    check_field_offset(lv, s9535c3f1, ABISELECT(96,64), "S9535C3.s9535c3f1");
    check_field_offset(lv, s9535c3f2, ABISELECT(104,68), "S9535C3.s9535c3f2");
    check_field_offset(lv, s9535c3f3, ABISELECT(120,84), "S9535C3.s9535c3f3");
    test_class_info(&lv, &cd_S9535C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9535C3(Test_S9535C3, "S9535C3", ABISELECT(128,88));

#else // __cplusplus

extern Class_Descriptor cd_S7073C3;
static Base_Class bases_S9535C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7073C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S9535C3 = {  "S9535C3", // class name
  bases_S9535C3, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(128,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  S9535C1  : S9535C2 {
  ::S9535C3 s9535c1f0;
  virtual void  v1(); // _ZN7S9535C12v1Ev
  virtual void  v2(); // _ZN7S9535C12v2Ev
  ~S9535C1(); // tgen
  S9535C1(); // tgen
};
//SIG(1 S9535C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ BC4{ m FC5{ m Fp Fi FC6{ m}} Fi[2] FC5 Fp FC7{ m Fp[2]} FC7} FC5 Fi FL[2] Fi}}


void  S9535C1 ::v1(){vfunc_called(this, "_ZN7S9535C12v1Ev");}
void  S9535C1 ::v2(){vfunc_called(this, "_ZN7S9535C12v2Ev");}
S9535C1 ::~S9535C1(){ note_dtor("S9535C1", this);} // tgen
S9535C1 ::S9535C1(){ note_ctor("S9535C1", this);} // tgen

static void Test_S9535C1()
{
  extern Class_Descriptor cd_S9535C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,24)];
    init_test(&cd_S9535C1, buf);
    S9535C1 *dp, &lv = *(dp=new (buf) S9535C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S9535C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9535C1)");
    check_base_class_offset(lv, (S9535C2*), 0, "S9535C1");
    check_field_offset(lv, s9535c1f0, ABISELECT(8,4), "S9535C1.s9535c1f0");
    test_class_info(&lv, &cd_S9535C1);
    dp->~S9535C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9535C1(Test_S9535C1, "S9535C1", ABISELECT(136,92));

#else // __cplusplus

extern void _ZN7S9535C1C1Ev();
extern void _ZN7S9535C1D1Ev();
Name_Map name_map_S9535C1[] = {
  NSPAIR(_ZN7S9535C1C1Ev),
  NSPAIR(_ZN7S9535C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9535C2;
extern VTBL_ENTRY _ZTI7S9535C2[];
extern  VTBL_ENTRY _ZTV7S9535C2[];
static Base_Class bases_S9535C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9535C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S9535C1[];
extern void _ZN7S9535C1D1Ev();
extern void _ZN7S9535C1D0Ev();
extern void _ZN7S9535C22v3Ev();
extern void _ZN7S9535C22v4Ev();
extern void _ZN7S9535C12v1Ev();
extern void _ZN7S9535C12v2Ev();
static  VTBL_ENTRY vtc_S9535C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9535C1[0]),
  (VTBL_ENTRY)&_ZN7S9535C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9535C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9535C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9535C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9535C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9535C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9535C1[];
extern  VTBL_ENTRY _ZTV7S9535C1[];
Class_Descriptor cd_S9535C1 = {  "S9535C1", // class name
  bases_S9535C1, 1,
  &(vtc_S9535C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,92), // object size
  NSPAIRA(_ZTI7S9535C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9535C1),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  S21421C1  {
  ::S21420C2 s21421c1f0;
  void  mf21421c1(); // _ZN8S21421C19mf21421c1Ev
  virtual  ~S21421C1(); // _ZN8S21421C1D1Ev
  S21421C1(); // tgen
};
//SIG(1 S21421C1) C1{ vd m FC2{ m Fi FC3{ m Fc[4] Fi[19]} Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi Fp[2]}}


void  S21421C1 ::mf21421c1(){}
 S21421C1 ::~S21421C1(){ note_dtor("S21421C1", this);}
S21421C1 ::S21421C1(){ note_ctor("S21421C1", this);} // tgen

static void Test_S21421C1()
{
  extern Class_Descriptor cd_S21421C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,43)];
    init_test(&cd_S21421C1, buf);
    S21421C1 *dp, &lv = *(dp=new (buf) S21421C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S21421C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21421C1)");
    check_field_offset(lv, s21421c1f0, ABISELECT(8,4), "S21421C1.s21421c1f0");
    test_class_info(&lv, &cd_S21421C1);
    dp->~S21421C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21421C1(Test_S21421C1, "S21421C1", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN8S21421C1C1Ev();
extern void _ZN8S21421C1D1Ev();
Name_Map name_map_S21421C1[] = {
  NSPAIR(_ZN8S21421C1C1Ev),
  NSPAIR(_ZN8S21421C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21421C1[];
extern void _ZN8S21421C1D1Ev();
extern void _ZN8S21421C1D0Ev();
static  VTBL_ENTRY vtc_S21421C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21421C1[0]),
  (VTBL_ENTRY)&_ZN8S21421C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21421C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21421C1[];
extern  VTBL_ENTRY _ZTV8S21421C1[];
Class_Descriptor cd_S21421C1 = {  "S21421C1", // class name
  0,0,//no base classes
  &(vtc_S21421C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI8S21421C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21421C1),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  S16486C1  {
  ::S7579C4 s16486c1f0;
  void  mf16486c1(); // _ZN8S16486C19mf16486c1Ev
};
//SIG(1 S16486C1) C1{ m FC2{ VBC3{ BC4{ vd v2 Fp[6]} vd v3 FC5{ VBC6{ v4 v5 v6 Fi FD[6] Fp[9]} BC4} Fi FL:52} VBC6 vd v1}}


void  S16486C1 ::mf16486c1(){}

static void Test_S16486C1()
{
  {
    init_simple_test("S16486C1");
    static S16486C1 lv;
    check2(sizeof(lv), ABISELECT(544,304), "sizeof(S16486C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16486C1)");
    check_field_offset(lv, s16486c1f0, 0, "S16486C1.s16486c1f0");
  }
}
static Arrange_To_Call_Me vS16486C1(Test_S16486C1, "S16486C1", ABISELECT(544,304));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3731C2  : S10180C178 {
  virtual  ~S3731C2(); // _ZN7S3731C2D1Ev
  virtual void  v4(); // _ZN7S3731C22v4Ev
  virtual void  v5(); // _ZN7S3731C22v5Ev
  virtual void  v6(); // _ZN7S3731C22v6Ev
  S3731C2(); // tgen
};
//SIG(-1 S3731C2) C1{ BC2{ vd m Fi} vd v1 v2 v3}


 S3731C2 ::~S3731C2(){ note_dtor("S3731C2", this);}
void  S3731C2 ::v4(){vfunc_called(this, "_ZN7S3731C22v4Ev");}
void  S3731C2 ::v5(){vfunc_called(this, "_ZN7S3731C22v5Ev");}
void  S3731C2 ::v6(){vfunc_called(this, "_ZN7S3731C22v6Ev");}
S3731C2 ::S3731C2(){ note_ctor("S3731C2", this);} // tgen

static void Test_S3731C2()
{
  extern Class_Descriptor cd_S3731C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3731C2, buf);
    S3731C2 *dp, &lv = *(dp=new (buf) S3731C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3731C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3731C2)");
    check_base_class_offset(lv, (S10180C178*), 0, "S3731C2");
    test_class_info(&lv, &cd_S3731C2);
    dp->~S3731C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3731C2(Test_S3731C2, "S3731C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3731C2C1Ev();
extern void _ZN7S3731C2D1Ev();
Name_Map name_map_S3731C2[] = {
  NSPAIR(_ZN7S3731C2C1Ev),
  NSPAIR(_ZN7S3731C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
static Base_Class bases_S3731C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3731C2[];
extern void _ZN7S3731C2D1Ev();
extern void _ZN7S3731C2D0Ev();
extern void _ZN7S3731C22v4Ev();
extern void _ZN7S3731C22v5Ev();
extern void _ZN7S3731C22v6Ev();
static  VTBL_ENTRY vtc_S3731C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3731C2[0]),
  (VTBL_ENTRY)&_ZN7S3731C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3731C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3731C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3731C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3731C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S3731C2[];
extern  VTBL_ENTRY _ZTV7S3731C2[];
Class_Descriptor cd_S3731C2 = {  "S3731C2", // class name
  bases_S3731C2, 1,
  &(vtc_S3731C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3731C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3731C2),7, //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  S3731C1  : S3731C2 {
  ::S10180C114 s3731c1f0;
  ::S10180C13 s3731c1f1;
  ::S10180C13 s3731c1f2;
  int s3731c1f3;
  void *s3731c1f4;
  int s3731c1f5;
  ::S10180C150 s3731c1f6;
  virtual void  v1(); // _ZN7S3731C12v1Ev
  virtual void  v2(); // _ZN7S3731C12v2Ev
  virtual void  v3(); // _ZN7S3731C12v3Ev
  ~S3731C1(); // tgen
  S3731C1(); // tgen
};
//SIG(1 S3731C1) C1{ BC2{ BC3{ vd m Fi} vd v4 v5 v6} v1 v2 v3 FC4{ m Fp} FC5{ m Fp Fi FC6{ m}} FC5 Fi Fp Fi FC7{ m Fp[2]}}


void  S3731C1 ::v1(){vfunc_called(this, "_ZN7S3731C12v1Ev");}
void  S3731C1 ::v2(){vfunc_called(this, "_ZN7S3731C12v2Ev");}
void  S3731C1 ::v3(){vfunc_called(this, "_ZN7S3731C12v3Ev");}
S3731C1 ::~S3731C1(){ note_dtor("S3731C1", this);} // tgen
S3731C1 ::S3731C1(){ note_ctor("S3731C1", this);} // tgen

static void Test_S3731C1()
{
  extern Class_Descriptor cd_S3731C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,15)];
    init_test(&cd_S3731C1, buf);
    S3731C1 *dp, &lv = *(dp=new (buf) S3731C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S3731C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3731C1)");
    check_base_class_offset(lv, (S10180C178*)(S3731C2*), 0, "S3731C1");
    check_base_class_offset(lv, (S3731C2*), 0, "S3731C1");
    check_field_offset(lv, s3731c1f0, ABISELECT(16,8), "S3731C1.s3731c1f0");
    check_field_offset(lv, s3731c1f1, ABISELECT(24,12), "S3731C1.s3731c1f1");
    check_field_offset(lv, s3731c1f2, ABISELECT(40,24), "S3731C1.s3731c1f2");
    check_field_offset(lv, s3731c1f3, ABISELECT(56,36), "S3731C1.s3731c1f3");
    check_field_offset(lv, s3731c1f4, ABISELECT(64,40), "S3731C1.s3731c1f4");
    check_field_offset(lv, s3731c1f5, ABISELECT(72,44), "S3731C1.s3731c1f5");
    check_field_offset(lv, s3731c1f6, ABISELECT(80,48), "S3731C1.s3731c1f6");
    test_class_info(&lv, &cd_S3731C1);
    dp->~S3731C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3731C1(Test_S3731C1, "S3731C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S3731C1C1Ev();
extern void _ZN7S3731C1D1Ev();
Name_Map name_map_S3731C1[] = {
  NSPAIR(_ZN7S3731C1C1Ev),
  NSPAIR(_ZN7S3731C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
extern Class_Descriptor cd_S3731C2;
extern VTBL_ENTRY _ZTI7S3731C2[];
extern  VTBL_ENTRY _ZTV7S3731C2[];
static Base_Class bases_S3731C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3731C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3731C1[];
extern void _ZN7S3731C1D1Ev();
extern void _ZN7S3731C1D0Ev();
extern void _ZN7S3731C22v4Ev();
extern void _ZN7S3731C22v5Ev();
extern void _ZN7S3731C22v6Ev();
extern void _ZN7S3731C12v1Ev();
extern void _ZN7S3731C12v2Ev();
extern void _ZN7S3731C12v3Ev();
static  VTBL_ENTRY vtc_S3731C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3731C1[0]),
  (VTBL_ENTRY)&_ZN7S3731C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3731C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3731C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3731C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3731C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3731C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3731C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3731C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3731C1[];
extern  VTBL_ENTRY _ZTV7S3731C1[];
Class_Descriptor cd_S3731C1 = {  "S3731C1", // class name
  bases_S3731C1, 2,
  &(vtc_S3731C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S3731C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3731C1),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  S3730C2  : S10180C178 {
  virtual  ~S3730C2(); // _ZN7S3730C2D1Ev
  virtual void  v4(); // _ZN7S3730C22v4Ev
  virtual void  v5(); // _ZN7S3730C22v5Ev
  virtual void  v6(); // _ZN7S3730C22v6Ev
  S3730C2(); // tgen
};
//SIG(-1 S3730C2) C1{ BC2{ vd m Fi} vd v1 v2 v3}


 S3730C2 ::~S3730C2(){ note_dtor("S3730C2", this);}
void  S3730C2 ::v4(){vfunc_called(this, "_ZN7S3730C22v4Ev");}
void  S3730C2 ::v5(){vfunc_called(this, "_ZN7S3730C22v5Ev");}
void  S3730C2 ::v6(){vfunc_called(this, "_ZN7S3730C22v6Ev");}
S3730C2 ::S3730C2(){ note_ctor("S3730C2", this);} // tgen

static void Test_S3730C2()
{
  extern Class_Descriptor cd_S3730C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3730C2, buf);
    S3730C2 *dp, &lv = *(dp=new (buf) S3730C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3730C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3730C2)");
    check_base_class_offset(lv, (S10180C178*), 0, "S3730C2");
    test_class_info(&lv, &cd_S3730C2);
    dp->~S3730C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3730C2(Test_S3730C2, "S3730C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3730C2C1Ev();
extern void _ZN7S3730C2D1Ev();
Name_Map name_map_S3730C2[] = {
  NSPAIR(_ZN7S3730C2C1Ev),
  NSPAIR(_ZN7S3730C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
static Base_Class bases_S3730C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3730C2[];
extern void _ZN7S3730C2D1Ev();
extern void _ZN7S3730C2D0Ev();
extern void _ZN7S3730C22v4Ev();
extern void _ZN7S3730C22v5Ev();
extern void _ZN7S3730C22v6Ev();
static  VTBL_ENTRY vtc_S3730C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3730C2[0]),
  (VTBL_ENTRY)&_ZN7S3730C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3730C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3730C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3730C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3730C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S3730C2[];
extern  VTBL_ENTRY _ZTV7S3730C2[];
Class_Descriptor cd_S3730C2 = {  "S3730C2", // class name
  bases_S3730C2, 1,
  &(vtc_S3730C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3730C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3730C2),7, //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  S3730C1  : S3730C2 {
  ::S10180C114 s3730c1f0;
  ::S10180C13 s3730c1f1;
  ::S10180C13 s3730c1f2;
  int s3730c1f3;
  void *s3730c1f4;
  ::S10180C150 s3730c1f5;
  virtual void  v1(); // _ZN7S3730C12v1Ev
  virtual void  v2(); // _ZN7S3730C12v2Ev
  virtual void  v3(); // _ZN7S3730C12v3Ev
  ~S3730C1(); // tgen
  S3730C1(); // tgen
};
//SIG(1 S3730C1) C1{ BC2{ BC3{ vd m Fi} vd v4 v5 v6} v1 v2 v3 FC4{ m Fp} FC5{ m Fp Fi FC6{ m}} FC5 Fi Fp FC7{ m Fp[2]}}


void  S3730C1 ::v1(){vfunc_called(this, "_ZN7S3730C12v1Ev");}
void  S3730C1 ::v2(){vfunc_called(this, "_ZN7S3730C12v2Ev");}
void  S3730C1 ::v3(){vfunc_called(this, "_ZN7S3730C12v3Ev");}
S3730C1 ::~S3730C1(){ note_dtor("S3730C1", this);} // tgen
S3730C1 ::S3730C1(){ note_ctor("S3730C1", this);} // tgen

static void Test_S3730C1()
{
  extern Class_Descriptor cd_S3730C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S3730C1, buf);
    S3730C1 *dp, &lv = *(dp=new (buf) S3730C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S3730C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3730C1)");
    check_base_class_offset(lv, (S10180C178*)(S3730C2*), 0, "S3730C1");
    check_base_class_offset(lv, (S3730C2*), 0, "S3730C1");
    check_field_offset(lv, s3730c1f0, ABISELECT(16,8), "S3730C1.s3730c1f0");
    check_field_offset(lv, s3730c1f1, ABISELECT(24,12), "S3730C1.s3730c1f1");
    check_field_offset(lv, s3730c1f2, ABISELECT(40,24), "S3730C1.s3730c1f2");
    check_field_offset(lv, s3730c1f3, ABISELECT(56,36), "S3730C1.s3730c1f3");
    check_field_offset(lv, s3730c1f4, ABISELECT(64,40), "S3730C1.s3730c1f4");
    check_field_offset(lv, s3730c1f5, ABISELECT(72,44), "S3730C1.s3730c1f5");
    test_class_info(&lv, &cd_S3730C1);
    dp->~S3730C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3730C1(Test_S3730C1, "S3730C1", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S3730C1C1Ev();
extern void _ZN7S3730C1D1Ev();
Name_Map name_map_S3730C1[] = {
  NSPAIR(_ZN7S3730C1C1Ev),
  NSPAIR(_ZN7S3730C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
extern Class_Descriptor cd_S3730C2;
extern VTBL_ENTRY _ZTI7S3730C2[];
extern  VTBL_ENTRY _ZTV7S3730C2[];
static Base_Class bases_S3730C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3730C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3730C1[];
extern void _ZN7S3730C1D1Ev();
extern void _ZN7S3730C1D0Ev();
extern void _ZN7S3730C22v4Ev();
extern void _ZN7S3730C22v5Ev();
extern void _ZN7S3730C22v6Ev();
extern void _ZN7S3730C12v1Ev();
extern void _ZN7S3730C12v2Ev();
extern void _ZN7S3730C12v3Ev();
static  VTBL_ENTRY vtc_S3730C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3730C1[0]),
  (VTBL_ENTRY)&_ZN7S3730C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3730C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3730C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3730C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3730C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3730C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3730C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3730C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3730C1[];
extern  VTBL_ENTRY _ZTV7S3730C1[];
Class_Descriptor cd_S3730C1 = {  "S3730C1", // class name
  bases_S3730C1, 2,
  &(vtc_S3730C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S3730C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3730C1),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  S7015C2  {
  int s7015c2f0;
  virtual void  v6(); // _ZN7S7015C22v6Ev
  virtual void  v7(); // _ZN7S7015C22v7Ev
  virtual void  v8(); // _ZN7S7015C22v8Ev
  virtual void  v9(); // _ZN7S7015C22v9Ev
  virtual void  v10(); // _ZN7S7015C23v10Ev
  virtual void  v11(); // _ZN7S7015C23v11Ev
  virtual void  v12(); // _ZN7S7015C23v12Ev
  virtual void  v13(); // _ZN7S7015C23v13Ev
  ~S7015C2(); // tgen
  S7015C2(); // tgen
};
//SIG(-1 S7015C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fi}


void  S7015C2 ::v6(){vfunc_called(this, "_ZN7S7015C22v6Ev");}
void  S7015C2 ::v7(){vfunc_called(this, "_ZN7S7015C22v7Ev");}
void  S7015C2 ::v8(){vfunc_called(this, "_ZN7S7015C22v8Ev");}
void  S7015C2 ::v9(){vfunc_called(this, "_ZN7S7015C22v9Ev");}
void  S7015C2 ::v10(){vfunc_called(this, "_ZN7S7015C23v10Ev");}
void  S7015C2 ::v11(){vfunc_called(this, "_ZN7S7015C23v11Ev");}
void  S7015C2 ::v12(){vfunc_called(this, "_ZN7S7015C23v12Ev");}
void  S7015C2 ::v13(){vfunc_called(this, "_ZN7S7015C23v13Ev");}
S7015C2 ::~S7015C2(){ note_dtor("S7015C2", this);} // tgen
S7015C2 ::S7015C2(){ note_ctor("S7015C2", this);} // tgen

static void Test_S7015C2()
{
  extern Class_Descriptor cd_S7015C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7015C2, buf);
    S7015C2 *dp, &lv = *(dp=new (buf) S7015C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7015C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7015C2)");
    check_field_offset(lv, s7015c2f0, ABISELECT(8,4), "S7015C2.s7015c2f0");
    test_class_info(&lv, &cd_S7015C2);
    dp->~S7015C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7015C2(Test_S7015C2, "S7015C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7015C2C1Ev();
extern void _ZN7S7015C2D1Ev();
Name_Map name_map_S7015C2[] = {
  NSPAIR(_ZN7S7015C2C1Ev),
  NSPAIR(_ZN7S7015C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7015C2[];
extern void _ZN7S7015C22v6Ev();
extern void _ZN7S7015C22v7Ev();
extern void _ZN7S7015C22v8Ev();
extern void _ZN7S7015C22v9Ev();
extern void _ZN7S7015C23v10Ev();
extern void _ZN7S7015C23v11Ev();
extern void _ZN7S7015C23v12Ev();
extern void _ZN7S7015C23v13Ev();
static  VTBL_ENTRY vtc_S7015C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7015C2[0]),
  (VTBL_ENTRY)&_ZN7S7015C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7015C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7015C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7015C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7015C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7015C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7015C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7015C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S7015C2[];
extern  VTBL_ENTRY _ZTV7S7015C2[];
Class_Descriptor cd_S7015C2 = {  "S7015C2", // class name
  0,0,//no base classes
  &(vtc_S7015C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7015C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7015C2),10, //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  S7015C3_nt  {
  __tsi64 s7015c3f0:52;
  __tsi64 s7015c3f1[2];
  virtual void  v14(); // _ZN10S7015C3_nt3v14Ev
  virtual void  v15(); // _ZN10S7015C3_nt3v15Ev
  virtual void  v16(); // _ZN10S7015C3_nt3v16Ev
  ~S7015C3_nt(); // tgen
  S7015C3_nt(); // tgen
};
//SIG(-1 S7015C3_nt) C1{ v1 v2 v3 FL:52 FL[2]}


void  S7015C3_nt ::v14(){vfunc_called(this, "_ZN10S7015C3_nt3v14Ev");}
void  S7015C3_nt ::v15(){vfunc_called(this, "_ZN10S7015C3_nt3v15Ev");}
void  S7015C3_nt ::v16(){vfunc_called(this, "_ZN10S7015C3_nt3v16Ev");}
S7015C3_nt ::~S7015C3_nt(){ note_dtor("S7015C3_nt", this);} // tgen
S7015C3_nt ::S7015C3_nt(){ note_ctor("S7015C3_nt", this);} // tgen

//skip512 S7015C3_nt

#else // __cplusplus

extern void _ZN10S7015C3_ntC1Ev();
extern void _ZN10S7015C3_ntD1Ev();
Name_Map name_map_S7015C3_nt[] = {
  NSPAIR(_ZN10S7015C3_ntC1Ev),
  NSPAIR(_ZN10S7015C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7015C3_nt[];
extern void _ZN10S7015C3_nt3v14Ev();
extern void _ZN10S7015C3_nt3v15Ev();
extern void _ZN10S7015C3_nt3v16Ev();
static  VTBL_ENTRY vtc_S7015C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7015C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7015C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7015C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7015C3_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI10S7015C3_nt[];
VTBL_ENTRY *P__ZTI10S7015C3_nt = _ZTI10S7015C3_nt; 
extern  VTBL_ENTRY _ZTV10S7015C3_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7015C1  : S7015C2 {
  short s7015c1f0;
  char s7015c1f1[2];
  ::S7015C3_nt s7015c1f2;
  virtual void  v1(); // _ZN7S7015C12v1Ev
  virtual void  v2(); // _ZN7S7015C12v2Ev
  virtual void  v3(); // _ZN7S7015C12v3Ev
  virtual void  v4(); // _ZN7S7015C12v4Ev
  virtual void  v5(); // _ZN7S7015C12v5Ev
  ~S7015C1(); // tgen
  S7015C1(); // tgen
};
//SIG(1 S7015C1) C1{ BC2{ v6 v7 v8 v9 v10 v11 v12 v13 Fi} v1 v2 v3 v4 v5 Fs Fc[2] FC3{ v14 v15 v16 FL:52 FL[2]}}


void  S7015C1 ::v1(){vfunc_called(this, "_ZN7S7015C12v1Ev");}
void  S7015C1 ::v2(){vfunc_called(this, "_ZN7S7015C12v2Ev");}
void  S7015C1 ::v3(){vfunc_called(this, "_ZN7S7015C12v3Ev");}
void  S7015C1 ::v4(){vfunc_called(this, "_ZN7S7015C12v4Ev");}
void  S7015C1 ::v5(){vfunc_called(this, "_ZN7S7015C12v5Ev");}
S7015C1 ::~S7015C1(){ note_dtor("S7015C1", this);} // tgen
S7015C1 ::S7015C1(){ note_ctor("S7015C1", this);} // tgen

static void Test_S7015C1()
{
  extern Class_Descriptor cd_S7015C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S7015C1, buf);
    S7015C1 *dp, &lv = *(dp=new (buf) S7015C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S7015C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7015C1)");
    check_base_class_offset(lv, (S7015C2*), 0, "S7015C1");
    check_field_offset(lv, s7015c1f0, ABISELECT(12,8), "S7015C1.s7015c1f0");
    check_field_offset(lv, s7015c1f1, ABISELECT(14,10), "S7015C1.s7015c1f1");
    check_field_offset(lv, s7015c1f2, ABISELECT(16,12), "S7015C1.s7015c1f2");
    test_class_info(&lv, &cd_S7015C1);
    dp->~S7015C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7015C1(Test_S7015C1, "S7015C1", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S7015C1C1Ev();
extern void _ZN7S7015C1D1Ev();
Name_Map name_map_S7015C1[] = {
  NSPAIR(_ZN7S7015C1C1Ev),
  NSPAIR(_ZN7S7015C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7015C2;
extern VTBL_ENTRY _ZTI7S7015C2[];
extern  VTBL_ENTRY _ZTV7S7015C2[];
static Base_Class bases_S7015C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7015C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7015C1[];
extern void _ZN7S7015C22v6Ev();
extern void _ZN7S7015C22v7Ev();
extern void _ZN7S7015C22v8Ev();
extern void _ZN7S7015C22v9Ev();
extern void _ZN7S7015C23v10Ev();
extern void _ZN7S7015C23v11Ev();
extern void _ZN7S7015C23v12Ev();
extern void _ZN7S7015C23v13Ev();
extern void _ZN7S7015C12v1Ev();
extern void _ZN7S7015C12v2Ev();
extern void _ZN7S7015C12v3Ev();
extern void _ZN7S7015C12v4Ev();
extern void _ZN7S7015C12v5Ev();
static  VTBL_ENTRY vtc_S7015C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7015C1[0]),
  (VTBL_ENTRY)&_ZN7S7015C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7015C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7015C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7015C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7015C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7015C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7015C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7015C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7015C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7015C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7015C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7015C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7015C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7015C1[];
extern  VTBL_ENTRY _ZTV7S7015C1[];
Class_Descriptor cd_S7015C1 = {  "S7015C1", // class name
  bases_S7015C1, 1,
  &(vtc_S7015C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S7015C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7015C1),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  S20330C2  {
  virtual void  v6(); // _ZN8S20330C22v6Ev
  ~S20330C2(); // tgen
  S20330C2(); // tgen
};
//SIG(-1 S20330C2) C1{ v1}


void  S20330C2 ::v6(){vfunc_called(this, "_ZN8S20330C22v6Ev");}
S20330C2 ::~S20330C2(){ note_dtor("S20330C2", this);} // tgen
S20330C2 ::S20330C2(){ note_ctor("S20330C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20330C2C1Ev();
extern void _ZN8S20330C2D1Ev();
Name_Map name_map_S20330C2[] = {
  NSPAIR(_ZN8S20330C2C1Ev),
  NSPAIR(_ZN8S20330C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20330C2[];
extern void _ZN8S20330C22v6Ev();
static  VTBL_ENTRY vtc_S20330C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20330C2[0]),
  (VTBL_ENTRY)&_ZN8S20330C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20330C2[];
extern  VTBL_ENTRY _ZTV8S20330C2[];
Class_Descriptor cd_S20330C2 = {  "S20330C2", // class name
  0,0,//no base classes
  &(vtc_S20330C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20330C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20330C2),3, //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  S20330C4  {
  void *s20330c4f0[2];
  virtual void  v7(); // _ZN8S20330C42v7Ev
  virtual void  v8(); // _ZN8S20330C42v8Ev
  virtual void  v9(); // _ZN8S20330C42v9Ev
  virtual void  v10(); // _ZN8S20330C43v10Ev
  virtual void  v11(); // _ZN8S20330C43v11Ev
  ~S20330C4(); // tgen
  S20330C4(); // tgen
};
//SIG(-1 S20330C4) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S20330C4 ::v7(){vfunc_called(this, "_ZN8S20330C42v7Ev");}
void  S20330C4 ::v8(){vfunc_called(this, "_ZN8S20330C42v8Ev");}
void  S20330C4 ::v9(){vfunc_called(this, "_ZN8S20330C42v9Ev");}
void  S20330C4 ::v10(){vfunc_called(this, "_ZN8S20330C43v10Ev");}
void  S20330C4 ::v11(){vfunc_called(this, "_ZN8S20330C43v11Ev");}
S20330C4 ::~S20330C4(){ note_dtor("S20330C4", this);} // tgen
S20330C4 ::S20330C4(){ note_ctor("S20330C4", this);} // tgen

static void Test_S20330C4()
{
  extern Class_Descriptor cd_S20330C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20330C4, buf);
    S20330C4 *dp, &lv = *(dp=new (buf) S20330C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20330C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20330C4)");
    check_field_offset(lv, s20330c4f0, ABISELECT(8,4), "S20330C4.s20330c4f0");
    test_class_info(&lv, &cd_S20330C4);
    dp->~S20330C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20330C4(Test_S20330C4, "S20330C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20330C4C1Ev();
extern void _ZN8S20330C4D1Ev();
Name_Map name_map_S20330C4[] = {
  NSPAIR(_ZN8S20330C4C1Ev),
  NSPAIR(_ZN8S20330C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20330C4[];
extern void _ZN8S20330C42v7Ev();
extern void _ZN8S20330C42v8Ev();
extern void _ZN8S20330C42v9Ev();
extern void _ZN8S20330C43v10Ev();
extern void _ZN8S20330C43v11Ev();
static  VTBL_ENTRY vtc_S20330C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20330C4[0]),
  (VTBL_ENTRY)&_ZN8S20330C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20330C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20330C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20330C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20330C43v11Ev,
};
extern VTBL_ENTRY _ZTI8S20330C4[];
extern  VTBL_ENTRY _ZTV8S20330C4[];
Class_Descriptor cd_S20330C4 = {  "S20330C4", // class name
  0,0,//no base classes
  &(vtc_S20330C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20330C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20330C4),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  S20330C5  {
  virtual void  v12(); // _ZN8S20330C53v12Ev
  ~S20330C5(); // tgen
  S20330C5(); // tgen
};
//SIG(-1 S20330C5) C1{ v1}


void  S20330C5 ::v12(){vfunc_called(this, "_ZN8S20330C53v12Ev");}
S20330C5 ::~S20330C5(){ note_dtor("S20330C5", this);} // tgen
S20330C5 ::S20330C5(){ note_ctor("S20330C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20330C5C1Ev();
extern void _ZN8S20330C5D1Ev();
Name_Map name_map_S20330C5[] = {
  NSPAIR(_ZN8S20330C5C1Ev),
  NSPAIR(_ZN8S20330C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20330C5[];
extern void _ZN8S20330C53v12Ev();
static  VTBL_ENTRY vtc_S20330C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20330C5[0]),
  (VTBL_ENTRY)&_ZN8S20330C53v12Ev,
};
extern VTBL_ENTRY _ZTI8S20330C5[];
extern  VTBL_ENTRY _ZTV8S20330C5[];
Class_Descriptor cd_S20330C5 = {  "S20330C5", // class name
  0,0,//no base classes
  &(vtc_S20330C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20330C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20330C5),3, //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  S20330C3  : S20330C4 , virtual S20330C5 {
  virtual void  v13(); // _ZN8S20330C33v13Ev
  virtual void  v14(); // _ZN8S20330C33v14Ev
  ~S20330C3(); // tgen
  S20330C3(); // tgen
};
//SIG(-1 S20330C3) C1{ BC2{ v3 v4 v5 v6 v7 Fp[2]} VBC3{ v8} v1 v2}


void  S20330C3 ::v13(){vfunc_called(this, "_ZN8S20330C33v13Ev");}
void  S20330C3 ::v14(){vfunc_called(this, "_ZN8S20330C33v14Ev");}
S20330C3 ::~S20330C3(){ note_dtor("S20330C3", this);} // tgen
S20330C3 ::S20330C3(){ note_ctor("S20330C3", this);} // tgen

static void Test_S20330C3()
{
  extern Class_Descriptor cd_S20330C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20330C3, buf);
    S20330C3 *dp, &lv = *(dp=new (buf) S20330C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20330C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20330C3)");
    check_base_class_offset(lv, (S20330C4*), 0, "S20330C3");
    check_base_class_offset(lv, (S20330C5*), ABISELECT(24,12), "S20330C3");
    test_class_info(&lv, &cd_S20330C3);
    dp->~S20330C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20330C3(Test_S20330C3, "S20330C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20330C3C1Ev();
extern void _ZN8S20330C3D1Ev();
Name_Map name_map_S20330C3[] = {
  NSPAIR(_ZN8S20330C3C1Ev),
  NSPAIR(_ZN8S20330C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20330C4;
extern VTBL_ENTRY _ZTI8S20330C4[];
extern  VTBL_ENTRY _ZTV8S20330C4[];
extern Class_Descriptor cd_S20330C5;
extern VTBL_ENTRY _ZTI8S20330C5[];
extern  VTBL_ENTRY _ZTV8S20330C5[];
static Base_Class bases_S20330C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20330C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S20330C5,    ABISELECT(24,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20330C3[];
extern void _ZN8S20330C42v7Ev();
extern void _ZN8S20330C42v8Ev();
extern void _ZN8S20330C42v9Ev();
extern void _ZN8S20330C43v10Ev();
extern void _ZN8S20330C43v11Ev();
extern void _ZN8S20330C33v13Ev();
extern void _ZN8S20330C33v14Ev();
extern void _ZN8S20330C53v12Ev();
static  VTBL_ENTRY vtc_S20330C3[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20330C3[0]),
  (VTBL_ENTRY)&_ZN8S20330C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20330C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20330C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20330C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20330C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20330C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20330C33v14Ev,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20330C3[0]),
  (VTBL_ENTRY)&_ZN8S20330C53v12Ev,
};
extern VTBL_ENTRY _ZTV8S20330C3[];
static  VTT_ENTRY vtt_S20330C3[] = {
  {&(_ZTV8S20330C3[3]),  3,14},
  {&(_ZTV8S20330C3[13]),  13,14},
};
extern VTBL_ENTRY _ZTI8S20330C3[];
extern  VTBL_ENTRY _ZTV8S20330C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20330C3[];
Class_Descriptor cd_S20330C3 = {  "S20330C3", // class name
  bases_S20330C3, 2,
  &(vtc_S20330C3[0]), // expected_vtbl_contents
  &(vtt_S20330C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20330C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20330C3),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20330C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20330C1  : virtual S20330C2 , S20330C3 {
  ::S20330C5 s20330c1f0;
  int s20330c1f1;
  long s20330c1f2;
  int s20330c1f3[10];
  virtual void  v1(); // _ZN8S20330C12v1Ev
  virtual void  v2(); // _ZN8S20330C12v2Ev
  virtual void  v3(); // _ZN8S20330C12v3Ev
  virtual void  v4(); // _ZN8S20330C12v4Ev
  virtual void  v5(); // _ZN8S20330C12v5Ev
  ~S20330C1(); // tgen
  S20330C1(); // tgen
};
//SIG(1 S20330C1) C1{ VBC2{ v6} BC3{ BC4{ v7 v8 v9 v10 v11 Fp[2]} VBC5{ v12} v13 v14} v1 v2 v3 v4 v5 FC5 Fi Fl Fi[10]}


void  S20330C1 ::v1(){vfunc_called(this, "_ZN8S20330C12v1Ev");}
void  S20330C1 ::v2(){vfunc_called(this, "_ZN8S20330C12v2Ev");}
void  S20330C1 ::v3(){vfunc_called(this, "_ZN8S20330C12v3Ev");}
void  S20330C1 ::v4(){vfunc_called(this, "_ZN8S20330C12v4Ev");}
void  S20330C1 ::v5(){vfunc_called(this, "_ZN8S20330C12v5Ev");}
S20330C1 ::~S20330C1(){ note_dtor("S20330C1", this);} // tgen
S20330C1 ::S20330C1(){ note_ctor("S20330C1", this);} // tgen

static void Test_S20330C1()
{
  extern Class_Descriptor cd_S20330C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S20330C1, buf);
    S20330C1 *dp, &lv = *(dp=new (buf) S20330C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S20330C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20330C1)");
    check_base_class_offset(lv, (S20330C2*), ABISELECT(88,64), "S20330C1");
    check_base_class_offset(lv, (S20330C4*)(S20330C3*), 0, "S20330C1");
    check_base_class_offset(lv, (S20330C5*)(S20330C3*), ABISELECT(96,68), "S20330C1");
    check_base_class_offset(lv, (S20330C3*), 0, "S20330C1");
    check_field_offset(lv, s20330c1f0, ABISELECT(24,12), "S20330C1.s20330c1f0");
    check_field_offset(lv, s20330c1f1, ABISELECT(32,16), "S20330C1.s20330c1f1");
    check_field_offset(lv, s20330c1f2, ABISELECT(40,20), "S20330C1.s20330c1f2");
    check_field_offset(lv, s20330c1f3, ABISELECT(48,24), "S20330C1.s20330c1f3");
    test_class_info(&lv, &cd_S20330C1);
    dp->~S20330C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20330C1(Test_S20330C1, "S20330C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN8S20330C1C1Ev();
extern void _ZN8S20330C1D1Ev();
Name_Map name_map_S20330C1[] = {
  NSPAIR(_ZN8S20330C1C1Ev),
  NSPAIR(_ZN8S20330C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20330C2;
extern VTBL_ENTRY _ZTI8S20330C2[];
extern  VTBL_ENTRY _ZTV8S20330C2[];
extern Class_Descriptor cd_S20330C4;
extern VTBL_ENTRY _ZTI8S20330C4[];
extern  VTBL_ENTRY _ZTV8S20330C4[];
extern Class_Descriptor cd_S20330C5;
extern VTBL_ENTRY _ZTI8S20330C5[];
extern  VTBL_ENTRY _ZTV8S20330C5[];
extern Class_Descriptor cd_S20330C3;
extern VTBL_ENTRY _ZTI8S20330C3[];
extern  VTBL_ENTRY _ZTV8S20330C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20330C3[];
static Base_Class bases_S20330C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20330C2,    ABISELECT(88,64), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20330C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20330C5,    ABISELECT(96,68), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20330C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20330C1[];
extern void _ZN8S20330C42v7Ev();
extern void _ZN8S20330C42v8Ev();
extern void _ZN8S20330C42v9Ev();
extern void _ZN8S20330C43v10Ev();
extern void _ZN8S20330C43v11Ev();
extern void _ZN8S20330C33v13Ev();
extern void _ZN8S20330C33v14Ev();
extern void _ZN8S20330C12v1Ev();
extern void _ZN8S20330C12v2Ev();
extern void _ZN8S20330C12v3Ev();
extern void _ZN8S20330C12v4Ev();
extern void _ZN8S20330C12v5Ev();
extern void _ZN8S20330C22v6Ev();
extern void _ZN8S20330C53v12Ev();
static  VTBL_ENTRY vtc_S20330C1[] = {
  ABISELECT(88,64),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20330C1[0]),
  (VTBL_ENTRY)&_ZN8S20330C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20330C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20330C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20330C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20330C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20330C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20330C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20330C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20330C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20330C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20330C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20330C12v5Ev,
  0,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S20330C1[0]),
  (VTBL_ENTRY)&_ZN8S20330C22v6Ev,
  0,
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S20330C1[0]),
  (VTBL_ENTRY)&_ZN8S20330C53v12Ev,
};
extern VTBL_ENTRY _ZTV8S20330C1[];
extern void _ZN8S20330C42v7Ev();
extern void _ZN8S20330C42v8Ev();
extern void _ZN8S20330C42v9Ev();
extern void _ZN8S20330C43v10Ev();
extern void _ZN8S20330C43v11Ev();
extern void _ZN8S20330C33v13Ev();
extern void _ZN8S20330C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20330C3__8S20330C1[] = {
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20330C3[0]),
  (VTBL_ENTRY)&_ZN8S20330C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20330C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20330C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20330C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20330C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20330C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20330C33v14Ev,
};
extern void _ZN8S20330C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20330C5__8S20330C3__8S20330C1[] = {
  0,
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S20330C3[0]),
  (VTBL_ENTRY)&_ZN8S20330C53v12Ev,
};
static  VTT_ENTRY vtt_S20330C1[] = {
  {&(_ZTV8S20330C1[4]),  4,24},
  {&(_tg__ZTV8S20330C3__8S20330C1[3]),  3,10},
  {&(_tg__ZTV8S20330C5__8S20330C3__8S20330C1[3]),  3,4},
  {&(_ZTV8S20330C1[19]),  19,24},
  {&(_ZTV8S20330C1[23]),  23,24},
};
extern VTBL_ENTRY _ZTI8S20330C1[];
extern  VTBL_ENTRY _ZTV8S20330C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20330C1[];
Class_Descriptor cd_S20330C1 = {  "S20330C1", // class name
  bases_S20330C1, 4,
  &(vtc_S20330C1[0]), // expected_vtbl_contents
  &(vtt_S20330C1[0]), // expected_vtt_contents
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI8S20330C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20330C1),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20330C1),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3732C2  : S10180C178 {
  virtual  ~S3732C2(); // _ZN7S3732C2D1Ev
  virtual void  v4(); // _ZN7S3732C22v4Ev
  virtual void  v5(); // _ZN7S3732C22v5Ev
  virtual void  v6(); // _ZN7S3732C22v6Ev
  S3732C2(); // tgen
};
//SIG(-1 S3732C2) C1{ BC2{ vd m Fi} vd v1 v2 v3}


 S3732C2 ::~S3732C2(){ note_dtor("S3732C2", this);}
void  S3732C2 ::v4(){vfunc_called(this, "_ZN7S3732C22v4Ev");}
void  S3732C2 ::v5(){vfunc_called(this, "_ZN7S3732C22v5Ev");}
void  S3732C2 ::v6(){vfunc_called(this, "_ZN7S3732C22v6Ev");}
S3732C2 ::S3732C2(){ note_ctor("S3732C2", this);} // tgen

static void Test_S3732C2()
{
  extern Class_Descriptor cd_S3732C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3732C2, buf);
    S3732C2 *dp, &lv = *(dp=new (buf) S3732C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3732C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3732C2)");
    check_base_class_offset(lv, (S10180C178*), 0, "S3732C2");
    test_class_info(&lv, &cd_S3732C2);
    dp->~S3732C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3732C2(Test_S3732C2, "S3732C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3732C2C1Ev();
extern void _ZN7S3732C2D1Ev();
Name_Map name_map_S3732C2[] = {
  NSPAIR(_ZN7S3732C2C1Ev),
  NSPAIR(_ZN7S3732C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
static Base_Class bases_S3732C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3732C2[];
extern void _ZN7S3732C2D1Ev();
extern void _ZN7S3732C2D0Ev();
extern void _ZN7S3732C22v4Ev();
extern void _ZN7S3732C22v5Ev();
extern void _ZN7S3732C22v6Ev();
static  VTBL_ENTRY vtc_S3732C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3732C2[0]),
  (VTBL_ENTRY)&_ZN7S3732C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3732C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3732C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3732C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3732C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S3732C2[];
extern  VTBL_ENTRY _ZTV7S3732C2[];
Class_Descriptor cd_S3732C2 = {  "S3732C2", // class name
  bases_S3732C2, 1,
  &(vtc_S3732C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3732C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3732C2),7, //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  S3732C1  : S3732C2 {
  ::S10180C114 s3732c1f0;
  ::S10180C150 s3732c1f1;
  ::S10180C13 s3732c1f2;
  int s3732c1f3;
  void *s3732c1f4;
  int s3732c1f5;
  virtual void  v1(); // _ZN7S3732C12v1Ev
  virtual void  v2(); // _ZN7S3732C12v2Ev
  virtual void  v3(); // _ZN7S3732C12v3Ev
  ~S3732C1(); // tgen
  S3732C1(); // tgen
};
//SIG(1 S3732C1) C1{ BC2{ BC3{ vd m Fi} vd v4 v5 v6} v1 v2 v3 FC4{ m Fp} FC5{ m Fp[2]} FC6{ m Fp Fi FC7{ m}} Fi Fp Fi}


void  S3732C1 ::v1(){vfunc_called(this, "_ZN7S3732C12v1Ev");}
void  S3732C1 ::v2(){vfunc_called(this, "_ZN7S3732C12v2Ev");}
void  S3732C1 ::v3(){vfunc_called(this, "_ZN7S3732C12v3Ev");}
S3732C1 ::~S3732C1(){ note_dtor("S3732C1", this);} // tgen
S3732C1 ::S3732C1(){ note_ctor("S3732C1", this);} // tgen

static void Test_S3732C1()
{
  extern Class_Descriptor cd_S3732C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S3732C1, buf);
    S3732C1 *dp, &lv = *(dp=new (buf) S3732C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S3732C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3732C1)");
    check_base_class_offset(lv, (S10180C178*)(S3732C2*), 0, "S3732C1");
    check_base_class_offset(lv, (S3732C2*), 0, "S3732C1");
    check_field_offset(lv, s3732c1f0, ABISELECT(16,8), "S3732C1.s3732c1f0");
    check_field_offset(lv, s3732c1f1, ABISELECT(24,12), "S3732C1.s3732c1f1");
    check_field_offset(lv, s3732c1f2, ABISELECT(40,20), "S3732C1.s3732c1f2");
    check_field_offset(lv, s3732c1f3, ABISELECT(56,32), "S3732C1.s3732c1f3");
    check_field_offset(lv, s3732c1f4, ABISELECT(64,36), "S3732C1.s3732c1f4");
    check_field_offset(lv, s3732c1f5, ABISELECT(72,40), "S3732C1.s3732c1f5");
    test_class_info(&lv, &cd_S3732C1);
    dp->~S3732C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3732C1(Test_S3732C1, "S3732C1", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S3732C1C1Ev();
extern void _ZN7S3732C1D1Ev();
Name_Map name_map_S3732C1[] = {
  NSPAIR(_ZN7S3732C1C1Ev),
  NSPAIR(_ZN7S3732C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
extern Class_Descriptor cd_S3732C2;
extern VTBL_ENTRY _ZTI7S3732C2[];
extern  VTBL_ENTRY _ZTV7S3732C2[];
static Base_Class bases_S3732C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3732C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3732C1[];
extern void _ZN7S3732C1D1Ev();
extern void _ZN7S3732C1D0Ev();
extern void _ZN7S3732C22v4Ev();
extern void _ZN7S3732C22v5Ev();
extern void _ZN7S3732C22v6Ev();
extern void _ZN7S3732C12v1Ev();
extern void _ZN7S3732C12v2Ev();
extern void _ZN7S3732C12v3Ev();
static  VTBL_ENTRY vtc_S3732C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3732C1[0]),
  (VTBL_ENTRY)&_ZN7S3732C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3732C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3732C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3732C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3732C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3732C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3732C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3732C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3732C1[];
extern  VTBL_ENTRY _ZTV7S3732C1[];
Class_Descriptor cd_S3732C1 = {  "S3732C1", // class name
  bases_S3732C1, 2,
  &(vtc_S3732C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S3732C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3732C1),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  S20359C2  {
  ::S20442C5 s20359c2f0;
  virtual  ~S20359C2(); // _ZN8S20359C2D1Ev
  virtual void  v7(); // _ZN8S20359C22v7Ev
  virtual void  v8(); // _ZN8S20359C22v8Ev
  virtual void  v9(); // _ZN8S20359C22v9Ev
  virtual void  v10(); // _ZN8S20359C23v10Ev
  virtual void  v11(); // _ZN8S20359C23v11Ev
  S20359C2(); // tgen
};
//SIG(-1 S20359C2) C1{ vd v1 v2 v3 v4 v5 FC2{ v6 v7 v8 v9 v10 Fp[2]}}


 S20359C2 ::~S20359C2(){ note_dtor("S20359C2", this);}
void  S20359C2 ::v7(){vfunc_called(this, "_ZN8S20359C22v7Ev");}
void  S20359C2 ::v8(){vfunc_called(this, "_ZN8S20359C22v8Ev");}
void  S20359C2 ::v9(){vfunc_called(this, "_ZN8S20359C22v9Ev");}
void  S20359C2 ::v10(){vfunc_called(this, "_ZN8S20359C23v10Ev");}
void  S20359C2 ::v11(){vfunc_called(this, "_ZN8S20359C23v11Ev");}
S20359C2 ::S20359C2(){ note_ctor("S20359C2", this);} // tgen

static void Test_S20359C2()
{
  extern Class_Descriptor cd_S20359C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20359C2, buf);
    S20359C2 *dp, &lv = *(dp=new (buf) S20359C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20359C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20359C2)");
    check_field_offset(lv, s20359c2f0, ABISELECT(8,4), "S20359C2.s20359c2f0");
    test_class_info(&lv, &cd_S20359C2);
    dp->~S20359C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20359C2(Test_S20359C2, "S20359C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20359C2C1Ev();
extern void _ZN8S20359C2D1Ev();
Name_Map name_map_S20359C2[] = {
  NSPAIR(_ZN8S20359C2C1Ev),
  NSPAIR(_ZN8S20359C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20359C2[];
extern void _ZN8S20359C2D1Ev();
extern void _ZN8S20359C2D0Ev();
extern void _ZN8S20359C22v7Ev();
extern void _ZN8S20359C22v8Ev();
extern void _ZN8S20359C22v9Ev();
extern void _ZN8S20359C23v10Ev();
extern void _ZN8S20359C23v11Ev();
static  VTBL_ENTRY vtc_S20359C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20359C2[0]),
  (VTBL_ENTRY)&_ZN8S20359C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20359C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20359C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20359C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20359C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20359C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20359C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S20359C2[];
extern  VTBL_ENTRY _ZTV8S20359C2[];
Class_Descriptor cd_S20359C2 = {  "S20359C2", // class name
  0,0,//no base classes
  &(vtc_S20359C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20359C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20359C2),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  S20359C1  : virtual S20359C2 {
  short  :0;
  virtual  ~S20359C1(); // _ZN8S20359C1D2Ev
  virtual void  v1(); // _ZN8S20359C12v1Ev
  virtual void  v2(); // _ZN8S20359C12v2Ev
  virtual void  v3(); // _ZN8S20359C12v3Ev
  virtual void  v4(); // _ZN8S20359C12v4Ev
  virtual void  v5(); // _ZN8S20359C12v5Ev
  virtual void  v6(); // _ZN8S20359C12v6Ev
  S20359C1(); // tgen
};
//SIG(1 S20359C1) C1{ VBC2{ vd v7 v8 v9 v10 v11 FC3{ v12 v13 v14 v15 v16 Fp[2]}} vd v1 v2 v3 v4 v5 v6 Fs:0}


 S20359C1 ::~S20359C1(){ note_dtor("S20359C1", this);}
void  S20359C1 ::v1(){vfunc_called(this, "_ZN8S20359C12v1Ev");}
void  S20359C1 ::v2(){vfunc_called(this, "_ZN8S20359C12v2Ev");}
void  S20359C1 ::v3(){vfunc_called(this, "_ZN8S20359C12v3Ev");}
void  S20359C1 ::v4(){vfunc_called(this, "_ZN8S20359C12v4Ev");}
void  S20359C1 ::v5(){vfunc_called(this, "_ZN8S20359C12v5Ev");}
void  S20359C1 ::v6(){vfunc_called(this, "_ZN8S20359C12v6Ev");}
S20359C1 ::S20359C1(){ note_ctor("S20359C1", this);} // tgen

static void Test_S20359C1()
{
  extern Class_Descriptor cd_S20359C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20359C1, buf);
    S20359C1 *dp, &lv = *(dp=new (buf) S20359C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20359C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20359C1)");
    check_base_class_offset(lv, (S20359C2*), ABISELECT(8,4), "S20359C1");
    test_class_info(&lv, &cd_S20359C1);
    dp->~S20359C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20359C1(Test_S20359C1, "S20359C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20359C1C1Ev();
extern void _ZN8S20359C1D2Ev();
Name_Map name_map_S20359C1[] = {
  NSPAIR(_ZN8S20359C1C1Ev),
  NSPAIR(_ZN8S20359C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20359C2;
extern VTBL_ENTRY _ZTI8S20359C2[];
extern  VTBL_ENTRY _ZTV8S20359C2[];
static Base_Class bases_S20359C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20359C2,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20359C1[];
extern void _ZN8S20359C1D1Ev();
extern void _ZN8S20359C1D0Ev();
extern void _ZN8S20359C12v1Ev();
extern void _ZN8S20359C12v2Ev();
extern void _ZN8S20359C12v3Ev();
extern void _ZN8S20359C12v4Ev();
extern void _ZN8S20359C12v5Ev();
extern void _ZN8S20359C12v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S20359C1D1Ev,_ZTv0_n12_N8S20359C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20359C1D1Ev,_ZThn4_N8S20359C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20359C1D0Ev,_ZTv0_n12_N8S20359C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20359C1D0Ev,_ZThn4_N8S20359C1D0Ev)() __attribute__((weak));
extern void _ZN8S20359C22v7Ev();
extern void _ZN8S20359C22v8Ev();
extern void _ZN8S20359C22v9Ev();
extern void _ZN8S20359C23v10Ev();
extern void _ZN8S20359C23v11Ev();
static  VTBL_ENTRY vtc_S20359C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20359C1[0]),
  (VTBL_ENTRY)&_ZN8S20359C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20359C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20359C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20359C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20359C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20359C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20359C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20359C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20359C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20359C1D1Ev,_ZTv0_n12_N8S20359C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20359C1D0Ev,_ZTv0_n12_N8S20359C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20359C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20359C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20359C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20359C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20359C23v11Ev,
};
extern VTBL_ENTRY _ZTV8S20359C1[];
static  VTT_ENTRY vtt_S20359C1[] = {
  {&(_ZTV8S20359C1[3]),  3,26},
  {&(_ZTV8S20359C1[19]),  19,26},
};
extern VTBL_ENTRY _ZTI8S20359C1[];
extern  VTBL_ENTRY _ZTV8S20359C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20359C1[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20359C1D0Ev,_ZTv0_n12_N8S20359C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20359C1D0Ev,_ZThn4_N8S20359C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20359C1D1Ev,_ZTv0_n12_N8S20359C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20359C1D1Ev,_ZThn4_N8S20359C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20359C1 = {  "S20359C1", // class name
  bases_S20359C1, 1,
  &(vtc_S20359C1[0]), // expected_vtbl_contents
  &(vtt_S20359C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20359C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20359C1),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20359C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6101C7  : virtual S10180C20 , S10180C93 {
  ~S6101C7(); // tgen
  S6101C7(); // tgen
};
//SIG(-1 S6101C7) C1{ VBC2{ m} BC3{ m FL}}


S6101C7 ::~S6101C7(){ note_dtor("S6101C7", this);} // tgen
S6101C7 ::S6101C7(){ note_ctor("S6101C7", this);} // tgen

static void Test_S6101C7()
{
  extern Class_Descriptor cd_S6101C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6101C7, buf);
    S6101C7 *dp, &lv = *(dp=new (buf) S6101C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6101C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6101C7)");
    check_base_class_offset(lv, (S10180C20*), 0, "S6101C7");
    check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S6101C7");
    test_class_info(&lv, &cd_S6101C7);
    dp->~S6101C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6101C7(Test_S6101C7, "S6101C7", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S6101C7C1Ev();
extern void _ZN7S6101C7D1Ev();
Name_Map name_map_S6101C7[] = {
  NSPAIR(_ZN7S6101C7C1Ev),
  NSPAIR(_ZN7S6101C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S6101C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S6101C7[];
static  VTBL_ENTRY vtc_S6101C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C7[0]),
};
extern VTBL_ENTRY _ZTV7S6101C7[];
static  VTT_ENTRY vtt_S6101C7[] = {
  {&(_ZTV7S6101C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6101C7[];
extern  VTBL_ENTRY _ZTV7S6101C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C7[];
Class_Descriptor cd_S6101C7 = {  "S6101C7", // class name
  bases_S6101C7, 2,
  &(vtc_S6101C7[0]), // expected_vtbl_contents
  &(vtt_S6101C7[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S6101C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6101C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6101C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6101C4  : virtual S10180C133 , virtual S10180C93 , S6101C7 {
  ~S6101C4(); // tgen
  S6101C4(); // tgen
};
//SIG(-1 S6101C4) C1{ VBC2{ m} VBC3{ m FL} BC4{ VBC5{ m} BC3}}


S6101C4 ::~S6101C4(){ note_dtor("S6101C4", this);} // tgen
S6101C4 ::S6101C4(){ note_ctor("S6101C4", this);} // tgen

static void Test_S6101C4()
{
  extern Class_Descriptor cd_S6101C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S6101C4, buf);
    S6101C4 *dp, &lv = *(dp=new (buf) S6101C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S6101C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6101C4)");
    check_base_class_offset(lv, (S10180C133*), 0, "S6101C4");
    /*is_ambiguous_... S6101C4::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S6101C4");
    check_base_class_offset(lv, (S10180C20*)(S6101C7*), 0, "S6101C4");
    check_base_class_offset(lv, (S10180C93*)(S6101C7*), ABISELECT(8,4), "S6101C4");
    check_base_class_offset(lv, (S6101C7*), 0, "S6101C4");
    test_class_info(&lv, &cd_S6101C4);
    dp->~S6101C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6101C4(Test_S6101C4, "S6101C4", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S6101C4C1Ev();
extern void _ZN7S6101C4D1Ev();
Name_Map name_map_S6101C4[] = {
  NSPAIR(_ZN7S6101C4C1Ev),
  NSPAIR(_ZN7S6101C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6101C7;
extern VTBL_ENTRY _ZTI7S6101C7[];
extern  VTBL_ENTRY _ZTV7S6101C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C7[];
static Base_Class bases_S6101C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S6101C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6101C4[];
static  VTBL_ENTRY vtc_S6101C4[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C4[0]),
};
extern VTBL_ENTRY _ZTV7S6101C4[];
static  VTBL_ENTRY _tg__ZTV7S6101C7__7S6101C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C7[0]),
};
static  VTT_ENTRY vtt_S6101C4[] = {
  {&(_ZTV7S6101C4[5]),  5,5},
  {&(_tg__ZTV7S6101C7__7S6101C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6101C4[];
extern  VTBL_ENTRY _ZTV7S6101C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C4[];
Class_Descriptor cd_S6101C4 = {  "S6101C4", // class name
  bases_S6101C4, 5,
  &(vtc_S6101C4[0]), // expected_vtbl_contents
  &(vtt_S6101C4[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S6101C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6101C4),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6101C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6101C3  : S6101C4 {
  ~S6101C3(); // tgen
  S6101C3(); // tgen
};
//SIG(-1 S6101C3) C1{ BC2{ VBC3{ m} VBC4{ m FL} BC5{ VBC6{ m} BC4}}}


S6101C3 ::~S6101C3(){ note_dtor("S6101C3", this);} // tgen
S6101C3 ::S6101C3(){ note_ctor("S6101C3", this);} // tgen

static void Test_S6101C3()
{
  extern Class_Descriptor cd_S6101C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S6101C3, buf);
    S6101C3 *dp, &lv = *(dp=new (buf) S6101C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S6101C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6101C3)");
    check_base_class_offset(lv, (S10180C133*)(S6101C4*), 0, "S6101C3");
    /*is_ambiguous_... S6101C4::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6101C4*), ABISELECT(16,12), "S6101C3");
    check_base_class_offset(lv, (S10180C20*)(S6101C7*)(S6101C4*), 0, "S6101C3");
    check_base_class_offset(lv, (S10180C93*)(S6101C7*)(S6101C4*), ABISELECT(8,4), "S6101C3");
    check_base_class_offset(lv, (S6101C7*)(S6101C4*), 0, "S6101C3");
    check_base_class_offset(lv, (S6101C4*), 0, "S6101C3");
    test_class_info(&lv, &cd_S6101C3);
    dp->~S6101C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6101C3(Test_S6101C3, "S6101C3", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S6101C3C1Ev();
extern void _ZN7S6101C3D1Ev();
Name_Map name_map_S6101C3[] = {
  NSPAIR(_ZN7S6101C3C1Ev),
  NSPAIR(_ZN7S6101C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6101C7;
extern VTBL_ENTRY _ZTI7S6101C7[];
extern  VTBL_ENTRY _ZTV7S6101C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C7[];
extern Class_Descriptor cd_S6101C4;
extern VTBL_ENTRY _ZTI7S6101C4[];
extern  VTBL_ENTRY _ZTV7S6101C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C4[];
static Base_Class bases_S6101C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S6101C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6101C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6101C3[];
static  VTBL_ENTRY vtc_S6101C3[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C3[0]),
};
extern VTBL_ENTRY _ZTV7S6101C3[];
static  VTBL_ENTRY _tg__ZTV7S6101C4__7S6101C3[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C77S6101C4__7S6101C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C7[0]),
};
static  VTT_ENTRY vtt_S6101C3[] = {
  {&(_ZTV7S6101C3[5]),  5,5},
  {&(_tg__ZTV7S6101C4__7S6101C3[5]),  5,5},
  {&(_tg__ZTV7S6101C77S6101C4__7S6101C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6101C3[];
extern  VTBL_ENTRY _ZTV7S6101C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C3[];
Class_Descriptor cd_S6101C3 = {  "S6101C3", // class name
  bases_S6101C3, 6,
  &(vtc_S6101C3[0]), // expected_vtbl_contents
  &(vtt_S6101C3[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S6101C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6101C3),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6101C3),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6101C10  : virtual S6101C7 {
  ::S10180C138 s6101c10f0;
  ~S6101C10(); // tgen
  S6101C10(); // tgen
};
//SIG(-1 S6101C10) C1{ VBC2{ VBC3{ m} BC4{ m FL}} FC5{ m}}


S6101C10 ::~S6101C10(){ note_dtor("S6101C10", this);} // tgen
S6101C10 ::S6101C10(){ note_ctor("S6101C10", this);} // tgen

static void Test_S6101C10()
{
  extern Class_Descriptor cd_S6101C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6101C10, buf);
    S6101C10 *dp, &lv = *(dp=new (buf) S6101C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6101C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6101C10)");
    check_base_class_offset(lv, (S10180C20*)(S6101C7*), 0, "S6101C10");
    check_base_class_offset(lv, (S10180C93*)(S6101C7*), ABISELECT(24,12), "S6101C10");
    check_base_class_offset(lv, (S6101C7*), ABISELECT(16,8), "S6101C10");
    check_field_offset(lv, s6101c10f0, ABISELECT(8,4), "S6101C10.s6101c10f0");
    test_class_info(&lv, &cd_S6101C10);
    dp->~S6101C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6101C10(Test_S6101C10, "S6101C10", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S6101C10C1Ev();
extern void _ZN8S6101C10D1Ev();
Name_Map name_map_S6101C10[] = {
  NSPAIR(_ZN8S6101C10C1Ev),
  NSPAIR(_ZN8S6101C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6101C7;
extern VTBL_ENTRY _ZTI7S6101C7[];
extern  VTBL_ENTRY _ZTV7S6101C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C7[];
static Base_Class bases_S6101C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6101C7,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6101C10[];
static  VTBL_ENTRY vtc_S6101C10[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6101C10[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6101C10[0]),
};
extern VTBL_ENTRY _ZTV8S6101C10[];
static  VTBL_ENTRY _tg__ZTV7S6101C7__8S6101C10[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C7[0]),
};
static  VTT_ENTRY vtt_S6101C10[] = {
  {&(_ZTV8S6101C10[4]),  4,7},
  {&(_ZTV8S6101C10[7]),  7,7},
  {&(_tg__ZTV7S6101C7__8S6101C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6101C10[];
extern  VTBL_ENTRY _ZTV8S6101C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6101C10[];
Class_Descriptor cd_S6101C10 = {  "S6101C10", // class name
  bases_S6101C10, 3,
  &(vtc_S6101C10[0]), // expected_vtbl_contents
  &(vtt_S6101C10[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S6101C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6101C10),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6101C10),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6101C9  : virtual S6101C3 , virtual S6101C10 {
  int s6101c9f0;
  ~S6101C9(); // tgen
  S6101C9(); // tgen
};
//SIG(-1 S6101C9) C1{ VBC2{ BC3{ VBC4{ m} VBC5{ m FL} BC6{ VBC7{ m} BC5}}} VBC8{ VBC6 FC9{ m}} Fi}


S6101C9 ::~S6101C9(){ note_dtor("S6101C9", this);} // tgen
S6101C9 ::S6101C9(){ note_ctor("S6101C9", this);} // tgen

static void Test_S6101C9()
{
  extern Class_Descriptor cd_S6101C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S6101C9, buf);
    S6101C9 *dp, &lv = *(dp=new (buf) S6101C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S6101C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6101C9)");
    check_base_class_offset(lv, (S10180C133*)(S6101C4*)(S6101C3*), 0, "S6101C9");
    /*is_ambiguous_... S6101C4::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6101C4*)(S6101C3*), ABISELECT(32,20), "S6101C9");
    check_base_class_offset(lv, (S10180C20*)(S6101C7*)(S6101C4*)(S6101C3*), 0, "S6101C9");
    /*is_ambiguous_... S6101C9::S6101C7 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6101C7*), 0, "S6101C9");
    check_base_class_offset(lv, (S10180C93*)(S6101C7*)(S6101C4*)(S6101C3*), ABISELECT(24,12), "S6101C9");
    check_base_class_offset(lv, (S6101C7*)(S6101C4*)(S6101C3*), ABISELECT(16,8), "S6101C9");
    check_base_class_offset(lv, (S6101C4*)(S6101C3*), ABISELECT(16,8), "S6101C9");
    check_base_class_offset(lv, (S6101C3*), ABISELECT(16,8), "S6101C9");
    /*is_ambiguous_... S6101C9::S6101C7 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6101C7*), ABISELECT(64,40), "S6101C9");
    check_base_class_offset(lv, (S6101C7*)(S6101C10*), ABISELECT(56,36), "S6101C9");
    check_base_class_offset(lv, (S6101C10*), ABISELECT(40,28), "S6101C9");
    check_field_offset(lv, s6101c9f0, ABISELECT(8,4), "S6101C9.s6101c9f0");
    test_class_info(&lv, &cd_S6101C9);
    dp->~S6101C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6101C9(Test_S6101C9, "S6101C9", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S6101C9C1Ev();
extern void _ZN7S6101C9D1Ev();
Name_Map name_map_S6101C9[] = {
  NSPAIR(_ZN7S6101C9C1Ev),
  NSPAIR(_ZN7S6101C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6101C7;
extern VTBL_ENTRY _ZTI7S6101C7[];
extern  VTBL_ENTRY _ZTV7S6101C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C7[];
extern Class_Descriptor cd_S6101C4;
extern VTBL_ENTRY _ZTI7S6101C4[];
extern  VTBL_ENTRY _ZTV7S6101C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C4[];
extern Class_Descriptor cd_S6101C3;
extern VTBL_ENTRY _ZTI7S6101C3[];
extern  VTBL_ENTRY _ZTV7S6101C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C3[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6101C7;
extern VTBL_ENTRY _ZTI7S6101C7[];
extern  VTBL_ENTRY _ZTV7S6101C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C7[];
extern Class_Descriptor cd_S6101C10;
extern VTBL_ENTRY _ZTI8S6101C10[];
extern  VTBL_ENTRY _ZTV8S6101C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6101C10[];
static Base_Class bases_S6101C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S6101C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6101C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6101C3,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S10180C93,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S6101C7,    ABISELECT(56,36), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6101C10,    ABISELECT(40,28), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6101C9[];
static  VTBL_ENTRY vtc_S6101C9[] = {
  ABISELECT(56,36),
  ABISELECT(40,28),
  0,
  ABISELECT(32,20),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C9[0]),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6101C9[0]),
  ABISELECT(-40,-28),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S6101C9[0]),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S6101C9[0]),
};
extern VTBL_ENTRY _ZTV7S6101C9[];
static  VTBL_ENTRY _tg__ZTV7S6101C3__7S6101C9[] = {
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C47S6101C3__7S6101C9[] = {
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C77S6101C47S6101C3__7S6101C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6101C10__7S6101C9[] = {
  ABISELECT(-40,-28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6101C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C7__8S6101C10__7S6101C9[] = {
  ABISELECT(-56,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6101C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C7__A1__7S6101C9[] = {
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C7[0]),
};
static  VTT_ENTRY vtt_S6101C9[] = {
  {&(_ZTV7S6101C9[8]),  8,20},
  {&(_ZTV7S6101C9[13]),  13,20},
  {&(_ZTV7S6101C9[17]),  17,20},
  {&(_ZTV7S6101C9[20]),  20,20},
  {&(_tg__ZTV7S6101C3__7S6101C9[5]),  5,5},
  {&(_tg__ZTV7S6101C47S6101C3__7S6101C9[5]),  5,5},
  {&(_tg__ZTV7S6101C77S6101C47S6101C3__7S6101C9[3]),  3,3},
  {&(_tg__ZTV8S6101C10__7S6101C9[4]),  4,4},
  {&(_tg__ZTV7S6101C7__8S6101C10__7S6101C9[3]),  3,3},
  {&(_tg__ZTV7S6101C7__A1__7S6101C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6101C9[];
extern  VTBL_ENTRY _ZTV7S6101C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C9[];
Class_Descriptor cd_S6101C9 = {  "S6101C9", // class name
  bases_S6101C9, 10,
  &(vtc_S6101C9[0]), // expected_vtbl_contents
  &(vtt_S6101C9[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S6101C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6101C9),20, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6101C9),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6101C1  : S10180C138 , S6101C3 , S10180C133 , virtual S6101C9 {
  ~S6101C1(); // tgen
  S6101C1(); // tgen
};
//SIG(1 S6101C1) C1{ BC2{ m} BC3{ BC4{ VBC5{ m} VBC6{ m FL} BC7{ VBC8{ m} BC6}}} BC5 VBC9{ VBC3 VBC10{ VBC7 FC2} Fi}}


S6101C1 ::~S6101C1(){ note_dtor("S6101C1", this);} // tgen
S6101C1 ::S6101C1(){ note_ctor("S6101C1", this);} // tgen

static void Test_S6101C1()
{
  extern Class_Descriptor cd_S6101C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S6101C1, buf);
    S6101C1 *dp, &lv = *(dp=new (buf) S6101C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S6101C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6101C1)");
    check_base_class_offset(lv, (S10180C138*), 0, "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S10180C133*)(S6101C4*)(S6101C3*), ABISELECT(16,12), "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S10180C133*)(S6101C4*)(S6101C3*), ABISELECT(16,12), "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6101C4*)(S6101C3*), ABISELECT(16,12), "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6101C4*)(S6101C3*), ABISELECT(16,12), "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6101C7*)(S6101C4*)(S6101C3*), 0, "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6101C7*)(S6101C4*)(S6101C3*), 0, "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C7 */ AMB_check_base_class_offset(lv, (S10180C20*)(S6101C7*), 0, "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6101C7*)(S6101C4*)(S6101C3*), ABISELECT(8,4), "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S6101C7*)(S6101C4*)(S6101C3*), 0, "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S6101C4*)(S6101C3*), 0, "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S6101C3*), 0, "S6101C1");
    /*is_ambiguous_... S6101C1::S10180C133 */ AMB_check_base_class_offset(lv, (S10180C133*), 0, "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6101C7*)(S6101C4*)(S6101C3*), ABISELECT(48,32), "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S6101C7*)(S6101C4*)(S6101C3*), ABISELECT(40,28), "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C3 */ AMB_check_base_class_offset(lv, (S6101C4*)(S6101C3*), ABISELECT(40,28), "S6101C1");
    check_base_class_offset(lv, (S6101C3*)(S6101C9*), ABISELECT(40,28), "S6101C1");
    /*is_ambiguous_... S6101C1::S6101C7 */ AMB_check_base_class_offset(lv, (S10180C93*)(S6101C7*), ABISELECT(80,52), "S6101C1");
    check_base_class_offset(lv, (S6101C7*)(S6101C10*), ABISELECT(72,48), "S6101C1");
    check_base_class_offset(lv, (S6101C10*)(S6101C9*), ABISELECT(56,40), "S6101C1");
    check_base_class_offset(lv, (S6101C9*), ABISELECT(24,20), "S6101C1");
    test_class_info(&lv, &cd_S6101C1);
    dp->~S6101C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6101C1(Test_S6101C1, "S6101C1", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S6101C1C1Ev();
extern void _ZN7S6101C1D1Ev();
Name_Map name_map_S6101C1[] = {
  NSPAIR(_ZN7S6101C1C1Ev),
  NSPAIR(_ZN7S6101C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6101C7;
extern VTBL_ENTRY _ZTI7S6101C7[];
extern  VTBL_ENTRY _ZTV7S6101C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C7[];
extern Class_Descriptor cd_S6101C4;
extern VTBL_ENTRY _ZTI7S6101C4[];
extern  VTBL_ENTRY _ZTV7S6101C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C4[];
extern Class_Descriptor cd_S6101C3;
extern VTBL_ENTRY _ZTI7S6101C3[];
extern  VTBL_ENTRY _ZTV7S6101C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C3[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6101C7;
extern VTBL_ENTRY _ZTI7S6101C7[];
extern  VTBL_ENTRY _ZTV7S6101C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C7[];
extern Class_Descriptor cd_S6101C4;
extern VTBL_ENTRY _ZTI7S6101C4[];
extern  VTBL_ENTRY _ZTV7S6101C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C4[];
extern Class_Descriptor cd_S6101C3;
extern VTBL_ENTRY _ZTI7S6101C3[];
extern  VTBL_ENTRY _ZTV7S6101C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C3[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S6101C7;
extern VTBL_ENTRY _ZTI7S6101C7[];
extern  VTBL_ENTRY _ZTV7S6101C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C7[];
extern Class_Descriptor cd_S6101C10;
extern VTBL_ENTRY _ZTI8S6101C10[];
extern  VTBL_ENTRY _ZTV8S6101C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6101C10[];
extern Class_Descriptor cd_S6101C9;
extern VTBL_ENTRY _ZTI7S6101C9[];
extern  VTBL_ENTRY _ZTV7S6101C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C9[];
static Base_Class bases_S6101C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C133,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    5, //immediately_derived
  0, 0},
  {&cd_S6101C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6101C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6101C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C93,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S6101C7,    ABISELECT(40,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6101C4,    ABISELECT(40,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6101C3,    ABISELECT(40,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S6101C7,    ABISELECT(72,48), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6101C10,    ABISELECT(56,40), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S6101C9,    ABISELECT(24,20), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6101C1[];
static  VTBL_ENTRY vtc_S6101C1[] = {
  ABISELECT(72,48),
  ABISELECT(56,40),
  ABISELECT(40,28),
  ABISELECT(24,20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C1[0]),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(-24,-20),
  -8,
  -8,
  ABISELECT(16,8),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI7S6101C1[0]),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-40,-28),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S6101C1[0]),
  ABISELECT(-56,-40),
  ABISELECT(16,8),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S6101C1[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S6101C1[0]),
};
extern VTBL_ENTRY _ZTV7S6101C1[];
static  VTBL_ENTRY _tg__ZTV7S6101C3__A__7S6101C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C47S6101C3__7S6101C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C77S6101C47S6101C3__7S6101C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C9__7S6101C1[] = {
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(-24,-20),
  -8,
  -8,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C3__7S6101C9__7S6101C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-40,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6101C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6101C10__7S6101C9__7S6101C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(16,8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S6101C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C7__A1__7S6101C9__7S6101C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6101C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C3__A1__7S6101C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C47S6101C3__A1__7S6101C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C77S6101C47S6101C3__A1__7S6101C1[] = {
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6101C10__7S6101C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6101C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C7__8S6101C10__7S6101C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6101C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6101C7__A2__7S6101C1[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6101C7[0]),
};
static  VTT_ENTRY vtt_S6101C1[] = {
  {&(_ZTV7S6101C1[9]),  9,29},
  {&(_tg__ZTV7S6101C3__A__7S6101C1[5]),  5,5},
  {&(_tg__ZTV7S6101C47S6101C3__7S6101C1[5]),  5,5},
  {&(_tg__ZTV7S6101C77S6101C47S6101C3__7S6101C1[3]),  3,3},
  {&(_ZTV7S6101C1[17]),  17,29},
  {&(_ZTV7S6101C1[22]),  22,29},
  {&(_ZTV7S6101C1[26]),  26,29},
  {&(_ZTV7S6101C1[29]),  29,29},
  {&(_tg__ZTV7S6101C9__7S6101C1[8]),  8,8},
  {&(_tg__ZTV7S6101C3__7S6101C9__7S6101C1[5]),  5,5},
  {&(_tg__ZTV8S6101C10__7S6101C9__7S6101C1[4]),  4,4},
  {&(_tg__ZTV7S6101C7__A1__7S6101C9__7S6101C1[3]),  3,3},
  {&(_tg__ZTV7S6101C3__A1__7S6101C1[5]),  5,5},
  {&(_tg__ZTV7S6101C47S6101C3__A1__7S6101C1[5]),  5,5},
  {&(_tg__ZTV7S6101C77S6101C47S6101C3__A1__7S6101C1[3]),  3,3},
  {&(_tg__ZTV8S6101C10__7S6101C1[4]),  4,4},
  {&(_tg__ZTV7S6101C7__8S6101C10__7S6101C1[3]),  3,3},
  {&(_tg__ZTV7S6101C7__A2__7S6101C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6101C1[];
extern  VTBL_ENTRY _ZTV7S6101C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6101C1[];
Class_Descriptor cd_S6101C1 = {  "S6101C1", // class name
  bases_S6101C1, 17,
  &(vtc_S6101C1[0]), // expected_vtbl_contents
  &(vtt_S6101C1[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S6101C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6101C1),29, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6101C1),18, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3826C2  : S10180C178 {
  char s3826c2f0;
  int s3826c2f1[2];
  void *s3826c2f2[2];
  virtual  ~S3826C2(); // _ZN7S3826C2D1Ev
  virtual void  v2(); // _ZN7S3826C22v2Ev
  virtual void  v3(); // _ZN7S3826C22v3Ev
  virtual void  v4(); // _ZN7S3826C22v4Ev
  S3826C2(); // tgen
};
//SIG(-1 S3826C2) C1{ BC2{ vd m Fi} vd v1 v2 v3 Fc Fi[2] Fp[2]}


 S3826C2 ::~S3826C2(){ note_dtor("S3826C2", this);}
void  S3826C2 ::v2(){vfunc_called(this, "_ZN7S3826C22v2Ev");}
void  S3826C2 ::v3(){vfunc_called(this, "_ZN7S3826C22v3Ev");}
void  S3826C2 ::v4(){vfunc_called(this, "_ZN7S3826C22v4Ev");}
S3826C2 ::S3826C2(){ note_ctor("S3826C2", this);} // tgen

static void Test_S3826C2()
{
  extern Class_Descriptor cd_S3826C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S3826C2, buf);
    S3826C2 *dp, &lv = *(dp=new (buf) S3826C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S3826C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3826C2)");
    check_base_class_offset(lv, (S10180C178*), 0, "S3826C2");
    check_field_offset(lv, s3826c2f0, ABISELECT(12,8), "S3826C2.s3826c2f0");
    check_field_offset(lv, s3826c2f1, ABISELECT(16,12), "S3826C2.s3826c2f1");
    check_field_offset(lv, s3826c2f2, ABISELECT(24,20), "S3826C2.s3826c2f2");
    test_class_info(&lv, &cd_S3826C2);
    dp->~S3826C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3826C2(Test_S3826C2, "S3826C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S3826C2C1Ev();
extern void _ZN7S3826C2D1Ev();
Name_Map name_map_S3826C2[] = {
  NSPAIR(_ZN7S3826C2C1Ev),
  NSPAIR(_ZN7S3826C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
static Base_Class bases_S3826C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3826C2[];
extern void _ZN7S3826C2D1Ev();
extern void _ZN7S3826C2D0Ev();
extern void _ZN7S3826C22v2Ev();
extern void _ZN7S3826C22v3Ev();
extern void _ZN7S3826C22v4Ev();
static  VTBL_ENTRY vtc_S3826C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3826C2[0]),
  (VTBL_ENTRY)&_ZN7S3826C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3826C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3826C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3826C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3826C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S3826C2[];
extern  VTBL_ENTRY _ZTV7S3826C2[];
Class_Descriptor cd_S3826C2 = {  "S3826C2", // class name
  bases_S3826C2, 1,
  &(vtc_S3826C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S3826C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3826C2),7, //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  S3826C1  : S3826C2 {
  void *s3826c1f0;
  ::S15696C12 s3826c1f1;
  virtual void  v1(); // _ZN7S3826C12v1Ev
  ~S3826C1(); // tgen
  S3826C1(); // tgen
};
//SIG(1 S3826C1) C1{ BC2{ BC3{ vd m Fi} vd v2 v3 v4 Fc Fi[2] Fp[2]} v1 Fp FU4{ m Fi FC5{ Fi:4 Fi:6 Fi:22}}}


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

static void Test_S3826C1()
{
  extern Class_Descriptor cd_S3826C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3826C1, buf);
    S3826C1 *dp, &lv = *(dp=new (buf) S3826C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3826C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3826C1)");
    check_base_class_offset(lv, (S10180C178*)(S3826C2*), 0, "S3826C1");
    check_base_class_offset(lv, (S3826C2*), 0, "S3826C1");
    check_field_offset(lv, s3826c1f0, ABISELECT(40,28), "S3826C1.s3826c1f0");
    check_field_offset(lv, s3826c1f1, ABISELECT(48,32), "S3826C1.s3826c1f1");
    test_class_info(&lv, &cd_S3826C1);
    dp->~S3826C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3826C1(Test_S3826C1, "S3826C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3826C1C1Ev();
extern void _ZN7S3826C1D1Ev();
Name_Map name_map_S3826C1[] = {
  NSPAIR(_ZN7S3826C1C1Ev),
  NSPAIR(_ZN7S3826C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
extern Class_Descriptor cd_S3826C2;
extern VTBL_ENTRY _ZTI7S3826C2[];
extern  VTBL_ENTRY _ZTV7S3826C2[];
static Base_Class bases_S3826C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3826C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3826C1[];
extern void _ZN7S3826C1D1Ev();
extern void _ZN7S3826C1D0Ev();
extern void _ZN7S3826C22v2Ev();
extern void _ZN7S3826C22v3Ev();
extern void _ZN7S3826C22v4Ev();
extern void _ZN7S3826C12v1Ev();
static  VTBL_ENTRY vtc_S3826C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3826C1[0]),
  (VTBL_ENTRY)&_ZN7S3826C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3826C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3826C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3826C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3826C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3826C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3826C1[];
extern  VTBL_ENTRY _ZTV7S3826C1[];
Class_Descriptor cd_S3826C1 = {  "S3826C1", // class name
  bases_S3826C1, 2,
  &(vtc_S3826C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3826C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3826C1),8, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21794C1  {
  void *s21794c1f0[2];
  ::S10180C161 s21794c1f1;
  unsigned char s21794c1f2:1;
  unsigned char s21794c1f3:1;
  unsigned char s21794c1f4:1;
  int s21794c1f5:4;
  int s21794c1f6;
  ::S10180C147 s21794c1f7;
  ::S10180C147 s21794c1f8;
  void  mf21794c1(); // _ZN8S21794C19mf21794c1Ev
  virtual  ~S21794C1(); // _ZN8S21794C1D1Ev
  S21794C1(); // tgen
};
//SIG(1 S21794C1) C1{ vd m Fp[2] FC2{ m Fp Fi[2] FC3{ m}} Fc:1 Fc:1 Fc:1 Fi:4 Fi FC4{ m FC5{ m FL}} FC4}


void  S21794C1 ::mf21794c1(){}
 S21794C1 ::~S21794C1(){ note_dtor("S21794C1", this);}
S21794C1 ::S21794C1(){ note_ctor("S21794C1", this);} // tgen

static void Test_S21794C1()
{
  extern Class_Descriptor cd_S21794C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S21794C1, buf);
    S21794C1 *dp, &lv = *(dp=new (buf) S21794C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S21794C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21794C1)");
    check_field_offset(lv, s21794c1f0, ABISELECT(8,4), "S21794C1.s21794c1f0");
    check_field_offset(lv, s21794c1f1, ABISELECT(24,12), "S21794C1.s21794c1f1");
    set_bf_and_test(lv, s21794c1f2, ABISELECT(48,28), 0, 1, 1, "S21794C1");
    set_bf_and_test(lv, s21794c1f3, ABISELECT(48,28), 1, 1, 1, "S21794C1");
    set_bf_and_test(lv, s21794c1f4, ABISELECT(48,28), 2, 1, 1, "S21794C1");
    set_bf_and_test(lv, s21794c1f5, ABISELECT(48,28), 3, 4, 1, "S21794C1");
    set_bf_and_test(lv, s21794c1f5, ABISELECT(48,28), 3, 4, hide_sll(1LL<<3), "S21794C1");
    check_field_offset(lv, s21794c1f6, ABISELECT(52,32), "S21794C1.s21794c1f6");
    check_field_offset(lv, s21794c1f7, ABISELECT(56,36), "S21794C1.s21794c1f7");
    check_field_offset(lv, s21794c1f8, ABISELECT(64,44), "S21794C1.s21794c1f8");
    test_class_info(&lv, &cd_S21794C1);
    dp->~S21794C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21794C1(Test_S21794C1, "S21794C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN8S21794C1C1Ev();
extern void _ZN8S21794C1D1Ev();
Name_Map name_map_S21794C1[] = {
  NSPAIR(_ZN8S21794C1C1Ev),
  NSPAIR(_ZN8S21794C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21794C1[];
extern void _ZN8S21794C1D1Ev();
extern void _ZN8S21794C1D0Ev();
static  VTBL_ENTRY vtc_S21794C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21794C1[0]),
  (VTBL_ENTRY)&_ZN8S21794C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21794C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21794C1[];
extern  VTBL_ENTRY _ZTV8S21794C1[];
Class_Descriptor cd_S21794C1 = {  "S21794C1", // class name
  0,0,//no base classes
  &(vtc_S21794C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI8S21794C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21794C1),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  S17112C1  {
  int s17112c1f0[2];
  ::S10180C114 s17112c1f1;
  ::S10180C111 s17112c1f2;
  ::S10180C61 s17112c1f3;
  ::S10179C114 s17112c1f4;
  ::S10180C5 s17112c1f5;
  void  mf17112c1(); // _ZN8S17112C19mf17112c1Ev
};
//SIG(1 S17112C1) C1{ m Fi[2] FC2{ m Fp} FC3{ m Fp} FC4{ m Fp} FC5{ m Fp} FC6{ BC7{ m Fp Fi FC8{ m} FC8}}}


void  S17112C1 ::mf17112c1(){}

static void Test_S17112C1()
{
  {
    init_simple_test("S17112C1");
    S17112C1 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S17112C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17112C1)");
    check_field_offset(lv, s17112c1f0, 0, "S17112C1.s17112c1f0");
    check_field_offset(lv, s17112c1f1, 8, "S17112C1.s17112c1f1");
    check_field_offset(lv, s17112c1f2, ABISELECT(16,12), "S17112C1.s17112c1f2");
    check_field_offset(lv, s17112c1f3, ABISELECT(24,16), "S17112C1.s17112c1f3");
    check_field_offset(lv, s17112c1f4, ABISELECT(32,20), "S17112C1.s17112c1f4");
    check_field_offset(lv, s17112c1f5, ABISELECT(40,24), "S17112C1.s17112c1f5");
  }
}
static Arrange_To_Call_Me vS17112C1(Test_S17112C1, "S17112C1", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15639C2_nt  {
  char s15639c2f0[8];
  void  mf15639c2(); // _ZN11S15639C2_nt9mf15639c2Ev
};
//SIG(-1 S15639C2_nt) C1{ m Fc[8]}


void  S15639C2_nt ::mf15639c2(){}

//skip512 S15639C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S15639C5()
{
  extern Class_Descriptor cd_S15639C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S15639C5, buf);
    S15639C5 &lv = *(new (buf) S15639C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S15639C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15639C5)");
    check_base_class_offset(lv, (S10180C64*), 0, "S15639C5");
    test_class_info(&lv, &cd_S15639C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15639C5(Test_S15639C5, "S15639C5", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S10180C64;
static Base_Class bases_S15639C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C64,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S15639C5 = {  "S15639C5", // class name
  bases_S15639C5, 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  S15639C4  : S15639C5 {
};
//SIG(-1 S15639C4) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S15639C4()
{
  extern Class_Descriptor cd_S15639C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S15639C4, buf);
    S15639C4 &lv = *(new (buf) S15639C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S15639C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15639C4)");
    check_base_class_offset(lv, (S10180C64*)(S15639C5*), 0, "S15639C4");
    check_base_class_offset(lv, (S15639C5*), 0, "S15639C4");
    test_class_info(&lv, &cd_S15639C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15639C4(Test_S15639C4, "S15639C4", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S10180C64;
extern Class_Descriptor cd_S15639C5;
static Base_Class bases_S15639C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C64,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S15639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S15639C4 = {  "S15639C4", // class name
  bases_S15639C4, 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  S15639C3_nt  : S15639C4 {
};
//SIG(-1 S15639C3_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S15639C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S10180C64;
extern Class_Descriptor cd_S15639C5;
extern Class_Descriptor cd_S15639C4;
static Base_Class bases_S15639C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C64,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S15639C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S15639C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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  S15639C1  {
  ::S15639C2_nt s15639c1f0;
  ::S15639C3_nt s15639c1f1;
  ::S15639C3_nt s15639c1f2;
  unsigned int s15639c1f3:1;
  unsigned int s15639c1f4:1;
  unsigned int s15639c1f5:1;
  unsigned int s15639c1f6:1;
  unsigned int s15639c1f7:1;
  void  mf15639c1(); // _ZN8S15639C19mf15639c1Ev
};
//SIG(1 S15639C1) C1{ m FC2{ m Fc[8]} FC3{ BC4{ BC5{ BC6{ m Fp Fi[2]}}}} FC3 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1}


void  S15639C1 ::mf15639c1(){}

static void Test_S15639C1()
{
  {
    init_simple_test("S15639C1");
    static S15639C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S15639C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15639C1)");
    check_field_offset(lv, s15639c1f0, 0, "S15639C1.s15639c1f0");
    check_field_offset(lv, s15639c1f1, 8, "S15639C1.s15639c1f1");
    check_field_offset(lv, s15639c1f2, ABISELECT(24,20), "S15639C1.s15639c1f2");
    set_bf_and_test(lv, s15639c1f3, ABISELECT(40,32), 0, 1, 1, "S15639C1");
    set_bf_and_test(lv, s15639c1f4, ABISELECT(40,32), 1, 1, 1, "S15639C1");
    set_bf_and_test(lv, s15639c1f5, ABISELECT(40,32), 2, 1, 1, "S15639C1");
    set_bf_and_test(lv, s15639c1f6, ABISELECT(40,32), 3, 1, 1, "S15639C1");
    set_bf_and_test(lv, s15639c1f7, ABISELECT(40,32), 4, 1, 1, "S15639C1");
  }
}
static Arrange_To_Call_Me vS15639C1(Test_S15639C1, "S15639C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4790C3  {
  ::S10180C13 s4790c3f0;
  int s4790c3f1[2];
  char s4790c3f2;
  virtual  ~S4790C3(); // _ZN7S4790C3D1Ev
  virtual void  v3(); // _ZN7S4790C32v3Ev
  virtual void  v4(); // _ZN7S4790C32v4Ev
  virtual void  v5(); // _ZN7S4790C32v5Ev
  S4790C3(); // tgen
};
//SIG(-1 S4790C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4790C3 ::~S4790C3(){ note_dtor("S4790C3", this);}
void  S4790C3 ::v3(){vfunc_called(this, "_ZN7S4790C32v3Ev");}
void  S4790C3 ::v4(){vfunc_called(this, "_ZN7S4790C32v4Ev");}
void  S4790C3 ::v5(){vfunc_called(this, "_ZN7S4790C32v5Ev");}
S4790C3 ::S4790C3(){ note_ctor("S4790C3", this);} // tgen

static void Test_S4790C3()
{
  extern Class_Descriptor cd_S4790C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4790C3, buf);
    S4790C3 *dp, &lv = *(dp=new (buf) S4790C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4790C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4790C3)");
    check_field_offset(lv, s4790c3f0, ABISELECT(8,4), "S4790C3.s4790c3f0");
    check_field_offset(lv, s4790c3f1, ABISELECT(24,16), "S4790C3.s4790c3f1");
    check_field_offset(lv, s4790c3f2, ABISELECT(32,24), "S4790C3.s4790c3f2");
    test_class_info(&lv, &cd_S4790C3);
    dp->~S4790C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4790C3(Test_S4790C3, "S4790C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4790C3C1Ev();
extern void _ZN7S4790C3D1Ev();
Name_Map name_map_S4790C3[] = {
  NSPAIR(_ZN7S4790C3C1Ev),
  NSPAIR(_ZN7S4790C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4790C3[];
extern void _ZN7S4790C3D1Ev();
extern void _ZN7S4790C3D0Ev();
extern void _ZN7S4790C32v3Ev();
extern void _ZN7S4790C32v4Ev();
extern void _ZN7S4790C32v5Ev();
static  VTBL_ENTRY vtc_S4790C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4790C3[0]),
  (VTBL_ENTRY)&_ZN7S4790C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4790C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4790C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4790C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4790C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4790C3[];
extern  VTBL_ENTRY _ZTV7S4790C3[];
Class_Descriptor cd_S4790C3 = {  "S4790C3", // class name
  0,0,//no base classes
  &(vtc_S4790C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4790C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4790C3),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  S4790C2  : S4790C3 {
  void *s4790c2f0;
  virtual void  v6(); // _ZN7S4790C22v6Ev
  virtual void  v7(); // _ZN7S4790C22v7Ev
  ~S4790C2(); // tgen
  S4790C2(); // tgen
};
//SIG(-1 S4790C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4790C2 ::v6(){vfunc_called(this, "_ZN7S4790C22v6Ev");}
void  S4790C2 ::v7(){vfunc_called(this, "_ZN7S4790C22v7Ev");}
S4790C2 ::~S4790C2(){ note_dtor("S4790C2", this);} // tgen
S4790C2 ::S4790C2(){ note_ctor("S4790C2", this);} // tgen

static void Test_S4790C2()
{
  extern Class_Descriptor cd_S4790C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4790C2, buf);
    S4790C2 *dp, &lv = *(dp=new (buf) S4790C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4790C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4790C2)");
    check_base_class_offset(lv, (S4790C3*), 0, "S4790C2");
    check_field_offset(lv, s4790c2f0, ABISELECT(40,28), "S4790C2.s4790c2f0");
    test_class_info(&lv, &cd_S4790C2);
    dp->~S4790C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4790C2(Test_S4790C2, "S4790C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4790C2C1Ev();
extern void _ZN7S4790C2D1Ev();
Name_Map name_map_S4790C2[] = {
  NSPAIR(_ZN7S4790C2C1Ev),
  NSPAIR(_ZN7S4790C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4790C3;
extern VTBL_ENTRY _ZTI7S4790C3[];
extern  VTBL_ENTRY _ZTV7S4790C3[];
static Base_Class bases_S4790C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4790C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4790C2[];
extern void _ZN7S4790C2D1Ev();
extern void _ZN7S4790C2D0Ev();
extern void _ZN7S4790C32v3Ev();
extern void _ZN7S4790C32v4Ev();
extern void _ZN7S4790C32v5Ev();
extern void _ZN7S4790C22v6Ev();
extern void _ZN7S4790C22v7Ev();
static  VTBL_ENTRY vtc_S4790C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4790C2[0]),
  (VTBL_ENTRY)&_ZN7S4790C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4790C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4790C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4790C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4790C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4790C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4790C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4790C2[];
extern  VTBL_ENTRY _ZTV7S4790C2[];
Class_Descriptor cd_S4790C2 = {  "S4790C2", // class name
  bases_S4790C2, 1,
  &(vtc_S4790C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4790C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4790C2),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  S4790C1  : S4790C2 {
  __tsi64 s4790c1f0;
  int s4790c1f1;
  virtual  ~S4790C1(); // _ZN7S4790C1D1Ev
  virtual void  v1(); // _ZN7S4790C12v1Ev
  virtual void  v2(); // _ZN7S4790C12v2Ev
  S4790C1(); // tgen
};
//SIG(1 S4790C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FL Fi}


 S4790C1 ::~S4790C1(){ note_dtor("S4790C1", this);}
void  S4790C1 ::v1(){vfunc_called(this, "_ZN7S4790C12v1Ev");}
void  S4790C1 ::v2(){vfunc_called(this, "_ZN7S4790C12v2Ev");}
S4790C1 ::S4790C1(){ note_ctor("S4790C1", this);} // tgen

static void Test_S4790C1()
{
  extern Class_Descriptor cd_S4790C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4790C1, buf);
    S4790C1 *dp, &lv = *(dp=new (buf) S4790C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4790C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4790C1)");
    check_base_class_offset(lv, (S4790C3*)(S4790C2*), 0, "S4790C1");
    check_base_class_offset(lv, (S4790C2*), 0, "S4790C1");
    check_field_offset(lv, s4790c1f0, ABISELECT(48,32), "S4790C1.s4790c1f0");
    check_field_offset(lv, s4790c1f1, ABISELECT(56,40), "S4790C1.s4790c1f1");
    test_class_info(&lv, &cd_S4790C1);
    dp->~S4790C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4790C1(Test_S4790C1, "S4790C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4790C1C1Ev();
extern void _ZN7S4790C1D1Ev();
Name_Map name_map_S4790C1[] = {
  NSPAIR(_ZN7S4790C1C1Ev),
  NSPAIR(_ZN7S4790C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4790C3;
extern VTBL_ENTRY _ZTI7S4790C3[];
extern  VTBL_ENTRY _ZTV7S4790C3[];
extern Class_Descriptor cd_S4790C2;
extern VTBL_ENTRY _ZTI7S4790C2[];
extern  VTBL_ENTRY _ZTV7S4790C2[];
static Base_Class bases_S4790C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4790C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S4790C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4790C1[];
extern void _ZN7S4790C1D1Ev();
extern void _ZN7S4790C1D0Ev();
extern void _ZN7S4790C32v3Ev();
extern void _ZN7S4790C32v4Ev();
extern void _ZN7S4790C32v5Ev();
extern void _ZN7S4790C22v6Ev();
extern void _ZN7S4790C22v7Ev();
extern void _ZN7S4790C12v1Ev();
extern void _ZN7S4790C12v2Ev();
static  VTBL_ENTRY vtc_S4790C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4790C1[0]),
  (VTBL_ENTRY)&_ZN7S4790C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4790C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4790C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4790C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4790C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4790C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4790C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4790C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4790C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4790C1[];
extern  VTBL_ENTRY _ZTV7S4790C1[];
Class_Descriptor cd_S4790C1 = {  "S4790C1", // class name
  bases_S4790C1, 2,
  &(vtc_S4790C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4790C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4790C1),11, //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  S10078C2  {
  virtual  ~S10078C2(); // _ZN8S10078C2D1Ev
  virtual void  v6(); // _ZN8S10078C22v6Ev
  virtual void  v7(); // _ZN8S10078C22v7Ev
  virtual void  v8(); // _ZN8S10078C22v8Ev
  virtual void  v9(); // _ZN8S10078C22v9Ev
  virtual void  v10(); // _ZN8S10078C23v10Ev
  S10078C2(); // tgen
};
//SIG(-1 S10078C2) C1{ vd v1 v2 v3 v4 v5}


 S10078C2 ::~S10078C2(){ note_dtor("S10078C2", this);}
void  S10078C2 ::v6(){vfunc_called(this, "_ZN8S10078C22v6Ev");}
void  S10078C2 ::v7(){vfunc_called(this, "_ZN8S10078C22v7Ev");}
void  S10078C2 ::v8(){vfunc_called(this, "_ZN8S10078C22v8Ev");}
void  S10078C2 ::v9(){vfunc_called(this, "_ZN8S10078C22v9Ev");}
void  S10078C2 ::v10(){vfunc_called(this, "_ZN8S10078C23v10Ev");}
S10078C2 ::S10078C2(){ note_ctor("S10078C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10078C2C1Ev();
extern void _ZN8S10078C2D1Ev();
Name_Map name_map_S10078C2[] = {
  NSPAIR(_ZN8S10078C2C1Ev),
  NSPAIR(_ZN8S10078C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10078C2[];
extern void _ZN8S10078C2D1Ev();
extern void _ZN8S10078C2D0Ev();
extern void _ZN8S10078C22v6Ev();
extern void _ZN8S10078C22v7Ev();
extern void _ZN8S10078C22v8Ev();
extern void _ZN8S10078C22v9Ev();
extern void _ZN8S10078C23v10Ev();
static  VTBL_ENTRY vtc_S10078C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10078C2[0]),
  (VTBL_ENTRY)&_ZN8S10078C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10078C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10078C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10078C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10078C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10078C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10078C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10078C2[];
extern  VTBL_ENTRY _ZTV8S10078C2[];
Class_Descriptor cd_S10078C2 = {  "S10078C2", // class name
  0,0,//no base classes
  &(vtc_S10078C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10078C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10078C2),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  S10078C4_nt  : S10180C179 {
};
//SIG(-1 S10078C4_nt) C1{ BC2{ m Fp Fi}}



//skip512 S10078C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S10180C179;
static Base_Class bases_S10078C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C179,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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  S10078C3_nt  {
  int s10078c3f0;
  ::S10078C4_nt s10078c3f1;
  void  mf10078c3(); // _ZN11S10078C3_nt9mf10078c3Ev
};
//SIG(-1 S10078C3_nt) C1{ m Fi FC2{ BC3{ m Fp Fi}}}


void  S10078C3_nt ::mf10078c3(){}

//skip512 S10078C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10078C1  : S10078C2 {
  ::S10078C3_nt s10078c1f0;
  int s10078c1f1;
  virtual  ~S10078C1(); // _ZN8S10078C1D1Ev
  virtual void  v1(); // _ZN8S10078C12v1Ev
  virtual void  v2(); // _ZN8S10078C12v2Ev
  virtual void  v3(); // _ZN8S10078C12v3Ev
  virtual void  v4(); // _ZN8S10078C12v4Ev
  virtual void  v5(); // _ZN8S10078C12v5Ev
  S10078C1(); // tgen
};
//SIG(1 S10078C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 FC3{ m Fi FC4{ BC5{ m Fp Fi}}} Fi}


 S10078C1 ::~S10078C1(){ note_dtor("S10078C1", this);}
void  S10078C1 ::v1(){vfunc_called(this, "_ZN8S10078C12v1Ev");}
void  S10078C1 ::v2(){vfunc_called(this, "_ZN8S10078C12v2Ev");}
void  S10078C1 ::v3(){vfunc_called(this, "_ZN8S10078C12v3Ev");}
void  S10078C1 ::v4(){vfunc_called(this, "_ZN8S10078C12v4Ev");}
void  S10078C1 ::v5(){vfunc_called(this, "_ZN8S10078C12v5Ev");}
S10078C1 ::S10078C1(){ note_ctor("S10078C1", this);} // tgen

static void Test_S10078C1()
{
  extern Class_Descriptor cd_S10078C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S10078C1, buf);
    S10078C1 *dp, &lv = *(dp=new (buf) S10078C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S10078C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10078C1)");
    check_base_class_offset(lv, (S10078C2*), 0, "S10078C1");
    check_field_offset(lv, s10078c1f0, ABISELECT(8,4), "S10078C1.s10078c1f0");
    check_field_offset(lv, s10078c1f1, ABISELECT(32,16), "S10078C1.s10078c1f1");
    test_class_info(&lv, &cd_S10078C1);
    dp->~S10078C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10078C1(Test_S10078C1, "S10078C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S10078C1C1Ev();
extern void _ZN8S10078C1D1Ev();
Name_Map name_map_S10078C1[] = {
  NSPAIR(_ZN8S10078C1C1Ev),
  NSPAIR(_ZN8S10078C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10078C2;
extern VTBL_ENTRY _ZTI8S10078C2[];
extern  VTBL_ENTRY _ZTV8S10078C2[];
static Base_Class bases_S10078C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10078C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S10078C1[];
extern void _ZN8S10078C1D1Ev();
extern void _ZN8S10078C1D0Ev();
extern void _ZN8S10078C22v6Ev();
extern void _ZN8S10078C22v7Ev();
extern void _ZN8S10078C22v8Ev();
extern void _ZN8S10078C22v9Ev();
extern void _ZN8S10078C23v10Ev();
extern void _ZN8S10078C12v1Ev();
extern void _ZN8S10078C12v2Ev();
extern void _ZN8S10078C12v3Ev();
extern void _ZN8S10078C12v4Ev();
extern void _ZN8S10078C12v5Ev();
static  VTBL_ENTRY vtc_S10078C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10078C1[0]),
  (VTBL_ENTRY)&_ZN8S10078C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10078C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10078C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10078C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10078C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10078C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10078C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10078C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10078C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10078C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10078C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10078C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10078C1[];
extern  VTBL_ENTRY _ZTV8S10078C1[];
Class_Descriptor cd_S10078C1 = {  "S10078C1", // class name
  bases_S10078C1, 1,
  &(vtc_S10078C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S10078C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10078C1),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  S9881C2  {
  int s9881c2f0[2];
  void *s9881c2f1[3];
  int s9881c2f2;
  void *s9881c2f3[2];
  virtual  ~S9881C2(); // _ZN7S9881C2D1Ev
  virtual void  v5(); // _ZN7S9881C22v5Ev
  virtual void  v6(); // _ZN7S9881C22v6Ev
  virtual void  v7(); // _ZN7S9881C22v7Ev
  virtual void  v8(); // _ZN7S9881C22v8Ev
  S9881C2(); // tgen
};
//SIG(-1 S9881C2) C1{ vd v1 v2 v3 v4 Fi[2] Fp[3] Fi Fp[2]}


 S9881C2 ::~S9881C2(){ note_dtor("S9881C2", this);}
void  S9881C2 ::v5(){vfunc_called(this, "_ZN7S9881C22v5Ev");}
void  S9881C2 ::v6(){vfunc_called(this, "_ZN7S9881C22v6Ev");}
void  S9881C2 ::v7(){vfunc_called(this, "_ZN7S9881C22v7Ev");}
void  S9881C2 ::v8(){vfunc_called(this, "_ZN7S9881C22v8Ev");}
S9881C2 ::S9881C2(){ note_ctor("S9881C2", this);} // tgen

static void Test_S9881C2()
{
  extern Class_Descriptor cd_S9881C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S9881C2, buf);
    S9881C2 *dp, &lv = *(dp=new (buf) S9881C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S9881C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9881C2)");
    check_field_offset(lv, s9881c2f0, ABISELECT(8,4), "S9881C2.s9881c2f0");
    check_field_offset(lv, s9881c2f1, ABISELECT(16,12), "S9881C2.s9881c2f1");
    check_field_offset(lv, s9881c2f2, ABISELECT(40,24), "S9881C2.s9881c2f2");
    check_field_offset(lv, s9881c2f3, ABISELECT(48,28), "S9881C2.s9881c2f3");
    test_class_info(&lv, &cd_S9881C2);
    dp->~S9881C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9881C2(Test_S9881C2, "S9881C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S9881C2C1Ev();
extern void _ZN7S9881C2D1Ev();
Name_Map name_map_S9881C2[] = {
  NSPAIR(_ZN7S9881C2C1Ev),
  NSPAIR(_ZN7S9881C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9881C2[];
extern void _ZN7S9881C2D1Ev();
extern void _ZN7S9881C2D0Ev();
extern void _ZN7S9881C22v5Ev();
extern void _ZN7S9881C22v6Ev();
extern void _ZN7S9881C22v7Ev();
extern void _ZN7S9881C22v8Ev();
static  VTBL_ENTRY vtc_S9881C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9881C2[0]),
  (VTBL_ENTRY)&_ZN7S9881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9881C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9881C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9881C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9881C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9881C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9881C2[];
extern  VTBL_ENTRY _ZTV7S9881C2[];
Class_Descriptor cd_S9881C2 = {  "S9881C2", // class name
  0,0,//no base classes
  &(vtc_S9881C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S9881C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9881C2),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  S9881C1  : S9881C2 {
  ::S10180C169 s9881c1f0;
  void *s9881c1f1;
  virtual  ~S9881C1(); // _ZN7S9881C1D1Ev
  virtual void  v1(); // _ZN7S9881C12v1Ev
  virtual void  v2(); // _ZN7S9881C12v2Ev
  virtual void  v3(); // _ZN7S9881C12v3Ev
  virtual void  v4(); // _ZN7S9881C12v4Ev
  S9881C1(); // tgen
};
//SIG(1 S9881C1) C1{ BC2{ vd v5 v6 v7 v8 Fi[2] Fp[3] Fi Fp[2]} vd v1 v2 v3 v4 FC3{ m Fi[2]} Fp}


 S9881C1 ::~S9881C1(){ note_dtor("S9881C1", this);}
void  S9881C1 ::v1(){vfunc_called(this, "_ZN7S9881C12v1Ev");}
void  S9881C1 ::v2(){vfunc_called(this, "_ZN7S9881C12v2Ev");}
void  S9881C1 ::v3(){vfunc_called(this, "_ZN7S9881C12v3Ev");}
void  S9881C1 ::v4(){vfunc_called(this, "_ZN7S9881C12v4Ev");}
S9881C1 ::S9881C1(){ note_ctor("S9881C1", this);} // tgen

static void Test_S9881C1()
{
  extern Class_Descriptor cd_S9881C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S9881C1, buf);
    S9881C1 *dp, &lv = *(dp=new (buf) S9881C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S9881C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9881C1)");
    check_base_class_offset(lv, (S9881C2*), 0, "S9881C1");
    check_field_offset(lv, s9881c1f0, ABISELECT(64,36), "S9881C1.s9881c1f0");
    check_field_offset(lv, s9881c1f1, ABISELECT(72,44), "S9881C1.s9881c1f1");
    test_class_info(&lv, &cd_S9881C1);
    dp->~S9881C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9881C1(Test_S9881C1, "S9881C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S9881C1C1Ev();
extern void _ZN7S9881C1D1Ev();
Name_Map name_map_S9881C1[] = {
  NSPAIR(_ZN7S9881C1C1Ev),
  NSPAIR(_ZN7S9881C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9881C2;
extern VTBL_ENTRY _ZTI7S9881C2[];
extern  VTBL_ENTRY _ZTV7S9881C2[];
static Base_Class bases_S9881C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9881C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S9881C1[];
extern void _ZN7S9881C1D1Ev();
extern void _ZN7S9881C1D0Ev();
extern void _ZN7S9881C22v5Ev();
extern void _ZN7S9881C22v6Ev();
extern void _ZN7S9881C22v7Ev();
extern void _ZN7S9881C22v8Ev();
extern void _ZN7S9881C12v1Ev();
extern void _ZN7S9881C12v2Ev();
extern void _ZN7S9881C12v3Ev();
extern void _ZN7S9881C12v4Ev();
static  VTBL_ENTRY vtc_S9881C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9881C1[0]),
  (VTBL_ENTRY)&_ZN7S9881C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9881C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9881C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9881C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9881C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9881C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9881C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9881C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9881C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9881C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9881C1[];
extern  VTBL_ENTRY _ZTV7S9881C1[];
Class_Descriptor cd_S9881C1 = {  "S9881C1", // class name
  bases_S9881C1, 1,
  &(vtc_S9881C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S9881C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9881C1),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  S9716C2  {
  ::S10180C13 s9716c2f0;
  int s9716c2f1[2];
  char s9716c2f2;
  virtual  ~S9716C2(); // _ZN7S9716C2D1Ev
  virtual void  v4(); // _ZN7S9716C22v4Ev
  virtual void  v5(); // _ZN7S9716C22v5Ev
  virtual void  v6(); // _ZN7S9716C22v6Ev
  S9716C2(); // tgen
};
//SIG(-1 S9716C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9716C2 ::~S9716C2(){ note_dtor("S9716C2", this);}
void  S9716C2 ::v4(){vfunc_called(this, "_ZN7S9716C22v4Ev");}
void  S9716C2 ::v5(){vfunc_called(this, "_ZN7S9716C22v5Ev");}
void  S9716C2 ::v6(){vfunc_called(this, "_ZN7S9716C22v6Ev");}
S9716C2 ::S9716C2(){ note_ctor("S9716C2", this);} // tgen

static void Test_S9716C2()
{
  extern Class_Descriptor cd_S9716C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9716C2, buf);
    S9716C2 *dp, &lv = *(dp=new (buf) S9716C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9716C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9716C2)");
    check_field_offset(lv, s9716c2f0, ABISELECT(8,4), "S9716C2.s9716c2f0");
    check_field_offset(lv, s9716c2f1, ABISELECT(24,16), "S9716C2.s9716c2f1");
    check_field_offset(lv, s9716c2f2, ABISELECT(32,24), "S9716C2.s9716c2f2");
    test_class_info(&lv, &cd_S9716C2);
    dp->~S9716C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9716C2(Test_S9716C2, "S9716C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9716C2C1Ev();
extern void _ZN7S9716C2D1Ev();
Name_Map name_map_S9716C2[] = {
  NSPAIR(_ZN7S9716C2C1Ev),
  NSPAIR(_ZN7S9716C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9716C2[];
extern void _ZN7S9716C2D1Ev();
extern void _ZN7S9716C2D0Ev();
extern void _ZN7S9716C22v4Ev();
extern void _ZN7S9716C22v5Ev();
extern void _ZN7S9716C22v6Ev();
static  VTBL_ENTRY vtc_S9716C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9716C2[0]),
  (VTBL_ENTRY)&_ZN7S9716C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9716C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9716C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9716C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9716C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9716C2[];
extern  VTBL_ENTRY _ZTV7S9716C2[];
Class_Descriptor cd_S9716C2 = {  "S9716C2", // class name
  0,0,//no base classes
  &(vtc_S9716C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9716C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9716C2),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  S9716C1  : S9716C2 {
  void *s9716c1f0[2];
  int s9716c1f1;
  char s9716c1f2;
  virtual  ~S9716C1(); // _ZN7S9716C1D1Ev
  virtual void  v1(); // _ZN7S9716C12v1Ev
  virtual void  v2(); // _ZN7S9716C12v2Ev
  virtual void  v3(); // _ZN7S9716C12v3Ev
  S9716C1(); // tgen
};
//SIG(1 S9716C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fp[2] Fi Fc}


 S9716C1 ::~S9716C1(){ note_dtor("S9716C1", this);}
void  S9716C1 ::v1(){vfunc_called(this, "_ZN7S9716C12v1Ev");}
void  S9716C1 ::v2(){vfunc_called(this, "_ZN7S9716C12v2Ev");}
void  S9716C1 ::v3(){vfunc_called(this, "_ZN7S9716C12v3Ev");}
S9716C1 ::S9716C1(){ note_ctor("S9716C1", this);} // tgen

static void Test_S9716C1()
{
  extern Class_Descriptor cd_S9716C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S9716C1, buf);
    S9716C1 *dp, &lv = *(dp=new (buf) S9716C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S9716C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9716C1)");
    check_base_class_offset(lv, (S9716C2*), 0, "S9716C1");
    check_field_offset(lv, s9716c1f0, ABISELECT(40,28), "S9716C1.s9716c1f0");
    check_field_offset(lv, s9716c1f1, ABISELECT(56,36), "S9716C1.s9716c1f1");
    check_field_offset(lv, s9716c1f2, ABISELECT(60,40), "S9716C1.s9716c1f2");
    test_class_info(&lv, &cd_S9716C1);
    dp->~S9716C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9716C1(Test_S9716C1, "S9716C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S9716C1C1Ev();
extern void _ZN7S9716C1D1Ev();
Name_Map name_map_S9716C1[] = {
  NSPAIR(_ZN7S9716C1C1Ev),
  NSPAIR(_ZN7S9716C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9716C2;
extern VTBL_ENTRY _ZTI7S9716C2[];
extern  VTBL_ENTRY _ZTV7S9716C2[];
static Base_Class bases_S9716C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9716C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S9716C1[];
extern void _ZN7S9716C1D1Ev();
extern void _ZN7S9716C1D0Ev();
extern void _ZN7S9716C22v4Ev();
extern void _ZN7S9716C22v5Ev();
extern void _ZN7S9716C22v6Ev();
extern void _ZN7S9716C12v1Ev();
extern void _ZN7S9716C12v2Ev();
extern void _ZN7S9716C12v3Ev();
static  VTBL_ENTRY vtc_S9716C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9716C1[0]),
  (VTBL_ENTRY)&_ZN7S9716C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9716C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9716C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9716C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9716C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9716C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9716C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9716C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9716C1[];
extern  VTBL_ENTRY _ZTV7S9716C1[];
Class_Descriptor cd_S9716C1 = {  "S9716C1", // class name
  bases_S9716C1, 1,
  &(vtc_S9716C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S9716C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9716C1),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  S16365C1  {
  ::S10180C150 s16365c1f0;
  ::S15695C5_nt s16365c1f1;
  ::S1168C12 s16365c1f2;
  void  mf16365c1(); // _ZN8S16365C19mf16365c1Ev
};
//SIG(1 S16365C1) C1{ m FC2{ m Fp[2]} FC3{ m FC4{ Fl[4]}} FC5{ BC6{ BC7{ m Fp Fi FC8{ m} FC9{ m}}}}}


void  S16365C1 ::mf16365c1(){}

static void Test_S16365C1()
{
  {
    init_simple_test("S16365C1");
    S16365C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S16365C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16365C1)");
    check_field_offset(lv, s16365c1f0, 0, "S16365C1.s16365c1f0");
    check_field_offset(lv, s16365c1f1, ABISELECT(16,8), "S16365C1.s16365c1f1");
    check_field_offset(lv, s16365c1f2, ABISELECT(48,24), "S16365C1.s16365c1f2");
  }
}
static Arrange_To_Call_Me vS16365C1(Test_S16365C1, "S16365C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3342C3  {
  void *s3342c3f0[2];
  virtual void  v6(); // _ZN7S3342C32v6Ev
  virtual void  v7(); // _ZN7S3342C32v7Ev
  virtual void  v8(); // _ZN7S3342C32v8Ev
  virtual void  v9(); // _ZN7S3342C32v9Ev
  virtual void  v10(); // _ZN7S3342C33v10Ev
  ~S3342C3(); // tgen
  S3342C3(); // tgen
};
//SIG(-1 S3342C3) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S3342C3 ::v6(){vfunc_called(this, "_ZN7S3342C32v6Ev");}
void  S3342C3 ::v7(){vfunc_called(this, "_ZN7S3342C32v7Ev");}
void  S3342C3 ::v8(){vfunc_called(this, "_ZN7S3342C32v8Ev");}
void  S3342C3 ::v9(){vfunc_called(this, "_ZN7S3342C32v9Ev");}
void  S3342C3 ::v10(){vfunc_called(this, "_ZN7S3342C33v10Ev");}
S3342C3 ::~S3342C3(){ note_dtor("S3342C3", this);} // tgen
S3342C3 ::S3342C3(){ note_ctor("S3342C3", this);} // tgen

static void Test_S3342C3()
{
  extern Class_Descriptor cd_S3342C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3342C3, buf);
    S3342C3 *dp, &lv = *(dp=new (buf) S3342C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3342C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3342C3)");
    check_field_offset(lv, s3342c3f0, ABISELECT(8,4), "S3342C3.s3342c3f0");
    test_class_info(&lv, &cd_S3342C3);
    dp->~S3342C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3342C3(Test_S3342C3, "S3342C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3342C3C1Ev();
extern void _ZN7S3342C3D1Ev();
Name_Map name_map_S3342C3[] = {
  NSPAIR(_ZN7S3342C3C1Ev),
  NSPAIR(_ZN7S3342C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3342C3[];
extern void _ZN7S3342C32v6Ev();
extern void _ZN7S3342C32v7Ev();
extern void _ZN7S3342C32v8Ev();
extern void _ZN7S3342C32v9Ev();
extern void _ZN7S3342C33v10Ev();
static  VTBL_ENTRY vtc_S3342C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3342C3[0]),
  (VTBL_ENTRY)&_ZN7S3342C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3342C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3342C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3342C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3342C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3342C3[];
extern  VTBL_ENTRY _ZTV7S3342C3[];
Class_Descriptor cd_S3342C3 = {  "S3342C3", // class name
  0,0,//no base classes
  &(vtc_S3342C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3342C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3342C3),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  S3342C2  : S3342C3 {
  int s3342c2f0;
  virtual  ~S3342C2(); // _ZN7S3342C2D1Ev
  virtual void  v11(); // _ZN7S3342C23v11Ev
  S3342C2(); // tgen
};
//SIG(-1 S3342C2) C1{ BC2{ v2 v3 v4 v5 v6 Fp[2]} vd v1 Fi}


 S3342C2 ::~S3342C2(){ note_dtor("S3342C2", this);}
void  S3342C2 ::v11(){vfunc_called(this, "_ZN7S3342C23v11Ev");}
S3342C2 ::S3342C2(){ note_ctor("S3342C2", this);} // tgen

static void Test_S3342C2()
{
  extern Class_Descriptor cd_S3342C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3342C2, buf);
    S3342C2 *dp, &lv = *(dp=new (buf) S3342C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3342C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3342C2)");
    check_base_class_offset(lv, (S3342C3*), 0, "S3342C2");
    check_field_offset(lv, s3342c2f0, ABISELECT(24,12), "S3342C2.s3342c2f0");
    test_class_info(&lv, &cd_S3342C2);
    dp->~S3342C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3342C2(Test_S3342C2, "S3342C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3342C2C1Ev();
extern void _ZN7S3342C2D1Ev();
Name_Map name_map_S3342C2[] = {
  NSPAIR(_ZN7S3342C2C1Ev),
  NSPAIR(_ZN7S3342C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3342C3;
extern VTBL_ENTRY _ZTI7S3342C3[];
extern  VTBL_ENTRY _ZTV7S3342C3[];
static Base_Class bases_S3342C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3342C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3342C2[];
extern void _ZN7S3342C32v6Ev();
extern void _ZN7S3342C32v7Ev();
extern void _ZN7S3342C32v8Ev();
extern void _ZN7S3342C32v9Ev();
extern void _ZN7S3342C33v10Ev();
extern void _ZN7S3342C2D1Ev();
extern void _ZN7S3342C2D0Ev();
extern void _ZN7S3342C23v11Ev();
static  VTBL_ENTRY vtc_S3342C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3342C2[0]),
  (VTBL_ENTRY)&_ZN7S3342C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3342C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3342C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3342C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3342C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3342C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3342C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3342C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S3342C2[];
extern  VTBL_ENTRY _ZTV7S3342C2[];
Class_Descriptor cd_S3342C2 = {  "S3342C2", // class name
  bases_S3342C2, 1,
  &(vtc_S3342C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3342C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3342C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3342C1  : S3342C2 {
  void *s3342c1f0;
  int s3342c1f1[2];
  virtual  ~S3342C1(); // _ZN7S3342C1D1Ev
  virtual void  v1(); // _ZN7S3342C12v1Ev
  virtual void  v2(); // _ZN7S3342C12v2Ev
  virtual void  v3(); // _ZN7S3342C12v3Ev
  virtual void  v4(); // _ZN7S3342C12v4Ev
  virtual void  v5(); // _ZN7S3342C12v5Ev
  S3342C1(); // tgen
};
//SIG(1 S3342C1) C1{ BC2{ BC3{ v6 v7 v8 v9 v10 Fp[2]} vd v11 Fi} vd v1 v2 v3 v4 v5 Fp Fi[2]}


 S3342C1 ::~S3342C1(){ note_dtor("S3342C1", this);}
void  S3342C1 ::v1(){vfunc_called(this, "_ZN7S3342C12v1Ev");}
void  S3342C1 ::v2(){vfunc_called(this, "_ZN7S3342C12v2Ev");}
void  S3342C1 ::v3(){vfunc_called(this, "_ZN7S3342C12v3Ev");}
void  S3342C1 ::v4(){vfunc_called(this, "_ZN7S3342C12v4Ev");}
void  S3342C1 ::v5(){vfunc_called(this, "_ZN7S3342C12v5Ev");}
S3342C1 ::S3342C1(){ note_ctor("S3342C1", this);} // tgen

static void Test_S3342C1()
{
  extern Class_Descriptor cd_S3342C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3342C1, buf);
    S3342C1 *dp, &lv = *(dp=new (buf) S3342C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3342C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3342C1)");
    check_base_class_offset(lv, (S3342C3*)(S3342C2*), 0, "S3342C1");
    check_base_class_offset(lv, (S3342C2*), 0, "S3342C1");
    check_field_offset(lv, s3342c1f0, ABISELECT(32,16), "S3342C1.s3342c1f0");
    check_field_offset(lv, s3342c1f1, ABISELECT(40,20), "S3342C1.s3342c1f1");
    test_class_info(&lv, &cd_S3342C1);
    dp->~S3342C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3342C1(Test_S3342C1, "S3342C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3342C1C1Ev();
extern void _ZN7S3342C1D1Ev();
Name_Map name_map_S3342C1[] = {
  NSPAIR(_ZN7S3342C1C1Ev),
  NSPAIR(_ZN7S3342C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3342C3;
extern VTBL_ENTRY _ZTI7S3342C3[];
extern  VTBL_ENTRY _ZTV7S3342C3[];
extern Class_Descriptor cd_S3342C2;
extern VTBL_ENTRY _ZTI7S3342C2[];
extern  VTBL_ENTRY _ZTV7S3342C2[];
static Base_Class bases_S3342C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3342C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3342C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3342C1[];
extern void _ZN7S3342C32v6Ev();
extern void _ZN7S3342C32v7Ev();
extern void _ZN7S3342C32v8Ev();
extern void _ZN7S3342C32v9Ev();
extern void _ZN7S3342C33v10Ev();
extern void _ZN7S3342C1D1Ev();
extern void _ZN7S3342C1D0Ev();
extern void _ZN7S3342C23v11Ev();
extern void _ZN7S3342C12v1Ev();
extern void _ZN7S3342C12v2Ev();
extern void _ZN7S3342C12v3Ev();
extern void _ZN7S3342C12v4Ev();
extern void _ZN7S3342C12v5Ev();
static  VTBL_ENTRY vtc_S3342C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3342C1[0]),
  (VTBL_ENTRY)&_ZN7S3342C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3342C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3342C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3342C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3342C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3342C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3342C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3342C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3342C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3342C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3342C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3342C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3342C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3342C1[];
extern  VTBL_ENTRY _ZTV7S3342C1[];
Class_Descriptor cd_S3342C1 = {  "S3342C1", // class name
  bases_S3342C1, 2,
  &(vtc_S3342C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3342C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3342C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10113C2  {
  int s10113c2f0;
  void *s10113c2f1;
  char s10113c2f2;
  virtual  ~S10113C2(); // _ZN8S10113C2D1Ev
  virtual void  v7(); // _ZN8S10113C22v7Ev
  virtual void  v8(); // _ZN8S10113C22v8Ev
  virtual void  v9(); // _ZN8S10113C22v9Ev
  virtual void  v10(); // _ZN8S10113C23v10Ev
  virtual void  v11(); // _ZN8S10113C23v11Ev
  virtual void  v12(); // _ZN8S10113C23v12Ev
  S10113C2(); // tgen
};
//SIG(-1 S10113C2) C1{ vd v1 v2 v3 v4 v5 v6 Fi Fp Fc}


 S10113C2 ::~S10113C2(){ note_dtor("S10113C2", this);}
void  S10113C2 ::v7(){vfunc_called(this, "_ZN8S10113C22v7Ev");}
void  S10113C2 ::v8(){vfunc_called(this, "_ZN8S10113C22v8Ev");}
void  S10113C2 ::v9(){vfunc_called(this, "_ZN8S10113C22v9Ev");}
void  S10113C2 ::v10(){vfunc_called(this, "_ZN8S10113C23v10Ev");}
void  S10113C2 ::v11(){vfunc_called(this, "_ZN8S10113C23v11Ev");}
void  S10113C2 ::v12(){vfunc_called(this, "_ZN8S10113C23v12Ev");}
S10113C2 ::S10113C2(){ note_ctor("S10113C2", this);} // tgen

static void Test_S10113C2()
{
  extern Class_Descriptor cd_S10113C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S10113C2, buf);
    S10113C2 *dp, &lv = *(dp=new (buf) S10113C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10113C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10113C2)");
    check_field_offset(lv, s10113c2f0, ABISELECT(8,4), "S10113C2.s10113c2f0");
    check_field_offset(lv, s10113c2f1, ABISELECT(16,8), "S10113C2.s10113c2f1");
    check_field_offset(lv, s10113c2f2, ABISELECT(24,12), "S10113C2.s10113c2f2");
    test_class_info(&lv, &cd_S10113C2);
    dp->~S10113C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10113C2(Test_S10113C2, "S10113C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S10113C2C1Ev();
extern void _ZN8S10113C2D1Ev();
Name_Map name_map_S10113C2[] = {
  NSPAIR(_ZN8S10113C2C1Ev),
  NSPAIR(_ZN8S10113C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10113C2[];
extern void _ZN8S10113C2D1Ev();
extern void _ZN8S10113C2D0Ev();
extern void _ZN8S10113C22v7Ev();
extern void _ZN8S10113C22v8Ev();
extern void _ZN8S10113C22v9Ev();
extern void _ZN8S10113C23v10Ev();
extern void _ZN8S10113C23v11Ev();
extern void _ZN8S10113C23v12Ev();
static  VTBL_ENTRY vtc_S10113C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10113C2[0]),
  (VTBL_ENTRY)&_ZN8S10113C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10113C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10113C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10113C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10113C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10113C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10113C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10113C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10113C2[];
extern  VTBL_ENTRY _ZTV8S10113C2[];
Class_Descriptor cd_S10113C2 = {  "S10113C2", // class name
  0,0,//no base classes
  &(vtc_S10113C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S10113C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10113C2),10, //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  S10113C1  : S10113C2 {
  int s10113c1f0;
  void *s10113c1f1[2];
  virtual  ~S10113C1(); // _ZN8S10113C1D1Ev
  virtual void  v1(); // _ZN8S10113C12v1Ev
  virtual void  v2(); // _ZN8S10113C12v2Ev
  virtual void  v3(); // _ZN8S10113C12v3Ev
  virtual void  v4(); // _ZN8S10113C12v4Ev
  virtual void  v5(); // _ZN8S10113C12v5Ev
  virtual void  v6(); // _ZN8S10113C12v6Ev
  S10113C1(); // tgen
};
//SIG(1 S10113C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 Fi Fp Fc} vd v1 v2 v3 v4 v5 v6 Fi Fp[2]}


 S10113C1 ::~S10113C1(){ note_dtor("S10113C1", this);}
void  S10113C1 ::v1(){vfunc_called(this, "_ZN8S10113C12v1Ev");}
void  S10113C1 ::v2(){vfunc_called(this, "_ZN8S10113C12v2Ev");}
void  S10113C1 ::v3(){vfunc_called(this, "_ZN8S10113C12v3Ev");}
void  S10113C1 ::v4(){vfunc_called(this, "_ZN8S10113C12v4Ev");}
void  S10113C1 ::v5(){vfunc_called(this, "_ZN8S10113C12v5Ev");}
void  S10113C1 ::v6(){vfunc_called(this, "_ZN8S10113C12v6Ev");}
S10113C1 ::S10113C1(){ note_ctor("S10113C1", this);} // tgen

static void Test_S10113C1()
{
  extern Class_Descriptor cd_S10113C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S10113C1, buf);
    S10113C1 *dp, &lv = *(dp=new (buf) S10113C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S10113C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10113C1)");
    check_base_class_offset(lv, (S10113C2*), 0, "S10113C1");
    check_field_offset(lv, s10113c1f0, ABISELECT(28,16), "S10113C1.s10113c1f0");
    check_field_offset(lv, s10113c1f1, ABISELECT(32,20), "S10113C1.s10113c1f1");
    test_class_info(&lv, &cd_S10113C1);
    dp->~S10113C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10113C1(Test_S10113C1, "S10113C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S10113C1C1Ev();
extern void _ZN8S10113C1D1Ev();
Name_Map name_map_S10113C1[] = {
  NSPAIR(_ZN8S10113C1C1Ev),
  NSPAIR(_ZN8S10113C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10113C2;
extern VTBL_ENTRY _ZTI8S10113C2[];
extern  VTBL_ENTRY _ZTV8S10113C2[];
static Base_Class bases_S10113C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10113C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S10113C1[];
extern void _ZN8S10113C1D1Ev();
extern void _ZN8S10113C1D0Ev();
extern void _ZN8S10113C22v7Ev();
extern void _ZN8S10113C22v8Ev();
extern void _ZN8S10113C22v9Ev();
extern void _ZN8S10113C23v10Ev();
extern void _ZN8S10113C23v11Ev();
extern void _ZN8S10113C23v12Ev();
extern void _ZN8S10113C12v1Ev();
extern void _ZN8S10113C12v2Ev();
extern void _ZN8S10113C12v3Ev();
extern void _ZN8S10113C12v4Ev();
extern void _ZN8S10113C12v5Ev();
extern void _ZN8S10113C12v6Ev();
static  VTBL_ENTRY vtc_S10113C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10113C1[0]),
  (VTBL_ENTRY)&_ZN8S10113C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10113C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10113C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10113C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10113C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10113C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10113C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10113C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10113C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10113C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10113C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10113C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10113C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10113C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10113C1[];
extern  VTBL_ENTRY _ZTV8S10113C1[];
Class_Descriptor cd_S10113C1 = {  "S10113C1", // class name
  bases_S10113C1, 1,
  &(vtc_S10113C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S10113C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10113C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16366C1  {
  ::S10180C150 s16366c1f0;
  ::S15696C5_nt s16366c1f1;
  ::S1168C12 s16366c1f2;
  void  mf16366c1(); // _ZN8S16366C19mf16366c1Ev
};
//SIG(1 S16366C1) C1{ m FC2{ m Fp[2]} FC3{ m FC4{ FL[4]}} FC5{ BC6{ BC7{ m Fp Fi FC8{ m} FC9{ m}}}}}


void  S16366C1 ::mf16366c1(){}

static void Test_S16366C1()
{
  {
    init_simple_test("S16366C1");
    S16366C1 lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S16366C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16366C1)");
    check_field_offset(lv, s16366c1f0, 0, "S16366C1.s16366c1f0");
    check_field_offset(lv, s16366c1f1, ABISELECT(16,8), "S16366C1.s16366c1f1");
    check_field_offset(lv, s16366c1f2, ABISELECT(48,40), "S16366C1.s16366c1f2");
  }
}
static Arrange_To_Call_Me vS16366C1(Test_S16366C1, "S16366C1", ABISELECT(64,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3885C2  : S10180C178 {
  virtual  ~S3885C2(); // _ZN7S3885C2D1Ev
  virtual void  v8(); // _ZN7S3885C22v8Ev
  virtual void  v9(); // _ZN7S3885C22v9Ev
  virtual void  v10(); // _ZN7S3885C23v10Ev
  S3885C2(); // tgen
};
//SIG(-1 S3885C2) C1{ BC2{ vd m Fi} vd v1 v2 v3}


 S3885C2 ::~S3885C2(){ note_dtor("S3885C2", this);}
void  S3885C2 ::v8(){vfunc_called(this, "_ZN7S3885C22v8Ev");}
void  S3885C2 ::v9(){vfunc_called(this, "_ZN7S3885C22v9Ev");}
void  S3885C2 ::v10(){vfunc_called(this, "_ZN7S3885C23v10Ev");}
S3885C2 ::S3885C2(){ note_ctor("S3885C2", this);} // tgen

static void Test_S3885C2()
{
  extern Class_Descriptor cd_S3885C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3885C2, buf);
    S3885C2 *dp, &lv = *(dp=new (buf) S3885C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3885C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3885C2)");
    check_base_class_offset(lv, (S10180C178*), 0, "S3885C2");
    test_class_info(&lv, &cd_S3885C2);
    dp->~S3885C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3885C2(Test_S3885C2, "S3885C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3885C2C1Ev();
extern void _ZN7S3885C2D1Ev();
Name_Map name_map_S3885C2[] = {
  NSPAIR(_ZN7S3885C2C1Ev),
  NSPAIR(_ZN7S3885C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
static Base_Class bases_S3885C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3885C2[];
extern void _ZN7S3885C2D1Ev();
extern void _ZN7S3885C2D0Ev();
extern void _ZN7S3885C22v8Ev();
extern void _ZN7S3885C22v9Ev();
extern void _ZN7S3885C23v10Ev();
static  VTBL_ENTRY vtc_S3885C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3885C2[0]),
  (VTBL_ENTRY)&_ZN7S3885C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3885C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3885C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3885C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3885C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S3885C2[];
extern  VTBL_ENTRY _ZTV7S3885C2[];
Class_Descriptor cd_S3885C2 = {  "S3885C2", // class name
  bases_S3885C2, 1,
  &(vtc_S3885C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3885C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3885C2),7, //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  S3885C1  : S3885C2 {
  ::S10180C46 s3885c1f0;
  virtual  ~S3885C1(); // _ZN7S3885C1D1Ev
  virtual void  v1(); // _ZN7S3885C12v1Ev
  virtual void  v2(); // _ZN7S3885C12v2Ev
  virtual void  v3(); // _ZN7S3885C12v3Ev
  virtual void  v4(); // _ZN7S3885C12v4Ev
  virtual void  v5(); // _ZN7S3885C12v5Ev
  virtual void  v6(); // _ZN7S3885C12v6Ev
  virtual void  v7(); // _ZN7S3885C12v7Ev
  S3885C1(); // tgen
};
//SIG(1 S3885C1) C1{ BC2{ BC3{ vd m Fi} vd v8 v9 v10} vd v1 v2 v3 v4 v5 v6 v7 FC4{ Fp[2]}}


 S3885C1 ::~S3885C1(){ note_dtor("S3885C1", this);}
void  S3885C1 ::v1(){vfunc_called(this, "_ZN7S3885C12v1Ev");}
void  S3885C1 ::v2(){vfunc_called(this, "_ZN7S3885C12v2Ev");}
void  S3885C1 ::v3(){vfunc_called(this, "_ZN7S3885C12v3Ev");}
void  S3885C1 ::v4(){vfunc_called(this, "_ZN7S3885C12v4Ev");}
void  S3885C1 ::v5(){vfunc_called(this, "_ZN7S3885C12v5Ev");}
void  S3885C1 ::v6(){vfunc_called(this, "_ZN7S3885C12v6Ev");}
void  S3885C1 ::v7(){vfunc_called(this, "_ZN7S3885C12v7Ev");}
S3885C1 ::S3885C1(){ note_ctor("S3885C1", this);} // tgen

static void Test_S3885C1()
{
  extern Class_Descriptor cd_S3885C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3885C1, buf);
    S3885C1 *dp, &lv = *(dp=new (buf) S3885C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3885C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3885C1)");
    check_base_class_offset(lv, (S10180C178*)(S3885C2*), 0, "S3885C1");
    check_base_class_offset(lv, (S3885C2*), 0, "S3885C1");
    check_field_offset(lv, s3885c1f0, ABISELECT(16,8), "S3885C1.s3885c1f0");
    test_class_info(&lv, &cd_S3885C1);
    dp->~S3885C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3885C1(Test_S3885C1, "S3885C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3885C1C1Ev();
extern void _ZN7S3885C1D1Ev();
Name_Map name_map_S3885C1[] = {
  NSPAIR(_ZN7S3885C1C1Ev),
  NSPAIR(_ZN7S3885C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
extern Class_Descriptor cd_S3885C2;
extern VTBL_ENTRY _ZTI7S3885C2[];
extern  VTBL_ENTRY _ZTV7S3885C2[];
static Base_Class bases_S3885C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3885C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3885C1[];
extern void _ZN7S3885C1D1Ev();
extern void _ZN7S3885C1D0Ev();
extern void _ZN7S3885C22v8Ev();
extern void _ZN7S3885C22v9Ev();
extern void _ZN7S3885C23v10Ev();
extern void _ZN7S3885C12v1Ev();
extern void _ZN7S3885C12v2Ev();
extern void _ZN7S3885C12v3Ev();
extern void _ZN7S3885C12v4Ev();
extern void _ZN7S3885C12v5Ev();
extern void _ZN7S3885C12v6Ev();
extern void _ZN7S3885C12v7Ev();
static  VTBL_ENTRY vtc_S3885C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3885C1[0]),
  (VTBL_ENTRY)&_ZN7S3885C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3885C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3885C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3885C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3885C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3885C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3885C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3885C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3885C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3885C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3885C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3885C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3885C1[];
extern  VTBL_ENTRY _ZTV7S3885C1[];
Class_Descriptor cd_S3885C1 = {  "S3885C1", // class name
  bases_S3885C1, 2,
  &(vtc_S3885C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3885C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3885C1),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  S16369C1  {
  ::S10180C150 s16369c1f0;
  ::S10181C37 s16369c1f1;
  ::S1168C12 s16369c1f2;
  void  mf16369c1(); // _ZN8S16369C19mf16369c1Ev
};
//SIG(1 S16369C1) C1{ m FC2{ m Fp[2]} FC3{ m FL[4]} FC4{ BC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}}}}


void  S16369C1 ::mf16369c1(){}

static void Test_S16369C1()
{
  {
    init_simple_test("S16369C1");
    S16369C1 lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S16369C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16369C1)");
    check_field_offset(lv, s16369c1f0, 0, "S16369C1.s16369c1f0");
    check_field_offset(lv, s16369c1f1, ABISELECT(16,8), "S16369C1.s16369c1f1");
    check_field_offset(lv, s16369c1f2, ABISELECT(48,40), "S16369C1.s16369c1f2");
  }
}
static Arrange_To_Call_Me vS16369C1(Test_S16369C1, "S16369C1", ABISELECT(64,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14116C2  {
  int s14116c2f0[2];
  void *s14116c2f1[1025];
};
//SIG(-1 S14116C2) C1{ Fi[2] Fp[1025]}



static void Test_S14116C2()
{
  {
    init_simple_test("S14116C2");
    S14116C2 lv;
    check2(sizeof(lv), ABISELECT(8208,4108), "sizeof(S14116C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14116C2)");
    check_field_offset(lv, s14116c2f0, 0, "S14116C2.s14116c2f0");
    check_field_offset(lv, s14116c2f1, 8, "S14116C2.s14116c2f1");
  }
}
static Arrange_To_Call_Me vS14116C2(Test_S14116C2, "S14116C2", ABISELECT(8208,4108));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14116C3  {
  void *s14116c3f0[3];
  int s14116c3f1[3];
};
//SIG(-1 S14116C3) C1{ Fp[3] Fi[3]}



static void Test_S14116C3()
{
  {
    init_simple_test("S14116C3");
    S14116C3 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S14116C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14116C3)");
    check_field_offset(lv, s14116c3f0, 0, "S14116C3.s14116c3f0");
    check_field_offset(lv, s14116c3f1, ABISELECT(24,12), "S14116C3.s14116c3f1");
  }
}
static Arrange_To_Call_Me vS14116C3(Test_S14116C3, "S14116C3", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14116C1  {
  void *s14116c1f0;
  ::S14116C2 s14116c1f1;
  ::S14116C3 s14116c1f2;
  ::S14116C3 s14116c1f3;
  void *s14116c1f4[2];
  int s14116c1f5[3];
  __tsi64 s14116c1f6[24];
};
//SIG(1 S14116C1) C1{ Fp FC2{ Fi[2] Fp[1025]} FC3{ Fp[3] Fi[3]} FC3 Fp[2] Fi[3] FL[24]}



static void Test_S14116C1()
{
  {
    init_simple_test("S14116C1");
    S14116C1 lv;
    check2(sizeof(lv), ABISELECT(8520,4372), "sizeof(S14116C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14116C1)");
    check_field_offset(lv, s14116c1f0, 0, "S14116C1.s14116c1f0");
    check_field_offset(lv, s14116c1f1, ABISELECT(8,4), "S14116C1.s14116c1f1");
    check_field_offset(lv, s14116c1f2, ABISELECT(8216,4112), "S14116C1.s14116c1f2");
    check_field_offset(lv, s14116c1f3, ABISELECT(8256,4136), "S14116C1.s14116c1f3");
    check_field_offset(lv, s14116c1f4, ABISELECT(8296,4160), "S14116C1.s14116c1f4");
    check_field_offset(lv, s14116c1f5, ABISELECT(8312,4168), "S14116C1.s14116c1f5");
    check_field_offset(lv, s14116c1f6, ABISELECT(8328,4180), "S14116C1.s14116c1f6");
  }
}
static Arrange_To_Call_Me vS14116C1(Test_S14116C1, "S14116C1", ABISELECT(8520,4372));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14423C1  {
  void *s14423c1f0;
  short s14423c1f1[3];
  char s14423c1f2[2];
  int s14423c1f3;
  long s14423c1f4[4];
  short s14423c1f5[4];
  void *s14423c1f6;
  int s14423c1f7;
  void *s14423c1f8;
  int s14423c1f9;
  void *s14423c1f10;
  int s14423c1f11;
  void *s14423c1f12;
  int s14423c1f13;
  void *s14423c1f14;
  int s14423c1f15;
};
//SIG(1 S14423C1) C1{ Fp Fs[3] Fc[2] Fi Fl[4] Fs[4] Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi}



static void Test_S14423C1()
{
  {
    init_simple_test("S14423C1");
    S14423C1 lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S14423C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14423C1)");
    check_field_offset(lv, s14423c1f0, 0, "S14423C1.s14423c1f0");
    check_field_offset(lv, s14423c1f1, ABISELECT(8,4), "S14423C1.s14423c1f1");
    check_field_offset(lv, s14423c1f2, ABISELECT(14,10), "S14423C1.s14423c1f2");
    check_field_offset(lv, s14423c1f3, ABISELECT(16,12), "S14423C1.s14423c1f3");
    check_field_offset(lv, s14423c1f4, ABISELECT(24,16), "S14423C1.s14423c1f4");
    check_field_offset(lv, s14423c1f5, ABISELECT(56,32), "S14423C1.s14423c1f5");
    check_field_offset(lv, s14423c1f6, ABISELECT(64,40), "S14423C1.s14423c1f6");
    check_field_offset(lv, s14423c1f7, ABISELECT(72,44), "S14423C1.s14423c1f7");
    check_field_offset(lv, s14423c1f8, ABISELECT(80,48), "S14423C1.s14423c1f8");
    check_field_offset(lv, s14423c1f9, ABISELECT(88,52), "S14423C1.s14423c1f9");
    check_field_offset(lv, s14423c1f10, ABISELECT(96,56), "S14423C1.s14423c1f10");
    check_field_offset(lv, s14423c1f11, ABISELECT(104,60), "S14423C1.s14423c1f11");
    check_field_offset(lv, s14423c1f12, ABISELECT(112,64), "S14423C1.s14423c1f12");
    check_field_offset(lv, s14423c1f13, ABISELECT(120,68), "S14423C1.s14423c1f13");
    check_field_offset(lv, s14423c1f14, ABISELECT(128,72), "S14423C1.s14423c1f14");
    check_field_offset(lv, s14423c1f15, ABISELECT(136,76), "S14423C1.s14423c1f15");
  }
}
static Arrange_To_Call_Me vS14423C1(Test_S14423C1, "S14423C1", ABISELECT(144,80));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11882C3  {
  void *s11882c3f0;
  int s11882c3f1[2];
  void *s11882c3f2;
};
//SIG(-1 S11882C3) C1{ Fp Fi[2] Fp}



static void Test_S11882C3()
{
  {
    init_simple_test("S11882C3");
    S11882C3 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S11882C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11882C3)");
    check_field_offset(lv, s11882c3f0, 0, "S11882C3.s11882c3f0");
    check_field_offset(lv, s11882c3f1, ABISELECT(8,4), "S11882C3.s11882c3f1");
    check_field_offset(lv, s11882c3f2, ABISELECT(16,12), "S11882C3.s11882c3f2");
  }
}
static Arrange_To_Call_Me vS11882C3(Test_S11882C3, "S11882C3", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11882C2  {
  void *s11882c2f0[3];
  int s11882c2f1;
  ::S11882C3 s11882c2f2;
  char s11882c2f3[1000];
};
//SIG(-1 S11882C2) C1{ Fp[3] Fi FC2{ Fp Fi[2] Fp} Fc[1000]}



static void Test_S11882C2()
{
  {
    init_simple_test("S11882C2");
    S11882C2 lv;
    check2(sizeof(lv), ABISELECT(1056,1032), "sizeof(S11882C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11882C2)");
    check_field_offset(lv, s11882c2f0, 0, "S11882C2.s11882c2f0");
    check_field_offset(lv, s11882c2f1, ABISELECT(24,12), "S11882C2.s11882c2f1");
    check_field_offset(lv, s11882c2f2, ABISELECT(32,16), "S11882C2.s11882c2f2");
    check_field_offset(lv, s11882c2f3, ABISELECT(56,32), "S11882C2.s11882c2f3");
  }
}
static Arrange_To_Call_Me vS11882C2(Test_S11882C2, "S11882C2", ABISELECT(1056,1032));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11882C1  {
  ::S11882C2 s11882c1f0;
  ::S14116C2 s11882c1f1;
  void *s11882c1f2;
};
//SIG(1 S11882C1) C1{ FC2{ Fp[3] Fi FC3{ Fp Fi[2] Fp} Fc[1000]} FC4{ Fi[2] Fp[1025]} Fp}



static void Test_S11882C1()
{
  {
    init_simple_test("S11882C1");
    S11882C1 lv;
    check2(sizeof(lv), ABISELECT(9272,5144), "sizeof(S11882C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11882C1)");
    check_field_offset(lv, s11882c1f0, 0, "S11882C1.s11882c1f0");
    check_field_offset(lv, s11882c1f1, ABISELECT(1056,1032), "S11882C1.s11882c1f1");
    check_field_offset(lv, s11882c1f2, ABISELECT(9264,5140), "S11882C1.s11882c1f2");
  }
}
static Arrange_To_Call_Me vS11882C1(Test_S11882C1, "S11882C1", ABISELECT(9272,5144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3827C2  : S10180C178 {
  char s3827c2f0;
  int s3827c2f1[2];
  void *s3827c2f2[2];
  virtual  ~S3827C2(); // _ZN7S3827C2D1Ev
  virtual void  v2(); // _ZN7S3827C22v2Ev
  virtual void  v3(); // _ZN7S3827C22v3Ev
  virtual void  v4(); // _ZN7S3827C22v4Ev
  S3827C2(); // tgen
};
//SIG(-1 S3827C2) C1{ BC2{ vd m Fi} vd v1 v2 v3 Fc Fi[2] Fp[2]}


 S3827C2 ::~S3827C2(){ note_dtor("S3827C2", this);}
void  S3827C2 ::v2(){vfunc_called(this, "_ZN7S3827C22v2Ev");}
void  S3827C2 ::v3(){vfunc_called(this, "_ZN7S3827C22v3Ev");}
void  S3827C2 ::v4(){vfunc_called(this, "_ZN7S3827C22v4Ev");}
S3827C2 ::S3827C2(){ note_ctor("S3827C2", this);} // tgen

static void Test_S3827C2()
{
  extern Class_Descriptor cd_S3827C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S3827C2, buf);
    S3827C2 *dp, &lv = *(dp=new (buf) S3827C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S3827C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3827C2)");
    check_base_class_offset(lv, (S10180C178*), 0, "S3827C2");
    check_field_offset(lv, s3827c2f0, ABISELECT(12,8), "S3827C2.s3827c2f0");
    check_field_offset(lv, s3827c2f1, ABISELECT(16,12), "S3827C2.s3827c2f1");
    check_field_offset(lv, s3827c2f2, ABISELECT(24,20), "S3827C2.s3827c2f2");
    test_class_info(&lv, &cd_S3827C2);
    dp->~S3827C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3827C2(Test_S3827C2, "S3827C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S3827C2C1Ev();
extern void _ZN7S3827C2D1Ev();
Name_Map name_map_S3827C2[] = {
  NSPAIR(_ZN7S3827C2C1Ev),
  NSPAIR(_ZN7S3827C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
static Base_Class bases_S3827C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3827C2[];
extern void _ZN7S3827C2D1Ev();
extern void _ZN7S3827C2D0Ev();
extern void _ZN7S3827C22v2Ev();
extern void _ZN7S3827C22v3Ev();
extern void _ZN7S3827C22v4Ev();
static  VTBL_ENTRY vtc_S3827C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3827C2[0]),
  (VTBL_ENTRY)&_ZN7S3827C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3827C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3827C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3827C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3827C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S3827C2[];
extern  VTBL_ENTRY _ZTV7S3827C2[];
Class_Descriptor cd_S3827C2 = {  "S3827C2", // class name
  bases_S3827C2, 1,
  &(vtc_S3827C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S3827C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3827C2),7, //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  S3827C1  : S3827C2 {
  ::S10180C114 s3827c1f0;
  virtual  ~S3827C1(); // _ZN7S3827C1D1Ev
  virtual void  v1(); // _ZN7S3827C12v1Ev
  S3827C1(); // tgen
};
//SIG(1 S3827C1) C1{ BC2{ BC3{ vd m Fi} vd v2 v3 v4 Fc Fi[2] Fp[2]} vd v1 FC4{ m Fp}}


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

static void Test_S3827C1()
{
  extern Class_Descriptor cd_S3827C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S3827C1, buf);
    S3827C1 *dp, &lv = *(dp=new (buf) S3827C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S3827C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3827C1)");
    check_base_class_offset(lv, (S10180C178*)(S3827C2*), 0, "S3827C1");
    check_base_class_offset(lv, (S3827C2*), 0, "S3827C1");
    check_field_offset(lv, s3827c1f0, ABISELECT(40,28), "S3827C1.s3827c1f0");
    test_class_info(&lv, &cd_S3827C1);
    dp->~S3827C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3827C1(Test_S3827C1, "S3827C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S3827C1C1Ev();
extern void _ZN7S3827C1D1Ev();
Name_Map name_map_S3827C1[] = {
  NSPAIR(_ZN7S3827C1C1Ev),
  NSPAIR(_ZN7S3827C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C178;
extern VTBL_ENTRY _ZTI10S10180C178[];
extern  VTBL_ENTRY _ZTV10S10180C178[];
extern Class_Descriptor cd_S3827C2;
extern VTBL_ENTRY _ZTI7S3827C2[];
extern  VTBL_ENTRY _ZTV7S3827C2[];
static Base_Class bases_S3827C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C178,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3827C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3827C1[];
extern void _ZN7S3827C1D1Ev();
extern void _ZN7S3827C1D0Ev();
extern void _ZN7S3827C22v2Ev();
extern void _ZN7S3827C22v3Ev();
extern void _ZN7S3827C22v4Ev();
extern void _ZN7S3827C12v1Ev();
static  VTBL_ENTRY vtc_S3827C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3827C1[0]),
  (VTBL_ENTRY)&_ZN7S3827C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3827C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3827C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3827C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3827C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3827C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3827C1[];
extern  VTBL_ENTRY _ZTV7S3827C1[];
Class_Descriptor cd_S3827C1 = {  "S3827C1", // class name
  bases_S3827C1, 2,
  &(vtc_S3827C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S3827C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3827C1),8, //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  S18464C5  {
  int s18464c5f0:13;
  int s18464c5f1:19;
};
//SIG(1 S18464C5) C1{ Fi:13 Fi:19}



static void Test_S18464C5()
{
  {
    init_simple_test("S18464C5");
    static S18464C5 lv;
    check2(sizeof(lv), 4, "sizeof(S18464C5)");
    check2(__alignof__(lv), 4, "__alignof__(S18464C5)");
    set_bf_and_test(lv, s18464c5f0, 0, 0, 13, 1, "S18464C5");
    set_bf_and_test(lv, s18464c5f0, 0, 0, 13, hide_sll(1LL<<12), "S18464C5");
    set_bf_and_test(lv, s18464c5f1, 1, 5, 19, 1, "S18464C5");
    set_bf_and_test(lv, s18464c5f1, 1, 5, 19, hide_sll(1LL<<18), "S18464C5");
  }
}
static Arrange_To_Call_Me vS18464C5(Test_S18464C5, "S18464C5", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S18464C4  {
  int s18464c4f0;
  ::S18464C5 s18464c4f1;
};
//SIG(1 S18464C4) U1{ Fi FC2{ Fi:13 Fi:19}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S18464C1  {
  ::S15696C12 s18464c1f0;
  ::S18464C4 s18464c1f1;
  __tsi64 s18464c1f2;
  void  mf18464c1(); // _ZN8S18464C19mf18464c1Ev
};
//SIG(1 S18464C1) C1{ m FU2{ m Fi FC3{ Fi:4 Fi:6 Fi:22}} FU4{ Fi FC5{ Fi:13 Fi:19}} FL}


void  S18464C1 ::mf18464c1(){}

static void Test_S18464C1()
{
  {
    init_simple_test("S18464C1");
    S18464C1 lv;
    check2(sizeof(lv), 16, "sizeof(S18464C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18464C1)");
    check_field_offset(lv, s18464c1f0, 0, "S18464C1.s18464c1f0");
    check_field_offset(lv, s18464c1f1, 4, "S18464C1.s18464c1f1");
    check_field_offset(lv, s18464c1f2, 8, "S18464C1.s18464c1f2");
  }
}
static Arrange_To_Call_Me vS18464C1(Test_S18464C1, "S18464C1", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15424C1  {
  ::S1168C5 s15424c1f0;
  ::S1167C23 s15424c1f1;
  int s15424c1f2;
  void  mf15424c1(); // _ZN8S15424C19mf15424c1Ev
};
//SIG(1 S15424C1) C1{ m FC2{ BC3{ m Fp Fi[2] FC4{ m}}} FC5{ BC3} Fi}


void  S15424C1 ::mf15424c1(){}

static void Test_S15424C1()
{
  {
    init_simple_test("S15424C1");
    S15424C1 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S15424C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15424C1)");
    check_field_offset(lv, s15424c1f0, 0, "S15424C1.s15424c1f0");
    check_field_offset(lv, s15424c1f1, ABISELECT(24,16), "S15424C1.s15424c1f1");
    check_field_offset(lv, s15424c1f2, ABISELECT(48,32), "S15424C1.s15424c1f2");
  }
}
static Arrange_To_Call_Me vS15424C1(Test_S15424C1, "S15424C1", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6841C2  {
  virtual  ~S6841C2(); // _ZN7S6841C2D1Ev
  virtual void  v4(); // _ZN7S6841C22v4Ev
  virtual void  v5(); // _ZN7S6841C22v5Ev
  virtual void  v6(); // _ZN7S6841C22v6Ev
  S6841C2(); // tgen
};
//SIG(-1 S6841C2) C1{ vd v1 v2 v3}


 S6841C2 ::~S6841C2(){ note_dtor("S6841C2", this);}
void  S6841C2 ::v4(){vfunc_called(this, "_ZN7S6841C22v4Ev");}
void  S6841C2 ::v5(){vfunc_called(this, "_ZN7S6841C22v5Ev");}
void  S6841C2 ::v6(){vfunc_called(this, "_ZN7S6841C22v6Ev");}
S6841C2 ::S6841C2(){ note_ctor("S6841C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6841C2C1Ev();
extern void _ZN7S6841C2D1Ev();
Name_Map name_map_S6841C2[] = {
  NSPAIR(_ZN7S6841C2C1Ev),
  NSPAIR(_ZN7S6841C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6841C2[];
extern void _ZN7S6841C2D1Ev();
extern void _ZN7S6841C2D0Ev();
extern void _ZN7S6841C22v4Ev();
extern void _ZN7S6841C22v5Ev();
extern void _ZN7S6841C22v6Ev();
static  VTBL_ENTRY vtc_S6841C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6841C2[0]),
  (VTBL_ENTRY)&_ZN7S6841C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6841C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6841C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6841C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6841C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S6841C2[];
extern  VTBL_ENTRY _ZTV7S6841C2[];
Class_Descriptor cd_S6841C2 = {  "S6841C2", // class name
  0,0,//no base classes
  &(vtc_S6841C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6841C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6841C2),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  S6841C1  : S6841C2 {
  void *s6841c1f0;
  ::S10180C13 s6841c1f1;
  ::S10180C13 s6841c1f2;
  virtual  ~S6841C1(); // _ZN7S6841C1D1Ev
  virtual void  v1(); // _ZN7S6841C12v1Ev
  virtual void  v2(); // _ZN7S6841C12v2Ev
  virtual void  v3(); // _ZN7S6841C12v3Ev
  S6841C1(); // tgen
};
//SIG(1 S6841C1) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 Fp FC3{ m Fp Fi FC4{ m}} FC3}


 S6841C1 ::~S6841C1(){ note_dtor("S6841C1", this);}
void  S6841C1 ::v1(){vfunc_called(this, "_ZN7S6841C12v1Ev");}
void  S6841C1 ::v2(){vfunc_called(this, "_ZN7S6841C12v2Ev");}
void  S6841C1 ::v3(){vfunc_called(this, "_ZN7S6841C12v3Ev");}
S6841C1 ::S6841C1(){ note_ctor("S6841C1", this);} // tgen

static void Test_S6841C1()
{
  extern Class_Descriptor cd_S6841C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S6841C1, buf);
    S6841C1 *dp, &lv = *(dp=new (buf) S6841C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S6841C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6841C1)");
    check_base_class_offset(lv, (S6841C2*), 0, "S6841C1");
    check_field_offset(lv, s6841c1f0, ABISELECT(8,4), "S6841C1.s6841c1f0");
    check_field_offset(lv, s6841c1f1, ABISELECT(16,8), "S6841C1.s6841c1f1");
    check_field_offset(lv, s6841c1f2, ABISELECT(32,20), "S6841C1.s6841c1f2");
    test_class_info(&lv, &cd_S6841C1);
    dp->~S6841C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6841C1(Test_S6841C1, "S6841C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S6841C1C1Ev();
extern void _ZN7S6841C1D1Ev();
Name_Map name_map_S6841C1[] = {
  NSPAIR(_ZN7S6841C1C1Ev),
  NSPAIR(_ZN7S6841C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6841C2;
extern VTBL_ENTRY _ZTI7S6841C2[];
extern  VTBL_ENTRY _ZTV7S6841C2[];
static Base_Class bases_S6841C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6841C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S6841C1[];
extern void _ZN7S6841C1D1Ev();
extern void _ZN7S6841C1D0Ev();
extern void _ZN7S6841C22v4Ev();
extern void _ZN7S6841C22v5Ev();
extern void _ZN7S6841C22v6Ev();
extern void _ZN7S6841C12v1Ev();
extern void _ZN7S6841C12v2Ev();
extern void _ZN7S6841C12v3Ev();
static  VTBL_ENTRY vtc_S6841C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6841C1[0]),
  (VTBL_ENTRY)&_ZN7S6841C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6841C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6841C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6841C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6841C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6841C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6841C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6841C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6841C1[];
extern  VTBL_ENTRY _ZTV7S6841C1[];
Class_Descriptor cd_S6841C1 = {  "S6841C1", // class name
  bases_S6841C1, 1,
  &(vtc_S6841C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S6841C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6841C1),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  S17665C4_nt  {
  void *s17665c4f0;
  int s17665c4f1[4];
  void  mf17665c4(); // _ZN11S17665C4_nt9mf17665c4Ev
};
//SIG(-1 S17665C4_nt) C1{ m Fp Fi[4]}


void  S17665C4_nt ::mf17665c4(){}

//skip512 S17665C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17665C3_nt  {
  ::S17665C4_nt s17665c3f0;
  void  mf17665c3(); // _ZN11S17665C3_nt9mf17665c3Ev
};
//SIG(-1 S17665C3_nt) C1{ m FC2{ m Fp Fi[4]}}


void  S17665C3_nt ::mf17665c3(){}

//skip512 S17665C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17665C1  {
  void *s17665c1f0;
  ::S10180C114 s17665c1f1;
  int s17665c1f2:31;
  unsigned char s17665c1f3:1;
  int s17665c1f4;
  ::S17665C3_nt s17665c1f5;
  void *s17665c1f6;
  void  mf17665c1(); // _ZN8S17665C19mf17665c1Ev
};
//SIG(1 S17665C1) C1{ m Fp FC2{ m Fp} Fi:31 Fc:1 Fi FC3{ m FC4{ m Fp Fi[4]}} Fp}


void  S17665C1 ::mf17665c1(){}

static void Test_S17665C1()
{
  {
    init_simple_test("S17665C1");
    static S17665C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S17665C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17665C1)");
    check_field_offset(lv, s17665c1f0, 0, "S17665C1.s17665c1f0");
    check_field_offset(lv, s17665c1f1, ABISELECT(8,4), "S17665C1.s17665c1f1");
    set_bf_and_test(lv, s17665c1f2, ABISELECT(16,8), 0, 31, 1, "S17665C1");
    set_bf_and_test(lv, s17665c1f2, ABISELECT(16,8), 0, 31, hide_sll(1LL<<30), "S17665C1");
    set_bf_and_test(lv, s17665c1f3, ABISELECT(19,11), 7, 1, 1, "S17665C1");
    check_field_offset(lv, s17665c1f4, ABISELECT(20,12), "S17665C1.s17665c1f4");
    check_field_offset(lv, s17665c1f5, ABISELECT(24,16), "S17665C1.s17665c1f5");
    check_field_offset(lv, s17665c1f6, ABISELECT(48,36), "S17665C1.s17665c1f6");
  }
}
static Arrange_To_Call_Me vS17665C1(Test_S17665C1, "S17665C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18179C5_nt  : S10180C138 {
  int s18179c5f0;
};
//SIG(-1 S18179C5_nt) C1{ BC2{ m} Fi}



//skip512 S18179C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S18179C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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  S18179C2  {
  ::S10180C13 s18179c2f0;
  ::S18179C5_nt s18179c2f1;
  void  mf18179c2(); // _ZN8S18179C29mf18179c2Ev
};
//SIG(-1 S18179C2) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ BC5{ m} Fi}}


void  S18179C2 ::mf18179c2(){}

static void Test_S18179C2()
{
  {
    init_simple_test("S18179C2");
    S18179C2 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18179C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18179C2)");
    check_field_offset(lv, s18179c2f0, 0, "S18179C2.s18179c2f0");
    check_field_offset(lv, s18179c2f1, ABISELECT(16,12), "S18179C2.s18179c2f1");
  }
}
static Arrange_To_Call_Me vS18179C2(Test_S18179C2, "S18179C2", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18179C1  {
  void *s18179c1f0[3];
  ::S18179C2 s18179c1f1;
  char s18179c1f2[2];
  void  mf18179c1(); // _ZN8S18179C19mf18179c1Ev
};
//SIG(1 S18179C1) C1{ m Fp[3] FC2{ m FC3{ m Fp Fi FC4{ m}} FC5{ BC6{ m} Fi}} Fc[2]}


void  S18179C1 ::mf18179c1(){}

static void Test_S18179C1()
{
  {
    init_simple_test("S18179C1");
    S18179C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S18179C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18179C1)");
    check_field_offset(lv, s18179c1f0, 0, "S18179C1.s18179c1f0");
    check_field_offset(lv, s18179c1f1, ABISELECT(24,12), "S18179C1.s18179c1f1");
    check_field_offset(lv, s18179c1f2, ABISELECT(48,28), "S18179C1.s18179c1f2");
  }
}
static Arrange_To_Call_Me vS18179C1(Test_S18179C1, "S18179C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18052C2  {
  ::S10180C13 s18052c2f0;
  int s18052c2f1;
  ::S10180C13 s18052c2f2;
  ::S10180C13 s18052c2f3;
  ::S10180C13 s18052c2f4;
  void  mf18052c2(); // _ZN8S18052C29mf18052c2Ev
  virtual  ~S18052C2(); // _ZN8S18052C2D1Ev
  S18052C2(); // tgen
};
//SIG(-1 S18052C2) C1{ vd m FC2{ m Fp Fi FC3{ m}} Fi FC2 FC2 FC2}


void  S18052C2 ::mf18052c2(){}
 S18052C2 ::~S18052C2(){ note_dtor("S18052C2", this);}
S18052C2 ::S18052C2(){ note_ctor("S18052C2", this);} // tgen

static void Test_S18052C2()
{
  extern Class_Descriptor cd_S18052C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S18052C2, buf);
    S18052C2 *dp, &lv = *(dp=new (buf) S18052C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S18052C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18052C2)");
    check_field_offset(lv, s18052c2f0, ABISELECT(8,4), "S18052C2.s18052c2f0");
    check_field_offset(lv, s18052c2f1, ABISELECT(24,16), "S18052C2.s18052c2f1");
    check_field_offset(lv, s18052c2f2, ABISELECT(32,20), "S18052C2.s18052c2f2");
    check_field_offset(lv, s18052c2f3, ABISELECT(48,32), "S18052C2.s18052c2f3");
    check_field_offset(lv, s18052c2f4, ABISELECT(64,44), "S18052C2.s18052c2f4");
    test_class_info(&lv, &cd_S18052C2);
    dp->~S18052C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18052C2(Test_S18052C2, "S18052C2", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S18052C2C1Ev();
extern void _ZN8S18052C2D1Ev();
Name_Map name_map_S18052C2[] = {
  NSPAIR(_ZN8S18052C2C1Ev),
  NSPAIR(_ZN8S18052C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18052C2[];
extern void _ZN8S18052C2D1Ev();
extern void _ZN8S18052C2D0Ev();
static  VTBL_ENTRY vtc_S18052C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18052C2[0]),
  (VTBL_ENTRY)&_ZN8S18052C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18052C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S18052C2[];
extern  VTBL_ENTRY _ZTV8S18052C2[];
Class_Descriptor cd_S18052C2 = {  "S18052C2", // class name
  0,0,//no base classes
  &(vtc_S18052C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S18052C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18052C2),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  S18052C1  {
  void *s18052c1f0[2];
  ::S18052C2 s18052c1f1;
  void  mf18052c1(); // _ZN8S18052C19mf18052c1Ev
};
//SIG(1 S18052C1) C1{ m Fp[2] FC2{ vd m FC3{ m Fp Fi FC4{ m}} Fi FC3 FC3 FC3}}


void  S18052C1 ::mf18052c1(){}

static void Test_S18052C1()
{
  {
    init_simple_test("S18052C1");
    S18052C1 lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S18052C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18052C1)");
    check_field_offset(lv, s18052c1f0, 0, "S18052C1.s18052c1f0");
    check_field_offset(lv, s18052c1f1, ABISELECT(16,8), "S18052C1.s18052c1f1");
  }
}
static Arrange_To_Call_Me vS18052C1(Test_S18052C1, "S18052C1", ABISELECT(96,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16297C1  {
  ::S10180C13 s16297c1f0;
  void *s16297c1f1[3];
  char s16297c1f2[2];
  void *s16297c1f3[6];
  char s16297c1f4[3];
  int s16297c1f5[5];
  void  mf16297c1(); // _ZN8S16297C19mf16297c1Ev
};
//SIG(1 S16297C1) C1{ m FC2{ m Fp Fi FC3{ m}} Fp[3] Fc[2] Fp[6] Fc[3] Fi[5]}


void  S16297C1 ::mf16297c1(){}

static void Test_S16297C1()
{
  {
    init_simple_test("S16297C1");
    S16297C1 lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S16297C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16297C1)");
    check_field_offset(lv, s16297c1f0, 0, "S16297C1.s16297c1f0");
    check_field_offset(lv, s16297c1f1, ABISELECT(16,12), "S16297C1.s16297c1f1");
    check_field_offset(lv, s16297c1f2, ABISELECT(40,24), "S16297C1.s16297c1f2");
    check_field_offset(lv, s16297c1f3, ABISELECT(48,28), "S16297C1.s16297c1f3");
    check_field_offset(lv, s16297c1f4, ABISELECT(96,52), "S16297C1.s16297c1f4");
    check_field_offset(lv, s16297c1f5, ABISELECT(100,56), "S16297C1.s16297c1f5");
  }
}
static Arrange_To_Call_Me vS16297C1(Test_S16297C1, "S16297C1", ABISELECT(120,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19393C3  {
  virtual void  v6(); // _ZN8S19393C32v6Ev
  ~S19393C3(); // tgen
  S19393C3(); // tgen
};
//SIG(-1 S19393C3) C1{ v1}


void  S19393C3 ::v6(){vfunc_called(this, "_ZN8S19393C32v6Ev");}
S19393C3 ::~S19393C3(){ note_dtor("S19393C3", this);} // tgen
S19393C3 ::S19393C3(){ note_ctor("S19393C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19393C3C1Ev();
extern void _ZN8S19393C3D1Ev();
Name_Map name_map_S19393C3[] = {
  NSPAIR(_ZN8S19393C3C1Ev),
  NSPAIR(_ZN8S19393C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19393C3[];
extern void _ZN8S19393C32v6Ev();
static  VTBL_ENTRY vtc_S19393C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19393C3[0]),
  (VTBL_ENTRY)&_ZN8S19393C32v6Ev,
};
extern VTBL_ENTRY _ZTI8S19393C3[];
extern  VTBL_ENTRY _ZTV8S19393C3[];
Class_Descriptor cd_S19393C3 = {  "S19393C3", // class name
  0,0,//no base classes
  &(vtc_S19393C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19393C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19393C3),3, //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  S19393C2  : S19393C3 {
  __tsi64 s19393c2f0;
  virtual void  v7(); // _ZN8S19393C22v7Ev
  virtual void  v8(); // _ZN8S19393C22v8Ev
  virtual void  v9(); // _ZN8S19393C22v9Ev
  virtual void  v10(); // _ZN8S19393C23v10Ev
  virtual void  v11(); // _ZN8S19393C23v11Ev
  ~S19393C2(); // tgen
  S19393C2(); // tgen
};
//SIG(-1 S19393C2) C1{ BC2{ v6} v1 v2 v3 v4 v5 FL}


void  S19393C2 ::v7(){vfunc_called(this, "_ZN8S19393C22v7Ev");}
void  S19393C2 ::v8(){vfunc_called(this, "_ZN8S19393C22v8Ev");}
void  S19393C2 ::v9(){vfunc_called(this, "_ZN8S19393C22v9Ev");}
void  S19393C2 ::v10(){vfunc_called(this, "_ZN8S19393C23v10Ev");}
void  S19393C2 ::v11(){vfunc_called(this, "_ZN8S19393C23v11Ev");}
S19393C2 ::~S19393C2(){ note_dtor("S19393C2", this);} // tgen
S19393C2 ::S19393C2(){ note_ctor("S19393C2", this);} // tgen

static void Test_S19393C2()
{
  extern Class_Descriptor cd_S19393C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19393C2, buf);
    S19393C2 *dp, &lv = *(dp=new (buf) S19393C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19393C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19393C2)");
    check_base_class_offset(lv, (S19393C3*), 0, "S19393C2");
    check_field_offset(lv, s19393c2f0, ABISELECT(8,4), "S19393C2.s19393c2f0");
    test_class_info(&lv, &cd_S19393C2);
    dp->~S19393C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19393C2(Test_S19393C2, "S19393C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19393C2C1Ev();
extern void _ZN8S19393C2D1Ev();
Name_Map name_map_S19393C2[] = {
  NSPAIR(_ZN8S19393C2C1Ev),
  NSPAIR(_ZN8S19393C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19393C3;
extern VTBL_ENTRY _ZTI8S19393C3[];
extern  VTBL_ENTRY _ZTV8S19393C3[];
static Base_Class bases_S19393C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19393C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19393C2[];
extern void _ZN8S19393C32v6Ev();
extern void _ZN8S19393C22v7Ev();
extern void _ZN8S19393C22v8Ev();
extern void _ZN8S19393C22v9Ev();
extern void _ZN8S19393C23v10Ev();
extern void _ZN8S19393C23v11Ev();
static  VTBL_ENTRY vtc_S19393C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19393C2[0]),
  (VTBL_ENTRY)&_ZN8S19393C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19393C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19393C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19393C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19393C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19393C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S19393C2[];
extern  VTBL_ENTRY _ZTV8S19393C2[];
Class_Descriptor cd_S19393C2 = {  "S19393C2", // class name
  bases_S19393C2, 1,
  &(vtc_S19393C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19393C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19393C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19393C1  : virtual S19393C2 {
  int s19393c1f0;
  virtual void  v1(); // _ZN8S19393C12v1Ev
  virtual void  v2(); // _ZN8S19393C12v2Ev
  virtual void  v3(); // _ZN8S19393C12v3Ev
  virtual void  v4(); // _ZN8S19393C12v4Ev
  virtual void  v5(); // _ZN8S19393C12v5Ev
  ~S19393C1(); // tgen
  S19393C1(); // tgen
};
//SIG(1 S19393C1) C1{ VBC2{ BC3{ v6} v7 v8 v9 v10 v11 FL} v1 v2 v3 v4 v5 Fi}


void  S19393C1 ::v1(){vfunc_called(this, "_ZN8S19393C12v1Ev");}
void  S19393C1 ::v2(){vfunc_called(this, "_ZN8S19393C12v2Ev");}
void  S19393C1 ::v3(){vfunc_called(this, "_ZN8S19393C12v3Ev");}
void  S19393C1 ::v4(){vfunc_called(this, "_ZN8S19393C12v4Ev");}
void  S19393C1 ::v5(){vfunc_called(this, "_ZN8S19393C12v5Ev");}
S19393C1 ::~S19393C1(){ note_dtor("S19393C1", this);} // tgen
S19393C1 ::S19393C1(){ note_ctor("S19393C1", this);} // tgen

static void Test_S19393C1()
{
  extern Class_Descriptor cd_S19393C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19393C1, buf);
    S19393C1 *dp, &lv = *(dp=new (buf) S19393C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19393C1)");
    check_base_class_offset(lv, (S19393C3*)(S19393C2*), ABISELECT(16,8), "S19393C1");
    check_base_class_offset(lv, (S19393C2*), ABISELECT(16,8), "S19393C1");
    check_field_offset(lv, s19393c1f0, ABISELECT(8,4), "S19393C1.s19393c1f0");
    test_class_info(&lv, &cd_S19393C1);
    dp->~S19393C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19393C1(Test_S19393C1, "S19393C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19393C1C1Ev();
extern void _ZN8S19393C1D1Ev();
Name_Map name_map_S19393C1[] = {
  NSPAIR(_ZN8S19393C1C1Ev),
  NSPAIR(_ZN8S19393C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19393C3;
extern VTBL_ENTRY _ZTI8S19393C3[];
extern  VTBL_ENTRY _ZTV8S19393C3[];
extern Class_Descriptor cd_S19393C2;
extern VTBL_ENTRY _ZTI8S19393C2[];
extern  VTBL_ENTRY _ZTV8S19393C2[];
static Base_Class bases_S19393C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19393C3,    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
  0, 0},
  {&cd_S19393C2,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19393C1[];
extern void _ZN8S19393C12v1Ev();
extern void _ZN8S19393C12v2Ev();
extern void _ZN8S19393C12v3Ev();
extern void _ZN8S19393C12v4Ev();
extern void _ZN8S19393C12v5Ev();
extern void _ZN8S19393C32v6Ev();
extern void _ZN8S19393C22v7Ev();
extern void _ZN8S19393C22v8Ev();
extern void _ZN8S19393C22v9Ev();
extern void _ZN8S19393C23v10Ev();
extern void _ZN8S19393C23v11Ev();
static  VTBL_ENTRY vtc_S19393C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19393C1[0]),
  (VTBL_ENTRY)&_ZN8S19393C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19393C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19393C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19393C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19393C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19393C1[0]),
  (VTBL_ENTRY)&_ZN8S19393C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19393C22v7Ev,
  (VTBL_ENTRY)&_ZN8S19393C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19393C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19393C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19393C23v11Ev,
};
extern VTBL_ENTRY _ZTV8S19393C1[];
static  VTT_ENTRY vtt_S19393C1[] = {
  {&(_ZTV8S19393C1[3]),  3,22},
  {&(_ZTV8S19393C1[16]),  16,22},
};
extern VTBL_ENTRY _ZTI8S19393C1[];
extern  VTBL_ENTRY _ZTV8S19393C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19393C1[];
Class_Descriptor cd_S19393C1 = {  "S19393C1", // class name
  bases_S19393C1, 2,
  &(vtc_S19393C1[0]), // expected_vtbl_contents
  &(vtt_S19393C1[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19393C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19393C1),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19393C1),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17228C1  {
  int s17228c1f0[4];
  ::S10180C13 s17228c1f1;
  int s17228c1f2;
  char s17228c1f3;
  int s17228c1f4;
  ::S10180C13 s17228c1f5;
  void *s17228c1f6;
  int s17228c1f7[2];
  void  mf17228c1(); // _ZN8S17228C19mf17228c1Ev
};
//SIG(1 S17228C1) C1{ m Fi[4] FC2{ m Fp Fi FC3{ m}} Fi Fc Fi FC2 Fp Fi[2]}


void  S17228C1 ::mf17228c1(){}

static void Test_S17228C1()
{
  {
    init_simple_test("S17228C1");
    S17228C1 lv;
    check2(sizeof(lv), ABISELECT(80,64), "sizeof(S17228C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17228C1)");
    check_field_offset(lv, s17228c1f0, 0, "S17228C1.s17228c1f0");
    check_field_offset(lv, s17228c1f1, 16, "S17228C1.s17228c1f1");
    check_field_offset(lv, s17228c1f2, ABISELECT(32,28), "S17228C1.s17228c1f2");
    check_field_offset(lv, s17228c1f3, ABISELECT(36,32), "S17228C1.s17228c1f3");
    check_field_offset(lv, s17228c1f4, ABISELECT(40,36), "S17228C1.s17228c1f4");
    check_field_offset(lv, s17228c1f5, ABISELECT(48,40), "S17228C1.s17228c1f5");
    check_field_offset(lv, s17228c1f6, ABISELECT(64,52), "S17228C1.s17228c1f6");
    check_field_offset(lv, s17228c1f7, ABISELECT(72,56), "S17228C1.s17228c1f7");
  }
}
static Arrange_To_Call_Me vS17228C1(Test_S17228C1, "S17228C1", ABISELECT(80,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14304C1  {
  void *s14304c1f0;
  int s14304c1f1[2];
  void *s14304c1f2[2];
  int s14304c1f3[2];
  void *s14304c1f4;
  short s14304c1f5;
  char s14304c1f6[2];
  void *s14304c1f7[3];
  int s14304c1f8;
  void *s14304c1f9[3];
};
//SIG(1 S14304C1) C1{ Fp Fi[2] Fp[2] Fi[2] Fp Fs Fc[2] Fp[3] Fi Fp[3]}



static void Test_S14304C1()
{
  {
    init_simple_test("S14304C1");
    S14304C1 lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S14304C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14304C1)");
    check_field_offset(lv, s14304c1f0, 0, "S14304C1.s14304c1f0");
    check_field_offset(lv, s14304c1f1, ABISELECT(8,4), "S14304C1.s14304c1f1");
    check_field_offset(lv, s14304c1f2, ABISELECT(16,12), "S14304C1.s14304c1f2");
    check_field_offset(lv, s14304c1f3, ABISELECT(32,20), "S14304C1.s14304c1f3");
    check_field_offset(lv, s14304c1f4, ABISELECT(40,28), "S14304C1.s14304c1f4");
    check_field_offset(lv, s14304c1f5, ABISELECT(48,32), "S14304C1.s14304c1f5");
    check_field_offset(lv, s14304c1f6, ABISELECT(50,34), "S14304C1.s14304c1f6");
    check_field_offset(lv, s14304c1f7, ABISELECT(56,36), "S14304C1.s14304c1f7");
    check_field_offset(lv, s14304c1f8, ABISELECT(80,48), "S14304C1.s14304c1f8");
    check_field_offset(lv, s14304c1f9, ABISELECT(88,52), "S14304C1.s14304c1f9");
  }
}
static Arrange_To_Call_Me vS14304C1(Test_S14304C1, "S14304C1", ABISELECT(112,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21737C1  {
  void *s21737c1f0;
  ::S10180C161 s21737c1f1;
  ::S15696C5_nt s21737c1f2;
  void  mf21737c1(); // _ZN8S21737C19mf21737c1Ev
  virtual  ~S21737C1(); // _ZN8S21737C1D1Ev
  S21737C1(); // tgen
};
//SIG(1 S21737C1) C1{ vd m Fp FC2{ m Fp Fi[2] FC3{ m}} FC4{ m FC5{ FL[4]}}}


void  S21737C1 ::mf21737c1(){}
 S21737C1 ::~S21737C1(){ note_dtor("S21737C1", this);}
S21737C1 ::S21737C1(){ note_ctor("S21737C1", this);} // tgen

static void Test_S21737C1()
{
  extern Class_Descriptor cd_S21737C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S21737C1, buf);
    S21737C1 *dp, &lv = *(dp=new (buf) S21737C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S21737C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21737C1)");
    check_field_offset(lv, s21737c1f0, ABISELECT(8,4), "S21737C1.s21737c1f0");
    check_field_offset(lv, s21737c1f1, ABISELECT(16,8), "S21737C1.s21737c1f1");
    check_field_offset(lv, s21737c1f2, ABISELECT(40,24), "S21737C1.s21737c1f2");
    test_class_info(&lv, &cd_S21737C1);
    dp->~S21737C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21737C1(Test_S21737C1, "S21737C1", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S21737C1C1Ev();
extern void _ZN8S21737C1D1Ev();
Name_Map name_map_S21737C1[] = {
  NSPAIR(_ZN8S21737C1C1Ev),
  NSPAIR(_ZN8S21737C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21737C1[];
extern void _ZN8S21737C1D1Ev();
extern void _ZN8S21737C1D0Ev();
static  VTBL_ENTRY vtc_S21737C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21737C1[0]),
  (VTBL_ENTRY)&_ZN8S21737C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21737C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21737C1[];
extern  VTBL_ENTRY _ZTV8S21737C1[];
Class_Descriptor cd_S21737C1 = {  "S21737C1", // class name
  0,0,//no base classes
  &(vtc_S21737C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S21737C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21737C1),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  S2862C2  : S10180C138 , virtual S10180C133 , virtual S10180C20 {
  ~S2862C2(); // tgen
  S2862C2(); // tgen
};
//SIG(-1 S2862C2) C1{ BC2{ m} VBC3{ m} VBC4{ m}}


S2862C2 ::~S2862C2(){ note_dtor("S2862C2", this);} // tgen
S2862C2 ::S2862C2(){ note_ctor("S2862C2", this);} // tgen

static void Test_S2862C2()
{
  extern Class_Descriptor cd_S2862C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2862C2, buf);
    S2862C2 *dp, &lv = *(dp=new (buf) S2862C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2862C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2862C2)");
    check_base_class_offset(lv, (S10180C138*), 0, "S2862C2");
    check_base_class_offset(lv, (S10180C133*), 0, "S2862C2");
    check_base_class_offset(lv, (S10180C20*), 0, "S2862C2");
    test_class_info(&lv, &cd_S2862C2);
    dp->~S2862C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2862C2(Test_S2862C2, "S2862C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2862C2C1Ev();
extern void _ZN7S2862C2D1Ev();
Name_Map name_map_S2862C2[] = {
  NSPAIR(_ZN7S2862C2C1Ev),
  NSPAIR(_ZN7S2862C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
static Base_Class bases_S2862C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2862C2[];
static  VTBL_ENTRY vtc_S2862C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2862C2[0]),
};
extern VTBL_ENTRY _ZTV7S2862C2[];
static  VTT_ENTRY vtt_S2862C2[] = {
  {&(_ZTV7S2862C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S2862C2[];
extern  VTBL_ENTRY _ZTV7S2862C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2862C2[];
Class_Descriptor cd_S2862C2 = {  "S2862C2", // class name
  bases_S2862C2, 3,
  &(vtc_S2862C2[0]), // expected_vtbl_contents
  &(vtt_S2862C2[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2862C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2862C2),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2862C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2862C6_nt  : virtual S10180C20 , virtual S10180C133 {
  ~S2862C6_nt(); // tgen
  S2862C6_nt(); // tgen
};
//SIG(-1 S2862C6_nt) C1{ VBC2{ m} VBC3{ m}}


S2862C6_nt ::~S2862C6_nt(){ note_dtor("S2862C6_nt", this);} // tgen
S2862C6_nt ::S2862C6_nt(){ note_ctor("S2862C6_nt", this);} // tgen

//skip512 S2862C6_nt

#else // __cplusplus

extern void _ZN10S2862C6_ntC1Ev();
extern void _ZN10S2862C6_ntD1Ev();
Name_Map name_map_S2862C6_nt[] = {
  NSPAIR(_ZN10S2862C6_ntC1Ev),
  NSPAIR(_ZN10S2862C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
static Base_Class bases_S2862C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S2862C6_nt[];
static  VTBL_ENTRY vtc_S2862C6_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S2862C6_nt[0]),
};
extern VTBL_ENTRY _ZTV10S2862C6_nt[];
static  VTT_ENTRY vtt_S2862C6_nt[] = {
  {&(_ZTV10S2862C6_nt[4]),  4,4},
};
extern VTBL_ENTRY _ZTI10S2862C6_nt[];
VTBL_ENTRY *P__ZTI10S2862C6_nt = _ZTI10S2862C6_nt; 
extern  VTBL_ENTRY _ZTV10S2862C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S2862C6_nt[];
Class_Descriptor cd_S2862C6_nt = {  "S2862C6_nt", // class name
  bases_S2862C6_nt, 2,
  &(vtc_S2862C6_nt[0]), // expected_vtbl_contents
  &(vtt_S2862C6_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2862C6_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S2862C6_nt),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S2862C6_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2862C1  : S2862C2 , S2862C6_nt , virtual S10180C14 {
  ~S2862C1(); // tgen
  S2862C1(); // tgen
};
//SIG(1 S2862C1) C1{ BC2{ BC3{ m} VBC4{ m} VBC5{ m}} BC6{ VBC5 VBC4} VBC7{ m}}


S2862C1 ::~S2862C1(){ note_dtor("S2862C1", this);} // tgen
S2862C1 ::S2862C1(){ note_ctor("S2862C1", this);} // tgen

static void Test_S2862C1()
{
  extern Class_Descriptor cd_S2862C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2862C1, buf);
    S2862C1 *dp, &lv = *(dp=new (buf) S2862C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2862C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2862C1)");
    check_base_class_offset(lv, (S10180C138*)(S2862C2*), 0, "S2862C1");
    check_base_class_offset(lv, (S10180C133*)(S2862C2*), 0, "S2862C1");
    check_base_class_offset(lv, (S10180C133*)(S2862C6_nt*), 0, "S2862C1");
    check_base_class_offset(lv, (S10180C20*)(S2862C2*), 0, "S2862C1");
    check_base_class_offset(lv, (S10180C20*)(S2862C6_nt*), 0, "S2862C1");
    check_base_class_offset(lv, (S2862C2*), 0, "S2862C1");
    check_base_class_offset(lv, (S2862C6_nt*), ABISELECT(8,4), "S2862C1");
    check_base_class_offset(lv, (S10180C14*), 0, "S2862C1");
    test_class_info(&lv, &cd_S2862C1);
    dp->~S2862C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2862C1(Test_S2862C1, "S2862C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2862C1C1Ev();
extern void _ZN7S2862C1D1Ev();
Name_Map name_map_S2862C1[] = {
  NSPAIR(_ZN7S2862C1C1Ev),
  NSPAIR(_ZN7S2862C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
extern Class_Descriptor cd_S2862C2;
extern VTBL_ENTRY _ZTI7S2862C2[];
extern  VTBL_ENTRY _ZTV7S2862C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2862C2[];
extern Class_Descriptor cd_S2862C6_nt;
extern VTBL_ENTRY _ZTI10S2862C6_nt[];
extern  VTBL_ENTRY _ZTV10S2862C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S2862C6_nt[];
extern Class_Descriptor cd_S10180C14;
extern VTBL_ENTRY _ZTI9S10180C14[];
static Base_Class bases_S2862C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S2862C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2862C6_nt,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2862C1[];
static  VTBL_ENTRY vtc_S2862C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2862C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2862C1[0]),
};
extern VTBL_ENTRY _ZTV7S2862C1[];
static  VTBL_ENTRY _tg__ZTV7S2862C2__7S2862C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2862C2[0]),
};
static  VTBL_ENTRY _tg__ZTV10S2862C6_nt__7S2862C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI10S2862C6_nt[0]),
};
static  VTT_ENTRY vtt_S2862C1[] = {
  {&(_ZTV7S2862C1[5]),  5,9},
  {&(_tg__ZTV7S2862C2__7S2862C1[4]),  4,4},
  {&(_tg__ZTV10S2862C6_nt__7S2862C1[4]),  4,4},
  {&(_ZTV7S2862C1[9]),  9,9},
};
extern VTBL_ENTRY _ZTI7S2862C1[];
extern  VTBL_ENTRY _ZTV7S2862C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2862C1[];
Class_Descriptor cd_S2862C1 = {  "S2862C1", // class name
  bases_S2862C1, 6,
  &(vtc_S2862C1[0]), // expected_vtbl_contents
  &(vtt_S2862C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2862C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2862C1),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2862C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17043C1  {
  int s17043c1f0[16];
  ::S10180C64 s17043c1f1;
  int s17043c1f2;
  void *s17043c1f3[2];
  int s17043c1f4;
  ::S10180C63 s17043c1f5;
  void  mf17043c1(); // _ZN8S17043C19mf17043c1Ev
};
//SIG(1 S17043C1) C1{ m Fi[16] FC2{ m Fp Fi[2]} Fi Fp[2] Fi FC3{ m Fi}}


void  S17043C1 ::mf17043c1(){}

static void Test_S17043C1()
{
  {
    init_simple_test("S17043C1");
    S17043C1 lv;
    check2(sizeof(lv), ABISELECT(112,96), "sizeof(S17043C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17043C1)");
    check_field_offset(lv, s17043c1f0, 0, "S17043C1.s17043c1f0");
    check_field_offset(lv, s17043c1f1, 64, "S17043C1.s17043c1f1");
    check_field_offset(lv, s17043c1f2, ABISELECT(80,76), "S17043C1.s17043c1f2");
    check_field_offset(lv, s17043c1f3, ABISELECT(88,80), "S17043C1.s17043c1f3");
    check_field_offset(lv, s17043c1f4, ABISELECT(104,88), "S17043C1.s17043c1f4");
    check_field_offset(lv, s17043c1f5, ABISELECT(108,92), "S17043C1.s17043c1f5");
  }
}
static Arrange_To_Call_Me vS17043C1(Test_S17043C1, "S17043C1", ABISELECT(112,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21497C1  {
  ::S10180C13 s21497c1f0;
  void *s21497c1f1;
  ::S10181C37 s21497c1f2;
  int s21497c1f3;
  void *s21497c1f4;
  void  mf21497c1(); // _ZN8S21497C19mf21497c1Ev
  virtual  ~S21497C1(); // _ZN8S21497C1D1Ev
  S21497C1(); // tgen
};
//SIG(1 S21497C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} Fp FC4{ m FL[4]} Fi Fp}


void  S21497C1 ::mf21497c1(){}
 S21497C1 ::~S21497C1(){ note_dtor("S21497C1", this);}
S21497C1 ::S21497C1(){ note_ctor("S21497C1", this);} // tgen

static void Test_S21497C1()
{
  extern Class_Descriptor cd_S21497C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S21497C1, buf);
    S21497C1 *dp, &lv = *(dp=new (buf) S21497C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S21497C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21497C1)");
    check_field_offset(lv, s21497c1f0, ABISELECT(8,4), "S21497C1.s21497c1f0");
    check_field_offset(lv, s21497c1f1, ABISELECT(24,16), "S21497C1.s21497c1f1");
    check_field_offset(lv, s21497c1f2, ABISELECT(32,20), "S21497C1.s21497c1f2");
    check_field_offset(lv, s21497c1f3, ABISELECT(64,52), "S21497C1.s21497c1f3");
    check_field_offset(lv, s21497c1f4, ABISELECT(72,56), "S21497C1.s21497c1f4");
    test_class_info(&lv, &cd_S21497C1);
    dp->~S21497C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21497C1(Test_S21497C1, "S21497C1", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN8S21497C1C1Ev();
extern void _ZN8S21497C1D1Ev();
Name_Map name_map_S21497C1[] = {
  NSPAIR(_ZN8S21497C1C1Ev),
  NSPAIR(_ZN8S21497C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21497C1[];
extern void _ZN8S21497C1D1Ev();
extern void _ZN8S21497C1D0Ev();
static  VTBL_ENTRY vtc_S21497C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21497C1[0]),
  (VTBL_ENTRY)&_ZN8S21497C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21497C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21497C1[];
extern  VTBL_ENTRY _ZTV8S21497C1[];
Class_Descriptor cd_S21497C1 = {  "S21497C1", // class name
  0,0,//no base classes
  &(vtc_S21497C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI8S21497C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21497C1),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  S17431C1  {
  long s17431c1f0[8];
  char s17431c1f1[770];
  void *s17431c1f2;
  long s17431c1f3;
  int s17431c1f4;
  char s17431c1f5[1536];
  long s17431c1f6;
  char s17431c1f7[512];
  void  mf17431c1(); // _ZN8S17431C19mf17431c1Ev
};
//SIG(1 S17431C1) C1{ m Fl[8] Fc[770] Fp Fl Fi Fc[1536] Fl Fc[512]}


void  S17431C1 ::mf17431c1(){}

static void Test_S17431C1()
{
  {
    init_simple_test("S17431C1");
    S17431C1 lv;
    check2(sizeof(lv), ABISELECT(2920,2868), "sizeof(S17431C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17431C1)");
    check_field_offset(lv, s17431c1f0, 0, "S17431C1.s17431c1f0");
    check_field_offset(lv, s17431c1f1, ABISELECT(64,32), "S17431C1.s17431c1f1");
    check_field_offset(lv, s17431c1f2, ABISELECT(840,804), "S17431C1.s17431c1f2");
    check_field_offset(lv, s17431c1f3, ABISELECT(848,808), "S17431C1.s17431c1f3");
    check_field_offset(lv, s17431c1f4, ABISELECT(856,812), "S17431C1.s17431c1f4");
    check_field_offset(lv, s17431c1f5, ABISELECT(860,816), "S17431C1.s17431c1f5");
    check_field_offset(lv, s17431c1f6, ABISELECT(2400,2352), "S17431C1.s17431c1f6");
    check_field_offset(lv, s17431c1f7, ABISELECT(2408,2356), "S17431C1.s17431c1f7");
  }
}
static Arrange_To_Call_Me vS17431C1(Test_S17431C1, "S17431C1", ABISELECT(2920,2868));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7008C2  {
  void *s7008c2f0[2];
  virtual void  v6(); // _ZN7S7008C22v6Ev
  virtual void  v7(); // _ZN7S7008C22v7Ev
  virtual void  v8(); // _ZN7S7008C22v8Ev
  virtual void  v9(); // _ZN7S7008C22v9Ev
  virtual void  v10(); // _ZN7S7008C23v10Ev
  ~S7008C2(); // tgen
  S7008C2(); // tgen
};
//SIG(-1 S7008C2) C1{ v1 v2 v3 v4 v5 Fp[2]}


void  S7008C2 ::v6(){vfunc_called(this, "_ZN7S7008C22v6Ev");}
void  S7008C2 ::v7(){vfunc_called(this, "_ZN7S7008C22v7Ev");}
void  S7008C2 ::v8(){vfunc_called(this, "_ZN7S7008C22v8Ev");}
void  S7008C2 ::v9(){vfunc_called(this, "_ZN7S7008C22v9Ev");}
void  S7008C2 ::v10(){vfunc_called(this, "_ZN7S7008C23v10Ev");}
S7008C2 ::~S7008C2(){ note_dtor("S7008C2", this);} // tgen
S7008C2 ::S7008C2(){ note_ctor("S7008C2", this);} // tgen

static void Test_S7008C2()
{
  extern Class_Descriptor cd_S7008C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7008C2, buf);
    S7008C2 *dp, &lv = *(dp=new (buf) S7008C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7008C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7008C2)");
    check_field_offset(lv, s7008c2f0, ABISELECT(8,4), "S7008C2.s7008c2f0");
    test_class_info(&lv, &cd_S7008C2);
    dp->~S7008C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7008C2(Test_S7008C2, "S7008C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7008C2C1Ev();
extern void _ZN7S7008C2D1Ev();
Name_Map name_map_S7008C2[] = {
  NSPAIR(_ZN7S7008C2C1Ev),
  NSPAIR(_ZN7S7008C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7008C2[];
extern void _ZN7S7008C22v6Ev();
extern void _ZN7S7008C22v7Ev();
extern void _ZN7S7008C22v8Ev();
extern void _ZN7S7008C22v9Ev();
extern void _ZN7S7008C23v10Ev();
static  VTBL_ENTRY vtc_S7008C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7008C2[0]),
  (VTBL_ENTRY)&_ZN7S7008C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7008C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7008C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7008C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7008C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7008C2[];
extern  VTBL_ENTRY _ZTV7S7008C2[];
Class_Descriptor cd_S7008C2 = {  "S7008C2", // class name
  0,0,//no base classes
  &(vtc_S7008C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7008C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7008C2),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  S7008C1  : S7008C2 {
  short s7008c1f0;
  virtual void  v1(); // _ZN7S7008C12v1Ev
  virtual void  v2(); // _ZN7S7008C12v2Ev
  virtual void  v3(); // _ZN7S7008C12v3Ev
  virtual void  v4(); // _ZN7S7008C12v4Ev
  virtual void  v5(); // _ZN7S7008C12v5Ev
  ~S7008C1(); // tgen
  S7008C1(); // tgen
};
//SIG(1 S7008C1) C1{ BC2{ v6 v7 v8 v9 v10 Fp[2]} v1 v2 v3 v4 v5 Fs}


void  S7008C1 ::v1(){vfunc_called(this, "_ZN7S7008C12v1Ev");}
void  S7008C1 ::v2(){vfunc_called(this, "_ZN7S7008C12v2Ev");}
void  S7008C1 ::v3(){vfunc_called(this, "_ZN7S7008C12v3Ev");}
void  S7008C1 ::v4(){vfunc_called(this, "_ZN7S7008C12v4Ev");}
void  S7008C1 ::v5(){vfunc_called(this, "_ZN7S7008C12v5Ev");}
S7008C1 ::~S7008C1(){ note_dtor("S7008C1", this);} // tgen
S7008C1 ::S7008C1(){ note_ctor("S7008C1", this);} // tgen

static void Test_S7008C1()
{
  extern Class_Descriptor cd_S7008C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7008C1, buf);
    S7008C1 *dp, &lv = *(dp=new (buf) S7008C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7008C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7008C1)");
    check_base_class_offset(lv, (S7008C2*), 0, "S7008C1");
    check_field_offset(lv, s7008c1f0, ABISELECT(24,12), "S7008C1.s7008c1f0");
    test_class_info(&lv, &cd_S7008C1);
    dp->~S7008C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7008C1(Test_S7008C1, "S7008C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7008C1C1Ev();
extern void _ZN7S7008C1D1Ev();
Name_Map name_map_S7008C1[] = {
  NSPAIR(_ZN7S7008C1C1Ev),
  NSPAIR(_ZN7S7008C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7008C2;
extern VTBL_ENTRY _ZTI7S7008C2[];
extern  VTBL_ENTRY _ZTV7S7008C2[];
static Base_Class bases_S7008C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7008C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7008C1[];
extern void _ZN7S7008C22v6Ev();
extern void _ZN7S7008C22v7Ev();
extern void _ZN7S7008C22v8Ev();
extern void _ZN7S7008C22v9Ev();
extern void _ZN7S7008C23v10Ev();
extern void _ZN7S7008C12v1Ev();
extern void _ZN7S7008C12v2Ev();
extern void _ZN7S7008C12v3Ev();
extern void _ZN7S7008C12v4Ev();
extern void _ZN7S7008C12v5Ev();
static  VTBL_ENTRY vtc_S7008C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7008C1[0]),
  (VTBL_ENTRY)&_ZN7S7008C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7008C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7008C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7008C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7008C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7008C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7008C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7008C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7008C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7008C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7008C1[];
extern  VTBL_ENTRY _ZTV7S7008C1[];
Class_Descriptor cd_S7008C1 = {  "S7008C1", // class name
  bases_S7008C1, 1,
  &(vtc_S7008C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7008C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7008C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19494C6  : virtual S10180C133 , S10180C93 {
  ~S19494C6(); // tgen
  S19494C6(); // tgen
};
//SIG(-1 S19494C6) C1{ VBC2{ m} BC3{ m FL}}


S19494C6 ::~S19494C6(){ note_dtor("S19494C6", this);} // tgen
S19494C6 ::S19494C6(){ note_ctor("S19494C6", this);} // tgen

static void Test_S19494C6()
{
  extern Class_Descriptor cd_S19494C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19494C6, buf);
    S19494C6 *dp, &lv = *(dp=new (buf) S19494C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19494C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19494C6)");
    check_base_class_offset(lv, (S10180C133*), 0, "S19494C6");
    check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S19494C6");
    test_class_info(&lv, &cd_S19494C6);
    dp->~S19494C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19494C6(Test_S19494C6, "S19494C6", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19494C6C1Ev();
extern void _ZN8S19494C6D1Ev();
Name_Map name_map_S19494C6[] = {
  NSPAIR(_ZN8S19494C6C1Ev),
  NSPAIR(_ZN8S19494C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S19494C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19494C6[];
static  VTBL_ENTRY vtc_S19494C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19494C6[0]),
};
extern VTBL_ENTRY _ZTV8S19494C6[];
static  VTT_ENTRY vtt_S19494C6[] = {
  {&(_ZTV8S19494C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19494C6[];
extern  VTBL_ENTRY _ZTV8S19494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19494C6[];
Class_Descriptor cd_S19494C6 = {  "S19494C6", // class name
  bases_S19494C6, 2,
  &(vtc_S19494C6[0]), // expected_vtbl_contents
  &(vtt_S19494C6[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19494C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19494C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19494C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19494C3  : virtual S10180C138 , virtual S10180C93 , S19494C6 {
  ~S19494C3(); // tgen
  S19494C3(); // tgen
};
//SIG(-1 S19494C3) C1{ VBC2{ m} VBC3{ m FL} BC4{ VBC5{ m} BC3}}


S19494C3 ::~S19494C3(){ note_dtor("S19494C3", this);} // tgen
S19494C3 ::S19494C3(){ note_ctor("S19494C3", this);} // tgen

static void Test_S19494C3()
{
  extern Class_Descriptor cd_S19494C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S19494C3, buf);
    S19494C3 *dp, &lv = *(dp=new (buf) S19494C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S19494C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19494C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S19494C3");
    /*is_ambiguous_... S19494C3::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*), ABISELECT(16,12), "S19494C3");
    check_base_class_offset(lv, (S10180C133*)(S19494C6*), 0, "S19494C3");
    check_base_class_offset(lv, (S10180C93*)(S19494C6*), ABISELECT(8,4), "S19494C3");
    check_base_class_offset(lv, (S19494C6*), 0, "S19494C3");
    test_class_info(&lv, &cd_S19494C3);
    dp->~S19494C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19494C3(Test_S19494C3, "S19494C3", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S19494C3C1Ev();
extern void _ZN8S19494C3D1Ev();
Name_Map name_map_S19494C3[] = {
  NSPAIR(_ZN8S19494C3C1Ev),
  NSPAIR(_ZN8S19494C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19494C6;
extern VTBL_ENTRY _ZTI8S19494C6[];
extern  VTBL_ENTRY _ZTV8S19494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19494C6[];
static Base_Class bases_S19494C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19494C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19494C3[];
static  VTBL_ENTRY vtc_S19494C3[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19494C3[0]),
};
extern VTBL_ENTRY _ZTV8S19494C3[];
static  VTBL_ENTRY _tg__ZTV8S19494C6__8S19494C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19494C6[0]),
};
static  VTT_ENTRY vtt_S19494C3[] = {
  {&(_ZTV8S19494C3[5]),  5,5},
  {&(_tg__ZTV8S19494C6__8S19494C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19494C3[];
extern  VTBL_ENTRY _ZTV8S19494C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19494C3[];
Class_Descriptor cd_S19494C3 = {  "S19494C3", // class name
  bases_S19494C3, 5,
  &(vtc_S19494C3[0]), // expected_vtbl_contents
  &(vtt_S19494C3[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S19494C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19494C3),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19494C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19494C2  : S19494C3 {
  ~S19494C2(); // tgen
  S19494C2(); // tgen
};
//SIG(-1 S19494C2) C1{ BC2{ VBC3{ m} VBC4{ m FL} BC5{ VBC6{ m} BC4}}}


S19494C2 ::~S19494C2(){ note_dtor("S19494C2", this);} // tgen
S19494C2 ::S19494C2(){ note_ctor("S19494C2", this);} // tgen

static void Test_S19494C2()
{
  extern Class_Descriptor cd_S19494C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S19494C2, buf);
    S19494C2 *dp, &lv = *(dp=new (buf) S19494C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S19494C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19494C2)");
    check_base_class_offset(lv, (S10180C138*)(S19494C3*), 0, "S19494C2");
    /*is_ambiguous_... S19494C3::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19494C3*), ABISELECT(16,12), "S19494C2");
    check_base_class_offset(lv, (S10180C133*)(S19494C6*)(S19494C3*), 0, "S19494C2");
    check_base_class_offset(lv, (S10180C93*)(S19494C6*)(S19494C3*), ABISELECT(8,4), "S19494C2");
    check_base_class_offset(lv, (S19494C6*)(S19494C3*), 0, "S19494C2");
    check_base_class_offset(lv, (S19494C3*), 0, "S19494C2");
    test_class_info(&lv, &cd_S19494C2);
    dp->~S19494C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19494C2(Test_S19494C2, "S19494C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S19494C2C1Ev();
extern void _ZN8S19494C2D1Ev();
Name_Map name_map_S19494C2[] = {
  NSPAIR(_ZN8S19494C2C1Ev),
  NSPAIR(_ZN8S19494C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19494C6;
extern VTBL_ENTRY _ZTI8S19494C6[];
extern  VTBL_ENTRY _ZTV8S19494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19494C6[];
extern Class_Descriptor cd_S19494C3;
extern VTBL_ENTRY _ZTI8S19494C3[];
extern  VTBL_ENTRY _ZTV8S19494C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19494C3[];
static Base_Class bases_S19494C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19494C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19494C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19494C2[];
static  VTBL_ENTRY vtc_S19494C2[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19494C2[0]),
};
extern VTBL_ENTRY _ZTV8S19494C2[];
static  VTBL_ENTRY _tg__ZTV8S19494C3__8S19494C2[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19494C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19494C68S19494C3__8S19494C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19494C6[0]),
};
static  VTT_ENTRY vtt_S19494C2[] = {
  {&(_ZTV8S19494C2[5]),  5,5},
  {&(_tg__ZTV8S19494C3__8S19494C2[5]),  5,5},
  {&(_tg__ZTV8S19494C68S19494C3__8S19494C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19494C2[];
extern  VTBL_ENTRY _ZTV8S19494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19494C2[];
Class_Descriptor cd_S19494C2 = {  "S19494C2", // class name
  bases_S19494C2, 6,
  &(vtc_S19494C2[0]), // expected_vtbl_contents
  &(vtt_S19494C2[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S19494C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19494C2),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19494C2),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19494C1  : virtual S19494C2 {
  ~S19494C1(); // tgen
  S19494C1(); // tgen
};
//SIG(1 S19494C1) C1{ VBC2{ BC3{ VBC4{ m} VBC5{ m FL} BC6{ VBC7{ m} BC5}}}}


S19494C1 ::~S19494C1(){ note_dtor("S19494C1", this);} // tgen
S19494C1 ::S19494C1(){ note_ctor("S19494C1", this);} // tgen

static void Test_S19494C1()
{
  extern Class_Descriptor cd_S19494C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S19494C1, buf);
    S19494C1 *dp, &lv = *(dp=new (buf) S19494C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S19494C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19494C1)");
    check_base_class_offset(lv, (S10180C138*)(S19494C3*)(S19494C2*), 0, "S19494C1");
    /*is_ambiguous_... S19494C3::S10180C93 */ AMB_check_base_class_offset(lv, (S10180C93*)(S19494C3*)(S19494C2*), ABISELECT(24,16), "S19494C1");
    check_base_class_offset(lv, (S10180C133*)(S19494C6*)(S19494C3*)(S19494C2*), 0, "S19494C1");
    check_base_class_offset(lv, (S10180C93*)(S19494C6*)(S19494C3*)(S19494C2*), ABISELECT(16,8), "S19494C1");
    check_base_class_offset(lv, (S19494C6*)(S19494C3*)(S19494C2*), ABISELECT(8,4), "S19494C1");
    check_base_class_offset(lv, (S19494C3*)(S19494C2*), ABISELECT(8,4), "S19494C1");
    check_base_class_offset(lv, (S19494C2*), ABISELECT(8,4), "S19494C1");
    test_class_info(&lv, &cd_S19494C1);
    dp->~S19494C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19494C1(Test_S19494C1, "S19494C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S19494C1C1Ev();
extern void _ZN8S19494C1D1Ev();
Name_Map name_map_S19494C1[] = {
  NSPAIR(_ZN8S19494C1C1Ev),
  NSPAIR(_ZN8S19494C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S19494C6;
extern VTBL_ENTRY _ZTI8S19494C6[];
extern  VTBL_ENTRY _ZTV8S19494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19494C6[];
extern Class_Descriptor cd_S19494C3;
extern VTBL_ENTRY _ZTI8S19494C3[];
extern  VTBL_ENTRY _ZTV8S19494C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19494C3[];
extern Class_Descriptor cd_S19494C2;
extern VTBL_ENTRY _ZTI8S19494C2[];
extern  VTBL_ENTRY _ZTV8S19494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19494C2[];
static Base_Class bases_S19494C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C93,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 1},
  {&cd_S10180C93,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19494C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19494C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19494C2,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19494C1[];
static  VTBL_ENTRY vtc_S19494C1[] = {
  0,
  ABISELECT(24,16),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19494C1[0]),
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19494C1[0]),
};
extern VTBL_ENTRY _ZTV8S19494C1[];
static  VTBL_ENTRY _tg__ZTV8S19494C2__8S19494C1[] = {
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19494C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19494C38S19494C2__8S19494C1[] = {
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19494C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19494C68S19494C38S19494C2__8S19494C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19494C6[0]),
};
static  VTT_ENTRY vtt_S19494C1[] = {
  {&(_ZTV8S19494C1[6]),  6,11},
  {&(_ZTV8S19494C1[11]),  11,11},
  {&(_tg__ZTV8S19494C2__8S19494C1[5]),  5,5},
  {&(_tg__ZTV8S19494C38S19494C2__8S19494C1[5]),  5,5},
  {&(_tg__ZTV8S19494C68S19494C38S19494C2__8S19494C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19494C1[];
extern  VTBL_ENTRY _ZTV8S19494C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19494C1[];
Class_Descriptor cd_S19494C1 = {  "S19494C1", // class name
  bases_S19494C1, 7,
  &(vtc_S19494C1[0]), // expected_vtbl_contents
  &(vtt_S19494C1[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S19494C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19494C1),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19494C1),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6792C2  {
  virtual void  v3(); // _ZN7S6792C22v3Ev
  ~S6792C2(); // tgen
  S6792C2(); // tgen
};
//SIG(-1 S6792C2) C1{ v1}


void  S6792C2 ::v3(){vfunc_called(this, "_ZN7S6792C22v3Ev");}
S6792C2 ::~S6792C2(){ note_dtor("S6792C2", this);} // tgen
S6792C2 ::S6792C2(){ note_ctor("S6792C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6792C2C1Ev();
extern void _ZN7S6792C2D1Ev();
Name_Map name_map_S6792C2[] = {
  NSPAIR(_ZN7S6792C2C1Ev),
  NSPAIR(_ZN7S6792C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6792C2[];
extern void _ZN7S6792C22v3Ev();
static  VTBL_ENTRY vtc_S6792C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6792C2[0]),
  (VTBL_ENTRY)&_ZN7S6792C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6792C2[];
extern  VTBL_ENTRY _ZTV7S6792C2[];
Class_Descriptor cd_S6792C2 = {  "S6792C2", // class name
  0,0,//no base classes
  &(vtc_S6792C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6792C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6792C2),3, //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  S6792C1  : S6792C2 {
  ::S19393C2 s6792c1f0;
  virtual  ~S6792C1(); // _ZN7S6792C1D1Ev
  virtual void  v1(); // _ZN7S6792C12v1Ev
  virtual void  v2(); // _ZN7S6792C12v2Ev
  S6792C1(); // tgen
};
//SIG(1 S6792C1) C1{ BC2{ v3} vd v1 v2 FC3{ BC4{ v9} v4 v5 v6 v7 v8 FL}}


 S6792C1 ::~S6792C1(){ note_dtor("S6792C1", this);}
void  S6792C1 ::v1(){vfunc_called(this, "_ZN7S6792C12v1Ev");}
void  S6792C1 ::v2(){vfunc_called(this, "_ZN7S6792C12v2Ev");}
S6792C1 ::S6792C1(){ note_ctor("S6792C1", this);} // tgen

static void Test_S6792C1()
{
  extern Class_Descriptor cd_S6792C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6792C1, buf);
    S6792C1 *dp, &lv = *(dp=new (buf) S6792C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6792C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6792C1)");
    check_base_class_offset(lv, (S6792C2*), 0, "S6792C1");
    check_field_offset(lv, s6792c1f0, ABISELECT(8,4), "S6792C1.s6792c1f0");
    test_class_info(&lv, &cd_S6792C1);
    dp->~S6792C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6792C1(Test_S6792C1, "S6792C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6792C1C1Ev();
extern void _ZN7S6792C1D1Ev();
Name_Map name_map_S6792C1[] = {
  NSPAIR(_ZN7S6792C1C1Ev),
  NSPAIR(_ZN7S6792C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6792C2;
extern VTBL_ENTRY _ZTI7S6792C2[];
extern  VTBL_ENTRY _ZTV7S6792C2[];
static Base_Class bases_S6792C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6792C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S6792C1[];
extern void _ZN7S6792C22v3Ev();
extern void _ZN7S6792C1D1Ev();
extern void _ZN7S6792C1D0Ev();
extern void _ZN7S6792C12v1Ev();
extern void _ZN7S6792C12v2Ev();
static  VTBL_ENTRY vtc_S6792C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6792C1[0]),
  (VTBL_ENTRY)&_ZN7S6792C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6792C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6792C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6792C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6792C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6792C1[];
extern  VTBL_ENTRY _ZTV7S6792C1[];
Class_Descriptor cd_S6792C1 = {  "S6792C1", // class name
  bases_S6792C1, 1,
  &(vtc_S6792C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6792C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6792C1),7, //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  S6203C1  : S10180C138 {
  int s6203c1f0[2];
  ::S1168C5 s6203c1f1;
  void *s6203c1f2;
};
//SIG(1 S6203C1) C1{ BC2{ m} Fi[2] FC3{ BC4{ m Fp Fi[2] FC2}} Fp}



static void Test_S6203C1()
{
  extern Class_Descriptor cd_S6203C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S6203C1, buf);
    S6203C1 &lv = *(new (buf) S6203C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S6203C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6203C1)");
    check_base_class_offset(lv, (S10180C138*), 0, "S6203C1");
    check_field_offset(lv, s6203c1f0, 0, "S6203C1.s6203c1f0");
    check_field_offset(lv, s6203c1f1, 8, "S6203C1.s6203c1f1");
    check_field_offset(lv, s6203c1f2, ABISELECT(32,24), "S6203C1.s6203c1f2");
    test_class_info(&lv, &cd_S6203C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6203C1(Test_S6203C1, "S6203C1", ABISELECT(40,28));

#else // __cplusplus

extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S6203C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6203C1 = {  "S6203C1", // class name
  bases_S6203C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7492C2  : virtual S10180C138 , virtual S10180C133 {
  ~S7492C2(); // tgen
  S7492C2(); // tgen
};
//SIG(-1 S7492C2) C1{ VBC2{ m} VBC3{ m}}


S7492C2 ::~S7492C2(){ note_dtor("S7492C2", this);} // tgen
S7492C2 ::S7492C2(){ note_ctor("S7492C2", this);} // tgen

static void Test_S7492C2()
{
  extern Class_Descriptor cd_S7492C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7492C2, buf);
    S7492C2 *dp, &lv = *(dp=new (buf) S7492C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7492C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7492C2)");
    check_base_class_offset(lv, (S10180C138*), 0, "S7492C2");
    check_base_class_offset(lv, (S10180C133*), 0, "S7492C2");
    test_class_info(&lv, &cd_S7492C2);
    dp->~S7492C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7492C2(Test_S7492C2, "S7492C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7492C2C1Ev();
extern void _ZN7S7492C2D1Ev();
Name_Map name_map_S7492C2[] = {
  NSPAIR(_ZN7S7492C2C1Ev),
  NSPAIR(_ZN7S7492C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
static Base_Class bases_S7492C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7492C2[];
static  VTBL_ENTRY vtc_S7492C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7492C2[0]),
};
extern VTBL_ENTRY _ZTV7S7492C2[];
static  VTT_ENTRY vtt_S7492C2[] = {
  {&(_ZTV7S7492C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7492C2[];
extern  VTBL_ENTRY _ZTV7S7492C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7492C2[];
Class_Descriptor cd_S7492C2 = {  "S7492C2", // class name
  bases_S7492C2, 2,
  &(vtc_S7492C2[0]), // expected_vtbl_contents
  &(vtt_S7492C2[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7492C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7492C2),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7492C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7492C5  : virtual S10180C133 , virtual S10180C138 {
  ~S7492C5(); // tgen
  S7492C5(); // tgen
};
//SIG(-1 S7492C5) C1{ VBC2{ m} VBC3{ m}}


S7492C5 ::~S7492C5(){ note_dtor("S7492C5", this);} // tgen
S7492C5 ::S7492C5(){ note_ctor("S7492C5", this);} // tgen

static void Test_S7492C5()
{
  extern Class_Descriptor cd_S7492C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7492C5, buf);
    S7492C5 *dp, &lv = *(dp=new (buf) S7492C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7492C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7492C5)");
    check_base_class_offset(lv, (S10180C133*), 0, "S7492C5");
    check_base_class_offset(lv, (S10180C138*), 0, "S7492C5");
    test_class_info(&lv, &cd_S7492C5);
    dp->~S7492C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7492C5(Test_S7492C5, "S7492C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7492C5C1Ev();
extern void _ZN7S7492C5D1Ev();
Name_Map name_map_S7492C5[] = {
  NSPAIR(_ZN7S7492C5C1Ev),
  NSPAIR(_ZN7S7492C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S7492C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7492C5[];
static  VTBL_ENTRY vtc_S7492C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7492C5[0]),
};
extern VTBL_ENTRY _ZTV7S7492C5[];
static  VTT_ENTRY vtt_S7492C5[] = {
  {&(_ZTV7S7492C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7492C5[];
extern  VTBL_ENTRY _ZTV7S7492C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7492C5[];
Class_Descriptor cd_S7492C5 = {  "S7492C5", // class name
  bases_S7492C5, 2,
  &(vtc_S7492C5[0]), // expected_vtbl_contents
  &(vtt_S7492C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7492C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7492C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7492C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7492C1  : S7492C2 , S7492C5 , virtual S10180C20 {
  ~S7492C1(); // tgen
  S7492C1(); // tgen
};
//SIG(1 S7492C1) C1{ BC2{ VBC3{ m} VBC4{ m}} BC5{ VBC4 VBC3} VBC6{ m}}


S7492C1 ::~S7492C1(){ note_dtor("S7492C1", this);} // tgen
S7492C1 ::S7492C1(){ note_ctor("S7492C1", this);} // tgen

static void Test_S7492C1()
{
  extern Class_Descriptor cd_S7492C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7492C1, buf);
    S7492C1 *dp, &lv = *(dp=new (buf) S7492C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7492C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7492C1)");
    check_base_class_offset(lv, (S10180C138*)(S7492C2*), 0, "S7492C1");
    check_base_class_offset(lv, (S10180C138*)(S7492C5*), 0, "S7492C1");
    check_base_class_offset(lv, (S10180C133*)(S7492C2*), 0, "S7492C1");
    check_base_class_offset(lv, (S10180C133*)(S7492C5*), 0, "S7492C1");
    check_base_class_offset(lv, (S7492C2*), 0, "S7492C1");
    check_base_class_offset(lv, (S7492C5*), ABISELECT(8,4), "S7492C1");
    check_base_class_offset(lv, (S10180C20*), 0, "S7492C1");
    test_class_info(&lv, &cd_S7492C1);
    dp->~S7492C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7492C1(Test_S7492C1, "S7492C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7492C1C1Ev();
extern void _ZN7S7492C1D1Ev();
Name_Map name_map_S7492C1[] = {
  NSPAIR(_ZN7S7492C1C1Ev),
  NSPAIR(_ZN7S7492C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C133;
extern VTBL_ENTRY _ZTI10S10180C133[];
extern Class_Descriptor cd_S7492C2;
extern VTBL_ENTRY _ZTI7S7492C2[];
extern  VTBL_ENTRY _ZTV7S7492C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7492C2[];
extern Class_Descriptor cd_S7492C5;
extern VTBL_ENTRY _ZTI7S7492C5[];
extern  VTBL_ENTRY _ZTV7S7492C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7492C5[];
extern Class_Descriptor cd_S10180C20;
extern VTBL_ENTRY _ZTI9S10180C20[];
static Base_Class bases_S7492C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C133,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S7492C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7492C5,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10180C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7492C1[];
static  VTBL_ENTRY vtc_S7492C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7492C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7492C1[0]),
};
extern VTBL_ENTRY _ZTV7S7492C1[];
static  VTBL_ENTRY _tg__ZTV7S7492C2__7S7492C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7492C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7492C5__7S7492C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7492C5[0]),
};
static  VTT_ENTRY vtt_S7492C1[] = {
  {&(_ZTV7S7492C1[5]),  5,9},
  {&(_tg__ZTV7S7492C2__7S7492C1[4]),  4,4},
  {&(_tg__ZTV7S7492C5__7S7492C1[4]),  4,4},
  {&(_ZTV7S7492C1[9]),  9,9},
};
extern VTBL_ENTRY _ZTI7S7492C1[];
extern  VTBL_ENTRY _ZTV7S7492C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7492C1[];
Class_Descriptor cd_S7492C1 = {  "S7492C1", // class name
  bases_S7492C1, 5,
  &(vtc_S7492C1[0]), // expected_vtbl_contents
  &(vtt_S7492C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7492C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7492C1),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7492C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13677C1  {
  __tsi64 s13677c1f0;
  char s13677c1f1[8];
  void *s13677c1f2;
  int s13677c1f3;
  void *s13677c1f4[2];
  char s13677c1f5[8];
  void *s13677c1f6[2];
  char s13677c1f7[188];
};
//SIG(1 S13677C1) C1{ FL Fc[8] Fp Fi Fp[2] Fc[8] Fp[2] Fc[188]}



static void Test_S13677C1()
{
  {
    init_simple_test("S13677C1");
    S13677C1 lv;
    check2(sizeof(lv), ABISELECT(264,236), "sizeof(S13677C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13677C1)");
    check_field_offset(lv, s13677c1f0, 0, "S13677C1.s13677c1f0");
    check_field_offset(lv, s13677c1f1, 8, "S13677C1.s13677c1f1");
    check_field_offset(lv, s13677c1f2, 16, "S13677C1.s13677c1f2");
    check_field_offset(lv, s13677c1f3, ABISELECT(24,20), "S13677C1.s13677c1f3");
    check_field_offset(lv, s13677c1f4, ABISELECT(32,24), "S13677C1.s13677c1f4");
    check_field_offset(lv, s13677c1f5, ABISELECT(48,32), "S13677C1.s13677c1f5");
    check_field_offset(lv, s13677c1f6, ABISELECT(56,40), "S13677C1.s13677c1f6");
    check_field_offset(lv, s13677c1f7, ABISELECT(72,48), "S13677C1.s13677c1f7");
  }
}
static Arrange_To_Call_Me vS13677C1(Test_S13677C1, "S13677C1", ABISELECT(264,236));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4085C3_nt  {
  void  mf4085c3(); // _ZN10S4085C3_nt8mf4085c3Ev
  virtual  ~S4085C3_nt(); // _ZN10S4085C3_ntD1Ev
  S4085C3_nt(); // tgen
};
//SIG(-1 S4085C3_nt) C1{ vd m}


void  S4085C3_nt ::mf4085c3(){}
 S4085C3_nt ::~S4085C3_nt(){ note_dtor("S4085C3_nt", this);}
S4085C3_nt ::S4085C3_nt(){ note_ctor("S4085C3_nt", this);} // tgen

//skip512 S4085C3_nt

#else // __cplusplus

extern void _ZN10S4085C3_ntC1Ev();
extern void _ZN10S4085C3_ntD1Ev();
Name_Map name_map_S4085C3_nt[] = {
  NSPAIR(_ZN10S4085C3_ntC1Ev),
  NSPAIR(_ZN10S4085C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4085C3_nt[];
extern void _ZN10S4085C3_ntD1Ev();
extern void _ZN10S4085C3_ntD0Ev();
static  VTBL_ENTRY vtc_S4085C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4085C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4085C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4085C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4085C3_nt[];
VTBL_ENTRY *P__ZTI10S4085C3_nt = _ZTI10S4085C3_nt; 
extern  VTBL_ENTRY _ZTV10S4085C3_nt[];
Class_Descriptor cd_S4085C3_nt = {  "S4085C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4085C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4085C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4085C3_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  S4085C2  : S4085C3_nt {
  virtual  ~S4085C2(); // _ZN7S4085C2D1Ev
  virtual void  v3(); // _ZN7S4085C22v3Ev
  virtual void  v4(); // _ZN7S4085C22v4Ev
  S4085C2(); // tgen
};
//SIG(-1 S4085C2) C1{ BC2{ vd m} vd v1 v2}


 S4085C2 ::~S4085C2(){ note_dtor("S4085C2", this);}
void  S4085C2 ::v3(){vfunc_called(this, "_ZN7S4085C22v3Ev");}
void  S4085C2 ::v4(){vfunc_called(this, "_ZN7S4085C22v4Ev");}
S4085C2 ::S4085C2(){ note_ctor("S4085C2", this);} // tgen

static void Test_S4085C2()
{
  extern Class_Descriptor cd_S4085C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4085C2, buf);
    S4085C2 *dp, &lv = *(dp=new (buf) S4085C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4085C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4085C2)");
    check_base_class_offset(lv, (S4085C3_nt*), 0, "S4085C2");
    test_class_info(&lv, &cd_S4085C2);
    dp->~S4085C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4085C2(Test_S4085C2, "S4085C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4085C2C1Ev();
extern void _ZN7S4085C2D1Ev();
Name_Map name_map_S4085C2[] = {
  NSPAIR(_ZN7S4085C2C1Ev),
  NSPAIR(_ZN7S4085C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4085C3_nt;
extern VTBL_ENTRY _ZTI10S4085C3_nt[];
extern  VTBL_ENTRY _ZTV10S4085C3_nt[];
static Base_Class bases_S4085C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4085C3_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 _ZTI7S4085C2[];
extern void _ZN7S4085C2D1Ev();
extern void _ZN7S4085C2D0Ev();
extern void _ZN7S4085C22v3Ev();
extern void _ZN7S4085C22v4Ev();
static  VTBL_ENTRY vtc_S4085C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4085C2[0]),
  (VTBL_ENTRY)&_ZN7S4085C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4085C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4085C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4085C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S4085C2[];
extern  VTBL_ENTRY _ZTV7S4085C2[];
Class_Descriptor cd_S4085C2 = {  "S4085C2", // class name
  bases_S4085C2, 1,
  &(vtc_S4085C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4085C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4085C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4085C1  : S4085C2 {
  void *s4085c1f0;
  int s4085c1f1[2];
  virtual  ~S4085C1(); // _ZN7S4085C1D1Ev
  virtual void  v1(); // _ZN7S4085C12v1Ev
  virtual void  v2(); // _ZN7S4085C12v2Ev
  S4085C1(); // tgen
};
//SIG(1 S4085C1) C1{ BC2{ BC3{ vd m} vd v3 v4} vd v1 v2 Fp Fi[2]}


 S4085C1 ::~S4085C1(){ note_dtor("S4085C1", this);}
void  S4085C1 ::v1(){vfunc_called(this, "_ZN7S4085C12v1Ev");}
void  S4085C1 ::v2(){vfunc_called(this, "_ZN7S4085C12v2Ev");}
S4085C1 ::S4085C1(){ note_ctor("S4085C1", this);} // tgen

static void Test_S4085C1()
{
  extern Class_Descriptor cd_S4085C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4085C1, buf);
    S4085C1 *dp, &lv = *(dp=new (buf) S4085C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4085C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4085C1)");
    check_base_class_offset(lv, (S4085C3_nt*)(S4085C2*), 0, "S4085C1");
    check_base_class_offset(lv, (S4085C2*), 0, "S4085C1");
    check_field_offset(lv, s4085c1f0, ABISELECT(8,4), "S4085C1.s4085c1f0");
    check_field_offset(lv, s4085c1f1, ABISELECT(16,8), "S4085C1.s4085c1f1");
    test_class_info(&lv, &cd_S4085C1);
    dp->~S4085C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4085C1(Test_S4085C1, "S4085C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4085C1C1Ev();
extern void _ZN7S4085C1D1Ev();
Name_Map name_map_S4085C1[] = {
  NSPAIR(_ZN7S4085C1C1Ev),
  NSPAIR(_ZN7S4085C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4085C3_nt;
extern VTBL_ENTRY _ZTI10S4085C3_nt[];
extern  VTBL_ENTRY _ZTV10S4085C3_nt[];
extern Class_Descriptor cd_S4085C2;
extern VTBL_ENTRY _ZTI7S4085C2[];
extern  VTBL_ENTRY _ZTV7S4085C2[];
static Base_Class bases_S4085C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4085C3_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_S4085C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4085C1[];
extern void _ZN7S4085C1D1Ev();
extern void _ZN7S4085C1D0Ev();
extern void _ZN7S4085C22v3Ev();
extern void _ZN7S4085C22v4Ev();
extern void _ZN7S4085C12v1Ev();
extern void _ZN7S4085C12v2Ev();
static  VTBL_ENTRY vtc_S4085C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4085C1[0]),
  (VTBL_ENTRY)&_ZN7S4085C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4085C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4085C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4085C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4085C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4085C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4085C1[];
extern  VTBL_ENTRY _ZTV7S4085C1[];
Class_Descriptor cd_S4085C1 = {  "S4085C1", // class name
  bases_S4085C1, 2,
  &(vtc_S4085C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4085C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4085C1),8, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7610C3  {
  char s7610c3f0;
  virtual void  v5(); // _ZN7S7610C32v5Ev
  virtual void  v6(); // _ZN7S7610C32v6Ev
  ~S7610C3(); // tgen
  S7610C3(); // tgen
};
//SIG(-1 S7610C3) C1{ v1 v2 Fc}


void  S7610C3 ::v5(){vfunc_called(this, "_ZN7S7610C32v5Ev");}
void  S7610C3 ::v6(){vfunc_called(this, "_ZN7S7610C32v6Ev");}
S7610C3 ::~S7610C3(){ note_dtor("S7610C3", this);} // tgen
S7610C3 ::S7610C3(){ note_ctor("S7610C3", this);} // tgen

static void Test_S7610C3()
{
  extern Class_Descriptor cd_S7610C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7610C3, buf);
    S7610C3 *dp, &lv = *(dp=new (buf) S7610C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7610C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7610C3)");
    check_field_offset(lv, s7610c3f0, ABISELECT(8,4), "S7610C3.s7610c3f0");
    test_class_info(&lv, &cd_S7610C3);
    dp->~S7610C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7610C3(Test_S7610C3, "S7610C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7610C3C1Ev();
extern void _ZN7S7610C3D1Ev();
Name_Map name_map_S7610C3[] = {
  NSPAIR(_ZN7S7610C3C1Ev),
  NSPAIR(_ZN7S7610C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7610C3[];
extern void _ZN7S7610C32v5Ev();
extern void _ZN7S7610C32v6Ev();
static  VTBL_ENTRY vtc_S7610C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7610C3[0]),
  (VTBL_ENTRY)&_ZN7S7610C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7610C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S7610C3[];
extern  VTBL_ENTRY _ZTV7S7610C3[];
Class_Descriptor cd_S7610C3 = {  "S7610C3", // class name
  0,0,//no base classes
  &(vtc_S7610C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7610C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7610C3),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  S7610C2  : virtual S7610C3 {
  void *s7610c2f0;
  virtual void  v7(); // _ZN7S7610C22v7Ev
  virtual void  v8(); // _ZN7S7610C22v8Ev
  ~S7610C2(); // tgen
  S7610C2(); // tgen
};
//SIG(-1 S7610C2) C1{ VBC2{ v3 v4 Fc} v1 v2 Fp}


void  S7610C2 ::v7(){vfunc_called(this, "_ZN7S7610C22v7Ev");}
void  S7610C2 ::v8(){vfunc_called(this, "_ZN7S7610C22v8Ev");}
S7610C2 ::~S7610C2(){ note_dtor("S7610C2", this);} // tgen
S7610C2 ::S7610C2(){ note_ctor("S7610C2", this);} // tgen

static void Test_S7610C2()
{
  extern Class_Descriptor cd_S7610C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7610C2, buf);
    S7610C2 *dp, &lv = *(dp=new (buf) S7610C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7610C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7610C2)");
    check_base_class_offset(lv, (S7610C3*), ABISELECT(16,8), "S7610C2");
    check_field_offset(lv, s7610c2f0, ABISELECT(8,4), "S7610C2.s7610c2f0");
    test_class_info(&lv, &cd_S7610C2);
    dp->~S7610C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7610C2(Test_S7610C2, "S7610C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7610C2C1Ev();
extern void _ZN7S7610C2D1Ev();
Name_Map name_map_S7610C2[] = {
  NSPAIR(_ZN7S7610C2C1Ev),
  NSPAIR(_ZN7S7610C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7610C3;
extern VTBL_ENTRY _ZTI7S7610C3[];
extern  VTBL_ENTRY _ZTV7S7610C3[];
static Base_Class bases_S7610C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7610C3,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7610C2[];
extern void _ZN7S7610C22v7Ev();
extern void _ZN7S7610C22v8Ev();
extern void _ZN7S7610C32v5Ev();
extern void _ZN7S7610C32v6Ev();
static  VTBL_ENTRY vtc_S7610C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7610C2[0]),
  (VTBL_ENTRY)&_ZN7S7610C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7610C22v8Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7610C2[0]),
  (VTBL_ENTRY)&_ZN7S7610C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7610C32v6Ev,
};
extern VTBL_ENTRY _ZTV7S7610C2[];
static  VTT_ENTRY vtt_S7610C2[] = {
  {&(_ZTV7S7610C2[3]),  3,11},
  {&(_ZTV7S7610C2[9]),  9,11},
};
extern VTBL_ENTRY _ZTI7S7610C2[];
extern  VTBL_ENTRY _ZTV7S7610C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7610C2[];
Class_Descriptor cd_S7610C2 = {  "S7610C2", // class name
  bases_S7610C2, 1,
  &(vtc_S7610C2[0]), // expected_vtbl_contents
  &(vtt_S7610C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7610C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7610C2),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7610C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7610C1  : S7610C2 {
  virtual void  v1(); // _ZN7S7610C12v1Ev
  virtual void  v2(); // _ZN7S7610C12v2Ev
  virtual void  v3(); // _ZN7S7610C12v3Ev
  virtual void  v4(); // _ZN7S7610C12v4Ev
  ~S7610C1(); // tgen
  S7610C1(); // tgen
};
//SIG(1 S7610C1) C1{ BC2{ VBC3{ v5 v6 Fc} v7 v8 Fp} v1 v2 v3 v4}


void  S7610C1 ::v1(){vfunc_called(this, "_ZN7S7610C12v1Ev");}
void  S7610C1 ::v2(){vfunc_called(this, "_ZN7S7610C12v2Ev");}
void  S7610C1 ::v3(){vfunc_called(this, "_ZN7S7610C12v3Ev");}
void  S7610C1 ::v4(){vfunc_called(this, "_ZN7S7610C12v4Ev");}
S7610C1 ::~S7610C1(){ note_dtor("S7610C1", this);} // tgen
S7610C1 ::S7610C1(){ note_ctor("S7610C1", this);} // tgen

static void Test_S7610C1()
{
  extern Class_Descriptor cd_S7610C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7610C1, buf);
    S7610C1 *dp, &lv = *(dp=new (buf) S7610C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7610C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7610C1)");
    check_base_class_offset(lv, (S7610C3*)(S7610C2*), ABISELECT(16,8), "S7610C1");
    check_base_class_offset(lv, (S7610C2*), 0, "S7610C1");
    test_class_info(&lv, &cd_S7610C1);
    dp->~S7610C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7610C1(Test_S7610C1, "S7610C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7610C1C1Ev();
extern void _ZN7S7610C1D1Ev();
Name_Map name_map_S7610C1[] = {
  NSPAIR(_ZN7S7610C1C1Ev),
  NSPAIR(_ZN7S7610C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7610C3;
extern VTBL_ENTRY _ZTI7S7610C3[];
extern  VTBL_ENTRY _ZTV7S7610C3[];
extern Class_Descriptor cd_S7610C2;
extern VTBL_ENTRY _ZTI7S7610C2[];
extern  VTBL_ENTRY _ZTV7S7610C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7610C2[];
static Base_Class bases_S7610C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7610C3,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7610C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7610C1[];
extern void _ZN7S7610C22v7Ev();
extern void _ZN7S7610C22v8Ev();
extern void _ZN7S7610C12v1Ev();
extern void _ZN7S7610C12v2Ev();
extern void _ZN7S7610C12v3Ev();
extern void _ZN7S7610C12v4Ev();
extern void _ZN7S7610C32v5Ev();
extern void _ZN7S7610C32v6Ev();
static  VTBL_ENTRY vtc_S7610C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7610C1[0]),
  (VTBL_ENTRY)&_ZN7S7610C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7610C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7610C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7610C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7610C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7610C12v4Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7610C1[0]),
  (VTBL_ENTRY)&_ZN7S7610C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7610C32v6Ev,
};
extern VTBL_ENTRY _ZTV7S7610C1[];
extern void _ZN7S7610C22v7Ev();
extern void _ZN7S7610C22v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7610C2__7S7610C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7610C2[0]),
  (VTBL_ENTRY)&_ZN7S7610C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7610C22v8Ev,
};
extern void _ZN7S7610C32v5Ev();
extern void _ZN7S7610C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7610C3__7S7610C2__7S7610C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7610C2[0]),
  (VTBL_ENTRY)&_ZN7S7610C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7610C32v6Ev,
};
static  VTT_ENTRY vtt_S7610C1[] = {
  {&(_ZTV7S7610C1[3]),  3,15},
  {&(_tg__ZTV7S7610C2__7S7610C1[3]),  3,5},
  {&(_tg__ZTV7S7610C3__7S7610C2__7S7610C1[4]),  4,6},
  {&(_ZTV7S7610C1[13]),  13,15},
};
extern VTBL_ENTRY _ZTI7S7610C1[];
extern  VTBL_ENTRY _ZTV7S7610C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7610C1[];
Class_Descriptor cd_S7610C1 = {  "S7610C1", // class name
  bases_S7610C1, 2,
  &(vtc_S7610C1[0]), // expected_vtbl_contents
  &(vtt_S7610C1[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7610C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7610C1),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7610C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9053C2  {
  virtual  ~S9053C2(); // _ZN7S9053C2D1Ev
  virtual void  v2(); // _ZN7S9053C22v2Ev
  S9053C2(); // tgen
};
//SIG(-1 S9053C2) C1{ vd v1}


 S9053C2 ::~S9053C2(){ note_dtor("S9053C2", this);}
void  S9053C2 ::v2(){vfunc_called(this, "_ZN7S9053C22v2Ev");}
S9053C2 ::S9053C2(){ note_ctor("S9053C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9053C2C1Ev();
extern void _ZN7S9053C2D1Ev();
Name_Map name_map_S9053C2[] = {
  NSPAIR(_ZN7S9053C2C1Ev),
  NSPAIR(_ZN7S9053C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9053C2[];
extern void _ZN7S9053C2D1Ev();
extern void _ZN7S9053C2D0Ev();
extern void _ZN7S9053C22v2Ev();
static  VTBL_ENTRY vtc_S9053C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9053C2[0]),
  (VTBL_ENTRY)&_ZN7S9053C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9053C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9053C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9053C2[];
extern  VTBL_ENTRY _ZTV7S9053C2[];
Class_Descriptor cd_S9053C2 = {  "S9053C2", // class name
  0,0,//no base classes
  &(vtc_S9053C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9053C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9053C2),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  S9053C4_nt  {
  ::S10180C114 s9053c4f0;
  void  mf9053c4(); // _ZN10S9053C4_nt8mf9053c4Ev
};
//SIG(-1 S9053C4_nt) C1{ m FC2{ m Fp}}


void  S9053C4_nt ::mf9053c4(){}

//skip512 S9053C4_nt

#else // __cplusplus

Class_Descriptor cd_S9053C4_nt = {  "S9053C4_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9053C3  : S9053C4_nt {
};
//SIG(-1 S9053C3) C1{ BC2{ m FC3{ m Fp}}}



static void Test_S9053C3()
{
  extern Class_Descriptor cd_S9053C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9053C3, buf);
    S9053C3 &lv = *(new (buf) S9053C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9053C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9053C3)");
    check_base_class_offset(lv, (S9053C4_nt*), 0, "S9053C3");
    test_class_info(&lv, &cd_S9053C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9053C3(Test_S9053C3, "S9053C3", ABISELECT(8,4));

#else // __cplusplus

extern Class_Descriptor cd_S9053C4_nt;
static Base_Class bases_S9053C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9053C4_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_S9053C3 = {  "S9053C3", // class name
  bases_S9053C3, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(8,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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9053C1  : S9053C2 {
  ::S9053C3 s9053c1f0;
  virtual  ~S9053C1(); // _ZN7S9053C1D1Ev
  virtual void  v1(); // _ZN7S9053C12v1Ev
  S9053C1(); // tgen
};
//SIG(1 S9053C1) C1{ BC2{ vd v2} vd v1 FC3{ BC4{ m FC5{ m Fp}}}}


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

static void Test_S9053C1()
{
  extern Class_Descriptor cd_S9053C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9053C1, buf);
    S9053C1 *dp, &lv = *(dp=new (buf) S9053C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9053C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9053C1)");
    check_base_class_offset(lv, (S9053C2*), 0, "S9053C1");
    check_field_offset(lv, s9053c1f0, ABISELECT(8,4), "S9053C1.s9053c1f0");
    test_class_info(&lv, &cd_S9053C1);
    dp->~S9053C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9053C1(Test_S9053C1, "S9053C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9053C1C1Ev();
extern void _ZN7S9053C1D1Ev();
Name_Map name_map_S9053C1[] = {
  NSPAIR(_ZN7S9053C1C1Ev),
  NSPAIR(_ZN7S9053C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9053C2;
extern VTBL_ENTRY _ZTI7S9053C2[];
extern  VTBL_ENTRY _ZTV7S9053C2[];
static Base_Class bases_S9053C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9053C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S9053C1[];
extern void _ZN7S9053C1D1Ev();
extern void _ZN7S9053C1D0Ev();
extern void _ZN7S9053C22v2Ev();
extern void _ZN7S9053C12v1Ev();
static  VTBL_ENTRY vtc_S9053C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9053C1[0]),
  (VTBL_ENTRY)&_ZN7S9053C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9053C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9053C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9053C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9053C1[];
extern  VTBL_ENTRY _ZTV7S9053C1[];
Class_Descriptor cd_S9053C1 = {  "S9053C1", // class name
  bases_S9053C1, 1,
  &(vtc_S9053C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9053C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9053C1),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  S14098C4_nt  {
  __tsi64 s14098c4f0;
};
//SIG(-1 S14098C4_nt) C1{ FL}



//skip512 S14098C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14098C1  {
  void *s14098c1f0;
  ::S9659C5_nt s14098c1f1;
  ::S14098C4_nt s14098c1f2;
  char s14098c1f3[8];
};
//SIG(1 S14098C1) C1{ Fp FC2{ FC3{ Fc[20]} Fc[16]} FC4{ FL} Fc[8]}



static void Test_S14098C1()
{
  {
    init_simple_test("S14098C1");
    S14098C1 lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S14098C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14098C1)");
    check_field_offset(lv, s14098c1f0, 0, "S14098C1.s14098c1f0");
    check_field_offset(lv, s14098c1f1, ABISELECT(8,4), "S14098C1.s14098c1f1");
    check_field_offset(lv, s14098c1f2, ABISELECT(48,40), "S14098C1.s14098c1f2");
    check_field_offset(lv, s14098c1f3, ABISELECT(56,48), "S14098C1.s14098c1f3");
  }
}
static Arrange_To_Call_Me vS14098C1(Test_S14098C1, "S14098C1", ABISELECT(64,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15756C4_nt  {
  int s15756c4f0[3];
  void  mf15756c4(); // _ZN11S15756C4_nt9mf15756c4Ev
};
//SIG(-1 S15756C4_nt) C1{ m Fi[3]}


void  S15756C4_nt ::mf15756c4(){}

//skip512 S15756C4_nt

#else // __cplusplus

Class_Descriptor cd_S15756C4_nt = {  "S15756C4_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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  S15756C3_nt  {
  ::S15756C4_nt s15756c3f0;
  ::S15756C4_nt s15756c3f1;
  char s15756c3f2;
  void  mf15756c3(); // _ZN11S15756C3_nt9mf15756c3Ev
};
//SIG(-1 S15756C3_nt) C1{ m FC2{ m Fi[3]} FC2 Fc}


void  S15756C3_nt ::mf15756c3(){}

//skip512 S15756C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15756C2  {
  ::S15756C3_nt s15756c2f0;
  void  mf15756c2(); // _ZN8S15756C29mf15756c2Ev
};
//SIG(-1 S15756C2) C1{ m FC2{ m FC3{ m Fi[3]} FC3 Fc}}


void  S15756C2 ::mf15756c2(){}

static void Test_S15756C2()
{
  {
    init_simple_test("S15756C2");
    S15756C2 lv;
    check2(sizeof(lv), 28, "sizeof(S15756C2)");
    check2(__alignof__(lv), 4, "__alignof__(S15756C2)");
    check_field_offset(lv, s15756c2f0, 0, "S15756C2.s15756c2f0");
  }
}
static Arrange_To_Call_Me vS15756C2(Test_S15756C2, "S15756C2", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15756C1  {
  ::S15756C2 s15756c1f0;
  int s15756c1f1;
  void  mf15756c1(); // _ZN8S15756C19mf15756c1Ev
};
//SIG(1 S15756C1) C1{ m FC2{ m FC3{ m FC4{ m Fi[3]} FC4 Fc}} Fi}


void  S15756C1 ::mf15756c1(){}

static void Test_S15756C1()
{
  {
    init_simple_test("S15756C1");
    S15756C1 lv;
    check2(sizeof(lv), 32, "sizeof(S15756C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15756C1)");
    check_field_offset(lv, s15756c1f0, 0, "S15756C1.s15756c1f0");
    check_field_offset(lv, s15756c1f1, 28, "S15756C1.s15756c1f1");
  }
}
static Arrange_To_Call_Me vS15756C1(Test_S15756C1, "S15756C1", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17980C2  {
  ::S10180C150 s17980c2f0;
  ::S10180C150 s17980c2f1;
  int s17980c2f2[7];
  void  mf17980c2(); // _ZN8S17980C29mf17980c2Ev
};
//SIG(-1 S17980C2) C1{ m FC2{ m Fp[2]} FC2 Fi[7]}


void  S17980C2 ::mf17980c2(){}

static void Test_S17980C2()
{
  {
    init_simple_test("S17980C2");
    S17980C2 lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S17980C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17980C2)");
    check_field_offset(lv, s17980c2f0, 0, "S17980C2.s17980c2f0");
    check_field_offset(lv, s17980c2f1, ABISELECT(16,8), "S17980C2.s17980c2f1");
    check_field_offset(lv, s17980c2f2, ABISELECT(32,16), "S17980C2.s17980c2f2");
  }
}
static Arrange_To_Call_Me vS17980C2(Test_S17980C2, "S17980C2", ABISELECT(64,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17980C1  {
  void *s17980c1f0[2];
  ::S17980C2 s17980c1f1;
  void  mf17980c1(); // _ZN8S17980C19mf17980c1Ev
};
//SIG(1 S17980C1) C1{ m Fp[2] FC2{ m FC3{ m Fp[2]} FC3 Fi[7]}}


void  S17980C1 ::mf17980c1(){}

static void Test_S17980C1()
{
  {
    init_simple_test("S17980C1");
    S17980C1 lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S17980C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17980C1)");
    check_field_offset(lv, s17980c1f0, 0, "S17980C1.s17980c1f0");
    check_field_offset(lv, s17980c1f1, ABISELECT(16,8), "S17980C1.s17980c1f1");
  }
}
static Arrange_To_Call_Me vS17980C1(Test_S17980C1, "S17980C1", ABISELECT(80,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18236C1  {
  void *s18236c1f0[3];
  ::S10180C42 s18236c1f1;
  char s18236c1f2[2];
  void  mf18236c1(); // _ZN8S18236C19mf18236c1Ev
};
//SIG(1 S18236C1) C1{ m Fp[3] FC2{ m Fi FC3{ m Fi[4]}} Fc[2]}


void  S18236C1 ::mf18236c1(){}

static void Test_S18236C1()
{
  {
    init_simple_test("S18236C1");
    S18236C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S18236C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18236C1)");
    check_field_offset(lv, s18236c1f0, 0, "S18236C1.s18236c1f0");
    check_field_offset(lv, s18236c1f1, ABISELECT(24,12), "S18236C1.s18236c1f1");
    check_field_offset(lv, s18236c1f2, ABISELECT(44,32), "S18236C1.s18236c1f2");
  }
}
static Arrange_To_Call_Me vS18236C1(Test_S18236C1, "S18236C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17878C1  {
  void *s17878c1f0[2];
  ::S1168C5 s17878c1f1;
  void  mf17878c1(); // _ZN8S17878C19mf17878c1Ev
};
//SIG(1 S17878C1) C1{ m Fp[2] FC2{ BC3{ m Fp Fi[2] FC4{ m}}}}


void  S17878C1 ::mf17878c1(){}

static void Test_S17878C1()
{
  {
    init_simple_test("S17878C1");
    S17878C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S17878C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17878C1)");
    check_field_offset(lv, s17878c1f0, 0, "S17878C1.s17878c1f0");
    check_field_offset(lv, s17878c1f1, ABISELECT(16,8), "S17878C1.s17878c1f1");
  }
}
static Arrange_To_Call_Me vS17878C1(Test_S17878C1, "S17878C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17844C1  {
  void *s17844c1f0;
  ::S15696C12 s17844c1f1;
  void  mf17844c1(); // _ZN8S17844C19mf17844c1Ev
};
//SIG(1 S17844C1) C1{ m Fp FU2{ m Fi FC3{ Fi:4 Fi:6 Fi:22}}}


void  S17844C1 ::mf17844c1(){}

static void Test_S17844C1()
{
  {
    init_simple_test("S17844C1");
    S17844C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S17844C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17844C1)");
    check_field_offset(lv, s17844c1f0, 0, "S17844C1.s17844c1f0");
    check_field_offset(lv, s17844c1f1, ABISELECT(8,4), "S17844C1.s17844c1f1");
  }
}
static Arrange_To_Call_Me vS17844C1(Test_S17844C1, "S17844C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7752C3  : virtual S10180C138 , S10180C93 {
  ~S7752C3(); // tgen
  S7752C3(); // tgen
};
//SIG(-1 S7752C3) C1{ VBC2{ m} BC3{ m FL}}


S7752C3 ::~S7752C3(){ note_dtor("S7752C3", this);} // tgen
S7752C3 ::S7752C3(){ note_ctor("S7752C3", this);} // tgen

static void Test_S7752C3()
{
  extern Class_Descriptor cd_S7752C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7752C3, buf);
    S7752C3 *dp, &lv = *(dp=new (buf) S7752C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7752C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7752C3)");
    check_base_class_offset(lv, (S10180C138*), 0, "S7752C3");
    check_base_class_offset(lv, (S10180C93*), ABISELECT(8,4), "S7752C3");
    test_class_info(&lv, &cd_S7752C3);
    dp->~S7752C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7752C3(Test_S7752C3, "S7752C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7752C3C1Ev();
extern void _ZN7S7752C3D1Ev();
Name_Map name_map_S7752C3[] = {
  NSPAIR(_ZN7S7752C3C1Ev),
  NSPAIR(_ZN7S7752C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
static Base_Class bases_S7752C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S7752C3[];
static  VTBL_ENTRY vtc_S7752C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7752C3[0]),
};
extern VTBL_ENTRY _ZTV7S7752C3[];
static  VTT_ENTRY vtt_S7752C3[] = {
  {&(_ZTV7S7752C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7752C3[];
extern  VTBL_ENTRY _ZTV7S7752C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7752C3[];
Class_Descriptor cd_S7752C3 = {  "S7752C3", // class name
  bases_S7752C3, 2,
  &(vtc_S7752C3[0]), // expected_vtbl_contents
  &(vtt_S7752C3[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7752C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7752C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7752C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7752C2  : virtual S7752C3 {
  ::S10180C133 s7752c2f0;
  ~S7752C2(); // tgen
  S7752C2(); // tgen
};
//SIG(-1 S7752C2) C1{ VBC2{ VBC3{ m} BC4{ m FL}} FC5{ m}}


S7752C2 ::~S7752C2(){ note_dtor("S7752C2", this);} // tgen
S7752C2 ::S7752C2(){ note_ctor("S7752C2", this);} // tgen

static void Test_S7752C2()
{
  extern Class_Descriptor cd_S7752C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7752C2, buf);
    S7752C2 *dp, &lv = *(dp=new (buf) S7752C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7752C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7752C2)");
    check_base_class_offset(lv, (S10180C138*)(S7752C3*), 0, "S7752C2");
    check_base_class_offset(lv, (S10180C93*)(S7752C3*), ABISELECT(24,12), "S7752C2");
    check_base_class_offset(lv, (S7752C3*), ABISELECT(16,8), "S7752C2");
    check_field_offset(lv, s7752c2f0, ABISELECT(8,4), "S7752C2.s7752c2f0");
    test_class_info(&lv, &cd_S7752C2);
    dp->~S7752C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7752C2(Test_S7752C2, "S7752C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7752C2C1Ev();
extern void _ZN7S7752C2D1Ev();
Name_Map name_map_S7752C2[] = {
  NSPAIR(_ZN7S7752C2C1Ev),
  NSPAIR(_ZN7S7752C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S7752C3;
extern VTBL_ENTRY _ZTI7S7752C3[];
extern  VTBL_ENTRY _ZTV7S7752C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7752C3[];
static Base_Class bases_S7752C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7752C3,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7752C2[];
static  VTBL_ENTRY vtc_S7752C2[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7752C2[0]),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7752C2[0]),
};
extern VTBL_ENTRY _ZTV7S7752C2[];
static  VTBL_ENTRY _tg__ZTV7S7752C3__7S7752C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7752C3[0]),
};
static  VTT_ENTRY vtt_S7752C2[] = {
  {&(_ZTV7S7752C2[4]),  4,7},
  {&(_ZTV7S7752C2[7]),  7,7},
  {&(_tg__ZTV7S7752C3__7S7752C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7752C2[];
extern  VTBL_ENTRY _ZTV7S7752C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7752C2[];
Class_Descriptor cd_S7752C2 = {  "S7752C2", // class name
  bases_S7752C2, 3,
  &(vtc_S7752C2[0]), // expected_vtbl_contents
  &(vtt_S7752C2[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7752C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7752C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7752C2),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7752C1  : S7752C2 {
  int s7752c1f0;
  ~S7752C1(); // tgen
  S7752C1(); // tgen
};
//SIG(1 S7752C1) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m FL}} FC6{ m}} Fi}


S7752C1 ::~S7752C1(){ note_dtor("S7752C1", this);} // tgen
S7752C1 ::S7752C1(){ note_ctor("S7752C1", this);} // tgen

static void Test_S7752C1()
{
  extern Class_Descriptor cd_S7752C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S7752C1, buf);
    S7752C1 *dp, &lv = *(dp=new (buf) S7752C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S7752C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7752C1)");
    check_base_class_offset(lv, (S10180C138*)(S7752C3*), 0, "S7752C1");
    check_base_class_offset(lv, (S10180C93*)(S7752C3*), ABISELECT(24,16), "S7752C1");
    check_base_class_offset(lv, (S7752C3*)(S7752C2*), ABISELECT(16,12), "S7752C1");
    check_base_class_offset(lv, (S7752C2*), 0, "S7752C1");
    check_field_offset(lv, s7752c1f0, ABISELECT(12,8), "S7752C1.s7752c1f0");
    test_class_info(&lv, &cd_S7752C1);
    dp->~S7752C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7752C1(Test_S7752C1, "S7752C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S7752C1C1Ev();
extern void _ZN7S7752C1D1Ev();
Name_Map name_map_S7752C1[] = {
  NSPAIR(_ZN7S7752C1C1Ev),
  NSPAIR(_ZN7S7752C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
extern Class_Descriptor cd_S10180C93;
extern VTBL_ENTRY _ZTI9S10180C93[];
extern Class_Descriptor cd_S7752C3;
extern VTBL_ENTRY _ZTI7S7752C3[];
extern  VTBL_ENTRY _ZTV7S7752C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7752C3[];
extern Class_Descriptor cd_S7752C2;
extern VTBL_ENTRY _ZTI7S7752C2[];
extern  VTBL_ENTRY _ZTV7S7752C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7752C2[];
static Base_Class bases_S7752C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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, 1},
  {&cd_S10180C93,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7752C3,    ABISELECT(16,12), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7752C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7752C1[];
static  VTBL_ENTRY vtc_S7752C1[] = {
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7752C1[0]),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7752C1[0]),
};
extern VTBL_ENTRY _ZTV7S7752C1[];
static  VTBL_ENTRY _tg__ZTV7S7752C2__7S7752C1[] = {
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7752C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7752C3__7S7752C2__7S7752C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7752C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7752C3__7S7752C1[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7752C3[0]),
};
static  VTT_ENTRY vtt_S7752C1[] = {
  {&(_ZTV7S7752C1[4]),  4,7},
  {&(_tg__ZTV7S7752C2__7S7752C1[4]),  4,4},
  {&(_tg__ZTV7S7752C3__7S7752C2__7S7752C1[3]),  3,3},
  {&(_ZTV7S7752C1[7]),  7,7},
  {&(_tg__ZTV7S7752C3__7S7752C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7752C1[];
extern  VTBL_ENTRY _ZTV7S7752C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7752C1[];
Class_Descriptor cd_S7752C1 = {  "S7752C1", // class name
  bases_S7752C1, 4,
  &(vtc_S7752C1[0]), // expected_vtbl_contents
  &(vtt_S7752C1[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S7752C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7752C1),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7752C1),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15425C1  {
  ::S1168C5 s15425c1f0;
  void *s15425c1f1[2];
  void  mf15425c1(); // _ZN8S15425C19mf15425c1Ev
};
//SIG(1 S15425C1) C1{ m FC2{ BC3{ m Fp Fi[2] FC4{ m}}} Fp[2]}


void  S15425C1 ::mf15425c1(){}

static void Test_S15425C1()
{
  {
    init_simple_test("S15425C1");
    S15425C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S15425C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15425C1)");
    check_field_offset(lv, s15425c1f0, 0, "S15425C1.s15425c1f0");
    check_field_offset(lv, s15425c1f1, ABISELECT(24,16), "S15425C1.s15425c1f1");
  }
}
static Arrange_To_Call_Me vS15425C1(Test_S15425C1, "S15425C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20229C2  {
  char s20229c2f0;
  virtual void  v5(); // _ZN8S20229C22v5Ev
  virtual void  v6(); // _ZN8S20229C22v6Ev
  ~S20229C2(); // tgen
  S20229C2(); // tgen
};
//SIG(-1 S20229C2) C1{ v1 v2 Fc}


void  S20229C2 ::v5(){vfunc_called(this, "_ZN8S20229C22v5Ev");}
void  S20229C2 ::v6(){vfunc_called(this, "_ZN8S20229C22v6Ev");}
S20229C2 ::~S20229C2(){ note_dtor("S20229C2", this);} // tgen
S20229C2 ::S20229C2(){ note_ctor("S20229C2", this);} // tgen

static void Test_S20229C2()
{
  extern Class_Descriptor cd_S20229C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20229C2, buf);
    S20229C2 *dp, &lv = *(dp=new (buf) S20229C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20229C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20229C2)");
    check_field_offset(lv, s20229c2f0, ABISELECT(8,4), "S20229C2.s20229c2f0");
    test_class_info(&lv, &cd_S20229C2);
    dp->~S20229C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20229C2(Test_S20229C2, "S20229C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20229C2C1Ev();
extern void _ZN8S20229C2D1Ev();
Name_Map name_map_S20229C2[] = {
  NSPAIR(_ZN8S20229C2C1Ev),
  NSPAIR(_ZN8S20229C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20229C2[];
extern void _ZN8S20229C22v5Ev();
extern void _ZN8S20229C22v6Ev();
static  VTBL_ENTRY vtc_S20229C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20229C2[0]),
  (VTBL_ENTRY)&_ZN8S20229C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20229C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20229C2[];
extern  VTBL_ENTRY _ZTV8S20229C2[];
Class_Descriptor cd_S20229C2 = {  "S20229C2", // class name
  0,0,//no base classes
  &(vtc_S20229C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20229C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20229C2),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  S20229C1  : virtual S20229C2 {
  int s20229c1f0[8];
  virtual  ~S20229C1(); // _ZN8S20229C1D2Ev
  virtual void  v1(); // _ZN8S20229C12v1Ev
  virtual void  v2(); // _ZN8S20229C12v2Ev
  virtual void  v3(); // _ZN8S20229C12v3Ev
  virtual void  v4(); // _ZN8S20229C12v4Ev
  S20229C1(); // tgen
};
//SIG(1 S20229C1) C1{ VBC2{ v5 v6 Fc} vd v1 v2 v3 v4 Fi[8]}


 S20229C1 ::~S20229C1(){ note_dtor("S20229C1", this);}
void  S20229C1 ::v1(){vfunc_called(this, "_ZN8S20229C12v1Ev");}
void  S20229C1 ::v2(){vfunc_called(this, "_ZN8S20229C12v2Ev");}
void  S20229C1 ::v3(){vfunc_called(this, "_ZN8S20229C12v3Ev");}
void  S20229C1 ::v4(){vfunc_called(this, "_ZN8S20229C12v4Ev");}
S20229C1 ::S20229C1(){ note_ctor("S20229C1", this);} // tgen

static void Test_S20229C1()
{
  extern Class_Descriptor cd_S20229C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S20229C1, buf);
    S20229C1 *dp, &lv = *(dp=new (buf) S20229C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S20229C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20229C1)");
    check_base_class_offset(lv, (S20229C2*), ABISELECT(40,36), "S20229C1");
    check_field_offset(lv, s20229c1f0, ABISELECT(8,4), "S20229C1.s20229c1f0");
    test_class_info(&lv, &cd_S20229C1);
    dp->~S20229C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20229C1(Test_S20229C1, "S20229C1", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S20229C1C1Ev();
extern void _ZN8S20229C1D2Ev();
Name_Map name_map_S20229C1[] = {
  NSPAIR(_ZN8S20229C1C1Ev),
  NSPAIR(_ZN8S20229C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20229C2;
extern VTBL_ENTRY _ZTI8S20229C2[];
extern  VTBL_ENTRY _ZTV8S20229C2[];
static Base_Class bases_S20229C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20229C2,    ABISELECT(40,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20229C1[];
extern void _ZN8S20229C1D1Ev();
extern void _ZN8S20229C1D0Ev();
extern void _ZN8S20229C12v1Ev();
extern void _ZN8S20229C12v2Ev();
extern void _ZN8S20229C12v3Ev();
extern void _ZN8S20229C12v4Ev();
extern void _ZN8S20229C22v5Ev();
extern void _ZN8S20229C22v6Ev();
static  VTBL_ENTRY vtc_S20229C1[] = {
  ABISELECT(40,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20229C1[0]),
  (VTBL_ENTRY)&_ZN8S20229C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20229C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20229C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20229C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20229C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20229C12v4Ev,
  0,
  0,
  ABISELECT(-40,-36),
  (VTBL_ENTRY)&(_ZTI8S20229C1[0]),
  (VTBL_ENTRY)&_ZN8S20229C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20229C22v6Ev,
};
extern VTBL_ENTRY _ZTV8S20229C1[];
static  VTT_ENTRY vtt_S20229C1[] = {
  {&(_ZTV8S20229C1[3]),  3,15},
  {&(_ZTV8S20229C1[13]),  13,15},
};
extern VTBL_ENTRY _ZTI8S20229C1[];
extern  VTBL_ENTRY _ZTV8S20229C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20229C1[];
Class_Descriptor cd_S20229C1 = {  "S20229C1", // class name
  bases_S20229C1, 1,
  &(vtc_S20229C1[0]), // expected_vtbl_contents
  &(vtt_S20229C1[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S20229C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20229C1),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20229C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15001C1  {
  ::S15696C12 s15001c1f0;
  int s15001c1f1;
};
//SIG(1 S15001C1) C1{ FU2{ m Fi FC3{ Fi:4 Fi:6 Fi:22}} Fi}



static void Test_S15001C1()
{
  {
    init_simple_test("S15001C1");
    S15001C1 lv;
    check2(sizeof(lv), 8, "sizeof(S15001C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15001C1)");
    check_field_offset(lv, s15001c1f0, 0, "S15001C1.s15001c1f0");
    check_field_offset(lv, s15001c1f1, 4, "S15001C1.s15001c1f1");
  }
}
static Arrange_To_Call_Me vS15001C1(Test_S15001C1, "S15001C1", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17626C1  {
  void *s17626c1f0;
  ::S10180C13 s17626c1f1;
  ::S10180C13 s17626c1f2;
  ::S10180C13 s17626c1f3;
  void  mf17626c1(); // _ZN8S17626C19mf17626c1Ev
};
//SIG(1 S17626C1) C1{ m Fp FC2{ m Fp Fi FC3{ m}} FC2 FC2}


void  S17626C1 ::mf17626c1(){}

static void Test_S17626C1()
{
  {
    init_simple_test("S17626C1");
    S17626C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S17626C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17626C1)");
    check_field_offset(lv, s17626c1f0, 0, "S17626C1.s17626c1f0");
    check_field_offset(lv, s17626c1f1, ABISELECT(8,4), "S17626C1.s17626c1f1");
    check_field_offset(lv, s17626c1f2, ABISELECT(24,16), "S17626C1.s17626c1f2");
    check_field_offset(lv, s17626c1f3, ABISELECT(40,28), "S17626C1.s17626c1f3");
  }
}
static Arrange_To_Call_Me vS17626C1(Test_S17626C1, "S17626C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14506C1  {
  void *s14506c1f0[2];
  int s14506c1f1;
  ::S14116C3 s14506c1f2;
  void *s14506c1f3[3];
};
//SIG(1 S14506C1) C1{ Fp[2] Fi FC2{ Fp[3] Fi[3]} Fp[3]}



static void Test_S14506C1()
{
  {
    init_simple_test("S14506C1");
    S14506C1 lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S14506C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14506C1)");
    check_field_offset(lv, s14506c1f0, 0, "S14506C1.s14506c1f0");
    check_field_offset(lv, s14506c1f1, ABISELECT(16,8), "S14506C1.s14506c1f1");
    check_field_offset(lv, s14506c1f2, ABISELECT(24,12), "S14506C1.s14506c1f2");
    check_field_offset(lv, s14506c1f3, ABISELECT(64,36), "S14506C1.s14506c1f3");
  }
}
static Arrange_To_Call_Me vS14506C1(Test_S14506C1, "S14506C1", ABISELECT(88,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15002C1  {
  ::S15696C12 s15002c1f0;
};
//SIG(1 S15002C1) C1{ FU2{ m Fi FC3{ Fi:4 Fi:6 Fi:22}}}



static void Test_S15002C1()
{
  {
    init_simple_test("S15002C1");
    S15002C1 lv;
    check2(sizeof(lv), 4, "sizeof(S15002C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15002C1)");
    check_field_offset(lv, s15002c1f0, 0, "S15002C1.s15002c1f0");
  }
}
static Arrange_To_Call_Me vS15002C1(Test_S15002C1, "S15002C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21408C1  {
  ::S10180C73 s21408c1f0;
  int s21408c1f1[4];
  void  mf21408c1(); // _ZN8S21408C19mf21408c1Ev
  virtual  ~S21408C1(); // _ZN8S21408C1D1Ev
  S21408C1(); // tgen
};
//SIG(1 S21408C1) C1{ vd m FC2{ m FC3{ m FL[2]}} Fi[4]}


void  S21408C1 ::mf21408c1(){}
 S21408C1 ::~S21408C1(){ note_dtor("S21408C1", this);}
S21408C1 ::S21408C1(){ note_ctor("S21408C1", this);} // tgen

static void Test_S21408C1()
{
  extern Class_Descriptor cd_S21408C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S21408C1, buf);
    S21408C1 *dp, &lv = *(dp=new (buf) S21408C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S21408C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21408C1)");
    check_field_offset(lv, s21408c1f0, ABISELECT(8,4), "S21408C1.s21408c1f0");
    check_field_offset(lv, s21408c1f1, ABISELECT(24,20), "S21408C1.s21408c1f1");
    test_class_info(&lv, &cd_S21408C1);
    dp->~S21408C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21408C1(Test_S21408C1, "S21408C1", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN8S21408C1C1Ev();
extern void _ZN8S21408C1D1Ev();
Name_Map name_map_S21408C1[] = {
  NSPAIR(_ZN8S21408C1C1Ev),
  NSPAIR(_ZN8S21408C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21408C1[];
extern void _ZN8S21408C1D1Ev();
extern void _ZN8S21408C1D0Ev();
static  VTBL_ENTRY vtc_S21408C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21408C1[0]),
  (VTBL_ENTRY)&_ZN8S21408C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21408C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21408C1[];
extern  VTBL_ENTRY _ZTV8S21408C1[];
Class_Descriptor cd_S21408C1 = {  "S21408C1", // class name
  0,0,//no base classes
  &(vtc_S21408C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI8S21408C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21408C1),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  S17140C1  {
  int s17140c1f0[2];
  void *s17140c1f1;
  int s17140c1f2[3];
  void *s17140c1f3;
  int s17140c1f4;
  void *s17140c1f5[12];
  void  mf17140c1(); // _ZN8S17140C19mf17140c1Ev
};
//SIG(1 S17140C1) C1{ m Fi[2] Fp Fi[3] Fp Fi Fp[12]}


void  S17140C1 ::mf17140c1(){}

static void Test_S17140C1()
{
  {
    init_simple_test("S17140C1");
    S17140C1 lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S17140C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17140C1)");
    check_field_offset(lv, s17140c1f0, 0, "S17140C1.s17140c1f0");
    check_field_offset(lv, s17140c1f1, 8, "S17140C1.s17140c1f1");
    check_field_offset(lv, s17140c1f2, ABISELECT(16,12), "S17140C1.s17140c1f2");
    check_field_offset(lv, s17140c1f3, ABISELECT(32,24), "S17140C1.s17140c1f3");
    check_field_offset(lv, s17140c1f4, ABISELECT(40,28), "S17140C1.s17140c1f4");
    check_field_offset(lv, s17140c1f5, ABISELECT(48,32), "S17140C1.s17140c1f5");
  }
}
static Arrange_To_Call_Me vS17140C1(Test_S17140C1, "S17140C1", ABISELECT(144,80));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18346C3_nt  {
  void *s18346c3f0[2];
  int s18346c3f1;
  void  mf18346c3(); // _ZN11S18346C3_nt9mf18346c3Ev
};
//SIG(-1 S18346C3_nt) C1{ m Fp[2] Fi}


void  S18346C3_nt ::mf18346c3(){}

//skip512 S18346C3_nt

#else // __cplusplus

Class_Descriptor cd_S18346C3_nt = {  "S18346C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,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  S18346C2  : S18346C3_nt {
};
//SIG(-1 S18346C2) C1{ BC2{ m Fp[2] Fi}}



static void Test_S18346C2()
{
  extern Class_Descriptor cd_S18346C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18346C2, buf);
    S18346C2 &lv = *(new (buf) S18346C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18346C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18346C2)");
    check_base_class_offset(lv, (S18346C3_nt*), 0, "S18346C2");
    test_class_info(&lv, &cd_S18346C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18346C2(Test_S18346C2, "S18346C2", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S18346C3_nt;
static Base_Class bases_S18346C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18346C3_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_S18346C2 = {  "S18346C2", // class name
  bases_S18346C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,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  S18346C1  {
  void *s18346c1f0[4];
  ::S18346C2 s18346c1f1;
  void  mf18346c1(); // _ZN8S18346C19mf18346c1Ev
};
//SIG(1 S18346C1) C1{ m Fp[4] FC2{ BC3{ m Fp[2] Fi}}}


void  S18346C1 ::mf18346c1(){}

static void Test_S18346C1()
{
  {
    init_simple_test("S18346C1");
    S18346C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S18346C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18346C1)");
    check_field_offset(lv, s18346c1f0, 0, "S18346C1.s18346c1f0");
    check_field_offset(lv, s18346c1f1, ABISELECT(32,16), "S18346C1.s18346c1f1");
  }
}
static Arrange_To_Call_Me vS18346C1(Test_S18346C1, "S18346C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S2786C2()
{
  extern Class_Descriptor cd_S2786C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2786C2, buf);
    S2786C2 &lv = *(new (buf) S2786C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2786C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2786C2)");
    check_base_class_offset(lv, (S10180C161*), 0, "S2786C2");
    test_class_info(&lv, &cd_S2786C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2786C2(Test_S2786C2, "S2786C2", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S10180C161;
static Base_Class bases_S2786C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C161,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2786C2 = {  "S2786C2", // class name
  bases_S2786C2, 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  S2786C1  : S2786C2 {
};
//SIG(1 S2786C1) C1{ BC2{ BC3{ m Fp Fi[2] FC4{ m}}}}



static void Test_S2786C1()
{
  extern Class_Descriptor cd_S2786C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2786C1, buf);
    S2786C1 &lv = *(new (buf) S2786C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2786C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2786C1)");
    check_base_class_offset(lv, (S10180C161*)(S2786C2*), 0, "S2786C1");
    check_base_class_offset(lv, (S2786C2*), 0, "S2786C1");
    test_class_info(&lv, &cd_S2786C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2786C1(Test_S2786C1, "S2786C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S10180C161;
extern Class_Descriptor cd_S2786C2;
static Base_Class bases_S2786C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C161,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2786C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2786C1 = {  "S2786C1", // class name
  bases_S2786C1, 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  S13822C1  {
  long s13822c1f0;
  __tsi64 s13822c1f1[2];
  long s13822c1f2;
  __tsi64 s13822c1f3;
  short s13822c1f4[3];
  long s13822c1f5[11];
};
//SIG(1 S13822C1) C1{ Fl FL[2] Fl FL Fs[3] Fl[11]}



static void Test_S13822C1()
{
  {
    init_simple_test("S13822C1");
    S13822C1 lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S13822C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13822C1)");
    check_field_offset(lv, s13822c1f0, 0, "S13822C1.s13822c1f0");
    check_field_offset(lv, s13822c1f1, ABISELECT(8,4), "S13822C1.s13822c1f1");
    check_field_offset(lv, s13822c1f2, ABISELECT(24,20), "S13822C1.s13822c1f2");
    check_field_offset(lv, s13822c1f3, ABISELECT(32,24), "S13822C1.s13822c1f3");
    check_field_offset(lv, s13822c1f4, ABISELECT(40,32), "S13822C1.s13822c1f4");
    check_field_offset(lv, s13822c1f5, ABISELECT(48,40), "S13822C1.s13822c1f5");
  }
}
static Arrange_To_Call_Me vS13822C1(Test_S13822C1, "S13822C1", ABISELECT(136,84));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8785C2  {
  void *s8785c2f0;
  int s8785c2f1;
  void *s8785c2f2;
  virtual  ~S8785C2(); // _ZN7S8785C2D1Ev
  virtual void  v2(); // _ZN7S8785C22v2Ev
  S8785C2(); // tgen
};
//SIG(-1 S8785C2) C1{ vd v1 Fp Fi Fp}


 S8785C2 ::~S8785C2(){ note_dtor("S8785C2", this);}
void  S8785C2 ::v2(){vfunc_called(this, "_ZN7S8785C22v2Ev");}
S8785C2 ::S8785C2(){ note_ctor("S8785C2", this);} // tgen

static void Test_S8785C2()
{
  extern Class_Descriptor cd_S8785C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8785C2, buf);
    S8785C2 *dp, &lv = *(dp=new (buf) S8785C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8785C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8785C2)");
    check_field_offset(lv, s8785c2f0, ABISELECT(8,4), "S8785C2.s8785c2f0");
    check_field_offset(lv, s8785c2f1, ABISELECT(16,8), "S8785C2.s8785c2f1");
    check_field_offset(lv, s8785c2f2, ABISELECT(24,12), "S8785C2.s8785c2f2");
    test_class_info(&lv, &cd_S8785C2);
    dp->~S8785C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8785C2(Test_S8785C2, "S8785C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8785C2C1Ev();
extern void _ZN7S8785C2D1Ev();
Name_Map name_map_S8785C2[] = {
  NSPAIR(_ZN7S8785C2C1Ev),
  NSPAIR(_ZN7S8785C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8785C2[];
extern void _ZN7S8785C2D1Ev();
extern void _ZN7S8785C2D0Ev();
extern void _ZN7S8785C22v2Ev();
static  VTBL_ENTRY vtc_S8785C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8785C2[0]),
  (VTBL_ENTRY)&_ZN7S8785C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8785C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8785C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8785C2[];
extern  VTBL_ENTRY _ZTV7S8785C2[];
Class_Descriptor cd_S8785C2 = {  "S8785C2", // class name
  0,0,//no base classes
  &(vtc_S8785C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8785C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8785C2),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  S8785C1  : S8785C2 {
  char s8785c1f0[2];
  virtual void  v1(); // _ZN7S8785C12v1Ev
  ~S8785C1(); // tgen
  S8785C1(); // tgen
};
//SIG(1 S8785C1) C1{ BC2{ vd v2 Fp Fi Fp} v1 Fc[2]}


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

static void Test_S8785C1()
{
  extern Class_Descriptor cd_S8785C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8785C1, buf);
    S8785C1 *dp, &lv = *(dp=new (buf) S8785C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8785C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8785C1)");
    check_base_class_offset(lv, (S8785C2*), 0, "S8785C1");
    check_field_offset(lv, s8785c1f0, ABISELECT(32,16), "S8785C1.s8785c1f0");
    test_class_info(&lv, &cd_S8785C1);
    dp->~S8785C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8785C1(Test_S8785C1, "S8785C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8785C1C1Ev();
extern void _ZN7S8785C1D1Ev();
Name_Map name_map_S8785C1[] = {
  NSPAIR(_ZN7S8785C1C1Ev),
  NSPAIR(_ZN7S8785C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8785C2;
extern VTBL_ENTRY _ZTI7S8785C2[];
extern  VTBL_ENTRY _ZTV7S8785C2[];
static Base_Class bases_S8785C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8785C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S8785C1[];
extern void _ZN7S8785C1D1Ev();
extern void _ZN7S8785C1D0Ev();
extern void _ZN7S8785C22v2Ev();
extern void _ZN7S8785C12v1Ev();
static  VTBL_ENTRY vtc_S8785C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8785C1[0]),
  (VTBL_ENTRY)&_ZN7S8785C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8785C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8785C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8785C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8785C1[];
extern  VTBL_ENTRY _ZTV7S8785C1[];
Class_Descriptor cd_S8785C1 = {  "S8785C1", // class name
  bases_S8785C1, 1,
  &(vtc_S8785C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8785C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8785C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11729C2_nt  {
  __tsi64 s11729c2f0[2];
};
//SIG(-1 S11729C2_nt) C1{ FL[2]}



//skip512 S11729C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11729C1  {
  ::S11729C2_nt s11729c1f0;
  ::S11729C2_nt s11729c1f1;
  ::S10179C38 s11729c1f2;
  void *s11729c1f3;
};
//SIG(1 S11729C1) C1{ FC2{ FL[2]} FC2 FC3{ Fl[4]} Fp}



static void Test_S11729C1()
{
  {
    init_simple_test("S11729C1");
    S11729C1 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S11729C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11729C1)");
    check_field_offset(lv, s11729c1f0, 0, "S11729C1.s11729c1f0");
    check_field_offset(lv, s11729c1f1, 16, "S11729C1.s11729c1f1");
    check_field_offset(lv, s11729c1f2, 32, "S11729C1.s11729c1f2");
    check_field_offset(lv, s11729c1f3, ABISELECT(64,48), "S11729C1.s11729c1f3");
  }
}
static Arrange_To_Call_Me vS11729C1(Test_S11729C1, "S11729C1", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14698C1  {
  void *s14698c1f0[5];
  int s14698c1f1;
  short s14698c1f2[2];
  void *s14698c1f3[2];
  int s14698c1f4;
  __tsi64 s14698c1f5;
};
//SIG(1 S14698C1) C1{ Fp[5] Fi Fs[2] Fp[2] Fi FL}



static void Test_S14698C1()
{
  {
    init_simple_test("S14698C1");
    S14698C1 lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S14698C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14698C1)");
    check_field_offset(lv, s14698c1f0, 0, "S14698C1.s14698c1f0");
    check_field_offset(lv, s14698c1f1, ABISELECT(40,20), "S14698C1.s14698c1f1");
    check_field_offset(lv, s14698c1f2, ABISELECT(44,24), "S14698C1.s14698c1f2");
    check_field_offset(lv, s14698c1f3, ABISELECT(48,28), "S14698C1.s14698c1f3");
    check_field_offset(lv, s14698c1f4, ABISELECT(64,36), "S14698C1.s14698c1f4");
    check_field_offset(lv, s14698c1f5, ABISELECT(72,40), "S14698C1.s14698c1f5");
  }
}
static Arrange_To_Call_Me vS14698C1(Test_S14698C1, "S14698C1", ABISELECT(80,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18272C1  {
  void *s18272c1f0[3];
  ::S10180C74 s18272c1f1;
  char s18272c1f2[2];
  void  mf18272c1(); // _ZN8S18272C19mf18272c1Ev
};
//SIG(1 S18272C1) C1{ m Fp[3] FC2{ m FL[2]} Fc[2]}


void  S18272C1 ::mf18272c1(){}

static void Test_S18272C1()
{
  {
    init_simple_test("S18272C1");
    S18272C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S18272C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18272C1)");
    check_field_offset(lv, s18272c1f0, 0, "S18272C1.s18272c1f0");
    check_field_offset(lv, s18272c1f1, ABISELECT(24,12), "S18272C1.s18272c1f1");
    check_field_offset(lv, s18272c1f2, ABISELECT(40,28), "S18272C1.s18272c1f2");
  }
}
static Arrange_To_Call_Me vS18272C1(Test_S18272C1, "S18272C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11889C1  {
  ::S14116C3 s11889c1f0;
  ::S14116C3 s11889c1f1;
  int s11889c1f2[2];
};
//SIG(1 S11889C1) C1{ FC2{ Fp[3] Fi[3]} FC2 Fi[2]}



static void Test_S11889C1()
{
  {
    init_simple_test("S11889C1");
    S11889C1 lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S11889C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11889C1)");
    check_field_offset(lv, s11889c1f0, 0, "S11889C1.s11889c1f0");
    check_field_offset(lv, s11889c1f1, ABISELECT(40,24), "S11889C1.s11889c1f1");
    check_field_offset(lv, s11889c1f2, ABISELECT(80,48), "S11889C1.s11889c1f2");
  }
}
static Arrange_To_Call_Me vS11889C1(Test_S11889C1, "S11889C1", ABISELECT(88,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10788C1  {
  char s10788c1f0[258];
  int s10788c1f1[2];
  char s10788c1f2[194];
  int s10788c1f3;
};
//SIG(1 S10788C1) C1{ Fc[258] Fi[2] Fc[194] Fi}



static void Test_S10788C1()
{
  {
    init_simple_test("S10788C1");
    S10788C1 lv;
    check2(sizeof(lv), 468, "sizeof(S10788C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10788C1)");
    check_field_offset(lv, s10788c1f0, 0, "S10788C1.s10788c1f0");
    check_field_offset(lv, s10788c1f1, 260, "S10788C1.s10788c1f1");
    check_field_offset(lv, s10788c1f2, 268, "S10788C1.s10788c1f2");
    check_field_offset(lv, s10788c1f3, 464, "S10788C1.s10788c1f3");
  }
}
static Arrange_To_Call_Me vS10788C1(Test_S10788C1, "S10788C1", 468);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17939C1  {
  void *s17939c1f0[2];
  ::S11882C3 s17939c1f1;
  void  mf17939c1(); // _ZN8S17939C19mf17939c1Ev
};
//SIG(1 S17939C1) C1{ m Fp[2] FC2{ Fp Fi[2] Fp}}


void  S17939C1 ::mf17939c1(){}

static void Test_S17939C1()
{
  {
    init_simple_test("S17939C1");
    S17939C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S17939C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17939C1)");
    check_field_offset(lv, s17939c1f0, 0, "S17939C1.s17939c1f0");
    check_field_offset(lv, s17939c1f1, ABISELECT(16,8), "S17939C1.s17939c1f1");
  }
}
static Arrange_To_Call_Me vS17939C1(Test_S17939C1, "S17939C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14611C1  {
  void *s14611c1f0[3];
  int s14611c1f1;
  void *s14611c1f2[3];
  int s14611c1f3[3];
  void *s14611c1f4;
};
//SIG(1 S14611C1) C1{ Fp[3] Fi Fp[3] Fi[3] Fp}



static void Test_S14611C1()
{
  {
    init_simple_test("S14611C1");
    S14611C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S14611C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14611C1)");
    check_field_offset(lv, s14611c1f0, 0, "S14611C1.s14611c1f0");
    check_field_offset(lv, s14611c1f1, ABISELECT(24,12), "S14611C1.s14611c1f1");
    check_field_offset(lv, s14611c1f2, ABISELECT(32,16), "S14611C1.s14611c1f2");
    check_field_offset(lv, s14611c1f3, ABISELECT(56,28), "S14611C1.s14611c1f3");
    check_field_offset(lv, s14611c1f4, ABISELECT(72,40), "S14611C1.s14611c1f4");
  }
}
static Arrange_To_Call_Me vS14611C1(Test_S14611C1, "S14611C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6173C1  : S10180C138 {
  ::S10180C169 s6173c1f0;
  int s6173c1f1[6];
};
//SIG(1 S6173C1) C1{ BC2{ m} FC3{ m Fi[2]} Fi[6]}



static void Test_S6173C1()
{
  extern Class_Descriptor cd_S6173C1;
  void *lvp;
  {
    int buf[9];
    init_test(&cd_S6173C1, buf);
    S6173C1 &lv = *(new (buf) S6173C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 32, "sizeof(S6173C1)");
    check2(__alignof__(lv), 4, "__alignof__(S6173C1)");
    check_base_class_offset(lv, (S10180C138*), 0, "S6173C1");
    check_field_offset(lv, s6173c1f0, 0, "S6173C1.s6173c1f0");
    check_field_offset(lv, s6173c1f1, 8, "S6173C1.s6173c1f1");
    test_class_info(&lv, &cd_S6173C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6173C1(Test_S6173C1, "S6173C1", 32);

#else // __cplusplus

extern Class_Descriptor cd_S10180C138;
extern VTBL_ENTRY _ZTI10S10180C138[];
static Base_Class bases_S6173C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C138,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6173C1 = {  "S6173C1", // class name
  bases_S6173C1, 1,
  0, // no vftv
  0, //no vtt
  32, // 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  S12064C1  {
  ::S10180C169 s12064c1f0;
  void *s12064c1f1[3];
  int s12064c1f2[4];
};
//SIG(1 S12064C1) C1{ FC2{ m Fi[2]} Fp[3] Fi[4]}



static void Test_S12064C1()
{
  {
    init_simple_test("S12064C1");
    S12064C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S12064C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12064C1)");
    check_field_offset(lv, s12064c1f0, 0, "S12064C1.s12064c1f0");
    check_field_offset(lv, s12064c1f1, 8, "S12064C1.s12064c1f1");
    check_field_offset(lv, s12064c1f2, ABISELECT(32,20), "S12064C1.s12064c1f2");
  }
}
static Arrange_To_Call_Me vS12064C1(Test_S12064C1, "S12064C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21774C1  {
  void *s21774c1f0[2];
  char s21774c1f1[2];
  __tsi64 s21774c1f2[3];
  void  mf21774c1(); // _ZN8S21774C19mf21774c1Ev
  virtual  ~S21774C1(); // _ZN8S21774C1D1Ev
  S21774C1(); // tgen
};
//SIG(1 S21774C1) C1{ vd m Fp[2] Fc[2] FL[3]}


void  S21774C1 ::mf21774c1(){}
 S21774C1 ::~S21774C1(){ note_dtor("S21774C1", this);}
S21774C1 ::S21774C1(){ note_ctor("S21774C1", this);} // tgen

static void Test_S21774C1()
{
  extern Class_Descriptor cd_S21774C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S21774C1, buf);
    S21774C1 *dp, &lv = *(dp=new (buf) S21774C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S21774C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21774C1)");
    check_field_offset(lv, s21774c1f0, ABISELECT(8,4), "S21774C1.s21774c1f0");
    check_field_offset(lv, s21774c1f1, ABISELECT(24,12), "S21774C1.s21774c1f1");
    check_field_offset(lv, s21774c1f2, ABISELECT(32,16), "S21774C1.s21774c1f2");
    test_class_info(&lv, &cd_S21774C1);
    dp->~S21774C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21774C1(Test_S21774C1, "S21774C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN8S21774C1C1Ev();
extern void _ZN8S21774C1D1Ev();
Name_Map name_map_S21774C1[] = {
  NSPAIR(_ZN8S21774C1C1Ev),
  NSPAIR(_ZN8S21774C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21774C1[];
extern void _ZN8S21774C1D1Ev();
extern void _ZN8S21774C1D0Ev();
static  VTBL_ENTRY vtc_S21774C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21774C1[0]),
  (VTBL_ENTRY)&_ZN8S21774C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21774C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21774C1[];
extern  VTBL_ENTRY _ZTV8S21774C1[];
Class_Descriptor cd_S21774C1 = {  "S21774C1", // class name
  0,0,//no base classes
  &(vtc_S21774C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI8S21774C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21774C1),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  S14578C1  {
  void *s14578c1f0[3];
  char s14578c1f1;
  int s14578c1f2[43];
  void *s14578c1f3[6];
};
//SIG(1 S14578C1) C1{ Fp[3] Fc Fi[43] Fp[6]}



static void Test_S14578C1()
{
  {
    init_simple_test("S14578C1");
    S14578C1 lv;
    check2(sizeof(lv), ABISELECT(248,212), "sizeof(S14578C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14578C1)");
    check_field_offset(lv, s14578c1f0, 0, "S14578C1.s14578c1f0");
    check_field_offset(lv, s14578c1f1, ABISELECT(24,12), "S14578C1.s14578c1f1");
    check_field_offset(lv, s14578c1f2, ABISELECT(28,16), "S14578C1.s14578c1f2");
    check_field_offset(lv, s14578c1f3, ABISELECT(200,188), "S14578C1.s14578c1f3");
  }
}
static Arrange_To_Call_Me vS14578C1(Test_S14578C1, "S14578C1", ABISELECT(248,212));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8786C2  {
  void *s8786c2f0;
  int s8786c2f1;
  void *s8786c2f2;
  virtual  ~S8786C2(); // _ZN7S8786C2D1Ev
  virtual void  v2(); // _ZN7S8786C22v2Ev
  S8786C2(); // tgen
};
//SIG(-1 S8786C2) C1{ vd v1 Fp Fi Fp}


 S8786C2 ::~S8786C2(){ note_dtor("S8786C2", this);}
void  S8786C2 ::v2(){vfunc_called(this, "_ZN7S8786C22v2Ev");}
S8786C2 ::S8786C2(){ note_ctor("S8786C2", this);} // tgen

static void Test_S8786C2()
{
  extern Class_Descriptor cd_S8786C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8786C2, buf);
    S8786C2 *dp, &lv = *(dp=new (buf) S8786C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8786C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8786C2)");
    check_field_offset(lv, s8786c2f0, ABISELECT(8,4), "S8786C2.s8786c2f0");
    check_field_offset(lv, s8786c2f1, ABISELECT(16,8), "S8786C2.s8786c2f1");
    check_field_offset(lv, s8786c2f2, ABISELECT(24,12), "S8786C2.s8786c2f2");
    test_class_info(&lv, &cd_S8786C2);
    dp->~S8786C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8786C2(Test_S8786C2, "S8786C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8786C2C1Ev();
extern void _ZN7S8786C2D1Ev();
Name_Map name_map_S8786C2[] = {
  NSPAIR(_ZN7S8786C2C1Ev),
  NSPAIR(_ZN7S8786C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8786C2[];
extern void _ZN7S8786C2D1Ev();
extern void _ZN7S8786C2D0Ev();
extern void _ZN7S8786C22v2Ev();
static  VTBL_ENTRY vtc_S8786C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8786C2[0]),
  (VTBL_ENTRY)&_ZN7S8786C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8786C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8786C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8786C2[];
extern  VTBL_ENTRY _ZTV7S8786C2[];
Class_Descriptor cd_S8786C2 = {  "S8786C2", // class name
  0,0,//no base classes
  &(vtc_S8786C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8786C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8786C2),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  S8786C1  : S8786C2 {
  virtual void  v1(); // _ZN7S8786C12v1Ev
  ~S8786C1(); // tgen
  S8786C1(); // tgen
};
//SIG(1 S8786C1) C1{ BC2{ vd v2 Fp Fi Fp} v1}


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

static void Test_S8786C1()
{
  extern Class_Descriptor cd_S8786C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8786C1, buf);
    S8786C1 *dp, &lv = *(dp=new (buf) S8786C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8786C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8786C1)");
    check_base_class_offset(lv, (S8786C2*), 0, "S8786C1");
    test_class_info(&lv, &cd_S8786C1);
    dp->~S8786C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8786C1(Test_S8786C1, "S8786C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8786C1C1Ev();
extern void _ZN7S8786C1D1Ev();
Name_Map name_map_S8786C1[] = {
  NSPAIR(_ZN7S8786C1C1Ev),
  NSPAIR(_ZN7S8786C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8786C2;
extern VTBL_ENTRY _ZTI7S8786C2[];
extern  VTBL_ENTRY _ZTV7S8786C2[];
static Base_Class bases_S8786C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8786C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S8786C1[];
extern void _ZN7S8786C1D1Ev();
extern void _ZN7S8786C1D0Ev();
extern void _ZN7S8786C22v2Ev();
extern void _ZN7S8786C12v1Ev();
static  VTBL_ENTRY vtc_S8786C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8786C1[0]),
  (VTBL_ENTRY)&_ZN7S8786C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8786C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8786C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8786C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8786C1[];
extern  VTBL_ENTRY _ZTV7S8786C1[];
Class_Descriptor cd_S8786C1 = {  "S8786C1", // class name
  bases_S8786C1, 1,
  &(vtc_S8786C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8786C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8786C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13842C1  {
  __tsi64 s13842c1f0;
  void *s13842c1f1[2];
  char s13842c1f2;
  long s13842c1f3[5];
  void *s13842c1f4;
};
//SIG(1 S13842C1) C1{ FL Fp[2] Fc Fl[5] Fp}



static void Test_S13842C1()
{
  {
    init_simple_test("S13842C1");
    S13842C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S13842C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13842C1)");
    check_field_offset(lv, s13842c1f0, 0, "S13842C1.s13842c1f0");
    check_field_offset(lv, s13842c1f1, 8, "S13842C1.s13842c1f1");
    check_field_offset(lv, s13842c1f2, ABISELECT(24,16), "S13842C1.s13842c1f2");
    check_field_offset(lv, s13842c1f3, ABISELECT(32,20), "S13842C1.s13842c1f3");
    check_field_offset(lv, s13842c1f4, ABISELECT(72,40), "S13842C1.s13842c1f4");
  }
}
static Arrange_To_Call_Me vS13842C1(Test_S13842C1, "S13842C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12056C1  {
  ::S10180C169 s12056c1f0;
  int s12056c1f1[3];
  char s12056c1f2;
};
//SIG(1 S12056C1) C1{ FC2{ m Fi[2]} Fi[3] Fc}



static void Test_S12056C1()
{
  {
    init_simple_test("S12056C1");
    S12056C1 lv;
    check2(sizeof(lv), 24, "sizeof(S12056C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12056C1)");
    check_field_offset(lv, s12056c1f0, 0, "S12056C1.s12056c1f0");
    check_field_offset(lv, s12056c1f1, 8, "S12056C1.s12056c1f1");
    check_field_offset(lv, s12056c1f2, 20, "S12056C1.s12056c1f2");
  }
}
static Arrange_To_Call_Me vS12056C1(Test_S12056C1, "S12056C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5610C3  {
  int s5610c3f0;
  void *s5610c3f1[6];
};
//SIG(-1 S5610C3) C1{ Fi Fp[6]}



static void Test_S5610C3()
{
  {
    init_simple_test("S5610C3");
    S5610C3 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S5610C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5610C3)");
    check_field_offset(lv, s5610c3f0, 0, "S5610C3.s5610c3f0");
    check_field_offset(lv, s5610c3f1, ABISELECT(8,4), "S5610C3.s5610c3f1");
  }
}
static Arrange_To_Call_Me vS5610C3(Test_S5610C3, "S5610C3", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5610C2  {
  ::S5610C3 s5610c2f0;
  void  mf5610c2(); // _ZN7S5610C28mf5610c2Ev
};
//SIG(-1 S5610C2) C1{ m FC2{ Fi Fp[6]}}


void  S5610C2 ::mf5610c2(){}

static void Test_S5610C2()
{
  {
    init_simple_test("S5610C2");
    S5610C2 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S5610C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5610C2)");
    check_field_offset(lv, s5610c2f0, 0, "S5610C2.s5610c2f0");
  }
}
static Arrange_To_Call_Me vS5610C2(Test_S5610C2, "S5610C2", ABISELECT(56,28));

#else // __cplusplus

Class_Descriptor cd_S5610C2 = {  "S5610C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(56,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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5610C1  : S5610C2 {
};
//SIG(1 S5610C1) C1{ BC2{ m FC3{ Fi Fp[6]}}}



static void Test_S5610C1()
{
  extern Class_Descriptor cd_S5610C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S5610C1, buf);
    S5610C1 &lv = *(new (buf) S5610C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S5610C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5610C1)");
    check_base_class_offset(lv, (S5610C2*), 0, "S5610C1");
    test_class_info(&lv, &cd_S5610C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5610C1(Test_S5610C1, "S5610C1", ABISELECT(56,28));

#else // __cplusplus

extern Class_Descriptor cd_S5610C2;
static Base_Class bases_S5610C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5610C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S5610C1 = {  "S5610C1", // class name
  bases_S5610C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20083C2  {
  virtual  ~S20083C2(); // _ZN8S20083C2D1Ev
  virtual void  v2(); // _ZN8S20083C22v2Ev
  virtual void  v3(); // _ZN8S20083C22v3Ev
  S20083C2(); // tgen
};
//SIG(-1 S20083C2) C1{ vd v1 v2}


 S20083C2 ::~S20083C2(){ note_dtor("S20083C2", this);}
void  S20083C2 ::v2(){vfunc_called(this, "_ZN8S20083C22v2Ev");}
void  S20083C2 ::v3(){vfunc_called(this, "_ZN8S20083C22v3Ev");}
S20083C2 ::S20083C2(){ note_ctor("S20083C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20083C2C1Ev();
extern void _ZN8S20083C2D1Ev();
Name_Map name_map_S20083C2[] = {
  NSPAIR(_ZN8S20083C2C1Ev),
  NSPAIR(_ZN8S20083C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20083C2[];
extern void _ZN8S20083C2D1Ev();
extern void _ZN8S20083C2D0Ev();
extern void _ZN8S20083C22v2Ev();
extern void _ZN8S20083C22v3Ev();
static  VTBL_ENTRY vtc_S20083C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20083C2[0]),
  (VTBL_ENTRY)&_ZN8S20083C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20083C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20083C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20083C22v3Ev,
};
extern VTBL_ENTRY _ZTI8S20083C2[];
extern  VTBL_ENTRY _ZTV8S20083C2[];
Class_Descriptor cd_S20083C2 = {  "S20083C2", // class name
  0,0,//no base classes
  &(vtc_S20083C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20083C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20083C2),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  S20083C1  : virtual S20083C2 {
  virtual  ~S20083C1(); // _ZN8S20083C1D2Ev
  virtual void  v1(); // _ZN8S20083C12v1Ev
  S20083C1(); // tgen
};
//SIG(1 S20083C1) C1{ VBC2{ vd v2 v3} vd v1}


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

static void Test_S20083C1()
{
  extern Class_Descriptor cd_S20083C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20083C1, buf);
    S20083C1 *dp, &lv = *(dp=new (buf) S20083C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20083C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20083C1)");
    check_base_class_offset(lv, (S20083C2*), 0, "S20083C1");
    test_class_info(&lv, &cd_S20083C1);
    dp->~S20083C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20083C1(Test_S20083C1, "S20083C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20083C1C1Ev();
extern void _ZN8S20083C1D2Ev();
Name_Map name_map_S20083C1[] = {
  NSPAIR(_ZN8S20083C1C1Ev),
  NSPAIR(_ZN8S20083C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20083C2;
extern VTBL_ENTRY _ZTI8S20083C2[];
extern  VTBL_ENTRY _ZTV8S20083C2[];
static Base_Class bases_S20083C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20083C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20083C1[];
extern void _ZN8S20083C1D1Ev();
extern void _ZN8S20083C1D0Ev();
extern void _ZN8S20083C22v2Ev();
extern void _ZN8S20083C22v3Ev();
extern void _ZN8S20083C12v1Ev();
static  VTBL_ENTRY vtc_S20083C1[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20083C1[0]),
  (VTBL_ENTRY)&_ZN8S20083C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20083C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20083C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20083C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20083C12v1Ev,
};
extern VTBL_ENTRY _ZTV8S20083C1[];
static  VTT_ENTRY vtt_S20083C1[] = {
  {&(_ZTV8S20083C1[6]),  6,11},
  {&(_ZTV8S20083C1[6]),  6,11},
};
extern VTBL_ENTRY _ZTI8S20083C1[];
extern  VTBL_ENTRY _ZTV8S20083C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20083C1[];
Class_Descriptor cd_S20083C1 = {  "S20083C1", // class name
  bases_S20083C1, 1,
  &(vtc_S20083C1[0]), // expected_vtbl_contents
  &(vtt_S20083C1[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20083C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20083C1),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20083C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16054C1  {
  ::S15756C4_nt s16054c1f0;
  int s16054c1f1[5];
  void  mf16054c1(); // _ZN8S16054C19mf16054c1Ev
};
//SIG(1 S16054C1) C1{ m FC2{ m Fi[3]} Fi[5]}


void  S16054C1 ::mf16054c1(){}

static void Test_S16054C1()
{
  {
    init_simple_test("S16054C1");
    S16054C1 lv;
    check2(sizeof(lv), 32, "sizeof(S16054C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16054C1)");
    check_field_offset(lv, s16054c1f0, 0, "S16054C1.s16054c1f0");
    check_field_offset(lv, s16054c1f1, 12, "S16054C1.s16054c1f1");
  }
}
static Arrange_To_Call_Me vS16054C1(Test_S16054C1, "S16054C1", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6544C2  {
  char s6544c2f0;
  virtual void  v2(); // _ZN7S6544C22v2Ev
  virtual void  v3(); // _ZN7S6544C22v3Ev
  ~S6544C2(); // tgen
  S6544C2(); // tgen
};
//SIG(-1 S6544C2) C1{ v1 v2 Fc}


void  S6544C2 ::v2(){vfunc_called(this, "_ZN7S6544C22v2Ev");}
void  S6544C2 ::v3(){vfunc_called(this, "_ZN7S6544C22v3Ev");}
S6544C2 ::~S6544C2(){ note_dtor("S6544C2", this);} // tgen
S6544C2 ::S6544C2(){ note_ctor("S6544C2", this);} // tgen

static void Test_S6544C2()
{
  extern Class_Descriptor cd_S6544C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6544C2, buf);
    S6544C2 *dp, &lv = *(dp=new (buf) S6544C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6544C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6544C2)");
    check_field_offset(lv, s6544c2f0, ABISELECT(8,4), "S6544C2.s6544c2f0");
    test_class_info(&lv, &cd_S6544C2);
    dp->~S6544C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6544C2(Test_S6544C2, "S6544C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6544C2C1Ev();
extern void _ZN7S6544C2D1Ev();
Name_Map name_map_S6544C2[] = {
  NSPAIR(_ZN7S6544C2C1Ev),
  NSPAIR(_ZN7S6544C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6544C2[];
extern void _ZN7S6544C22v2Ev();
extern void _ZN7S6544C22v3Ev();
static  VTBL_ENTRY vtc_S6544C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6544C2[0]),
  (VTBL_ENTRY)&_ZN7S6544C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6544C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6544C2[];
extern  VTBL_ENTRY _ZTV7S6544C2[];
Class_Descriptor cd_S6544C2 = {  "S6544C2", // class name
  0,0,//no base classes
  &(vtc_S6544C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6544C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6544C2),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  S6544C1  : S6544C2 {
  virtual  ~S6544C1(); // _ZN7S6544C1D1Ev
  virtual void  v1(); // _ZN7S6544C12v1Ev
  S6544C1(); // tgen
};
//SIG(1 S6544C1) C1{ BC2{ v2 v3 Fc} vd v1}


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

static void Test_S6544C1()
{
  extern Class_Descriptor cd_S6544C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6544C1, buf);
    S6544C1 *dp, &lv = *(dp=new (buf) S6544C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6544C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6544C1)");
    check_base_class_offset(lv, (S6544C2*), 0, "S6544C1");
    test_class_info(&lv, &cd_S6544C1);
    dp->~S6544C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6544C1(Test_S6544C1, "S6544C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6544C1C1Ev();
extern void _ZN7S6544C1D1Ev();
Name_Map name_map_S6544C1[] = {
  NSPAIR(_ZN7S6544C1C1Ev),
  NSPAIR(_ZN7S6544C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6544C2;
extern VTBL_ENTRY _ZTI7S6544C2[];
extern  VTBL_ENTRY _ZTV7S6544C2[];
static Base_Class bases_S6544C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6544C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S6544C1[];
extern void _ZN7S6544C22v2Ev();
extern void _ZN7S6544C22v3Ev();
extern void _ZN7S6544C1D1Ev();
extern void _ZN7S6544C1D0Ev();
extern void _ZN7S6544C12v1Ev();
static  VTBL_ENTRY vtc_S6544C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6544C1[0]),
  (VTBL_ENTRY)&_ZN7S6544C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6544C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6544C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6544C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6544C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6544C1[];
extern  VTBL_ENTRY _ZTV7S6544C1[];
Class_Descriptor cd_S6544C1 = {  "S6544C1", // class name
  bases_S6544C1, 1,
  &(vtc_S6544C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6544C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6544C1),7, //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  S14238C1  {
  void *s14238c1f0;
  int s14238c1f1;
  void *s14238c1f2[12];
  short s14238c1f3[2];
};
//SIG(1 S14238C1) C1{ Fp Fi Fp[12] Fs[2]}



static void Test_S14238C1()
{
  {
    init_simple_test("S14238C1");
    S14238C1 lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S14238C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14238C1)");
    check_field_offset(lv, s14238c1f0, 0, "S14238C1.s14238c1f0");
    check_field_offset(lv, s14238c1f1, ABISELECT(8,4), "S14238C1.s14238c1f1");
    check_field_offset(lv, s14238c1f2, ABISELECT(16,8), "S14238C1.s14238c1f2");
    check_field_offset(lv, s14238c1f3, ABISELECT(112,56), "S14238C1.s14238c1f3");
  }
}
static Arrange_To_Call_Me vS14238C1(Test_S14238C1, "S14238C1", ABISELECT(120,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13965C1  {
  long s13965c1f0[3];
  char s13965c1f1;
  long s13965c1f2;
  void *s13965c1f3[3];
};
//SIG(1 S13965C1) C1{ Fl[3] Fc Fl Fp[3]}



static void Test_S13965C1()
{
  {
    init_simple_test("S13965C1");
    S13965C1 lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S13965C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13965C1)");
    check_field_offset(lv, s13965c1f0, 0, "S13965C1.s13965c1f0");
    check_field_offset(lv, s13965c1f1, ABISELECT(24,12), "S13965C1.s13965c1f1");
    check_field_offset(lv, s13965c1f2, ABISELECT(32,16), "S13965C1.s13965c1f2");
    check_field_offset(lv, s13965c1f3, ABISELECT(40,20), "S13965C1.s13965c1f3");
  }
}
static Arrange_To_Call_Me vS13965C1(Test_S13965C1, "S13965C1", ABISELECT(64,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5549C2_nt  {
  int s5549c2f0;
};
//SIG(-1 S5549C2_nt) C1{ Fi}



//skip512 S5549C2_nt

#else // __cplusplus

Class_Descriptor cd_S5549C2_nt = {  "S5549C2_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  S5549C1  : S5549C2_nt {
  __tsi64 s5549c1f0;
  char s5549c1f1[256];
};
//SIG(1 S5549C1) C1{ BC2{ Fi} FL Fc[256]}



static void Test_S5549C1()
{
  extern Class_Descriptor cd_S5549C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,68)];
    init_test(&cd_S5549C1, buf);
    S5549C1 &lv = *(new (buf) S5549C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,268), "sizeof(S5549C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5549C1)");
    check_base_class_offset(lv, (S5549C2_nt*), 0, "S5549C1");
    check_field_offset(lv, s5549c1f0, ABISELECT(8,4), "S5549C1.s5549c1f0");
    check_field_offset(lv, s5549c1f1, ABISELECT(16,12), "S5549C1.s5549c1f1");
    test_class_info(&lv, &cd_S5549C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5549C1(Test_S5549C1, "S5549C1", ABISELECT(272,268));

#else // __cplusplus

extern Class_Descriptor cd_S5549C2_nt;
static Base_Class bases_S5549C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5549C2_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_S5549C1 = {  "S5549C1", // class name
  bases_S5549C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(272,268), // 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  S5810C1  : S10180C169 {
  void *s5810c1f0[2];
};
//SIG(1 S5810C1) C1{ BC2{ m Fi[2]} Fp[2]}



static void Test_S5810C1()
{
  extern Class_Descriptor cd_S5810C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5810C1, buf);
    S5810C1 &lv = *(new (buf) S5810C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5810C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5810C1)");
    check_base_class_offset(lv, (S10180C169*), 0, "S5810C1");
    check_field_offset(lv, s5810c1f0, 8, "S5810C1.s5810c1f0");
    test_class_info(&lv, &cd_S5810C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5810C1(Test_S5810C1, "S5810C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S10180C169;
static Base_Class bases_S5810C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10180C169,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S5810C1 = {  "S5810C1", // class name
  bases_S5810C1, 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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16925C1  {
  int s16925c1f0;
  void *s16925c1f1;
  int s16925c1f2;
  void *s16925c1f3[2];
  void  mf16925c1(); // _ZN8S16925C19mf16925c1Ev
};
//SIG(1 S16925C1) C1{ m Fi Fp Fi Fp[2]}


void  S16925C1 ::mf16925c1(){}

static void Test_S16925C1()
{
  {
    init_simple_test("S16925C1");
    S16925C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S16925C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16925C1)");
    check_field_offset(lv, s16925c1f0, 0, "S16925C1.s16925c1f0");
    check_field_offset(lv, s16925c1f1, ABISELECT(8,4), "S16925C1.s16925c1f1");
    check_field_offset(lv, s16925c1f2, ABISELECT(16,8), "S16925C1.s16925c1f2");
    check_field_offset(lv, s16925c1f3, ABISELECT(24,12), "S16925C1.s16925c1f3");
  }
}
static Arrange_To_Call_Me vS16925C1(Test_S16925C1, "S16925C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15104C1  {
  char s15104c1f0;
  int s15104c1f1[3];
  char s15104c1f2[2];
  void  mf15104c1(); // _ZN8S15104C19mf15104c1Ev
};
//SIG(1 S15104C1) C1{ m Fc Fi[3] Fc[2]}


void  S15104C1 ::mf15104c1(){}

static void Test_S15104C1()
{
  {
    init_simple_test("S15104C1");
    S15104C1 lv;
    check2(sizeof(lv), 20, "sizeof(S15104C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15104C1)");
    check_field_offset(lv, s15104c1f0, 0, "S15104C1.s15104c1f0");
    check_field_offset(lv, s15104c1f1, 4, "S15104C1.s15104c1f1");
    check_field_offset(lv, s15104c1f2, 16, "S15104C1.s15104c1f2");
  }
}
static Arrange_To_Call_Me vS15104C1(Test_S15104C1, "S15104C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16986C1  {
  int s16986c1f0;
  short s16986c1f1[2];
  int s16986c1f2[4];
  void  mf16986c1(); // _ZN8S16986C19mf16986c1Ev
};
//SIG(1 S16986C1) C1{ m Fi Fs[2] Fi[4]}


void  S16986C1 ::mf16986c1(){}

static void Test_S16986C1()
{
  {
    init_simple_test("S16986C1");
    S16986C1 lv;
    check2(sizeof(lv), 24, "sizeof(S16986C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16986C1)");
    check_field_offset(lv, s16986c1f0, 0, "S16986C1.s16986c1f0");
    check_field_offset(lv, s16986c1f1, 4, "S16986C1.s16986c1f1");
    check_field_offset(lv, s16986c1f2, 8, "S16986C1.s16986c1f2");
  }
}
static Arrange_To_Call_Me vS16986C1(Test_S16986C1, "S16986C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10690C1  {
  char s10690c1f0[2];
  short s10690c1f1;
  int s10690c1f2[19];
};
//SIG(1 S10690C1) C1{ Fc[2] Fs Fi[19]}



static void Test_S10690C1()
{
  {
    init_simple_test("S10690C1");
    S10690C1 lv;
    check2(sizeof(lv), 80, "sizeof(S10690C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10690C1)");
    check_field_offset(lv, s10690c1f0, 0, "S10690C1.s10690c1f0");
    check_field_offset(lv, s10690c1f1, 2, "S10690C1.s10690c1f1");
    check_field_offset(lv, s10690c1f2, 4, "S10690C1.s10690c1f2");
  }
}
static Arrange_To_Call_Me vS10690C1(Test_S10690C1, "S10690C1", 80);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13739C1  {
  __tsi64 s13739c1f0;
  int s13739c1f1;
  char s13739c1f2[1056];
};
//SIG(1 S13739C1) C1{ FL Fi Fc[1056]}



static void Test_S13739C1()
{
  {
    init_simple_test("S13739C1");
    S13739C1 lv;
    check2(sizeof(lv), ABISELECT(1072,1068), "sizeof(S13739C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13739C1)");
    check_field_offset(lv, s13739c1f0, 0, "S13739C1.s13739c1f0");
    check_field_offset(lv, s13739c1f1, 8, "S13739C1.s13739c1f1");
    check_field_offset(lv, s13739c1f2, 12, "S13739C1.s13739c1f2");
  }
}
static Arrange_To_Call_Me vS13739C1(Test_S13739C1, "S13739C1", ABISELECT(1072,1068));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18587C1  {
  __tsi64 s18587c1f0;
  void *s18587c1f1;
  int s18587c1f2;
  virtual void  v1(); // _ZN8S18587C12v1Ev
  virtual void  v2(); // _ZN8S18587C12v2Ev
  ~S18587C1(); // tgen
  S18587C1(); // tgen
};
//SIG(1 S18587C1) C1{ v1 v2 FL Fp Fi}


void  S18587C1 ::v1(){vfunc_called(this, "_ZN8S18587C12v1Ev");}
void  S18587C1 ::v2(){vfunc_called(this, "_ZN8S18587C12v2Ev");}
S18587C1 ::~S18587C1(){ note_dtor("S18587C1", this);} // tgen
S18587C1 ::S18587C1(){ note_ctor("S18587C1", this);} // tgen

static void Test_S18587C1()
{
  extern Class_Descriptor cd_S18587C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S18587C1, buf);
    S18587C1 *dp, &lv = *(dp=new (buf) S18587C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18587C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18587C1)");
    check_field_offset(lv, s18587c1f0, ABISELECT(8,4), "S18587C1.s18587c1f0");
    check_field_offset(lv, s18587c1f1, ABISELECT(16,12), "S18587C1.s18587c1f1");
    check_field_offset(lv, s18587c1f2, ABISELECT(24,16), "S18587C1.s18587c1f2");
    test_class_info(&lv, &cd_S18587C1);
    dp->~S18587C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18587C1(Test_S18587C1, "S18587C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S18587C1C1Ev();
extern void _ZN8S18587C1D1Ev();
Name_Map name_map_S18587C1[] = {
  NSPAIR(_ZN8S18587C1C1Ev),
  NSPAIR(_ZN8S18587C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18587C1[];
extern void _ZN8S18587C12v1Ev();
extern void _ZN8S18587C12v2Ev();
static  VTBL_ENTRY vtc_S18587C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18587C1[0]),
  (VTBL_ENTRY)&_ZN8S18587C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18587C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18587C1[];
extern  VTBL_ENTRY _ZTV8S18587C1[];
Class_Descriptor cd_S18587C1 = {  "S18587C1", // class name
  0,0,//no base classes
  &(vtc_S18587C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S18587C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18587C1),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  S12792C1  {
  int s12792c1f0;
  void *s12792c1f1[4];
  __tsi64 s12792c1f2;
  int s12792c1f3;
};
//SIG(1 S12792C1) C1{ Fi Fp[4] FL Fi}



static void Test_S12792C1()
{
  {
    init_simple_test("S12792C1");
    S12792C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S12792C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12792C1)");
    check_field_offset(lv, s12792c1f0, 0, "S12792C1.s12792c1f0");
    check_field_offset(lv, s12792c1f1, ABISELECT(8,4), "S12792C1.s12792c1f1");
    check_field_offset(lv, s12792c1f2, ABISELECT(40,20), "S12792C1.s12792c1f2");
    check_field_offset(lv, s12792c1f3, ABISELECT(48,28), "S12792C1.s12792c1f3");
  }
}
static Arrange_To_Call_Me vS12792C1(Test_S12792C1, "S12792C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17423C1  {
  __tsi64 s17423c1f0[5];
  int s17423c1f1[4];
  void  mf17423c1(); // _ZN8S17423C19mf17423c1Ev
};
//SIG(1 S17423C1) C1{ m FL[5] Fi[4]}


void  S17423C1 ::mf17423c1(){}

static void Test_S17423C1()
{
  {
    init_simple_test("S17423C1");
    S17423C1 lv;
    check2(sizeof(lv), 56, "sizeof(S17423C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17423C1)");
    check_field_offset(lv, s17423c1f0, 0, "S17423C1.s17423c1f0");
    check_field_offset(lv, s17423c1f1, 40, "S17423C1.s17423c1f1");
  }
}
static Arrange_To_Call_Me vS17423C1(Test_S17423C1, "S17423C1", 56);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17150C1  {
  int s17150c1f0[2];
  void *s17150c1f1[3];
  void  mf17150c1(); // _ZN8S17150C19mf17150c1Ev
};
//SIG(1 S17150C1) C1{ m Fi[2] Fp[3]}


void  S17150C1 ::mf17150c1(){}

static void Test_S17150C1()
{
  {
    init_simple_test("S17150C1");
    S17150C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17150C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17150C1)");
    check_field_offset(lv, s17150c1f0, 0, "S17150C1.s17150c1f0");
    check_field_offset(lv, s17150c1f1, 8, "S17150C1.s17150c1f1");
  }
}
static Arrange_To_Call_Me vS17150C1(Test_S17150C1, "S17150C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5819C1  : S15756C4_nt {
};
//SIG(1 S5819C1) C1{ BC2{ m Fi[3]}}



static void Test_S5819C1()
{
  extern Class_Descriptor cd_S5819C1;
  void *lvp;
  {
    int buf[4];
    init_test(&cd_S5819C1, buf);
    S5819C1 &lv = *(new (buf) S5819C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 12, "sizeof(S5819C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5819C1)");
    check_base_class_offset(lv, (S15756C4_nt*), 0, "S5819C1");
    test_class_info(&lv, &cd_S5819C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5819C1(Test_S5819C1, "S5819C1", 12);

#else // __cplusplus

extern Class_Descriptor cd_S15756C4_nt;
static Base_Class bases_S5819C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15756C4_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_S5819C1 = {  "S5819C1", // class name
  bases_S5819C1, 1,
  0, // no vftv
  0, //no vtt
  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  S13610C1  {
  int s13610c1f0[7];
  short s13610c1f1[32];
};
//SIG(1 S13610C1) C1{ Fi[7] Fs[32]}



static void Test_S13610C1()
{
  {
    init_simple_test("S13610C1");
    S13610C1 lv;
    check2(sizeof(lv), 92, "sizeof(S13610C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13610C1)");
    check_field_offset(lv, s13610c1f0, 0, "S13610C1.s13610c1f0");
    check_field_offset(lv, s13610c1f1, 28, "S13610C1.s13610c1f1");
  }
}
static Arrange_To_Call_Me vS13610C1(Test_S13610C1, "S13610C1", 92);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12114C1  {
  ::S10180C63 s12114c1f0;
  int s12114c1f1;
};
//SIG(1 S12114C1) C1{ FC2{ m Fi} Fi}



static void Test_S12114C1()
{
  {
    init_simple_test("S12114C1");
    S12114C1 lv;
    check2(sizeof(lv), 8, "sizeof(S12114C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12114C1)");
    check_field_offset(lv, s12114c1f0, 0, "S12114C1.s12114c1f0");
    check_field_offset(lv, s12114c1f1, 4, "S12114C1.s12114c1f1");
  }
}
static Arrange_To_Call_Me vS12114C1(Test_S12114C1, "S12114C1", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15147C1  {
  unsigned char s15147c1f0:1;
  unsigned char s15147c1f1:1;
  void  mf15147c1(); // _ZN8S15147C19mf15147c1Ev
};
//SIG(1 S15147C1) C1{ m Fc:1 Fc:1}


void  S15147C1 ::mf15147c1(){}

static void Test_S15147C1()
{
  {
    init_simple_test("S15147C1");
    static S15147C1 lv;
    check2(sizeof(lv), 1, "sizeof(S15147C1)");
    check2(__alignof__(lv), 1, "__alignof__(S15147C1)");
    set_bf_and_test(lv, s15147c1f0, 0, 0, 1, 1, "S15147C1");
    set_bf_and_test(lv, s15147c1f1, 0, 1, 1, 1, "S15147C1");
  }
}
static Arrange_To_Call_Me vS15147C1(Test_S15147C1, "S15147C1", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14265C1  {
  void *s14265c1f0;
  int s14265c1f1;
  short s14265c1f2[4];
};
//SIG(1 S14265C1) C1{ Fp Fi Fs[4]}



static void Test_S14265C1()
{
  {
    init_simple_test("S14265C1");
    S14265C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S14265C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14265C1)");
    check_field_offset(lv, s14265c1f0, 0, "S14265C1.s14265c1f0");
    check_field_offset(lv, s14265c1f1, ABISELECT(8,4), "S14265C1.s14265c1f1");
    check_field_offset(lv, s14265c1f2, ABISELECT(12,8), "S14265C1.s14265c1f2");
  }
}
static Arrange_To_Call_Me vS14265C1(Test_S14265C1, "S14265C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21877C1  {
  short s21877c1f0[4];
  void  mf21877c1(); // _ZN8S21877C19mf21877c1Ev
  virtual  ~S21877C1(); // _ZN8S21877C1D1Ev
  S21877C1(); // tgen
};
//SIG(1 S21877C1) C1{ vd m Fs[4]}


void  S21877C1 ::mf21877c1(){}
 S21877C1 ::~S21877C1(){ note_dtor("S21877C1", this);}
S21877C1 ::S21877C1(){ note_ctor("S21877C1", this);} // tgen

static void Test_S21877C1()
{
  extern Class_Descriptor cd_S21877C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S21877C1, buf);
    S21877C1 *dp, &lv = *(dp=new (buf) S21877C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S21877C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21877C1)");
    check_field_offset(lv, s21877c1f0, ABISELECT(8,4), "S21877C1.s21877c1f0");
    test_class_info(&lv, &cd_S21877C1);
    dp->~S21877C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21877C1(Test_S21877C1, "S21877C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S21877C1C1Ev();
extern void _ZN8S21877C1D1Ev();
Name_Map name_map_S21877C1[] = {
  NSPAIR(_ZN8S21877C1C1Ev),
  NSPAIR(_ZN8S21877C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21877C1[];
extern void _ZN8S21877C1D1Ev();
extern void _ZN8S21877C1D0Ev();
static  VTBL_ENTRY vtc_S21877C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21877C1[0]),
  (VTBL_ENTRY)&_ZN8S21877C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21877C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21877C1[];
extern  VTBL_ENTRY _ZTV8S21877C1[];
Class_Descriptor cd_S21877C1 = {  "S21877C1", // class name
  0,0,//no base classes
  &(vtc_S21877C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S21877C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21877C1),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  S10828C1  {
  char s10828c1f0[32];
  __tsi64 s10828c1f1;
};
//SIG(1 S10828C1) C1{ Fc[32] FL}



static void Test_S10828C1()
{
  {
    init_simple_test("S10828C1");
    S10828C1 lv;
    check2(sizeof(lv), 40, "sizeof(S10828C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10828C1)");
    check_field_offset(lv, s10828c1f0, 0, "S10828C1.s10828c1f0");
    check_field_offset(lv, s10828c1f1, 32, "S10828C1.s10828c1f1");
  }
}
static Arrange_To_Call_Me vS10828C1(Test_S10828C1, "S10828C1", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18520C1  {
  long s18520c1f0;
  int s18520c1f1;
  virtual void  v1(); // _ZN8S18520C12v1Ev
  ~S18520C1(); // tgen
  S18520C1(); // tgen
};
//SIG(1 S18520C1) C1{ v1 Fl Fi}


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

static void Test_S18520C1()
{
  extern Class_Descriptor cd_S18520C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18520C1, buf);
    S18520C1 *dp, &lv = *(dp=new (buf) S18520C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18520C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18520C1)");
    check_field_offset(lv, s18520c1f0, ABISELECT(8,4), "S18520C1.s18520c1f0");
    check_field_offset(lv, s18520c1f1, ABISELECT(16,8), "S18520C1.s18520c1f1");
    test_class_info(&lv, &cd_S18520C1);
    dp->~S18520C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18520C1(Test_S18520C1, "S18520C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18520C1C1Ev();
extern void _ZN8S18520C1D1Ev();
Name_Map name_map_S18520C1[] = {
  NSPAIR(_ZN8S18520C1C1Ev),
  NSPAIR(_ZN8S18520C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18520C1[];
extern void _ZN8S18520C12v1Ev();
static  VTBL_ENTRY vtc_S18520C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18520C1[0]),
  (VTBL_ENTRY)&_ZN8S18520C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18520C1[];
extern  VTBL_ENTRY _ZTV8S18520C1[];
Class_Descriptor cd_S18520C1 = {  "S18520C1", // class name
  0,0,//no base classes
  &(vtc_S18520C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18520C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18520C1),3, //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  S14836C1  {
  short s14836c1f0;
  void *s14836c1f1[6];
};
//SIG(1 S14836C1) C1{ Fs Fp[6]}



static void Test_S14836C1()
{
  {
    init_simple_test("S14836C1");
    S14836C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S14836C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14836C1)");
    check_field_offset(lv, s14836c1f0, 0, "S14836C1.s14836c1f0");
    check_field_offset(lv, s14836c1f1, ABISELECT(8,4), "S14836C1.s14836c1f1");
  }
}
static Arrange_To_Call_Me vS14836C1(Test_S14836C1, "S14836C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11003C1  {
  char s11003c1f0[70];
};
//SIG(1 S11003C1) C1{ Fc[70]}



static void Test_S11003C1()
{
  {
    init_simple_test("S11003C1");
    S11003C1 lv;
    check2(sizeof(lv), 70, "sizeof(S11003C1)");
    check2(__alignof__(lv), 1, "__alignof__(S11003C1)");
    check_field_offset(lv, s11003c1f0, 0, "S11003C1.s11003c1f0");
  }
}
static Arrange_To_Call_Me vS11003C1(Test_S11003C1, "S11003C1", 70);

#else // __cplusplus

#endif // __cplusplus

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

